解决方案 »

  1.   

    你改了这个常量是没有用的, 即使可以编译, 对于系统来说他始终发送的是这个$113的消息, 要看别人怎么hook的, 是hook消息吗, 对于hook和反hook始终是个长期战争, 劝楼主不要挣扎了, 好好把软件做好.
      

  2.   

    有谁知道,在启动Timer时,会向系统注册一个WM_Timer消息排队,是用什么API注册的消息?
      

  3.   

    Windows.SetTimer 注册Timer
    Windows.KillTimer 注销Timer
    如果别人Hook你的Timer,简单的可以这么避免建立一个线程procedure TTimerThread.Execute;
    begin
      FreeOnTerminate := True;
      While not Terminated do begin
        Sleep(和你的Timer相同的时间等待);
        SendMessage(你的主窗口句柄 , 自定义消息如($111111) , 参数1,参数2);
      end;
    end;然后在你的主窗口响应这个消息就和Timer没区别了,这样拦截SetTimer,KillTimer就没用了,也不会用到WM_TIMER消息了,你还可以在主窗口响应中判断参数1,2是否有效来过滤掉一些非法的消息.
      

  4.   

    干脆自定义消息也不要发了,呵呵:
    SendMessage(你的主窗口句柄 , 自定义消息如($111111) , 参数1,参数2);
    可以替换成
    Synchronize(DoIt);procedure TTimerThread.DoIt;
    begin
      Form1.Timer1Timer(nil);
    end;