非アクティブ中のキーイベントの取得に付いて

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 非アクティブ中のキーイベントの取得に付いて

by 初心者 » 2006年6月19日(月) 14:54

みどるべあ様

コードありがとうございます。
WinXPで試しましたが反応しませんでした。

調べてみると英文のMSDNに記載が有りました。
http://msdn.microsoft.com/library/defau ... hotkey.asp

NT系OSでは、F12はdebuggerに予約されているそうです。

キーを変えてみると、取得できました。
F12の取得手段がわかりませんが、工夫すれば何とかなりそうです。
ありがとうございました。

by みどるべあ » 2006年6月16日(金) 23:08

コード: 全て選択

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
そんなに難しくなかったり…

非アクティブ中のキーイベントの取得に付いて

by 初心者 » 2006年6月16日(金) 21:01

非アクテブ中(アイコン化や、他のアプリ操作中)に、F12等のキーを押すと自作アプリにてキーイベントを取得する方法を教えてください。

ホットキーを使用してRegisterHotKey()にて登録すれば取得できそうなのですが、わたしにはハードルが高すぎます。

どなたか、サンプルコードを見せていただけませんか?

お願いします。

ページトップ