主程序
注册消息:
m_Msg := RegisterWindowMessage('1111');//返回系统唯一消息号,1111为自定义消息内容
重写消息处理函数
procedure TK9Main.WndProc(var Message: TMessage);
begin
    if Message.msg = m_Msg then
    begin
        ShowMessage(inttostr(message.lparam));
    end;    inherited;end;另外一个应用程序
procedure TFrmFaultRec.ShowMainForm; //打开主模块
var
    strMain_WindowName:string;
    strMain_ClassName:string;
    hHandle_Msg:THandle;
    hHandle_Main:THandle;
begin
    strMain_ClassName :='TK9Main';//主程序类名称
    strMain_WindowName :='K9Main'; //主程序窗口名称    hHandle_Main:=FindWindow(PChar(strMain_ClassName), PChar(strMain_WindowName));    hHandle_Msg:=RegisterWindowMessage('1111'); //注册系统消息,返回系统唯一消息号    SendMessage(hHandle_Main,hHandle_Msg,0,0);
    
end;为什么在ShowMainForm时 主程序 接收不到 消息呢?
请高手指教!

解决方案 »

  1.   

    hHandle_Main:=FindWindow(PChar(strMain_ClassName), PChar(strMain_WindowName
    句柄有没有得到啊。。
      

  2.   

    应该可以找到的啊 
    if hHandle_Main = NULL then 
           showmessage('找不到')
    else
           SendMessage(hHandle_Main,hHandle_Msg,0,0);
    我后来修改过的啊!应该时可以的啊 !但是就是没有反应的 为什么啊?
      

  3.   

    有一点错误:
    主程序
    注册消息:
    m_Msg := RegisterWindowMessage('1111');//返回系统唯一消息号,1111为自定义消息内容
    重写消息处理函数
    procedure TK9Main.WndProc(var Message: TMessage);
    begin
        if Message.msg = m_Msg then
        begin
            ShowMessage(inttostr(message.lparam));
        end;    inherited;end;另外一个应用程序
    procedure TFrmFaultRec.ShowMainForm; //打开主模块
    var
        strMain_WindowName:string;
        strMain_ClassName:string;
        hHandle_Msg:Cardinal;
        hHandle_Main:THandle;
    begin
        strMain_ClassName :='TK9Main';//主程序类名称
        strMain_WindowName :='K9Main'; //主程序窗口名称    hHandle_Main:=FindWindow(PChar(strMain_ClassName), PChar(strMain_WindowName));    hHandle_Msg:=RegisterWindowMessage('1111'); //注册系统消息,返回系统唯一消息号    SendMessage(hHandle_Main,hHandle_Msg,0,0);
        
    end;为什么在ShowMainForm时 主程序 接收不到 消息呢?
    请高手指教!
      

  4.   

    为什么 我得主程序还没有打开 它就可以找到呢?
    也就是说:
    if hHandle_Main = NULL then 
           showmessage('找不到')
    else
           SendMessage(hHandle_Main,hHandle_Msg,0,0);即使主程序没有  打开 也执行 第二条语句 这是为什么呢?
      

  5.   

    1.
    var
      FrmMain: TFrmMain;
    implementation{$R *.dfm}procedure TFrmMain.FormCreate(Sender: TObject);
    begin
      m_Msg := RegisterWindowMessage('1111');
      Application.OnMessage := WndProc;
    end;procedure TFrmMain.WndProc(var Msg: TMsg; var Handled: Boolean);
    begin
        if Msg.message = m_Msg then
        begin
            ShowMessage(inttostr(Msg.lparam));
        end;
    end;end.2.procedure TForm1.Button1Click(Sender: TObject);
    var
        strMain_WindowName:string;
        strMain_ClassName:string;
        hHandle_Msg:THandle;
        hHandle_Main:THandle;
    begin
        strMain_ClassName :='TFrmMain';//主程序类名称
        strMain_WindowName :='FrmMain'; //主程序窗口名称    hHandle_Main:=FindWindow(PChar(strMain_ClassName), PChar(strMain_WindowName));    hHandle_Msg:=RegisterWindowMessage('1111'); //注册系统消息,返回系统唯一消息号    PostMessage(hHandle_Main,hHandle_Msg,0,0);end;没有问题,可以得到消息
      

  6.   

    小虫 哥:
     我得是 两个 不同的应用程序啊!测试的时候是两个不同的 .exe 这样可以吗?
     
     谢谢了! 我还是测试通不过!? 
      

  7.   

    上面的测试就是两个exe用PostMessage可以,但SendMessage不行