如何设置进程间的模式窗体 已有程序A,要求自己编写程序B,A的功能:执行程序并,并将自己的主窗体句柄以启动参数的方式传给程序B问: 怎么样才能使程序B的窗体是A的窗体的模工窗体,即B不关闭,则无法执操作程序A的窗体。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我只知道一个API SetParent 这种方法把B做成DLL应该好一点 a 里面 用 a.showdialog()打开窗体 b 就可以了 a 里面 B b=new B();b.showdialog()应该就可以满足了 SetParent是无法对不同Application的窗口进行设定的。 我的想法还是Hook Windows的消息,添加一个CallWnd的Hook,让主窗口接收不到消息,达到类似的效果。 打开B程序,在B程序中找到A程序的进程.操作A程序的进程,试试可以不. 已有程序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() 对了,SetParent有可能是进行融合,比如把窗口setparent到panel上,窗口就嵌入panel了,具体忘了,多试试 如果a是net程序: 如果a是不能修改的程序,说错了,好像也没什么办法 WIN32 API SetParent 勉强可以把别的程序设置为本程序的子窗口但是最严重的移定性很差而且好像也不支持模式窗口 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(); } }} 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 } 使用Form.ShowDialog的第二个方法,指定父窗口的句柄Form.ShowDialog的第二个方法要参数IWin32Window,IWin32Window是一个接口。修改程序入口,把Application.Run改成 Form2 f2 = new Form2(); f2.ShowDialog(new ParentForm(arguments[0])); f2.Close(); 不同的程序,先添加引用,然后同上. 如果需要不在状态栏显示. STARTPOSITION属性 建议:问题通俗点,你看搞的上面的那些个同志有不少的误解题意..我说的是根据他们的判断写的.还有我上面这个 关于数据表做计算的问题 未将对象设置到对象的实例 ,什么意思啊 ? SQL语句问题,类似这种模糊查询如何实现? asp.net 读取excel出现奇异问题! 急 .net windows项目中的用户控件之间如何互相调用啊? 怎么显示水晶报表中的每组分页的页码 我是菜鸟~各位路过的帮忙啦~c#留言板问题 为啥datagrid就是不出来东西呢? 怎样把一个C#客户端程序做成可自动更新的 C#的程序这么慢吗? 网上票务查询系统。。。是怎么接连到票中心的数据库的呢? 对于同一网页能申明两个HttpWebRequest 吗?
这种方法把B做成DLL应该好一点
b.showdialog()应该就可以满足了
操作A程序的进程,试试可以不.
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()
如果a是不能修改的程序,
说错了,好像也没什么办法
但是
最严重的移定性很差
而且
好像也不支持模式窗口
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();
}
}
}
{ #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
}
Form.ShowDialog的第二个方法要参数IWin32Window,IWin32Window是一个接口。
修改程序入口,把Application.Run改成
Form2 f2 = new Form2();
f2.ShowDialog(new ParentForm(arguments[0]));
f2.Close();
不同的程序,先添加引用,然后同上.
如果需要不在状态栏显示.
STARTPOSITION属性
建议:问题通俗点,你看搞的上面的那些个同志有不少的误解题意
..我说的是根据他们的判断写的.还有我上面这个