プログラムが非アクティプの時にキー押下の情報を取得するには

解決


スミス  2004-03-08 17:21:03  No: 82485  IP: [192.*.*.*]

お世話になります。
自プログラムが非アクティプの時にキー押下の情報を取得したいのです。

作りたいプログラムはいわゆる『キーボードマクロ』です。
自プログラムを実行しメモ帳をアクティブにした時に
F12キーの押下で特定の文字をメモ帳に貼り付ける。
といったものを作りたいのですが、
非アクティブ時にF12キー押下の情報の取得が出来ずに困っています。
分かる方教えて下さい。

編集 削除
Say  2004-03-09 00:29:03  No: 82486  IP: [192.*.*.*]

キー押下情報は通常、アクティブウィンドウに送られます。
それを横取りするには通常グローバルキーフックします。
が、今回程度の処理内容なら、ショートカットキーで
できそうな気がします。

編集 削除
スミス  2004-03-09 17:24:38  No: 82487  IP: [192.*.*.*]

Sayさん、レスありがとうございます。
『グローバルキーフック』を検索してみたら、
別のホームページで
『VBだけではグローバルキーフックのプログラムは作れない』
となっていました。残念だけどあきらめるしかないようです。
ショートカットキーもアクティブでないと反応しないようです。
いろいろありがとうございました。

編集 削除
IMA  2004-03-09 23:04:22  No: 82488  IP: [192.*.*.*]

他人のOCXは不安かもしれませんが、以下のものが利用できるはずです。
(私も利用させていただくことがあります。)

http://member.nifty.ne.jp/nyankoro/sw/nyaocx.htm
http://member.nifty.ne.jp/nyankoro/sw/faq_nyan.htm#CTRLSHFT

F12キーを検知するには

Private Sub Nyankoro1_Keyboard(ByVal VirtualKey As Integer,_
                               ByVal ScanCode As Integer, _
                               ByVal RepeatCount As Integer, _
                               ByVal Flags As Integer, _
                               Canceled As Integer)
    Select Case VirtualKey
        Case vbKeyF12
            Debug.Print "F12"
    End Select 
End Sub 

でいけるでしょう。

有償でソースファイルも提供しますとのことです。

ご参考まで

編集 削除
たかみちえ  URL  2004-03-10 00:58:25  No: 82489  IP: [192.*.*.*]

確かにVBではDLLが作れないので、グローバルフックはできません…が、
要はそのDLLをVB以外の言語で作ればいいだけで、インターフェース部分にVBを使うことはできます。
  この系統のDLLを作るには、C言語が一番手っ取り早いようで、おそらくDLL部分だけをC言語で作ることになると思いますが…。
C言語のコンパイラだけなら、無償で手に入れることができますし、しっかりコーディングしてあれば、あまりC言語の深い知識が必要になるわけでもなさそうです。できる自信があれば、やってみるのも手かと。

  そういえばペンギンまじっく( http://hahaha.puni.to/ )にて、キーボードフックDLLが公開されていましたが…。あれはどうなのかなあ?ペンまウェア以外のソフトでつかってもいいんでしょうか?



  でもところで、ホットキーとしてF12キーを登録すれば、とりあえずは何とかなるのでは?
目的の動作通りになるかどうかはわかりませんが、
とりあえずホットキーならば、VBだけでも不可能ではありません。

編集 削除
スミス  2004-03-10 16:49:47  No: 82490  IP: [192.*.*.*]

IMAさん、たかみちえさんレスありがとうございます。
まずホットキーで挑戦して、
駄目ならOCXやDLLでの順で試してみたいと思います。
いろいろ教えていただきありがとうございます。

編集 削除