to qimini:
不同。
有三种情况:进程内部件、进程外部件以及直接的另外程序的一个窗口。

解决方案 »

  1.   

    从API的层次上看,只要能得到窗口的HWND,就可以利用API对它加以控制。
    (通常使用的是FindWindow和FindWindowEx得到HWND)。
    在.NET里,我还没有发现有将一个HWND窗口句柄attach到一个Form对象的方法,所以我想PInvoke调用API可能是唯一的办法。
      

  2.   

    对于不是一个进程的窗口,要看你是进行什么操作,实际上是不能够对不是一个进程的窗口进行任何操作的,但是ms为了跟16位的windows程序兼容,所以一些以前有的窗口操作(比如WM_SETTEXT,WM_GETTEXT等消息处理),是可以的,但是一些新版本的操作就不可以了。
    同时,这些操作一定要通过调用SendMessage的API来实现,用mfc是不可以的
      

  3.   

    可以使用SendMessage来发送消息啊,具体的消息可以在Win32SDK中找到:)
      

  4.   

    sendmessage需要捕获窗体的句柄
    findwindow试试
      

  5.   

    好像vc++的mfc的cwnd就提供一个cwnd::fromHwnd()的函数实现这个功能
      

  6.   

    控制?你想怎么控制,外部窗体,你的意思是说那个窗体是第三方的吗?如果是,那你除了标准的Windows消息以外,只能用spy看看了,看看有没有什么特别的消息激发特别的动作,然后自己封装这样的消息发送给它;如果外部窗体是自己的,那么同样,除了标准的windows消息,你还可以自定义消息去激发自定义的动作。你说呢?
      

  7.   

    System.Windows.Form.Control.FromHandle()函数可以用于从一个HWND来生成一个Control对象(然后可以强制转换成Form对象)。但是,FromHandle()方法(包括NativeWindow.FromHandle方法)的使用有一个限制,即FromHandle()只能用于与调用者处于同一进程的Win32窗口对象(包括窗口、按钮等)。在跨进程的情况下,FromHandle()总是返回null。因此,正如qqchen所说的,对于其他进程中的窗口对象,是不能用FromHandle()来创建Form对象的。你可以用P/Invoke,Win32 API仍然可以用。
    Hogwarts - S(u)ddenly dis@ppeared...

    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。