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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0302
solaoncmdとmesbox4解決


sola

リンク

2013/3/2(Sat) 12:23:19|NO.52650

お世話になります。


#define WM_KEYDOWN $100 #const WM_SYSKEYDOWN $104 oncmd gosub *jump, WM_KEYDOWN oncmd gosub *syskeydown , WM_SYSKEYDOWN stop *jump mes wparam return *syskeydown mes wparam if wparam=121 or wparam=18 : return 1 : else : return

検索などをしてキーを押すとキーコードが表示されるプログラムを組みました。
ここまではなんとか出来たのですが上記のプログラムにmesbox命令を追加すると
反応しなくなってしまいます。
最初はoncmd命令を使わずにonkey命令のみを使用してキーを押すと
そのキーコードがmesbox内に表示されるというプログラムでした。
しかしF10、Altキーはonkey命令では反応しないというのがわかりまして
検索してoncmd命令に変更したのですが・・・。


#define WM_KEYDOWN $100 #const WM_SYSKEYDOWN $104 oncmd gosub *jump, WM_KEYDOWN oncmd gosub *syskeydown , WM_SYSKEYDOWN sdim a,500 pos 50,50 mesbox a,300,50,0 stop *jump mes wparam return *syskeydown mes wparam if wparam=121 or wparam=18 : return 1 : else : return

上記のようにmesbox命令を追加すると反応しなくなりキーコードが表示されなくなります。
oncmd命令の使い方などはまだあまりわからずに見よう見真似で使用しています。
どなたか解決方法がありましたらよろしくお願いいたします。

また、onkey命令のみでF10、Altキーも反応させる事はやはり不可能なのでしょうか?
こちらについての質問はわからずでも結構なのですがもし解決方法がありましたら
合わせてお願いいたします。



この記事に返信する


暇人

リンク

2013/3/2(Sat) 14:52:26|NO.52655

多分mesboxに先にキー情報取られて何を押されたかがoncmdに送られてない
普通にやってたら無理だと思う(mesboxのフォーカス外せばいけるが・・・)

キーフックDLL使ってmesboxより先にキー情報みる方法がある

2007/10/12(Fri) HSPでキーフックしたいよ!
http://tu3.jp/0524

上のDLL使うとこんな感じ

#include "keyhook.hsp"

;//フックをセット
khHook *onKeyHook
if stat=0 : dialog "フック失敗" : end
sdim a,500
pos 50,50
mesbox a,300,50,0
mesbox_id=stat

repeat
KeyON=4 //khStatが0〜3までキー情報に使われるのでそれ以外を代入
wait 100
if KeyON<=1 {//0:押された 1:キーリピートが発生した
//khStat等のkhHook追加システム変はキーボードフックの処理ルーチンの中でのみ使用できるって事なのでこれで正しいかは分からない(だめなら*onKeyHook内でコピーを取れば良い)
//一応使えてるように見える・・・
mes khKeyName+"("+khKeyCode+")" //khKeyCodeはwparamと同じ
a+str(khKeyCode)+","
objprm mesbox_id,a
}
loop

stop

*onKeyHook //gosub先のラベルでは即座にreturnすること。って事みたいなのでkhStatだけ保存して抜ける

KeyON=khStat //キー状態保存

return

oncmd等と違うのはHSPのウィンドウが非アクティブでもキー取得する



fortunehill

リンク

2013/3/2(Sat) 17:14:44|NO.52661

/*無理やり取得(WM_QUITの関係でWM_NCLBUTTONDOWNで誤魔化す:vistaSP2環境で確認)*/

#include "kernel32.as" #include "user32.as" dim mm,7 sdim ss mesbox ss,200,200 repeat PeekMessageA varptr(mm),0,0,0,1 if (stat) {if (mm(1) != $12) {TranslateMessage varptr(mm) DispatchMessageA varptr(mm)}} sleep 1 if (mm(1) == $100)|(mm(1) == $201)|(mm(1) == $204) {title strf("%x",mm(2))} if (mm(1) == $0A1) {break} ;WM_QUIT ---> WM_NCLBUTTONDOWN loop



sola

リンク

2013/3/3(Sun) 09:40:10|NO.52674

返信ありがとうございます!

暇人様の回答で思う通りの動きになりました。

fortunehill様の回答は当方がXPsp3環境のせいなのか
F10、Altキーが反応しませんでした・・・。

何にせよ、お二方共本当にありがとうございました!



fortunehill

リンク

2013/3/3(Sun) 23:07:10|NO.52697

/*WM_SYSKEYDOWN($104)が抜けてました*/

#include "kernel32.as" #include "user32.as" dim mm,7 sdim ss mesbox ss,200,200 repeat PeekMessageA varptr(mm),0,0,0,1 if (stat) {if (mm(1) != $12) {TranslateMessage varptr(mm) DispatchMessageA varptr(mm)}} sleep 1 if (mm(1) == $100)|(mm(1) == $104)|(mm(1) == $201)|(mm(1) == $204) {title strf("%x",mm(2))} if (mm(1) == $0A1) {break} ;WM_QUIT ---> WM_NCLBUTTONDOWN loop /* WM_KEYDOWN $100 WM_SYSKEYDOWN $104 WM_LBUTTONDOWN $201 WM_RBUTTONDOWN $204 WM_MBUTTONDOWN $207 */



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