Advertisement
Guest User

Untitled

a guest
Dec 20th, 2014
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1.     #include <windows.h>
  2.     #include <vector>
  3.    
  4.     struct EnumWindowsCallbackArgs {
  5.         EnumWindowsCallbackArgs(DWORD p) : pid(p) { }
  6.         const DWORD pid;
  7.         std::vector<HWND> handles;
  8.     };
  9.    
  10.     static BOOL CALLBACK EnumWindowsCallback(HWND hnd, LPARAM lParam)
  11.     {
  12.         EnumWindowsCallbackArgs *args = (EnumWindowsCallbackArgs *)lParam;
  13.    
  14.         DWORD windowPID;
  15.         (void)::GetWindowThreadProcessId(hnd, &windowPID);
  16.         if (windowPID == args->pid) {
  17.             args->handles.push_back(hnd);
  18.         }
  19.    
  20.         return TRUE;
  21.     }
  22.    
  23.     std::vector<HWND> getToplevelWindows()
  24.     {
  25.         EnumWindowsCallbackArgs args(::GetCurrentProcessId());
  26.         if (::EnumWindows(&EnumWindowsCallback, (LPARAM)&args) == FALSE) {
  27.             // XXX Log error here
  28.             return std::vector<HWND>();
  29.         }
  30.         return args.handles;
  31.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement