Определить, перемещается ли данное окно в данный момент - PullRequest
1 голос
/ 06 апреля 2009

По сути, я ищу вызов Win32 API IsWindowMoving (HWND). Мне нужно знать, перемещает ли пользователь в данный момент окно.

Окно не принадлежит мне, поэтому прослушивание WM_SYSCOMMAND / SC_MOVE или WM_MOVING невозможно (я не хочу создавать подкласс или подключать из-за взаимодействия 32/64).

Ответы [ 3 ]

1 голос
/ 20 апреля 2009

Вы можете сделать это с помощью GetGUIThreadInfo - перехват не требуется. Используйте GetWindowThreadProcessId, чтобы получить TID для вашего hwnd, затем проверьте GUITHREADINFO.flags и GUITHREADINFO.hwndMoveSize, чтобы увидеть, находится ли ваше окно в цикле перемещения / размера.

1 голос
/ 20 апреля 2009

Если вы не хотите подключать, создавать подклассы или что-либо еще в этом роде, я думаю, что опрос может быть самым простым способом. Используя GetWindowRect, вы можете отслеживать предыдущую и текущую позицию и размер окна. Выполнение дельты позволит вам определить, перемещает ли пользователь (или даже изменяет его размер) окно. Поскольку вы имеете дело с пользовательским интерфейсом, нет необходимости слишком быстро опрашивать (даже 2-5 раз в секунду должно быть достаточно).

1 голос
/ 06 апреля 2009

Если окно не принадлежит вам, и вы не собираетесь отслеживать сообщения, лучшее, что вы можете, я думаю, это получить ручку для этого окна. Это ограничивает вас существующими вызовами информационных функций, которые работают с дескриптором. Я не знаю ни одного такого вызова, который мог бы сообщить пользователю, что окно перемещается.

Возможно, вам не повезло.

...