HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0208
Renキーフックについて(あらやさんのもの)2解決


Ren

リンク

2020/2/8(Sat) 18:39:24|NO.89434

キーフックについて
http://hsp.tv/play/pforum.php?mode=all&num=89242
にあらやさんのキーフックについてのサンプルがあります。

このサンプルで、キーを押し続けている状態を検知する項があるのですが、その状態を示す(gkey == 2)が表示項目だけで、*LowLevelMouseProcのどこにも記述がありません。
このキーを押し続けている状態を検知する方法を教えていただけませんか?



この記事に返信する


あらや

リンク

2020/2/8(Sat) 19:42:59|NO.89437

すみません、動作確認した時の消し忘れミスです。

lp(2)の値を確認すれば押しっぱなし判定できるかと思っていたのですが
キーを押している間、常に0だったので意味がありませんでした。

なので、押しっぱなし判定する場合は
フックのコールバックを下記のようにしてみて下さい。


// フックのコールバック *LowLevelMouseProc dupptr Mstate, lparam, wparam*4, 4; // Mstate(0)=フックコード(nCode) Mstate(1)=メッセージ識別子(wParam) Mstate(2)=メッセージデータ(lParam) if( Mstate(0) < 0 ) { // フックコードが0未満の場合はフックを中止して制御を元に戻さなければいけない。 return CallNextHookEx( hhook, Mstate(0), Mstate(1), Mstate(2) ); } // ほとんどのキー入力はWM_KEYDOWNだが、ALTなどはWM_SYSKEYDOWNになる if( (Mstate(1) == WM_KEYDOWN) || (Mstate(1) == WM_SYSKEYDOWN) ) { kcode_old = kcode; // 前回のキーコードを記録 dupptr lp, Mstate(2), 24, 4; // lParamはKBDLLHOOK構造体へのポインタが入っている(今回は不要) // lp(0)が仮想キーコード、lp(1)がハードウェアスキャンコード、lp(2)がキーの押しっぱなしなどの細かい情報群 // lp(3)はタイムスタンプ、lp(4)は追加情報(これは32ビットか64ビットかでサイズが変わる) kcode = lp(0); if( (kcode == kcode_old) && (gkey != 0) ) { // 今回のコードと前回のコードが一致し、前回もキーを押していた場合 gkey = 2; // キーを押し続けているか判定 } else { gkey = 1; // キーを押したか判定 } /////////////////////////////////////////////////////////////////// lp2 = MapVirtualKey( kcode, 0 ) << 16; // おまけでキー名取得 GetKeyNameText lp2, keyname, 64; // キー名取得本体 /////////////////////////////////////////////////////////////////// } else { gkey = 0; /////////////////////////////////////////////////////////////////// sdim keyname, 64; // おまけを初期化 /////////////////////////////////////////////////////////////////// } return CallNextHookEx( hhook, Mstate(0), Mstate(1), Mstate(2) ); // フックしたデータをそのまま返す

よく見たら、コールバックも「LowLevelMouseProc」
マウスフックした時の名前のままでしたね。

色々雑で申し訳ありません。



Ren

リンク

2020/2/8(Sat) 21:38:50|NO.89438

あらやさん、早速のお答えありがとうございました。
私もWM_KEYDOWNのlParamで分かるということで、lp(2)を色々いじったのですがうまくいかなく、質問させていただきました。
本当にありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.