因工作需要,要对一个cmd常开窗口进行监控,防止自动退出,而且为防止cmd程序卡死,最好定期重启。
下面的函数是用于通过cmd窗口上的内容模糊查询已打开的所有窗口。返回找到几个窗口。
function TForm2.find(name: string): Integer;
var
H_window,hWndClose:HWND;
Text:array[0..255] of char;
i:integer;
begin
//memo1.Clear;
i:=0;
H_window:=GetWindow(Handle,GW_HWNDFIRST);
While H_window<>0 do
begin
if GETWindowText(H_window,@text,255)>0 then
if pos(name,text)<>0 then
begin
Memo1.Lines.Add(formatDateTime('YYYY-MM-DD hh:mm:ss',Now()));
i:=i+1;
end;
H_window:=GetWindow(H_Window,GW_HWNDNEXT);
end;
Result:=i;
end;
下面的函数是关闭cmd窗口用的。
function TForm2.find_stop(name: string): Integer;
var
H_window,hWndClose:HWND;
Text:array[0..255] of char;
i:integer;
begin
//memo1.Clear;
i:=0;
H_window:=GetWindow(Handle,GW_HWNDFIRST);
While H_window<>0 do
begin
if GETWindowText(H_window,@text,255)>0 then
if pos(name,text)<>0 then
begin
//Memo1.Lines.Add(StrPas(text));
Memo1.Lines.Add(formatDateTime('YYYY-MM-DD hh:mm:ss',Now()));
SendMessage(H_window,WM_CLOSE,0,0);
i:=i+1;
end;
H_window:=GetWindow(H_Window,GW_HWNDNEXT);
end;
//if i>1 then
Result:=i;
end;