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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1130
こいる自動キー入力の仕方を教えてください6解決


こいる

リンク

2019/11/30(Sat) 10:45:07|NO.88956

hsp始めたばっかりの初心者です。

自動でキーを入力したくて調べ、
「keybd_event」という関数をみつけたのですが、キーコードが全く分からず困っています。

一応、「Ctrl+S」をしたいと思っています。
今後のためにも、全てのキーコードがのった表みたいなのを教えてくださると幸いです。



この記事に返信する


Cube

リンク

2019/11/30(Sat) 14:27:42|NO.88957

キーコードはこのサイトに載っています
http://quasiquote.org/hspwiki/HSP%25A4%25CETips:HSP%25A5%25AD%25A1%25BC%25A5%25B3%25A1%25BC%25A5%25C9%25C9%25BD

keybd_event関数を使用する際、特殊なキーのキーコードは16進数に変換する必要があります

Ctrlキーは17なので16進数に変換すると11になります



MillkeyStars

リンク

2019/11/30(Sat) 14:44:04|NO.88958

なんとなく作ってみたサンプルモジュール。
スキャンコードを必要としているプログラムは、keybd_event の第二引数を正しく設定してね。
(このサンプルでは、スキャンコードは取り扱っていません)

//キー操作エミュレートモジュール #module KEYCODE_EVENT #uselib "user32.dll" #func _KE_keybd_event "keybd_event" int,int,int,int #define _KE_VK_SHIFT 0x10 #define _KE_VK_CTRL 0x11 #define _KE_VK_ALT 0x12 #define _KE_KEYEVENTF_KEYUP 0x0002 //-------------------------------------------------------------- //キー操作エミュレート // // keybd_push p1,p2,p3 // p1 = 仮想キーコードを指定します // p2 = キーのフラグを指定します // p2 = 0x0001 : 押す // p2 = 0x0002 : 離す // p2 = 0x0004 : 特殊キーコードを事前に設定(SHIFTキー) // p2 = 0x0008 : 特殊キーコードを事前に設定(CTRLキー) // p2 = 0x0010 : 特殊キーコードを事前に設定(ALTキー) // p2 は、上記フラグを組み合わせて使用してください // p3 = キーを入力してからのウェイトを設定します。(ms 単位) //-------------------------------------------------------------- #deffunc keybd_push int vk_key,int mode,int key_timeout //特殊コード(SHIFT)押すなよ if (mode & 0x0004) : _KE_keybd_event _KE_VK_SHIFT,0,0,0 : await key_timeout //特殊コード(CTRL)押すなよ if (mode & 0x0008) : _KE_keybd_event _KE_VK_CTRL,0,0,0 : await key_timeout //特殊コード(ALT)絶対に押すなよ if (mode & 0x0010) : _KE_keybd_event _KE_VK_ALT,0,0,0 : await key_timeout //押せ〜〜〜! if (mode & 0x0001) : _KE_keybd_event vk_key,0,0,0 : await key_timeout //離す if (mode & 0x0002) : _KE_keybd_event vk_key,0,_KE_KEYEVENTF_KEYUP,0 : await key_timeout //特殊コード(SHIFT) if (mode & 0x0004) : _KE_keybd_event _KE_VK_SHIFT,0,_KE_KEYEVENTF_KEYUP,0 : await key_timeout //特殊コード(CTRL) if (mode & 0x0008) : _KE_keybd_event _KE_VK_CTRL,0,_KE_KEYEVENTF_KEYUP,0 : await key_timeout //特殊コード(ALT) if (mode & 0x0010) : _KE_keybd_event _KE_VK_ALT,0,_KE_KEYEVENTF_KEYUP,0 : await key_timeout return #global //以下サンプル(CTRL + S) //5秒後に、CTRL + S を入力します。 await 5000 //CTRL 押す→'S' 押す→'S'離す→CTRL 離す keybd_push 'S',0x0001 | 0x0002 | 0x0008,50



こいる

リンク

2019/11/30(Sat) 18:59:22|NO.88960

お二人ともありがとうございます。

しかし、どうやらキーコードうんたらよりも、「keybd_event」の使い方、
関数の使い方自体を理解できていないみたいです。

なので、「keybd_event」の使い方、関数の使い方、
基礎(一応使えるぐらい)だけでもいいので教えてください!



こいる

リンク

2019/12/1(Sun) 11:32:29|NO.88962

いろいろ調べてみて、少しだけ理解はできたので、
勝手ながら上の質問は取り消させていただきます。

それで、少しだけ理解はできのですが、第二関数(?)の押す、離すがわかりません。
#uselib "user32.dll"
#func keybd_event "keybd_event" int, int, int exec "notepad" keybd_event 83,0 await 1000 keybd_event 83,1
こんな感じで、メモ帳に1秒間「S」を長押しする処理を作ったのですが
全く長押しがされず、Sが2回押されるだけです。

どうすればいいのでしょうか?
ご教授ください。



沢渡

リンク

2019/12/1(Sun) 13:34:22|NO.88963

これを読む限り、keybd_eventは第二パラメータには意味がなく、
第三パラメータに0(押す)か2(離す)かを指定することでキー入力をエミュレートできるようですね。
http://chokuto.ifdef.jp/urawaza/api/keybd_event.html

あと、HSPではなく「なでしこ」の掲示板ですが、
>キーのオートリピートはkeydb_eventよりも下位で処理で、
>DownとUpの繰り返しに変換されるようです
だそうで、keybd_eventでSキーを長押ししてもSがオートリピートで連続入力されるわけではないようです。
http://nade.jp-pro.net/bbs/bbs/cbbs.cgi?mode=all&number=6276&type=0&space=0&no=0



こいる

リンク

2019/12/1(Sun) 13:40:38|NO.88964

ありがとうございました



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