Активизация предыдущего экземпляра вашей программы
Если внутренняя переменная hPrevInst не равна нулю, то она содержит дескриптор
предыдущего запущенного экземпляра вашей программы. Вы просто находите открытое
окно по его дескриптору и, при необходимости, выводите на передний план. Весь
код расположен в файле .DPR file, НЕ в модуле. Строки, которые вам необходимо
добавить к вашему .DPR-файлу, в приведенном ниже примере помечены {*}.
Here is a translation of the content into Russian:
Это программное обеспечение на Delphi, которое реализует функциональность реактивации предыдущего экземпляра приложения, если оно было запущено ранее. Переменная hPrevInst содержит.handle предыдущего экземпляра, и программа использует этот handle для поиска окна предыдущего экземпляра и его активации.
Вот разбивка кода:
Первая секция включает в себя необходимые единицы для работы с Windows и Delphi.
Тип PHWND определяется как указатель на тип HWnd, который представляет handle окна в Windows.
Функция EnumWndProc объявляется, которая принимает два параметра: H (handle окна) и P (указатель на HWnd). Эта функция вызывается для каждого окна в системе, и она проверяет, принадлежит ли окно предыдущему экземпляру приложения.
Если окно принадлежит предыдущему экземпляру, функция вызывает GetClassName, чтобы получить имя класса окна, а затем проверяет, совпадает ли это имя с 'TApplication', которое является основной формой приложения. Если это так, функция устанавливает указатель P в handle H и возвращает 0.
Процедура CheckPrevInst объявляется, которая проверяет, не равно ли hPrevInst 0 (т.е., предыдущий экземпляр был запущен). Если это так, она вызывает EnumWindows, чтобы перечислить все окна в системе, передавая адрес EnumWndProc как функцию обратного вызова. Эта функция ищет handle окна предыдущего экземпляра и активирует его.
Основная часть программы вызывает CheckPrevInst, а затем устанавливает заголовок приложения и создает экземпляр формы с помощью Application.CreateForm. Наконец, программа запускается с помощью Application.Run.
Чтобы реализовать эту функциональность в файле .DPR, вам нужно добавить следующий код:
Обратите внимание, что вам нужно заменить 'ONCEU.PAS' на фактический путь и имя файла единицы вашей формы.
Активизация предыдущего экземпляра вашей программы возможна при помощи переменной hPrevInst, которая содержит дескриптор предыдущего запущенного экземпляра вашей программы, и функции EnumWindows для поиска открытого окна.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.