已有程序A,要求自己编写程序B,
A的功能:执行程序并,并将自己的主窗体句柄以启动参数的方式传给程序B
问:
 怎么样才能使程序B的窗体是A的窗体的模工窗体,即B不关闭,则无法执操作程序A的窗体。

解决方案 »

  1.   

    我只知道一个API SetParent 
    这种方法把B做成DLL应该好一点
      

  2.   

    a 里面 用 a.showdialog()打开窗体 b 就可以了
      

  3.   

    a 里面 B b=new B();
    b.showdialog()应该就可以满足了
      

  4.   

    SetParent是无法对不同Application的窗口进行设定的。
      

  5.   

    我的想法还是Hook Windows的消息,添加一个CallWnd的Hook,让主窗口接收不到消息,达到类似的效果。
      

  6.   

    打开B程序,在B程序中找到A程序的进程.
    操作A程序的进程,试试可以不.
      

  7.   

    已有程序A,要求自己编写程序B, 
    A的功能:执行程序并,并将自己的主窗体句柄以启动参数的方式传给程序B 
    问: 
     怎么样才能使程序B的窗体是A的窗体的模工窗体,即B不关闭,则无法执操作程序A的窗体。如果a不是.net程序:
    如果a是不能修改的程序,那b只能负责传自己的句柄给他,而模式化打开只能由a负责,如果a原来就不能做到,那b怎么做也没办法
    如果a是能修改的程序,调用API函数SetParent(A的句柄,命令行启动参数传入的b句柄)
    如果a是net程序:
    如果a是不能修改的程序,利用反射取得B的窗口类,生成实例showdialog()
    如果a是能修改的程序,直接引用取得B的窗口类,生成实例showdialog()
      

  8.   

    对了,SetParent有可能是进行融合,比如把窗口setparent到panel上,窗口就嵌入panel了,具体忘了,多试试
      

  9.   

    如果a是net程序: 
    如果a是不能修改的程序,
    说错了,好像也没什么办法
      

  10.   

    WIN32 API SetParent 勉强可以把别的程序设置为本程序的子窗口
    但是
    最严重的移定性很差
    而且
    好像也不支持模式窗口
      

  11.   


    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;using System.Text.RegularExpressions;
    namespace RandScreen
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] arguments)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form2 f2 = new Form2();
                f2.ShowDialog(new ParentForm(arguments[0]));
                f2.Close();
            }
        }
    }
      

  12.   

        public class ParentForm : System.Windows.Forms.IWin32Window
        {        #region IWin32Window 成员
            IntPtr _handel = new IntPtr();
            public IntPtr Handle
            {
                get { return _handel; }
            }
            public ParentForm(long hwnd)
            {
                this._handel = new IntPtr(hwnd);
            }
            public ParentForm(int hwnd)
            {
                this._handel = new IntPtr(hwnd);
            }
            public ParentForm(IntPtr handel)
            {
                this._handel = handel;
            }        #endregion
        }
      

  13.   

    使用Form.ShowDialog的第二个方法,指定父窗口的句柄
    Form.ShowDialog的第二个方法要参数IWin32Window,IWin32Window是一个接口。
    修改程序入口,把Application.Run改成 
               Form2 f2 = new Form2();
                f2.ShowDialog(new ParentForm(arguments[0]));
                f2.Close();
      

  14.   


    不同的程序,先添加引用,然后同上.
       如果需要不在状态栏显示.
     STARTPOSITION属性
     建议:问题通俗点,你看搞的上面的那些个同志有不少的误解题意
    ..我说的是根据他们的判断写的.还有我上面这个