Как восстановить приложение из SysTray? ShowWindow не помогает, так как Handle = 0 - PullRequest
0 голосов
/ 06 января 2010

Можно ли восстановить стороннее приложение, которое было свернуто в SysTray?

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

Ответы [ 3 ]

2 голосов
/ 06 января 2010

Нет; Существуют различные подходы, которые могут быть использованы для достижения этой цели (приложение может закрыть окно и открыть новую копию при восстановлении, или оно может просто скрыть исходное окно и показать его после восстановления). Нет определенного процесса, которому приложение должно следовать, чтобы достичь этой функциональности, поэтому нет конкретного процесса, который можно было бы выполнить, чтобы изменить его.

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

Редактировать

Вы можете попробовать Process Explorer , чтобы определить, какие (если есть) дескрипторы окна открыты процессом. По крайней мере, это скажет вам, разрушает ли оно окно или скрывает его.

1 голос
/ 06 января 2010

Это полностью зависит от реализации приложения. Гораздо более распространенным подходом было бы создать новое окно с нуля, а не показывать скрытое.

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

0 голосов
/ 07 января 2010

Полезные советы от Адама Робинсона и Нобугз.Помог мне понять, что то, что мы пытаемся сделать, может даже оказаться невозможным.Слишком многое зависит от того, как приложение ведет себя внутренне, когда оно скрывается, и мы не контролируем это и даже не знаем о нем много.Нам нужно было подойти к этому с другой стороны.

Приложение находится в SysTray, ожидая активации через нажатие на него мышью, но мы не можем этого автоматизировать.Но есть еще один способ «активировать» приложение, и снова запустить exe-файл.В этом случае это не запускает второй экземпляр, он просто активирует существующий экземпляр.Так почему бы не зайти в exe-файл и не активировать приложение таким образом?Это то, что мы сделали, и это рабочее решение.

...