各位大侠:
我有一个EXE程序,运行时窗口是隐藏的(通过“任务管理器”中的“应用程序”也看不到),
请问如何在另外一个EXE中给它发消息?
即使用SendMessage(HWND hWnd,    UINT Msg,    WPARAM wParam,    LPARAM lParam)时,hWnd如何获得?在线等待,谢谢!

解决方案 »

  1.   

    EnumWindow枚举系统的所有窗口,根据标题判断是否是目标窗口
      

  2.   

    你用spy++查看你自己的程序的标题(如果你知道程序的标题就不用麻烦了),然后用FindWindow(NULL,L"YourApplicationTitle");的到你需要的hwnd了。
      

  3.   

    不行啊,我的窗口是隐藏的,通过“任务管理器”中的“应用程序”也看不到,用FindWindow得到的HWND为NULL,还有什么方法吗?
      

  4.   

    用findwindow是对的,如果找不到怀疑你标题打的不准确,建议你换个窗口标题试试。
      

  5.   

    回复楼上的:
    我把窗口设为显示时,用FindowWindow可以找到,但把窗口设为隐藏后,用FindWindow就找不到了,窗口标题是没错的,
    用法:HWND hWnd = ::FindWindow(NULL, L"Form1");
    谢谢!
      

  6.   

    你还是可以使用FindWindow函数获得这个窗口的句柄的
    这个类CMainWindowIterator和这个函数GetWindowText或许对你会有帮助,建议Google一下!
      

  7.   


    sorry,没有用FindWindow搜索过隐藏窗口,查了一下发觉FindWindow是错的,找不到隐藏的。
    HWND g_hwnd;BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam)

    char temp1[255];
    GetWindowTextA(hWnd,temp1,255);//获得窗口标题 if(strcmp(temp1,"Form1") == 0)
    {
    g_hwnd=hWnd;
    return true;
    }
    }  EnumWindows(EnumWindowsProc,0); //得到所有窗口列表 
    这个代码我刚写的,保证能用。
      

  8.   

    如果用FindWindow不行的话,用EnumWindows肯定是可以找到窗口的。
      

  9.   

    你可以EnumWindows完了以后,给每个窗口发一个。
      

  10.   

    用全局的::FindWindow
    或者麻烦点枚举桌面窗口
      

  11.   

    是不是创建窗口的时候你没有指定标题啊,需要在PreCreateWindow中,AfxRegisterClass前将lpszClassName名字设置好。
      

  12.   

    窗口隐藏的话,EnumProcess应该是找不到的,貌似WINDOWS的任务管理器的第一个标签就是这么实现的。
    楼主不妨试试查找进程,通过进程是可以找到的。
      

  13.   

    回复楼上推荐使用EnumWindowsProc及FindWindow的:
    我的EXE程序不是一般的只将窗口设为隐藏,此EXE是C#写的,隐藏的方法为:
     //hide main window
     protected override void SetVisibleCore(bool value)
     {
          base.SetVisibleCore(false);
     }
    ,程序运行时,任务管理器里面只能看到进程,或许只能通过找进程的方法了。
      

  14.   


    请问如何将窗口句柄传给其它EXE,用共享内存吗?
      

  15.   

    程序运行时,任务管理器里面只能看到进程,或许只能通过找进程的方法了。
    =============
    问题是进程和窗口并不存在一一对应的关系,你找到进程之后,如果获取这个进程所属窗口的句柄呢?不管你用什么方法进行窗口隐藏,EnumWindows都是能枚举到窗口的。