У меня есть приложение, которое находится в системном трее, которое при двойном нажатии открывает окно, довольно стандартное; однако, когда вы закрываете окно, я бы хотел, чтобы окно, которое было сфокусировано до того, как шахта была открыта, получило обратный фокус.
Если я открою окно с помощью сочетания клавиш, я смогу восстановить предыдущий фокус при закрытии с помощью вызова API GetForegroundWindow
до того, как откроется мое окно, затем метод SetForegroundWindow
после закрытия моего окна (с значение первого звонка) для восстановления фокуса. Это не работает, когда вы открываете окно в системном трее, потому что пользователь, по сути, сделал фокус в системном трее.
Я пытался использовать комбинацию GetForegroundWindow
, GetWindow
и GetTopMostWindow
, чтобы попытаться перемещаться по z-порядку, чтобы найти второе окно после системного трея (исходя из предположения, что системный трей будет прыгнул на вершину, так что по логике следующего вниз будет оригинальный фронт). Хотя я не добился успеха, результаты этих функций довольно бесполезны, так как они не дают мне никакой логической структуры.
У кого-нибудь есть идеи, как мне этого добиться?
Я думал о каком-то фоновом наблюдателе, который просто сидит и следит за передним окном и хранит указатель на него, но в лучшем случае он будет ненадежным.
Это для Windows (лично я на x64 Server 2008) и с .Net 3.5.