Вообщем необходимо отловить нажатие клавишь в Windows и выполнить необходимое действие, когда программа свернута или окно программы неактивно.
Например необходимо отловить нажатие клавиши Ю и выдать сообщение, что нажата клавиша "Ю"
Public Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long
Дык, если она обсуждалась столько раз, то зачем ты постиш это?Debugger писал(а):
- Код: Выделить всё
Public Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long
А так - да, эта тема обсуждалась тысячи раз.
3eJIeHb писал(а):Вообщем необходимо отловить нажатие клавишь в Windows и выполнить необходимое действие, когда программа свернута или окно программы неактивно.
Например необходимо отловить нажатие клавиши Ю и выдать сообщение, что нажата клавиша "Ю"
Williams писал(а):Может я маньяк, но мне кажется что GetAsyncKeyState в 99.99% случаев - это хулиганство.
Williams писал(а):3eJIeHb писал(а):Вообщем необходимо отловить нажатие клавишь в Windows и выполнить необходимое действие, когда программа свернута или окно программы неактивно.
Например необходимо отловить нажатие клавиши Ю и выдать сообщение, что нажата клавиша "Ю"
А в файл тебе это нажатие, случайно сбрасывать не надо, а потом отсылать на сервер?
Может я маньяк, но мне кажется что GetAsyncKeyState в 99.99% случаев - это хулиганство.
3eJIeHb писал(а):А вот ли тебе не пофиг для чего я это использую?
Мне необходимо выловить нажатие клавишь Ctrl + C для сравения его со ссылкой.
Сравнивать значения из буфера было не очень охото. Думаю так проблема решится гораздо качественней.
Public Class RichEditBox
Inherits System.Windows.Forms.RichTextBox
<DllImport("User32.dll")> _
Private Shared Function SetClipboardViewer(ByVal hWndNewViewer As IntPtr) As IntPtr
End Function
<DllImport("User32.dll")> _
Private Shared Function ChangeClipboardChain(ByVal hWndRemove As IntPtr, ByVal hWndNewNext As IntPtr) As Boolean
End Function
<DllImport("user32.dll")> _
Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
End Function
Private Const WM_DRAWCLIPBOARD As Integer = &H308
Private Const WM_CHANGECBCHAIN As Integer = &H30D
Public Event ChangeClipboard As EventHandler
Private nextClipboardViewer As IntPtr = IntPtr.Zero
Protected Overrides Sub OnHandleCreated(ByVal e As System.EventArgs)
MyBase.OnHandleCreated(e)
Me.nextClipboardViewer = SetClipboardViewer(Me.Handle)
End Sub
Protected Overrides Sub OnHandleDestroyed(ByVal e As System.EventArgs)
ChangeClipboardChain(Me.Handle, Me.nextClipboardViewer)
MyBase.OnHandleDestroyed(e)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_DRAWCLIPBOARD
RaiseEvent ChangeClipboard(Me, New EventArgs)
SendMessage(Me.nextClipboardViewer, m.Msg, m.WParam, m.LParam)
Case WM_CHANGECBCHAIN
If Me.nextClipboardViewer.Equals(m.WParam) Then
Me.nextClipboardViewer = m.LParam
Else
SendMessage(Me.nextClipboardViewer, m.Msg, m.WParam, m.LParam)
End If
Case Else
MyBase.WndProc(m)
End Select
End Sub
End Class
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 50