下面这种方法是我见到的最理想的,还有一些其他的方法,像通过SetWindowsPos这个API设置窗口的Z-oder到最顶层,再设置回去。还有通过把当前窗口设置到底层,然后激活目标窗口等等方法。

  1. HWND hCurWnd = NULL;
  2. DWORD dwMyID;
  3. DWORD   dwCurID;
  4. hCurWnd = ::GetForegroundWindow();
  5. dwMyID = ::GetCurrentThreadId();
  6. dwCurID = ::GetWindowThreadProcessId(hCurWnd, NULL);
  7. ::AttachThreadInput(dwCurID, dwMyID, TRUE);
  8. ::SetForegroundWindow(m_hWnd);
  9. ::AttachThreadInput(dwCurID, dwMyID, FALSE);

关键API的使用::AttachThreadInput,这个API是连接两个线程的,使其共享输入焦点,键盘状态等等。

下面这段COPY自百度百科:

通常,系统内的每个线程都有自己的输入队列。本函数(既“连接线程输入函数”)允许线程和进程共享输入队列。连接了线程后,输入焦点、窗口激活、鼠标捕获、键盘状态以及输入队列状态都会进入共享状态 返回值 Long,非零表示成功,零表示失败,会设置会GetLastError 参数表 参数 类型及说明 idAttach Long,欲连接线程的标识符(ID) idAttachTo Long,与idAttach线程连接的另一个线程的标识符 fAttach Long,TRUE(非零)连接,FALSE撤消连接。

调用这个函数时,会重设键盘状态。参数类型前的IN表示这个参数是输入参数,可以当它没有。

http://blog.csdn.net/magictong/article/details/3595408

最新文章

  1. LinQ 组合查询与分页
  2. 【转】PHP实现连贯操作
  3. Yii1.1.16的安装(windows)
  4. Swift 自动布局框架-SnapKit
  5. hiho_1052_基因工程
  6. 实用make最佳实践
  7. a标签的背景图在ie8下显示问题
  8. 利用Azure高级存储搭建高性能Linux服务器(2)
  9. HTML5 Canvas、内联 SVG、Canvas vs. SVG
  10. C# 获取exe、dll中的图标,支持获取256x256分辨率
  11. Struts2实现文件上传和下载,多文件上传,限制文件大小,限制文件类型
  12. JS实现2048代码
  13. 如何查看Linux命令的源代码
  14. mysql 的crud操作(增删改查)
  15. 了解AOP
  16. ArcGIS Runtime For Android setViewpointCenterAsync(Point center, double scale)效果奇葩,不响应
  17. 如何做自己的服务监控?spring boot 1.x服务监控揭秘
  18. apache的php模块讲解以及搭建phpmyadmin管理数据库mysql
  19. java StringBuilder和StringBuffer 用法
  20. 用IBM MQ中间件开发碰到的MQRC_NOT_AUTHORIZED(2035)问题

热门文章

  1. 语言的学习 —— 西班牙语(español)
  2. Android之高仿手机QQ聊天
  3. 使用Visual Studio 2010 一步一步创建Powershell Module 和 Cmdlet
  4. Disk array controller and information processing apparatus
  5. C++机器学习古典材料
  6. CUDA软件架构—网格(Grid)、线程块(Block)和线程(Thread)的组织关系以及线程索引的计算公式
  7. sqlserver中获取最后一个字符所在的位置
  8. windows通过使用xShell远程linux上传文件
  9. ios7 左右searchbar在设置cancelButton的title属性
  10. 转:PyQt4学习资料汇总 from coderzh