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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0227
hasega非アクティブウィンドウの状態での、キー入力2解決


hasega

リンク

2023/2/27(Mon) 01:42:35|NO.99133

非アクティブ状態で、numlockの状態と、numlockキーを押している・押していない
判定をしたいのですが、ウィンドウがアクティブ状態でないと認識してくれないようで、
なにか方法はございませんでしょうか。



この記事に返信する


沢渡

リンク

2023/2/27(Mon) 12:45:57|NO.99134

私が現在使用しているキーボードにはNUM LOCKがないのでCAPSで代用していますが、
GetKeyStateを使う方法で上手くいくでしょうか?
(GetKeyStateの引数を0x90にすればNUM LOCKの状態を取得できると思います)

#include "user32.as" repeat redraw 0 color 255,255,255 : boxf : color 0,0,0 : pos 0,0 GetKeyState 0x14 //仮想キーコードを指定する。 //ここではCAPSキーですが、0x90にすればNUM LOCKが取得できると思われます。 mes (stat&0x8000)!=0 //キーを押している状態だと(stat&0x8000)を計算した結果が0x8000になる。 mes stat&0x1 //トグル状態(CAPSやNUM LOCKが有効な状態)になっている場合は(stat&0x1)を計算した結果が0x1になる。 redraw 1 await 100 loop



hasega

リンク

2023/2/27(Mon) 19:25:03|NO.99137

ご助言、ありがとうございました。
おかげさまで、考えていた通りの動作になりました。

・普段、オンオフのどちらかに固定して、
 Numlockキーを押している時のみ反対の動作になる。

 テンキー付きキーボードだと、
 Numlock+数字で、方向やHomeキー

 テンキーなしキーボードだと
 Numlock+文字で、数字入力




#uselib "user32" #func keybd_event "keybd_event" int, int, int #func global GetKeyState "GetKeyState" sptr mode=1 // 0=テンキー付きキーボード , 1=テンキーなしキーボード repeat color 255,255,255 : boxf : color 0,0,0 : pos 0,0 GetKeyState 0x90 //仮想キーコードを指定する。 Numlock if mode=0:if stat=0:keybd_event $90:keybd_event $90, , 2 //NUMLOCKキーを押しているとき以外はNUMLOCK ONになる。 if mode=1:if stat!0:if (stat&0x8000)=0:keybd_event $90:keybd_event $90, , 2 //NUMLOCKキーを押している時のみNUMLOCK ONになる。 await 50 loop



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