AttachThreadInput的用法
今天碰到一个问题:如何在程序A中模拟Tab按键消息发送给前台窗口(foreground window)?
正 常情况在对话框程序中,用户敲击Tab键后,窗体会收到WM_KEYDOWN消息,wParam为VK_TAB,而MSG结构中的hwnd则为上一个拥有键盘焦点的控件的窗口句柄。
在程序A中获取前台窗口是件容易的事,GetForegroundWindow就OK了。如何获得前台窗口上当前拥有键盘焦点的控件的窗口句柄呢?
获取拥有键盘焦点的窗口的句柄,可以用GetFocus。但是,看看MSDN中关于GetFocus的说明,有这么一句:The GetFocus function retrieves the handle to the window that has the keyboard focus, if the window is attached to the calling thread's message queue. 前半句好理解,正是我们想要的。可是,后面有个“但是”——如果窗口贴附到(attached to)调用线程的消息队列。
这个“但是”很要命,因为前台窗口显然没有贴附到程序A的调用线程的消息队列中。怎么办?
幸好Windows为我们提供了AttachThreadInput,它可以将一个线程的输入处理机制贴附到另一个线程。这样我们就有了下面的代码:
// 获取创建前台窗口的线程
DWORD dwThread = GetWindowThreadProcessId (GetForegroundWindow(), NULL);
// 将前台窗口线程贴附到当前线程(也就是程序A中的调用线程)
AttachThreadInput(dwThread, GetCurrentThreadId(), TRUE);
// 获取焦点窗口句柄
HWND hFocus = GetFocus();
// 解除贴附
AttachThreadInput(dwThread, GetCurrentThreadId(), FALSE);
// 发送消息
PostMessage(hFocus, WM_KEYDOWN, VK_TAB, 0);
......
AttachThreadInput的用法相关推荐
- VC获取其它程序窗口焦点方法 AttachThreadInput的用法
1.不同线程的处理方法 如何在2K/xp下使窗口获取焦点 //捕捉并设置当前焦点窗口为我们的窗口 AttachThreadInput( GetWindowThreadProcessId( ...
- [转]无焦点显示窗口解决方法 [转]AttachThreadInput的用法
tag: 激活无焦点窗口 转自:http://blog.csdn.net/abcpanpeng/archive/2009/12/29/5099580.aspx 1.不同线程的处理方法 如何在2K/xp ...
- 无焦点显示窗口解决方法 [转]AttachThreadInput的用法
tag: 激活无焦点窗口 转自:http://blog.csdn.net/abcpanpeng/archive/2009/12/29/5099580.aspx 1.不同线程的处理方法 如何在2K/xp ...
- [Windows编程] 使用AttachThreadInput 来捕捉其它窗口的键盘输入
在一些情况下(比如屏幕软键盘或者输入法程序),自己的窗口没有输入焦点但是想要当前焦点窗口的键盘输入消息,可以使用Win32 API函数AttachThreadInput()来解决这个问题.Attach ...
- c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...
- Pandas_transform的用法
先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...
- Python中yield和yield from的用法
yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...
- pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...
- python yield 和 yield from用法总结
#例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...
最新文章
- 素数和_只愿与一人十指紧扣_新浪博客
- mac qt android开发环境搭建,Mac 下 PyQt5 的开发环境搭建
- Python 网络服务相关 杂记
- VA01销售订单增强MV45AFZZ注意点
- 小程序----使用Less
- AspNetCore在docker部署时遇到一个小坑
- 很遗憾,总对工作挑挑拣拣的家伙,一般结局都不会太好
- 【软件领域知识整理】贵金属交易的K线图解释(二)
- 【转载】100多个很有用的JavaScript函数以及基础写法大集合
- 移动平均滤波器 matlab,移动平均滤波的原理---matlab函数的实现smooth
- ffice 2016 文件运行excel的数据透视表中的数据切片器的时候自动关闭
- exchange功能在线测试
- linux下下载fnl数据,NCEP再分析资料FNL数据在windows平台用cygwin批量下载方法
- Tipard Mac Video Converter Ultimate如何在Mac上转换DVD 视频?
- 重构:从方法论到实践
- 前端复习笔记(一)——HTML
- 【JanusGraph入门】(第一天,下载项目)
- 固态硬盘坏块修复工具_坏道和坏块什么区别?硬盘高级修复教程来了
- micropython(esp8266)SG90舵机控制
- win10计算机控制面板在哪里,windows10系统控制面板在哪里?快速找到Win10控制面板的三种方法...