获取当前活动窗口后(前景窗口)可以做好多事情

相关函数:
//获取当前活动窗口
HWND GetForegroundWindow(VOID);

//获取窗口名
int GetWindowText(  HWND
hWnd,        // handle to window or control
                                    LPTSTR
lpString,  // text buffer
                                    int
nMaxCount     // maximum number of characters to copy);

//获取窗口的进程ID和主线程ID,线程ID作为返回值,进程ID作为传出参数

DWORD GetWindowThreadProcessId(  HWND
hWnd,             // handle to window
                                                                   LPDWORD
lpdwProcessId  // process identifier);

有了进程ID后我们就可以做很多的事情,比如OpenProocess,枚举进程的信息,最后与此进程相关的用户名,用户ID,SessionID,都会搜索出来。。。。。。,可以根据自己的喜好继续往下写
上面的几个函数都比较简单,不做过多的说明。接下来写一个小练习:

void main()

{

   HWND hWindow = GetForegroundWindow();

   wchar_t szCaption[MAX_PATH] = { 0 };
   GetWindowText(hWindow, szCaption, MAX_PATH * sizeof(WCHAR)); 
   wstring strCaption = szCaption;
		
   DWORD dwProcessId;
   GetWindowThreadProcessId(hWindow, &dwProcessId);

   HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
   WCHAR szFileName[MAX_PATH] = { 0 };
   //GetModuleFileNameEx(hProcess, NULL, szFileName, MAX_PATH);
   wchar_t wszImageFileName[MAX_PATH] = { 0 };
   GetProcessImageFileName(hProcess, wszImageFileName, MAX_PATH);
	

   wstring strFilePath;
   wstring strExeName;

   if (szFileName)
   strFilePath = wszImageFileName;

   int nPos = strFilePath.find_last_of('\\');
   if (nPos > 0)
   {
	strExeName = strFilePath.substr(nPos + 1, strFilePath.length() - nPos - 1);
   }

   wprintf(L"processName:%ws  ProcessId:%d,  Caption:%ws \n", strExeName.c_str(), dwProcessId, szCaption);

  Sleep(1000 * 2);

}

 

posted on 2018-10-08 17:17  priarieNew  阅读(2091)  评论(0编辑  收藏  举报

导航