C # - Win32: получить дескриптор к верхнему окну, после того как он потерял фокус? - PullRequest
2 голосов
/ 11 марта 2009

Попытка покопаться в api win32 из моего приложения WPF (которое просто запускается через systray).

Когда я нажимаю на иконку систрея, я предоставляю пользователю контекстное меню, которое фокусируется на любом верхнем окне.

Я хочу получить ручку к этому окну (то, которое только что потеряло фокус) и попробовал разные подходы, используя

GetForeGroundWindow()
GetTopWindow()
GetDesktopWindow()

Без конца, однако. В настоящее время я рассматриваю итерацию всех процессов, чтобы получить MainWindowHandles и проверку z-порядка каждого окна.

Но я считал, что есть более простой / умный способ; просто один, который я не могу погуглить или вспомнить из моего старого тома Петцольда.

Другим способом было бы для моего меню систрея не получить фокус при активации?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 марта 2009

Вы можете получить самое верхнее окно до открытия меню, независимо от того, какой пункт меню в конечном итоге выберет пользователь.

Тогда, если вам нужно самое верхнее окно, вы можете просто использовать значение, которое вы получили, прежде чем открывать меню.

0 голосов
/ 11 марта 2009

Не думаю, что есть что-то более простое, чем описанная вами итерация z-index. Меню systray имеет , чтобы получить фокус, потому что иначе люди не смогут его использовать (например, с клавиатуры). И если он получает фокус, то он становится окном переднего плана, поэтому старое окно переднего плана остается без каких-либо отличий от любого другого неактивного окна в системе. Поистине, проверка z-индекса ИМХО - единственный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...