![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Убедиться, что приложение (окно) не отвечаетDelphi , Программа и Интерфейс , Приложения чужиеУбедиться, что приложение (окно) не отвечает
Оформил: DeeCo // The Documented way { An application can check if a window is responding to messages by sending the WM_NULL message with the SendMessageTimeout function. Um zu uberprufen, ob ein anderes Fenster (Anwendung) noch reagiert, kann man ihr mit der SendMessageTimeout() API eine WM_NULL Nachricht schicken. } function AppIsResponding(ClassName: string): Boolean; const { Specifies the duration, in milliseconds, of the time-out period } TIMEOUT = 50; var Res: DWORD; h: HWND; begin h := FindWindow(PChar(ClassName), nil); if h <> 0 then Result := SendMessageTimeOut(H, WM_NULL, 0, 0, SMTO_NORMAL or SMTO_ABORTIFHUNG, TIMEOUT, Res) <> 0 else ShowMessage(Format('%s not found!', [ClassName])); end; procedure TForm1.Button1Click(Sender: TObject); begin if AppIsResponding('OpusApp') then { OpusApp is the Class Name of WINWORD } ShowMessage('App. responding'); end; Код, предоставленный для проверки, является функцией, которая отправляет WM_NULL-сообщение в окно с конкретным именем класса, используя функцию SendMessageTimeout. Функция SendMessageTimeout отправляет сообщение в окно и возвращает сразу, не ожидая, пока окно обработает сообщение. Если окно не отвечает в течение указанного периода времени, функция вернет 0. Вот разбивка кода:
Код использует синтаксис Delphi и предназначен для использования в Windows-приложении. Не ясно, что 'OpusApp' на самом деле означает, но, вероятно, это имя класса окна или приложения, которое вы хотите проверить на отзывчивость. Некоторые предложения:
В целом, важно отметить, что проверка отзывчивости с помощью SendMessageTimeout может иметь неожиданные последствия, если не используется осторожно. Например, если приложение не отвечает, но еще имеет открыто окна, вызов SendMessageTimeout может привести к тому, что эти окна станут orphaned и потенциально приведет к краху системы. Вы должны тщательно рассмотреть, является ли это подходящим для вашего конкретного случая использования. В статье описывается способ проверки, отвечает ли приложение (окно) на отправленные сообщения, используя функцию SendMessageTimeout и WM_NULL-направление. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Приложения чужие ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |