procedure TMyThread.Execute;
begin
FreeOnTerminate := False;
while not Terminated do
begin
SendMessage($00A30AA8, WM_SETTEXT, 0,Integer(PChar('消息'));//这一句不执行,在其它Exe程序中会执行
writeLog(FormatDateTime('yyyy-mm-dd hh:mm:ss', Now));//写日志,这一句却执行。
Sleep(2000);
end;
end;
begin
FreeOnTerminate := False;
while not Terminated do
begin
SendMessage($00A30AA8, WM_SETTEXT, 0,Integer(PChar('消息'));//这一句不执行,在其它Exe程序中会执行
writeLog(FormatDateTime('yyyy-mm-dd hh:mm:ss', Now));//写日志,这一句却执行。
Sleep(2000);
end;
end;
或者把SendMessage放入某函数中,再用Synchronize调用这一函数
关键是同样的语句,在普通的EXE程序中就会运行,在NT服务程序中运行就没效果。
PostThreadMessage 最多
偶尔可能用PostMEssage
总之,尽量用非阻塞的
在普通的桌面程序就正常
服务程序默认不与桌面程序交互的!
你用ShowMessage这类的,一样没有效果的!你的服务程序必需能与桌面交互的,才有效果的!关键API:
OpenWindowStation
SetProcessWindowStation
OpenDesktop
SetThreadDesktop设置线程为Default Desktop,这样SendMessage,ShowMessage才能有效
刘老大,能不能讲具体一点呀?谢谢。
谢谢大家了。