如何使用C ++以编程方式在任何地方输入文本?

时间:2018-03-15 08:10:13

标签: c++ windows

我希望能够在控制台窗口中发送文本,但可以在任何地方输入,例如代码编辑器,输入字段,搜索栏等。

我有以下代码,涉及使用剪贴板和发送键盘工作正常

// 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字符的问题仍然存在。我觉得必须有一个更好更短的方式但却无法找到。有人可以帮忙吗?

0 个答案:

没有答案