C/C++ 控制台程序生成字符串,需自動輸入到第三方應用(如瀏覽器地址欄、輸入框)中。
#include
#include
// 1. 找到目標窗口句柄
HWND hWnd = FindWindow(NULL, L"窗口標題"); // 或 FindWindowEx 逐級查找
// 使用 Spy++ 工具獲取精確類名/標題
// 2. 發送字符串(逐字符發送 WM_CHAR 或整條發送 WM_SETTEXT)
// 方法 A:設置文本(直接替換內容)
SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)L"要輸入的字符串");
// 方法 B:模擬鍵盤輸入(逐字符,觸發按鍵事件)
for (wchar_t c : L"字符串") {
PostMessage(hWnd, WM_CHAR, c, 0);
Sleep(10); // 適當延遲
}
// 使用 SendInput 模擬真實鍵盤事件
INPUT inputs[2] = {};
inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wVk = 0; // 虛擬鍵碼
inputs[0].ki.wScan = c; // 掃描碼
inputs[0].ki.dwFlags = KEYEVENTF_UNICODE;
inputs[1] = inputs[0];
inputs[1].ki.dwFlags |= KEYEVENTF_KEYUP;
SendInput(2, inputs, sizeof(INPUT));
// 需引用 UIAutomationClient.dll
AutomationElement root = AutomationElement.RootElement;
AutomationElement target = root.FindFirst(TreeScope.Descendants,
new PropertyCondition(AutomationElement.NameProperty, "地址欄"));
ValuePattern pattern = (ValuePattern)target.GetCurrentPattern(ValuePattern.Pattern);
pattern.SetValue("https://example.com");
FindWindowEx(parent, NULL, className, NULL) 逐級定位
SendMessage/PostMessage 可能被攔截。掌握 FindWindow + SendMessage/WM_SETTEXT 或 SendInput 是實現 C/C++ 向第三方應用自動輸入的基礎路徑。