我希望能够在控制台窗口中发送文本,但可以在任何地方输入,例如代码编辑器,输入字段,搜索栏等。
我有以下代码,涉及使用剪贴板和发送键盘工作正常
// Create a generic keyboard event structure
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
const char* output = "Test";
const size_t len = strlen(output) + 1;
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), output, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
// Hold the "Ctrl" key
ip.ki.wVk = VK_CONTROL;ip.ki.dwFlags = 0;SendInput(1, &ip, sizeof(INPUT));
Sleep(500);
// Press the "V" key
keybd_event('V', 0x1c, 0, 0);
Sleep(500);
// Release the "Ctrl" key
ip.ki.wVk = VK_CONTROL;ip.ki.dwFlags = KEYEVENTF_KEYUP;SendInput(1, &ip, sizeof(INPUT));
Sleep(500);
问题在于它会删除剪贴板中可能已存在的所有有用数据。它太长了,我觉得必须有一个更简单的方法来做到这一点,我需要能够将此代码用于unicode字符。另一种方法可能是单独发送不同字母键的击键,但这会更长,并且发送unicode字符的问题仍然存在。我觉得必须有一个更好更短的方式但却无法找到。有人可以帮忙吗?