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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
初心者

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

#1 投稿記事 by 初心者 »

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

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

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

お願いします。
みどるべあ
記事: 25
登録日時: 2005年11月13日(日) 15:25
連絡する:

#2 投稿記事 by みどるべあ »

コード: 全て選択

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

#3 投稿記事 by 初心者 »

みどるべあ様

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

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

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

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