1、不同线程的处理方法

如何在2K/xp下使窗口获取焦点

//捕捉并设置当前焦点窗口为我们的窗口
AttachThreadInput(
    GetWindowThreadProcessId(
        ::GetForegroundWindow(),NULL),
    GetCurrentThreadId(),TRUE);

//置我们的为焦点窗口
SetForegroundWindow();
SetFocus();

//释放thread
AttachThreadInput(
    GetWindowThreadProcessId(
        ::GetForegroundWindow(),NULL),
    GetCurrentThreadId(),FALSE);
2、同线程下的窗口无焦点弹出的方法
在windows的窗口系统中,popup窗口的焦点是与它的活动状态密切相关的。只要使  
popup窗口不获得活动状态,popup窗口就不会自动获得焦点。具体方法如下:  
1.   在创建popup窗口时不要有WS_VISIBLE风格,然后调用SetWindowPos函数显示  
创建的窗口,参数uFlag取值SWP_SHOWWINDOW     and     SWP_NOACTIVATE,这样就可以保证  
窗口在创建是不会得到活动状态,也就不会获得焦点。  
2.   响应WM_MOUSEACTIVATE消息,返回MA_NOACTIVATE表示窗口在鼠标点击时不需要  
获得活动状态,这样就可以保证在鼠标点击时窗口不会自动获得焦点。  
至于鼠标输入的响应,本就与窗口是否获得焦点无关,不会受到影响。

///
其他方法:

1.
::ShowWindow(m_hWnd, SW_SHOWNORMAL);
::SetForegroundWindow(m_hWnd);

曾经成功,但后来又不行,不知道为什么

2.SwitchToThisWindow

失败

3.
SetWindowPos(htop,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE&brvbarSWP_NOSIZE);
ShowWindow(m_hWnd,SW_SHOW);
SetForegroundWindow(m_hWnd);
SetActiveWindow(m_hWnd);
SetFocus(m_hWnd);

获取不到焦点

在2K/XP下我们可以用 AttachThreadInput 和SetForegroundWindow来有效的获取焦点。

转自:http://blog.sina.com.cn/s/blog_4ed1e0e40100g8ag.html

今天碰到一个问题:如何在程序A中模拟Tab按键消息发送给前台窗口(foreground window)?

正常情况在对话框程序中,用户敲击Tab键后,窗体会收到WM_KEYDOWN消息,wParam为VK_TAB,而MSG结构中的hwnd则为上一个拥有键盘焦点的控件的窗口句柄。

在程序A中获取前台窗口是件容易的事,GetForegroundWindow就OK了。如何获得前台窗口上当前拥有键盘焦点的控件的窗口句柄呢?

获取拥有键盘焦点的窗口的句柄,可以用GetFocus。但是,看看MSDN中关于GetFocus的说明,有这么一句:TheGetFocus 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);
......

VC获取其它程序窗口焦点方法 AttachThreadInput的用法相关推荐

  1. VC中设置程序窗口的排列层级

    1. topmost窗口和non-topmost窗口 Windows中的应用程序窗口,可以按照显示效果分为topmost和non-topmost两类.top-most类型的窗口,显示时位于non-to ...

  2. VC++ 隐藏控制台程序窗口

    转自:http://hi.baidu.com/sicceer/blog/item/d9c35a810d15c4c8bc3e1ec8.html 设置 #pragma comment( linker, & ...

  3. VC 获取任务栏窗口的句柄

     本文将介绍一个未公开的Win32 API函数:GetTaskmanWindow,利用它对Windows的任务栏进行操作.这个函数返回拥有任务栏按钮的窗口句柄.在微软的MSDN文档中,对任务栏是这 ...

  4. c# 打开的窗口显示在最前面_了解各种切换程序窗口的方法,提高工作效率

    一般的是直接点击程序窗口,不用多解释了.(注意不要误点中不该点的功能) 直接点程序窗口切换 当窗口太多,而且被完全遮挡时,通常会点任务栏上的程序按钮 点任务栏按钮切换(启用Aero效果) 点任务栏按钮 ...

  5. c#获取应用程序路径的方法

    string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名. string str2=Environm ...

  6. 【音视频】获取桌面程序窗口列表以及桌面、窗口的缩略图(4-4)

    采集桌面.窗口,必然需要获取其列表以及缩略图.获取桌面显示器列表在<[音视频]获取视频设备-MMDeviceAPI&MONITORINFOEX(2-3)>已经讲过.本篇主要记录一下 ...

  7. VC++获取不同Windows版本的方法

    直接来干货,说到获取Windows版本,在XP和windows7时代,通常使用的做法如下: OSVERSIONINFOEX os; os.dwOSVersionInfoSize=sizeof(OSVE ...

  8. VC++ 获取Windows系统标准字体方法

    获取系统字体常用方法如下: LOGFONT lf = { 0 }; ::GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), & ...

  9. 隐藏基于对话框的MFC应用程序窗口的方法

    (推荐这个方法,非常好用) 很多人可能会将窗口创建出来,然后用一个 ShowWindow(SW_HIDE) 的方法去隐藏窗口,当然这是可以做到隐藏的功能,但是有一点不足的地方就是窗口在隐藏之前会有一下 ...

最新文章

  1. 代码片段--批量生产库以及可执行文件的依赖关系
  2. centos部署Redis和Java开发(Jedis)
  3. b^3 - a^3 = c
  4. ./configure: error: the HTTP gzip module requires the zlib library.
  5. super在python3和python2_Python扩展与 – 使用super()python 3 vs python 2
  6. php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能
  7. 下载 | 李宏毅:1 天搞懂深度学习,我总结了 300 页 PPT
  8. jenkins+k8s实现持续集成
  9. 关于怎么获取jsp的web站点的目录问题
  10. AVB2 avbtool.py脚本常用命令
  11. 申请美国大学计算机专业,申请美国大学计算机CS专业的4个要点
  12. 语音信号处理及特征提取
  13. 第十六章 python Pygame的使用
  14. HTML5的文档声明
  15. 蓝桥杯 历年试题 矩阵翻硬币
  16. 我的申请已经通过审核,你想成为阿里云 MVP 吗?
  17. vite安装失败问题Emitted ‘error‘ event on ChildProcess instance at:-4058esbuild.exe
  18. EasyRecovery15Mac全面好用的苹果电脑数据恢复app
  19. BlockQueue
  20. Oracle 中文转为拼音

热门文章

  1. 魅族pro6部分应用内adb断开连接
  2. 查看服务器cpu核数信息
  3. java编写一个字体特效程序。
  4. Android布局文件之 include 详细介绍
  5. RowMapper是什么?怎么用?
  6. 太阳光线为什么是近似平行的?------余弦定理搞起
  7. 进一法整数php,进一法取整、四舍五入取整、忽略小数等的取整数方法大全
  8. maven官网应该下载binary还是sources
  9. php遍历对象属性_php中遍历对象的方法
  10. 2022-04-16 一维离散傅里叶变换DFT - 手算过程