VC获取其它程序窗口焦点方法 AttachThreadInput的用法
来源:互联网 发布:js中let的用法 编辑:程序博客网 时间:2024/06/05 20:46
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¦SWP_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,它可以将一个线程的输入处理机制贴附到另一个线程。这样我们就有了下面的代码:
- VC获取其它程序窗口焦点方法 AttachThreadInput的用法
- [转]无焦点显示窗口解决方法 [转]AttachThreadInput的用法
- 无焦点显示窗口解决方法 [转]AttachThreadInput的用法
- [Windows编程] 使用AttachThreadInput 来捕捉其它窗口的键盘输入
- 将窗口置顶的方法:SetWindowPos、AttachThreadInput、SwitchToThisWindow
- 用VC获取其它程序的命令行参数
- 用 VC 获取其它运行中程序的命令行参数
- 用VC获取其它程序的命令行参数
- Delphi获取其它进程窗口句柄的3种方法
- Delphi获取其它进程窗口句柄的3种方法
- Delphi获取其它进程窗口句柄的3种方法
- Delphi获取其它进程窗口句柄的3种方法
- 获取活动窗口输入焦点控件句柄的方法
- mfc获取其它程序窗口句柄
- 利用 AttachThreadInput 改变其它进程的输入法状态
- VC中调用其它程序的三种方法总结
- VC中调用其它程序的三种方法总结
- [转载]VC++四种启动其它程序的方法
- Linux蓝牙系统(3)
- C# http post请求
- 记录Java多线程的同步问题---synchronized关键字的使用
- Android绘制抗锯齿的两种方法
- C语言中offsetof宏的应用
- VC获取其它程序窗口焦点方法 AttachThreadInput的用法
- linux下mmap内存映射的使用
- C#模拟用户操作域上服务器的文件
- 深入理解面向discuz的插件开发
- JS作用域链(转载)
- java代码(dex)注入
- PHP SOCKET编程
- 学习如何用VS2010创建ocx控件
- 设计模式之-创建型