C++ 怎么获取最前端的焦点窗口

比如我开着我的软件在后台,怎么判断当前焦点是浏览器然后就开始调用我代码... 比如我开着我的软件在后台,怎么判断当前焦点是浏览器然后就开始调用我代码 展开
 我来答
YaNaKaSa
2015-11-11 · TA获得超过114个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:84.3万
展开全部
//1
 HWND hWnd = GetForegroundWindow(void);//获取窗口句柄
//2
 DWORD dwProcessID = 0;
 GetWindowThreadProcessId( hWnd , &dwProcessID );
//保证有SeDebugPrivilege优先权,
 HANDLE hToken;
  
 if ( !OpenProcessToken(GetCurrentProcess(), 
  TOKEN_ADJUST_PRIVILEGES, &hToken))
  {
   //GetLastError( );...出错处理
   return;
  }
 LUID uID;
 LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &uID);
 TOKEN_PRIVILEGES tp;
 tp.PrivilegeCount = 1;
 tp.Privileges[0].Luid = uID;
 tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
 CloseHandle(hToken);
//3
 HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS ,
   FALSE , dwProcessID );
//4
 TCHAR pszProcessName[50] = { 0 };
 GetModuleFileName( hProcess , pszProcessName , 50 );//获取进程名
//6
 CloseHandle( hProcess );
//7
 //假设浏览器是ie,
 CString strName(_T("iexplore.exe") );
 if( !strName.CompareNoCase( pszProcessName ) )
 {
  //如果当前在操作ie浏览器
 }
//注意要保证后台自己程序运行,而不是挂起
//如果是浏览器窗口有名字,可以使用
 HWND hOneWnd = FindWindow( NULL , _T("窗口名") );
 //直接比较句柄就行就不用上面的获取进程名的方式
 //但有些程序没窗口名字,或窗口名字动态变化,这种方式就不行了

MSDN上这样说GetActiveWindow:

The GetActiveWindow function retrieves the window handle to the 

active window attached to the calling thread's message queue.

他获取的是当前进程中当前正在使用的(激活的)窗口

百度网友2018359
2015-11-11 · TA获得超过3494个赞
知道大有可为答主
回答量:3486
采纳率:73%
帮助的人:1434万
展开全部
GetActiveWindow
追问
怎么用??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式