码迷,mamicode.com
首页 > Windows程序 > 详细

将后台窗口激活到前台的方法(使用AttachThreadInput和SetForegroundWindow两个API)

时间:2016-12-08 03:34:33      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:class   百度   .net   进程   类型   als   false   span   连接线   

下面这种方法是我见到的最理想的,还有一些其他的方法,像通过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

 

将后台窗口激活到前台的方法(使用AttachThreadInput和SetForegroundWindow两个API)

标签:class   百度   .net   进程   类型   als   false   span   连接线   

原文地址:http://www.cnblogs.com/findumars/p/6143444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!