我要用钩子做一个检测某个窗口的小程序!请大家帮帮忙哈!(200分)

  • 主题发起人 主题发起人 yanluomeng
  • 开始时间 开始时间
Y

yanluomeng

Unregistered / Unconfirmed
GUEST, unregistred user!
我有个应用程序(窗口标题为:giver)经常会自动关闭现在我想做一个程序,自动检测,如果检测到应用程序关闭了,那么重新启动他(D:/giver).麻烦大家帮帮忙哈,给出可运行的源程序的大哥,送全分
 
晕 ,帖子沉的好快大家来帮忙哈
 
来个超级easy的
program WatchDog;

//{$APPTYPE CONSOLE}
uses
Windows,SysUtils;
var
handle:integer;
check :boolean; //便于以后的热键扩展
const classname='TForm_Main'; //假设你的exe的主窗体的名字
begin
check := true;
while (check) do
begin
handle:=findwindow(classname,nil);
if handle=0 then
begin
winexec('Pro.exe',SW_Normal);//你检测的外部程序的名字
end;
Sleep(2000);
end;
end.

这段代码是利用检测窗体名字的方法来检测exe是否在运行的,


上面是我以前曾经用过的,
你把 handle:=findwindow(classname,nil); 改成超找窗体名字是giver的,
应该是 findwindow(nil,'giver')吧,你试一下看看
 
呵呵,大哥谢谢了,但是我想不用定时器;

如果要想检测到窗口的关闭系统信息,应该怎么弄呢
 
晕大家帮忙来看看哈
 
写个系统钩子,在钩子函数中
Findwindow到你的窗口再针对它的WM_CLOSE方法,就要以做你想做的。
 
呵呵 ,可以发出实例代码么
 
procedure TForm1.checkServer();
begin
check:=true;
while (check) do
begin
handle:=FindWindow(nil,'Form22222');
if handle=0 then
begin
winexec('E:/jxsf/project/hook/Project11.exe',SW_Normal);//你检测的外部程序的名字
end;
Sleep(2000);
end;
end;



以上这段代码有什么错误啊
为什么会出现一下错误提示呢?
Build
[Error] Unit1.pas(46): Cannot assign to a read-only property
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
46行是: handle:=FindWindow(nil,'Form22222');
 
看看我写的代码,也许对你有帮助
dll程序:
library MeteorHook;
uses
Windows,Messages,Dialogs;
var
MouseHook:HHook;
procedure FindMeteorWindow;
var
window:Longint;
buffer:array[0..50] of char;
startWindow:Longint;
begin
window:=GetForeGroundWindow;
GetClassName(window,buffer,10);
if buffer<>'#32770' then exit;
if FindWindowEx(window,0,'Button','储存帐号密码')=0 then exit;
if FindWindowEx(window,0,'Button','开始游戏')=0 then exit;

ShowMessage('流星蝴蝶剑正在维护中,请稍候再玩');
SendMessage(window,WM_CLOSE,0,0);
end;
function HookMouse(iCode: Integer; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
begin
if wparam=WM_LBUTTONDOWN then FindMeteorWindow;

Result := CallNextHookEx(MouseHook, iCode, wParam, lParam);
end;
procedure HookOn;
begin
MouseHook:=SetWindowsHookEx(WH_mouse, HookMouse, HInstance, 0);
end;
procedure HookOff;
begin
UnHookWindowsHookEx(MouseHook);
end;
exports
HookOn,
HookOff;
begin
end.
主程序
program Main;
uses
Windows,Messages,Dialogs;
var Msg : TMsg;
procedure HookOn ; stdcall; external 'MeteorHook.dll';
procedure HookOff ; stdcall; external 'MeteorHook.dll';

begin
HookOn;
while GetMessage(Msg, 0, 0, 0) do ;
HookOff;
end.
 
呵呵谢谢ff_ff了,你的代码我收藏了,但是我对钩子不熟悉,请问下如何捕获指定窗口的关闭时间呢
 
呵呵ff_ff能简单说下你程序的功能么
 
用鼠标钩子捕获鼠标左键消息.寻找窗口,然后向这个窗口发送关闭消息.
许多功能没写,比如:如何在点击开始按钮才关闭窗口.
我这个是只要点击左键,窗口就关闭了.
有没有解决的方法.
 
顶...............
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部