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;

解决方案 »

  1.   

    用PostMessage吧。
    或者把SendMessage放入某函数中,再用Synchronize调用这一函数
      

  2.   

    对了,这个线程是在NT服务程序中创建的。
    关键是同样的语句,在普通的EXE程序中就会运行,在NT服务程序中运行就没效果。
      

  3.   

    看情况,一般用
    PostThreadMessage 最多
    偶尔可能用PostMEssage 
    总之,尽量用非阻塞的
      

  4.   

    我是在一个NT服务里用的。不管是用PostThreadMessage还是PostMEssage,都不行。
    在普通的桌面程序就正常
      

  5.   

    http://community.csdn.net/Expert/topic/4394/4394521.xml?temp=.2989008
      

  6.   

    非常的简单!
    服务程序默认不与桌面程序交互的!
    你用ShowMessage这类的,一样没有效果的!你的服务程序必需能与桌面交互的,才有效果的!关键API:
    OpenWindowStation
    SetProcessWindowStation
    OpenDesktop
    SetThreadDesktop设置线程为Default Desktop,这样SendMessage,ShowMessage才能有效
      

  7.   

    TO: ly_liuyang(Liu Yang LYSoft http://lysoft.7u7.net) 
      刘老大,能不能讲具体一点呀?谢谢。
      

  8.   

    搞定了,就是把Service的Interactive 设置为 True即可。
    谢谢大家了。