您的位置:首页 > 其它

AttachThreadInput

2016-01-26 18:11 302 查看
在一些情况下(比如屏幕软键盘或者输入法程序),自己的窗口没有输入焦点但是想要当前焦点窗口的键盘输入消息,可以使用Win32 API函数AttachThreadInput()来解决这个问题。AttachThreadInput把一个线程(idAttach)的输入消息连接到另外线程(idAttachTo)。

函数定义:

BOOL WINAPI AttachThreadInput(

__in DWORD idAttach,

__in DWORD idAttachTo,

__in BOOL fAttach

);

用法示例:

AttachThreadInput(

::GetWindowThreadProcessId(::GetForegroundWindow(),NULL), //当前焦点窗口的线程ID

::GetCurrentThreadId(), //自己的线程ID

TRUE);

其他例子:如何在程序A中模拟Tab按键消息发送给前台窗口(foreground window)?

// 获取创建前台窗口的线程

DWORD dwThread = GetWindowThreadProcessId(GetForegroundWindow(), NULL);

// 将前台窗口线程贴附到当前线程(也就是程序A中的调用线程)

AttachThreadInput(dwThread, GetCurrentThreadId(), TRUE);

// 获取焦点窗口句柄

HWND hFocus = GetFocus();

// 解除贴附

AttachThreadInput(dwThread, GetCurrentThreadId(), FALSE);

// 发送消息

PostMessage(hFocus, WM_KEYDOWN, VK_TAB, 0);

......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: