2017-03-27 6 views
0

私は上矢印キーをシミュレートする必要があるので、私はsendinputを使用しました。https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx上矢印キーは0x26ですが、問題はプログラムが "L"と上矢印キーのプレスをシミュレートしていることです。ここ は、コードは次のとおりです。SendInput、なぜ矢印キーをシミュレートしないのですか?

INPUT ip; 
ip.type = INPUT_KEYBOARD; 
ip.ki.time = 0; 
ip.ki.wVk = 0; 
ip.ki.dwExtraInfo = 0; 
ip.ki.dwFlags = KEYEVENTF_SCANCODE; 
ip.ki.wScan =0x26; //UP ARROW key 
SendInput(1, &ip, sizeof(INPUT)); 
ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 
+0

'SendInput()'は何を返しますか? ['getLastError()'](https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms679360%28v=vs.85%29.aspx)とは何ですか? – YSC

+1

イベントを1つずつ送信するのは間違いです。配列を作成し、それらを 'SendInput'への1回の呼び出しで注入します。これはドキュメントに説明されています。私はあなたがそれを十分に慎重に読んだとは思わない。 –

+0

そして、それが価値があるのは、ここではスキャンコードでぎこちない点がありません。この場合、 'KEYEVENTF_SCANCODE'を削除し、仮想キーコード' VK_UP'を使用してください。 –

答えて

1

あなたはスキャンコードではなく、実際のスキャンコードとして仮想キーコードを使用しています。

this scancode tableによれば、正しい値は0x48です。

+0

ip.ki.wScan = 0X48このシミュレーション8 – secon25

+1

スキャナーはハードウェアに依存します。仮想キーのスキャンコードを取得する正しい方法は、['MapVirtualKey()'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646306.aspx)/ ['MapVirtualKeyEx () '](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646307.aspx)に' uMapType'パラメータを 'MAPVK_VK_TO_VSC'または' MAPVK_VK_TO_VSC_EX'に設定してください。 –

+0

問題は、私はゲームのプレスキーをシミュレートしたいということです。http://stackoverflow.com/questions/18647053/sendinput-not-equal-to-pressing-key-manually-on-keyboard-in-c – secon25

関連する問題