调用第三方软件A,最小化时,只有在任务栏的有个图标.想让他显示到桌面的最顶层,激活。
显示调用ShowWindow(hWnd1, 1),A窗体可以显示了,但是A窗体里面除了菜单栏可以使用外,其他的功能,按钮,全都不能正常显示,感觉像是假死一样。
在任务栏的小图标还可以使用,要退出在重新登录A窗体才正常,
我用了UpdateWindow(hWnd1);InvalidateRect(hWnd1, (IntPtr )0, true);都不起作用。
网上也有要重新创建一个,可太复杂了,还需要类名和名称还有一些参数坐标等等.
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public extern static int ShowWindow(IntPtr hDlg, short State);
显示调用ShowWindow(hWnd1, 1),A窗体可以显示了,但是A窗体里面除了菜单栏可以使用外,其他的功能,按钮,全都不能正常显示,感觉像是假死一样。
在任务栏的小图标还可以使用,要退出在重新登录A窗体才正常,
我用了UpdateWindow(hWnd1);InvalidateRect(hWnd1, (IntPtr )0, true);都不起作用。
网上也有要重新创建一个,可太复杂了,还需要类名和名称还有一些参数坐标等等.
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public extern static int ShowWindow(IntPtr hDlg, short State);
解决方案 »
- 怎么将两句条件判断语句写成一句啊
- [讨论帖]C#的Graphics真的就只能画图不能删图吗???
- 引用“system.management”提示缺少引用问题
- 数学好的,喜欢算法的朋友帮帮忙,我这有一递增的算法不会写啊,头都飞了想的!
- 如何在c#环境下将DataTable导入sql数据库中
- ■■■■■■■■■■outlook文件夹默认放在我的文档里,占用空间怎么办
- 关于textBox的问题
- 求助,VS高手!我的VS用不得!
- 关于spread的问题,急!!
- 我在datagrid中移动里面的单元格.当我移到下一个单元格时,如何获取上一次获得焦点的单元格
- 关于跨页传对象。用哪种方法好,Session不行,占资源,Cookie,有大小限制,Server.Transfer....
- 求教一个取值方法
没有死循环 ,就是一个ShowWindow函数,我先把窗体最小化了,只有在任务栏显示,然后用ShowWindow,把他给显示出来
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public extern static int ShowWindow(IntPtr hDlg, short State);//方法
IntPtr hWnd1 = (IntPtr)0;
hWnd1 =FindWindow("tSkMainForm.UnicodeClass", null);//取得主窗体的句柄
int intaa =ShowWindow(hWnd1, 1);
public static extern IntPtr SetActiveWindow(IntPtr hWnd);
没有任何的反应,是不是我哪错误了呢
IntPtr hWnd1 = (IntPtr)0;
hWnd1 = FindWindow("tSkMainForm.UnicodeClass", null);
SetActiveWindow(hWnd1);
欢迎使用 CSDN 小秘书
http://blog.csdn.net/whowhen21
**********************************************[/align]
如果是这样,在ShowWindow(hWnd1, 1)之后再加一次ShowWindow(hWnd1, 5)试一下,或者枚举其所有控件都show一次。
public class WindowChange
{
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
private const int SW_HIDE=0; //常量,隐藏
private const int SW_SHOWNORMAL = 1; //常量,显示,标准状态
private const int SW_SHOWMINIMIZED = 2; //常量,显示,最小化
private const int SW_SHOWMAXIMIZED = 3; //常量,显示,最大化
private const int SW_SHOWNOACTIVATE = 4; //常量,显示,不激活
private const int SW_RESTORE = 9; //常量,显示,回复原状
private const int SW_SHOWDEFAULT = 10; //常量,显示,默认
public static void ToChange(IntPtr p, bool isboolean)
{
if (isboolean)
{
ShowWindowAsync(p, SW_SHOWNORMAL);
}
else
{
ShowWindowAsync(p, SW_HIDE);
}
}
}
ShowWindowAsync 还是ShowWindow一样,出现假死,
菜单栏,还是可以显示,但是里面的窗体,假死状态,看不见里面的所有的按钮功能。
尝试过Show其他软件的窗体吗?
我自己测试无问题。
唯独现在这个第三方软件的窗体比较复杂,里面的窗体控件多了一些。调用显示时,除了菜单控件可以以为,别的都没显示正常。
说明
与ShowWindow相似,只是这时的ShowWindow命令会投递到指定的窗口,然后进行异步处理。这样一来,就可控制从属于另一个进程的窗口的可视情况。同时无须担心另一个进程挂起的时候,自己的应用程序也会牵连其中
1.有朋友说用下面的方法,可我感觉不是很对,因为他是在打开的窗体执行事件
protected override void WndProc(ref Message m )
{
switch (m.Msg)拦截这个消息
{
case MSG//msg 替换成最小化消息:
此处添加是窗体置顶的实现函数 WINapi有 自己可以查下
break;
}
base.WndProc(ref m);//系统创建
}
2.看来只能用取系统托盘的图标句柄,然后双击了