![]() |
![]() ![]() ![]() ![]() |
|
Убедиться, что приложение (окно) не отвечает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 | ||||