C++에서 키 누르기를 에뮬레이트하는 데 적합한 시스템을 인터넷에서 검색했습니다.문자열 분할 및 keybd를 사용하여 문자 전송
문자열을 다른 프로그램에 보내고 싶지만 GenerateKey 함수는 한 번에 하나만 보낼 수 있습니다. 나는 문자열을 깨뜨리고 각 문자를 개별적으로 보내는 코드를 만들었지 만 문자 자체 대신 알파벳의 특정 문자 수가 전송되는 경우가 있습니다. (예 : "h"를 입력하면 컴퓨터가 "8"을 울림)
어떻게 해결할 수 있으며 더 좋은 방법이 있습니까? 고맙습니다!
접근의이 종류는 정말 복잡#include <windows.h>
#include<iostream>
#include <winable.h>
#include <fstream>
#include<time.h>
#include<string>
using namespace std;
void GenerateKey(int vk, BOOL bExtended) {
KEYBDINPUT kb = {0};
INPUT Input = {0};
/* Generate a "key down" */
if (bExtended) { kb.dwFlags = KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
/* Generate a "key up" */
ZeroMemory(&kb, sizeof(KEYBDINPUT));
ZeroMemory(&Input, sizeof(INPUT));
kb.dwFlags = KEYEVENTF_KEYUP;
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));
return;
}
int main() {
SetConsoleTitle("sendkeys");
string sentence;
while (1){
cin>>sentence;
char letter;
int track = 0;
while(sentence[track] != '\0') {
cout<<sentence[track];
letter = sentence[track];
GenerateKey(letter, FALSE);
track++;
}
}
}
GenerateKey ('a', FALSE); 이것은 키 A를 생성합니다. –
'winapi' 태그를 추가했습니다. 이것은 C++ 자체와 아무런 관련이 없기 때문입니다. –
GenerateKey ('h'...)가 8을 얻는 이유는 SendInput이 ASCII 문자가 아닌 키보드의 키를 식별하는 VK 값을 사용하기 때문입니다. VK 및 ASCII 값은 0-9 및 A-Z에 대해 겹치기 - 대문자입니다. 하지만 다른 ASCII 값은 결국 당신에게 '무작위'키를 가져옵니다. 소문자 h는 ASCII 코드 0x68을가집니다. winuser.h에서 모든 VK_ 값이 정의되어 있고 VK_NUMPAD8이라는 것을 보게 될 것입니다. 그래서 시스템은 이것을 숫자 키패드에서 8을 눌러서 처리합니다. 이것은 numlock에 따라 8 또는 up-arrow 중 하나를 가져옵니다. 'H'를 보내면 대문자 잠금 상태에 따라 H 대 H가 나옵니다. – BrendanMcK