应用程序中有一个Mainform,在一个线程中我想给Mainform发一个消息,我是用FindWindow(null, "title");找到mainform的handle,然后调用PostMessage给Mainform发送一个消息的。但当应用程序中有消息提示对话框弹出时,因为消息对话框的title和Mainform的title是一样的,所以我上面FindWindow得到的句柄就不是Mainform的句柄,而是得到了消息对话框的句柄。这样就不能正确地把一个消息发送给Mainform。如何才能准确地得到MainForm的句柄????
高人帮忙,不胜感激。

解决方案 »

  1.   

    把对话框和MainForm的title设置成不一样??
      

  2.   

    FindWindowEx看看行不行或者用EnumWindows
      

  3.   

    把你的MainForm的Handle.GetHashCode()记录一下,你在找到窗体句柄的时候,进行一下判断,看看。
      

  4.   

    程序中我的Mainform的类名是Main,Findwindow函数的第一个参数若指定为“Main”则找不到handle,我用spy++查看,class这一项的值是WindowsForms10.Window.8.app.0.b7ab7b,为何不是Main?如果能在程序中得到WindowsForms10.Window.8.app.0.b7ab7b,我的查找的时候就可以指定FindWindow的第一个参数了?
      

  5.   

    如果你的程序窗体MainForm 你可以通过进程的 System.Diagnostics.Process.MainWindowHandle 来判断...
      

  6.   

    呵呵
    我试验过用socket来玩
    用一个窗口给另一个窗口发送消息
    可以实现的
    用udp
    绑定到同一端口
    主窗口接收到信息后MessageBox.Show()
      

  7.   

    太麻烦了,如果是在同一进程中,可以用这个:using System.Diagnostics;
    ....
                Process current = Process.GetCurrentProcess();
                IntPtr mainFormHandle = current.MainWindowHandle;