搜了一下PostMessage:
PostMessage  函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。
  函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
  参数
  hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
  HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。
  NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。
  Msg:指定被寄送的消息。
  wParam:指定附加的消息特定的信息。
  IParam:指定附加的消息特定的信息。
  返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。
  备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数 RegisterwindwosMessage来获得应用程序间通信的独特的消息。
  如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage.SendNotifyMessage,SendMesssgeCallback),消息参数不能包含指针。否则,操作将会失败。函数将再接收线程处理消息之前返回,发送者将在内存被使用之前释放。
HWND hWnd是窗口句柄,可以是:form1、form2或form3等?

解决方案 »

  1.   

    你要给谁发,你就用谁的handle
    当然,得这个窗口有句柄...
      

  2.   

    form1的窗口句柄是form1.handle? 
      

  3.   

    handle不局限于窗体,还可以是组件(带句柄的),开可以是一个类
    procedure WMProcess(var Msg: TMessage); message WM_ MyMessage;
    FWindowHandle := Classes.AllocateHWnd(WMProcess);这个可以创建类的句柄
      

  4.   


    对,正是如此!
    你可以试一下,
    procedure WMProcess(var Msg: TMessage); message WM_ MyMessage; procedure WMProcess(var Msg: TMessage); message WM_ MyMessage; 
    begin
      ShowMessage('Hello World!');
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      PostMessage(Form1.Handle,MyMessage,0,0);
    end;
      

  5.   

    哦,我写错,这样编译应该不通过的!procedure WMProcess(var Msg: TMessage); message WM_ MyMessage; procedure WMProcess(var Msg: TMessage); 
    begin
      ShowMessage('Hello World!');
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      PostMessage(Form1.Handle,MyMessage,0,0);
    end;
      

  6.   

    可以利用PostMessage向某个窗体(form1)的某个组件(Button1)发送form2.close;命令:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      PostMessage(Form1.Handle,form2.close;,0,0);    //Button1不知写在那里?
    end;
      

  7.   

    对于windows来说,任何窗口或组件(含有句柄),都可以作为是一个窗口
    应该是这样的吧?
      

  8.   

    利用PostMessage打开或关闭其它的窗口或组件
      

  9.   

    handle是系统进程的一个标志.每一个窗口,按钮都有对应的handle,你也可以通过findwindow函数取得其他程序的窗口的handle值,然后向他们发消息.
      

  10.   


    procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      PostMessage(Form1.Handle,WM_Close;,0,0);    //Button1不知写在那里? 
    end;