Как сделать скрытое окно другого приложения видимым из моего приложения?

#windows #delphi #delphi-6

#Windows #delphi #delphi-6

Вопрос:

Мое приложение скрывает свое окно (и, следовательно, кнопку панели задач) и остается только в области уведомлений со следующим кодом:

 Form1.Hide;
  

Когда я нажимаю на значок уведомления, окно отображается со следующим кодом:

 Form1.Show;
Application.Restore;
  

Но я хочу показать окно при выполнении второго экземпляра. Я могу передавать любые данные из первого экземпляра во второй, используя «сопоставление файлов». До сих пор мне удалось показать окно, только если оно свернуто (кнопка панели задач существует), с помощью этого кода:

 if IsIconic(FirstInstanceApplicationHandle) then ShowWindow(FirstInstanceApplicationHandle, SW_RESTORE);
SetForegroundWindow(FirstInstanceApplicationHandle);
  

Итак, как я делаю видимым окно первого экземпляра из второго экземпляра?

Ответ №1:

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

Теперь трудно добиться, чтобы это произошло извне. Итак, заставьте второе приложение отправить сообщение первому, а затем позвольте первому приложению восстановить себя. Выполняйте вызов SetForegroundWindow так же, как и в настоящее время. Ваше второе приложение может подарить это, но первое приложение не может иначе принять это.

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