请问怎么往一个应用程序中的所有窗口发送消息(例如浏览器,同时打开几个页面)  前提是我没有获取到所有窗口的句柄
我的应用程序是一个 文本文件浏览器,同时打开多个文档进行修改(转码),单个文件修改可以:
::SendMessage(hWnd,WM_COMMAND, parameter, 0);   //hWnd是该文件窗口的句柄,parameter为参数。而我想在没有获取所有窗口句柄下,现实所有窗口同时实现该命令。 请问有没有好的方法?

解决方案 »

  1.   

    hWnd = HWND_BROADCAST
    向系统中所有的顶层窗口发送消息。包括不激活的、不显示、不是自己的、层叠的窗口,但不能发送的其子窗口。
      

  2.   

    不行啊,SendMessage() PostMessage()都不行,是不是要重写消息响应函数??
    我试过往该线程发送消息PostThreadMessage()也不行
      

  3.   

    HWND_BROADCAST只给顶端窗口消息,如果那个顶端窗口自己处理了这个消息,就不会给子窗口了。
    你必须枚举那个窗口的子窗口,给具体的句柄发,没有别的办法。
    不过如果你想控制浏览器,建议用COM接口,消息有很多局限,很多功能实现不了。
    PostThreadMessage肯定不行,不能跨进程发线程消息。
      

  4.   

    Bokutake:
         请问枚举子窗口,有什么函数可以调用呢? 其实我只是具体浏览器,我做的是在notepad++源码基础上修改,希望转码时,实现所有打开文档转码。 我只能获取到当前视图窗口的句柄。 我应该怎么做才能获取其余的窗口句柄呢?
      

  5.   

    BOOL EnumChildWindows(
      HWND hWndParent,         // handle to parent window
      WNDENUMPROC lpEnumFunc,  // pointer to callback function
      LPARAM lParam            // application-defined value
    );