【发布时间】:2014-09-15 06:03:23
【问题描述】:
我有一个应用程序,它在后台运行(停留在窗口托盘区域),我需要将击键(通常是纯文本)发送到前台应用程序,无论它是普通应用程序还是 Qt 应用程序,或者它是其他一些应用程序。如何使用 Win API 做到这一点?
我的代码适用于 MSVC 代码编辑器窗口、记事本、Wotdpad、MS Word/Excel,但不适用于 Qt Creator、Google Chrome 和 Far 文件管理器。
HWND hwndActiveWindow = GetForegroundWindow();
if (hwndActiveWindow==0)
{
return;
}
DWORD activeWndProcessId = 0, activeWndThreadId = ::GetWindowThreadProcessId( hwndActiveWindow, &activeWndProcessId );
GUITHREADINFO gti = { sizeof(gti) };
if (!GetGUIThreadInfo( activeWndThreadId, >i ))
{
return;
}
if (gti.hwndCaret==0)
{
return;
}
::std::wstring::size_type i = 0, size = str.size();
for(; i!=size; ++i)
{
::PostMessage( gti.hwndCaret, WM_CHAR, (WPARAM)str[i], 1);
}
我需要它在任何地方工作,对于任何窗口,无论技术/框架如何,用于应用程序。我想我可以使用剪贴板,但这不是一个很好的解决方案。
【问题讨论】:
-
查看
SendInput函数。
标签: windows winapi textbox focus