2个回答
展开全部
//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.
他获取的是当前进程中当前正在使用的(激活的)窗口
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询