我使用下面的代码来检查剪贴板中的文本更改,但它不支持像 ا ب ج 这样的 unicode 字符有没有办法添加对 unicode 文本的支持,或者有没有其他方法可以做同样的工作?
#Region " Definitions "
'Constants for API Calls...
Private Const WM_DRAWCLIPBOARD As Integer = &H308
Private Const WM_CHANGECBCHAIN As Integer = &H30D
'Handle for next clipboard viewer...
Private mNextClipBoardViewerHWnd As IntPtr
'API declarations...
Declare Auto Function SetClipboardViewer Lib "user32" (ByVal HWnd As IntPtr) As IntPtr
Declare Auto Function ChangeClipboardChain Lib "user32" (ByVal HWnd As IntPtr, ByVal HWndNext As IntPtr) As Boolean
Declare Auto Function SendMessage Lib "User32" (ByVal HWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Long
#End Region
#Region " Contructor "
#End Region
#Region " Message Process "
'Override WndProc to get messages...
Protected Overrides Sub WndProc(ByRef m As Message)
Dim iData As IDataObject = New DataObject()
iData = Clipboard.GetDataObject()
Select Case m.Msg
Case Is = WM_DRAWCLIPBOARD 'The clipboard has changed...
'##########################################################################
' Process Clipboard Here :)........................
'##########################################################################
MsgBox(CStr(iData.GetData(DataFormats.Text)))
SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)
Case Is = WM_CHANGECBCHAIN 'Another clipboard viewer has removed itself...
If m.WParam = CType(mNextClipBoardViewerHWnd, IntPtr) Then
mNextClipBoardViewerHWnd = m.LParam
Else
SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)
End If
End Select
MyBase.WndProc(m)
End Sub
#End Region
#Region " Dispose "
'Form overrides dispose to clean up...
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
'Set the next clipboard viewer back to the original...
ChangeClipboardChain(Me.Handle, mNextClipBoardViewerHWnd)
MyBase.Dispose(disposing)
End If
End Sub