#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
, который сделан с.