program TIMER;uses
ExtCtrls, windows, Messages,
classes;Type
TMyTimer = class (TTimer) //继承TIMER类,增加类方法给ONTIMER事件用
private
procedure IONTimer(Sender: TObject);
end;const
WM_MYCLOSE = WM_USER+1111 ; //自定义消息var
Timer: TMyTimer;
AMessage: TMsg;{$R *.res}procedure TMyTimer.IONTimer(Sender: TObject);
begin
SELF.ENABLED:= FALSE;
messagebox(0,'无窗口程序运行中','通知',MB_OK);
halt; //<-------------------------------------此处因为直接使用HALT不安全,想在这里发个自定义退消息,
end; //以便回到消息循环中得到消息后再退出.begin //主函数
Timer:= TMyTimer.Create(nil);
Timer.Interval:= 2000;
Timer.OnTimer:= Timer.IONTimer;
Timer.Enabled:= true;
while GetMessage(aMessage,0,0,0) do //消息循环
begin
TranslateMessage(amessage);
DispatchMessage(aMessage);
end;
Timer.Enabled:= false;
Timer.Free;
Halt(1);
END.请问高手如何在这里发消息给自己啊?不知道怎么取得这个程序的句柄(取TIMER的句柄?)...或者是增加一个句柄...
ExtCtrls, windows, Messages,
classes;Type
TMyTimer = class (TTimer) //继承TIMER类,增加类方法给ONTIMER事件用
private
procedure IONTimer(Sender: TObject);
end;const
WM_MYCLOSE = WM_USER+1111 ; //自定义消息var
Timer: TMyTimer;
AMessage: TMsg;{$R *.res}procedure TMyTimer.IONTimer(Sender: TObject);
begin
SELF.ENABLED:= FALSE;
messagebox(0,'无窗口程序运行中','通知',MB_OK);
halt; //<-------------------------------------此处因为直接使用HALT不安全,想在这里发个自定义退消息,
end; //以便回到消息循环中得到消息后再退出.begin //主函数
Timer:= TMyTimer.Create(nil);
Timer.Interval:= 2000;
Timer.OnTimer:= Timer.IONTimer;
Timer.Enabled:= true;
while GetMessage(aMessage,0,0,0) do //消息循环
begin
TranslateMessage(amessage);
DispatchMessage(aMessage);
end;
Timer.Enabled:= false;
Timer.Free;
Halt(1);
END.请问高手如何在这里发消息给自己啊?不知道怎么取得这个程序的句柄(取TIMER的句柄?)...或者是增加一个句柄...
begin
end;
利用Classes.AllocateHWnd(WndProc);给这个句柄赋值,
然后用一个procedure WndProc(var mess: TMessage);之类的消息处理函数来处理发给这个句柄的消息
program TIMER; uses
ExtCtrls, windows, Messages,
classes; Type
TMyTimer = class (TTimer) //继承TIMER类,增加类方法给ONTIMER事件用
private
procedure IONTimer(Sender: TObject);
end; const
WM_MYCLOSE = WM_USER+1111 ; //自定义消息 var
Timer: TMyTimer;
AMessage: TMsg;
AppHandle: HWND; //<-------{$R *.res} procedure TMyTimer.IONTimer(Sender: TObject);
begin
SELF.ENABLED:= FALSE;
messagebox(0, "无窗口程序运行中 ", "通知 ",MB_OK);
postmessage(AppHandle,WM_MYCLOSE,0,0); //<------发送自定义的退出消息
end; begin //主函数
Timer:= TMyTimer.Create(nil);
Timer.Interval:= 2000;
Timer.OnTimer:= Timer.IONTimer;
Timer.Enabled:= true;
while GetMessage(aMessage,0,0,0) do //消息循环
if aMessage.message = WM_MYCLOSE then break //<------处理自定义消息
else
begin
TranslateMessage(amessage);
DispatchMessage(aMessage);
end;
Timer.Enabled:= false;
Timer.Free;
Halt(1);
END.