我已經在Internet上搜索了一個用於在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, – 2011-03-20 00:13:41
已經添加了'winapi'標籤,因爲這與C++本身無關。 – 2011-03-20 00:33:25
GenerateKey('h'...)讓你獲得8的原因是因爲SendInput採用VK值,該值標識鍵盤上的鍵,而不是ASCII字符。 VK和ASCII值在0-9和A-Z之間重疊 - 大寫;但任何其他的ASCII值最終會讓你成爲一個「隨機」鍵。小寫字母h的ASCII代碼爲0x68;在winuser.h中查看它,它定義了所有的VK_值,並且你會看到它是VK_NUMPAD8,所以系統將它視爲在數字鍵盤上按8。這將使您獲得8或上箭頭,具體取決於numlock。發送'H'會根據大寫鎖定狀態獲得H和h。 – BrendanMcK 2011-03-20 04:49:56