Восстановление фокуса окна назад к предыдущему владельцу - PullRequest
4 голосов
/ 07 марта 2009

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

Если я открою окно с помощью сочетания клавиш, я смогу восстановить предыдущий фокус при закрытии с помощью вызова API GetForegroundWindow до того, как откроется мое окно, затем метод SetForegroundWindow после закрытия моего окна (с значение первого звонка) для восстановления фокуса. Это не работает, когда вы открываете окно в системном трее, потому что пользователь, по сути, сделал фокус в системном трее.

Я пытался использовать комбинацию GetForegroundWindow, GetWindow и GetTopMostWindow, чтобы попытаться перемещаться по z-порядку, чтобы найти второе окно после системного трея (исходя из предположения, что системный трей будет прыгнул на вершину, так что по логике следующего вниз будет оригинальный фронт). Хотя я не добился успеха, результаты этих функций довольно бесполезны, так как они не дают мне никакой логической структуры.

У кого-нибудь есть идеи, как мне этого добиться?

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

Это для Windows (лично я на x64 Server 2008) и с .Net 3.5.

Ответы [ 3 ]

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

Хотя это может быть удобной функцией юзабилити, вы, вероятно, знаете, что с Windows 7 лоток займет (намного) менее заметное место на рабочем столе.

Единственный способ сделать это - отслеживать сообщения Windows и отслеживать, какое окно было в фокусе, прежде чем ваше приложение получило фокус. Помимо этого AFAIK, ты мало что можешь сделать.

2 голосов
/ 03 сентября 2009

Я сделал это, чтобы вернуться в предыдущее окно

SendKeys.Send("%{TAB}");

Я знаю, что это не «решение», а достижение цели в некоторой степени.

1 голос
/ 07 марта 2009

Я посмотрел на все значки на панели задач, и они работают так же, как ваша программа. Неразбериха с управлением фокусировкой в ​​Windows является сложной задачей, вы можете подумать дважды (или больше), прежде чем пытаться изменить стандартное поведение.

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