在 ActiveX 控件中定義方法,需取得目標 Windows 進程的視窗句柄(HWND),將其激活並發送鍵盤訊息(如模擬輸入)。適用於自動化測試、跨進程互動等場景。
FindWindow、FindWindowEx、EnumWindows + 回呼函數篩選(依類別名、標題、PID)。SetForegroundWindow、BringWindowToTop、ShowWindow (SW_RESTORE)。注意:前台鎖定機制可能阻攔,需配合 AllowSetForegroundWindow 或 AttachThreadInput。PostMessage(hwnd, WM_KEYDOWN, VK_..., 0) / WM_KEYUP — 非阻塞,投遞到訊息佇列。SendMessage — 同步阻塞,較少用於鍵盤模擬。SendInput (Windows 2000+) — 更底層、更真實,繞過訊息佇列直接注入輸入流,推薦用於現代系統。// IDL 定義
[id(1)] HRESULT SendKeysToWindow([in] BSTR bstrWindowTitle, [in] BSTR bstrKeys);
// CPP 實作
STDMETHODIMP CMyCtrl::SendKeysToWindow(BSTR bstrWindowTitle, BSTR bstrKeys)
{
USES_CONVERSION;
HWND hTarget = FindWindow(NULL, OLE2CT(bstrWindowTitle));
if (!hTarget) return HRESULT_FROM_WIN32(GetLastError());
// 激活視窗 (簡化版,生產環境需處理前台鎖定)
SetForegroundWindow(hTarget);
Sleep(50); // 等待激活完成
// 解析 bstrKeys 並逐字發送 (此處略,需處理修飾鍵、組合鍵)
// 建議使用 SendInput 配合 KEYBDINPUT 結構陣列
return S_OK;
}
FindWindow 返回後視窗可能仍在載入。建議輪詢 IsWindowVisible、IsWindowEnabled 或等待特定子控件出現。SetFocus),否則訊息可能被系統忽略。若非必須用 ActiveX,建議改用 UI Automation (UIA)、Windows App SDK 或 Python + pywinauto 等現代自動化框架,穩定性與維護性遠優於手工訊息發送。