vb.net - 从 vb.net 中的表单外部获取突出显示的文本
问题描述
我想使用 vb.net 从 winform 外部复制突出显示的文本。例如,如果用户在浏览器或记事本中突出显示文本,则应将其复制到 winform 的文本框中。任何帮助都会很棒!提前致谢。
解决方案
好的!感谢这个链接,我得到了答案。
我的逻辑首先是用户将突出显示一个值,而不是特定于浏览器,而是在任何地方。然后用户将按下热键,在我的情况下是 F8。然后代码将触发复制命令,然后检索剪贴板值并将其分配给文本框文本。这是完整的代码以及帮助类。
热键.vb
Public Class Hotkey
#Region "Declarations - WinAPI, Hotkey constant and Modifier Enum"
''' <summary>
''' Declaration of winAPI function wrappers. The winAPI functions are used to register / unregister a hotkey
''' </summary>
Private Declare Function RegisterHotKey Lib "user32" _
(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
Public Const WM_HOTKEY As Integer = &H312
Enum KeyModifier
None = 0
Alt = &H1
Control = &H2
Shift = &H4
Winkey = &H8
End Enum 'This enum is just to make it easier to call the registerHotKey function: The modifier integer codes are replaced by a friendly "Alt","Shift" etc.
#End Region
#Region "Hotkey registration, unregistration and handling"
Public Shared Sub registerHotkey(ByRef sourceForm As Form, ByVal triggerKey As String, ByVal modifier As KeyModifier)
RegisterHotKey(sourceForm.Handle, 1, modifier, &H77)
End Sub
Public Shared Sub unregisterHotkeys(ByRef sourceForm As Form)
UnregisterHotKey(sourceForm.Handle, 1) 'Remember to call unregisterHotkeys() when closing your application.
End Sub
Public Shared Sub handleHotKeyEvent(ByVal hotkeyID As IntPtr)
SendKeys.Send("^(c)") 'for Ctrl-C[/CODE]
End Sub
#End Region
End Class
本节将触发热键代码并执行其余逻辑
主表格
'This Program will wait for a key to press in our case it will wait for the F8 key to be press
'Then it will copy the highlighted text (Outside and Inside of the form) and will concatinate the text with a webaddress'
Imports Name_Of_Your_Project.Hotkey
Public Class Form1
'This Chunk of code will register the F8 key as a main key for the Program'
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Hotkey.registerHotkey(Me, "f8", Hotkey.KeyModifier.None)
End Sub
'This sub will trigger the Hotkey Sub Code in the Hotkey.vb Class'
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = Hotkey.WM_HOTKEY Then
Hotkey.handleHotKeyEvent(m.WParam)
'After pressing the F8 key It will copy the highlighted data from anywhere and store it to the clipboard'
If Clipboard.ContainsText Then
Try
Textbox1.text = My.Computer.Clipboard.GetData(DataFormats.Text).ToString
Catch ex As Exception
MessageBox.Show("Error in Program" + ex.ToString())
End Try
End If
End If
MyBase.WndProc(m)
End Sub
'System wide hotkey event handling
End Class
推荐阅读
- typescript - 测试脚本执行在 Firefox 和 Chrome 中的行为不同,同时操作一个
- vuetify.js - v-dialog Vuetify 的自定义位置
- sql-server - 创建后列名无效
- excel - 在 VBA 中设置变量范围
- c# - Xamarin PureSocketCluster 多个程序集
- php - 如何处理多国的应用程序和数据库?
- python - 如何在python中分离二进制文件中的信息
- powershell - Powershell - 参数“XXXX”在参数集“__AllParameterSets”中多次声明
- arangodb - Arangodump 遗漏了一些数据
- c# - ASP.NET 和 web.config 转换在开发时不起作用