非アクテブ中(アイコン化や、他のアプリ操作中)に、F12等のキーを押すと自作アプリにてキーイベントを取得する方法を教えてください。
ホットキーを使用してRegisterHotKey()にて登録すれば取得できそうなのですが、わたしにはハードルが高すぎます。
どなたか、サンプルコードを見せていただけませんか?
お願いします。
非アクティブ中のキーイベントの取得に付いて
コード: 全て選択
Declare Function RegisterHotKey lib "user32.dll" (ByVal hWnd As HWND,ByVal id As Long,ByVal dwModufuers As DWord,ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As HWND,ByVal id As Long) As Long
Dim wcl As WNDCLASSEX
wcl.cbSize=Len(wcl)
wcl.hInstance=GetModuleHandle(0)
wcl.lpszClassName="DUMMY"
wcl.lpfnWndProc=AddressOf(DummyWndProc)
RegisterClassEx(wcl)
Dim uID As Long
uID=&HF000
CreateWindowEx(0,"DUMMY","dummy",0,0,0,0,0,0,0,GetModuleHandle(0),0)
Dim msg As MSG
While GetMessage(msg,0,0,0)=1
TranslateMessage(msg)
DispatchMessage(msg)
Wend
End
Function DummyWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
Select Case dwMsg
Case WM_DESTROY
UnregisterHotKey(hWnd,uID)
PostQuitMessage(0)
Case WM_CREATE
RegisterHotKey(hWnd,uID,0,VK_F12)
Case WM_CLOSE
DestroyWindow(hWnd)
Case WM_HOTKEY
If HIWORD(lParam)=VK_F12 Then
MessageBox(hWnd,"F12を押しましたね。","",MB_SYSTEMMODAL)
End If
Case Else
DummyWndProc=DefWindowProc(hWnd,dwMsg,wParam,lParam)
Exit Function
End Select
DummyWndProc=DefWindowProc(hWnd,dwMsg,wParam,lParam)
End Function
みどるべあ様
コードありがとうございます。
WinXPで試しましたが反応しませんでした。
調べてみると英文のMSDNに記載が有りました。
http://msdn.microsoft.com/library/defau ... hotkey.asp
NT系OSでは、F12はdebuggerに予約されているそうです。
キーを変えてみると、取得できました。
F12の取得手段がわかりませんが、工夫すれば何とかなりそうです。
ありがとうございました。
コードありがとうございます。
WinXPで試しましたが反応しませんでした。
調べてみると英文のMSDNに記載が有りました。
http://msdn.microsoft.com/library/defau ... hotkey.asp
NT系OSでは、F12はdebuggerに予約されているそうです。
キーを変えてみると、取得できました。
F12の取得手段がわかりませんが、工夫すれば何とかなりそうです。
ありがとうございました。