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);
......
函数定义:
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);
......
相关文章推荐
- Python求索之路3——迭代器&装饰器&生成器&正则
- JAVA八大经典书籍,你看过几本?
- 51CTO稿酬标准2016版正式发布!
- MyBatis入门学习
- Java并发中正确使用volatile
- HDU2089 不要62(数位DP)
- maven学习
- CentOS7 Juno Cinder块重启后 实例起不来 --rescan Exit code: 21
- 2的m次方 内存对齐
- WordPress程序伪静态规则(Nginx/Apache)及二级目录规则
- tuple内部方法
- self.方法和_对变量的引用的区别
- gerrit+http+2
- mysql创建索引
- SqlBulkCopy批量插入数据
- Java数据类型和位运算
- 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
- 拟工作todo
- CSS 简介
- Android事件处理