Не удалось получить координаты конкретного окна (я пробовал примеры ... все еще) в V C ++ - PullRequest
0 голосов
/ 03 апреля 2011

Я пробовал различные фрагменты кода здесь и там, но все еще не увенчался успехом. Я просто пытаюсь найти одно из открытых окон (это окно браузера), используя FindWindow(NULL,WINDOWTITLE), с определенной строкой заголовка.Как только я получаю дескриптор окна, мне нужны координаты, используя GetWindowRect.

. Этот код возвращает мне координаты, но кажется, что он находится в бесконечном цикле, есть около 100 строк вывода сКоординаты должны быть равны 1. Я не вижу никакой конструкции while (изначально Java-программиста) ... интересно, почему она повторяется ...

struct WindowInfo
{
  HWND m_hWnd;
  string m_title;
  WindowInfo(HWND hwnd, string title) : m_hWnd(hwnd), m_title(title) {}
};

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
  vector<WindowInfo*> & windows = *(vector<WindowInfo*>*)lParam;
  char title[256];

  HANDLE wndHandle;
  LPCWSTR WINDOWTITLE = L"eBargain 2 Share - Windpos Internet Explorer";
  RECT rRect;
  LPRECT lpRect;
  RECT rc;

  hwnd = FindWindow(NULL,WINDOWTITLE);  

  GetWindowRect(hwnd,&rc);
  printf("Position: %d x %d\tSize: %d x %d\n",rc.left,rc.top,rc.right- rc.left,rc.bottom-rc.top);

       /* Enumerating through all the windows tells me that I am on the right    track... (Should I just try to find the TITLE STRING by comparing every title from the following enumeration ?  
       */
      GetWindowTextA(hwnd, title, 256);
    windows.push_back(new WindowInfo(hwnd,title));
   //  printf("%s\n", title);
    return TRUE;

}
int main()
{
  vector<WindowInfo*> windows;
  BOOL ret = EnumWindows(EnumWindowsProc, (LPARAM) &windows);
  if ( ret )
  {
      //windows have windowinfo of all enumerated windows
  }
}

1 Ответ

2 голосов
/ 03 апреля 2011

Ваш EnumWindowsProc кажется немного смущенным - вы перечисляете или используете FindWindow?

Если вы перечислите, просто получите заголовок окна и сравните со строкой, которую вы ищете:

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
  char title[256];
  if (GetWindowTextA(hwnd, title, 256)) {
    if (strcmp(title, "eBargain 2 Share - Windpos Internet Explorer") == 0) {
      /* GetWindowRect ... */
    }
  }
  return TRUE;
}

Или, если вы используете FindWindow, не нужно перечислять:

int main() {
  HWND hwnd = FindWindowA(0, "eBargain 2 Share - Windpos Internet Explorer");
  if (hwnd) {
    /* GetWindowRect ... */      
  }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...