いくつかのキーを押すのを自動化するためにSendInput()関数を使いたいと思います。SendInput()が機能しないのはなぜですか?
マイコード:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <Windows.h>
using std::cin;
using std::cout;
using std::string;
void presskeys(string s){
INPUT ip;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
HKL kbl = GetKeyboardLayout(0);
for (unsigned int i = 0; i < s.length(); ++i) {
ip.type = INPUT_KEYBOARD;
char c = s[i];
int vk = VkKeyScanEx((WCHAR)c, kbl);
ip.ki.wVk = vk;
SendInput(1, &ip, sizeof(ip));
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(ip));
}
}
int main()
{
cout << "Enter a string!\n";
string str;
cin >> str;
Sleep(5000);
presskeys(str);
cout << "Done!\n";
return 0;
}
私がプログラムを起動してのみ発生する何のために、文字列を入力します。どこが間違っていたのですか?
sendinputからの戻りコードをチェックし、GetLastErrorを呼び出します。 –
この入力を受け取るのはどのアプリケーションですか? UIPIを研究する。 –
@RemyLebeau "この機能は、UIPIによってブロックされた場合に失敗します。GetLastErrorと戻り値のどちらも、UIPIのブロックによって障害が発生したことを示していないことに注意してください。 [sendinput関数のmsdnの説明に従って](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v = vs.85).aspx) –