jak w temacie...
otoz mam sobie program i nazywa sie on zalozmy program.exe ktory sie czesto zawiesza... jak sprawdzic czy ten program nie odpowiada a jesli nie odpowiada to go zrestarotowac ???
wysyłasz do niego przez sendmessage jakiś komunikat... jak nie odpowie po sekundzie to go restart!
wysyłasz do niego przez sendmessage jakiś komunikat... jak nie odpowie po sekundzie to go restart!
a moglbys to jakos mi na polski powiedziec :P bo ja nie kapuje :D ehehe jak postmessage i jak spr czy odp czy nie ???
Możesz zrobić tak:
W programie, który może się przywiesić:
const
MY_MSG = 12345; // twoja unikalna wiadomość
{...}
private // albo public... nie ma znaczenia
procedure MyMessage(var Msg: TMessage); message MY_MSG;
{...}
procedure TForm.MyMessage(var Msg: TMessage);
begin
// progs otrzymał twoją wiadomość i odpowiada na nią
PostMessage(Msg.WParam, MY_MSG, Handle, 0); // jako wParam możesz podać Handle tego okna jakbyś chciał go wkorzystać potem, ale nie musisz
end;
W programie, który sprawdza przywieszkę:
const
MY_MSG = 12345; // TAKA SAMA wiadomość jak w poprzednim progsie
{...}
private
procedure MyMessage(var Msg: TMessage); message MY_MSG;
{...}
procedure TForm.MyMessage(var Msg: TMessage);
begin
// dostałeś odpowiedź, więc nie jest przywieszony
end;
procedure TForm.Button1Click(Sender: TObject);
var
Hnd: THandle;
begin
Hnd := FindWindow(nil, 'jakies okienko'); // znajdz jakos uchwyt szukanego okna
if Hnd <> 0 then
PostMessage(Hnd, MY_MSG, Handle, 0) // wysylasz swoją wiadomość i jako wParam dajesz Handle tego okna żeby było wiadomo gdzie wysłać odpowiedź
end;
Ciekawe czy sie gdzieś walnąłem :-D
Poza tym poczytaj HELPa :-P
ale chodzi o to ze program ktory sie zatnie nie jest moim programem... zalozmy ze program ktory chce sprawdzac bedzie sie nazywal internetexplorer :P i jak sie zetnie to chce zeby sie wylaczyli juz na wylaczenie znam procke..tylko jak spr czy tamta aplikacja sie zaciela ?? .. rozumiesh ???
torry:
function AppIsResponding(h: HWND): Boolean;
const
{ Specifies the duration, in milliseconds, of the time-out period }
TIMEOUT = 50;
var
Res: DWORD;
begin
if h <> 0 then
Result := SendMessageTimeOut(H,
WM_NULL,
0,
0,
SMTO_NORMAL or SMTO_ABORTIFHUNG,
TIMEOUT,
Res) <> 0
else
ShowMessage('Error');
end;