Получить HWND окна, на котором я нажал - PullRequest
0 голосов
/ 29 мая 2019

Я делаю программу на c ++ и winapi, в которой вы можете нажать кнопку, затем выбрать окно, и это меняет прозрачность этого окна.

У меня нет проблем с тем, чтобы сделать окно прозрачным, но я не могу получить hwnd окна.

Когда я использую эту функцию, программа просто падает (ошибки не выводятся на консоль).

HWND getHWND(HWND self)
{
  HWND found = GetForegroundWindow();
  if(found == self || found == NULL)
    return getHWND(self);
  return found;
}

Я пыталсяиспользуя это, но мне это не нравится, потому что у пользователя есть только 2 секунды, чтобы нажать на другое окно.(Я знаю, я мог бы использовать большую задержку, но тогда это могло бы быть очень .. так что это не оптимально)

HWND getHWND()
{
  Sleep(2000);
  return GetForegroundWindow();
}

1 Ответ

1 голос
/ 29 мая 2019

Не запрашивать активное окно, особенно с рекурсивной функцией. Просто позвольте ОС уведомить вас о щелчке окна.

Когда пользователь нажимает на вашу кнопку, вы можете использовать SetCapture() или кнопку мыши с помощью SetWindowsHookEx(), чтобы направлять последующие щелчки мыши в ваше приложение, даже если они нажимаем на чужое окно. Когда вы обнаружите щелчок, отпустите кнопку захвата / захвата, а затем используйте WindowFromPoint(), чтобы получить HWND в месте щелчка.

...