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)を色々いじったのですがうまくいかなく、質問させていただきました。
本当にありがとうございました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.89434への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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