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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0315
今北隙間産業objselによるフォーカス移動について2解決


今北隙間産業

リンク

2013/3/15(Fri) 17:19:18|NO.52951

メッセージボックスでコピペなどを行いフォーカスが移っていた時、下記のようなプログラムで
キーボードの入力を受けて自動的にインプットボックスへフォーカスが移るようにしたのですが、
これを行うとそのきっかけとなった最初のキー入力がインプットボックスに反映されません。


input a b="" mesbox b,200,16,0 onkey gosub *INPUTCHK repeat await 30 color 0,0,0 : boxf : color 255,255,255 loop *INPUTCHK objsel -1 CHKOBJ=stat if (CHKOBJ!0) : objsel 0 return

これでエラーが起きるとかではないので深刻な問題ではないのですが、
文字入力時にワンステップ余計に増えるので地味にめんどくさくなってしまいます。
しかも日本語入力の際は、最初の入力が反映されないためにうっかりしていると
「か」が「あ」になったりしてしまいます。
フォーカスが移った段階で最初のキーも反映しているような方法はないでしょうか?



この記事に返信する


ht.

リンク

2013/3/15(Fri) 17:54:41|NO.52953

やっつけですが動作は合ってると思います。

#uselib "user32" #func keybd_event "keybd_event" int, int, int input a b="" mesbox b,200,16,0 onkey gosub *INPUTCHK repeat await 30 color 0,0,0 : boxf : color 255,255,255 loop *INPUTCHK objsel -1 CHKOBJ=stat if evt : evt = 0 : return if CHKOBJ { objsel 0 keybd_event iparam evt = 1 } return



今北隙間産業

リンク

2013/3/16(Sat) 04:27:46|NO.52968

>>ht.さん
なるほど、keybd_event関数で実装できたのですね
まさしくその動作が欲しかったのです
ありがとうございます!


しかしkeybd_event関数で検索してみると、どうも
今のWindowsでは推奨されていないようで、sendinputを代わりに使って欲しいというような
事が書かれていました
とりあえずWindows7環境でも問題なくkeybd_event関数が使えているので
特に問題は無さそうですが、一応念の為に…ということで
推奨されていたsendinput関数版も自分で作ってみました


#uselib "User32" #func SendInput "SendInput" int, var, int #cfunc MapVirtualKey "MapVirtualKeyA" int,int dim KEY,5 input a b="" mesbox b,200,16,0 onkey gosub *INPUTCHK repeat await 30 color 0,0,0 : boxf : color 255,255,255 loop *INPUTCHK objsel -1 CHKOBJ=stat if CHKOBJ!0{ objsel 0 KEY(0) = 1 KEY(1) |= MapVirtualKey(iparam,0)<<16 KEY(2) = 0x0008 SendInput 1,KEY,28 } return

推奨されている方式ということで本当はこちらを使ったほうがいいのでしょうが、
keybd_event関数の方が一行で簡単に済んでしまいますね…
モジュール化して一行ですんじゃうようにすると後々楽になるのかな…



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