c#单一程序运行续-最小化后显示
来源:互联网 发布:wps表格怎么筛选数据 编辑:程序博客网 时间:2024/06/01 18:34
程序最小化后,再点击程序,程序最大化。
static class Program
{
[DllImport("user32.dll ", CharSet = CharSet.Unicode)]
public static extern IntPtr PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
[DllImport("User32.dll ", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);//关键方法
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);//关键方法
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
//判断之前是否已经打开了相同的进程
//new Bestzone.MIS.Report.F1BookContainer();
IntPtr handle;
IntPtr ishandle = new IntPtr(0);
handle = FindWindow(null, "集中控制系统");
if (handle == ishandle)
{
handle = FindWindow(null, "集中控制系统-车身控制");
}
if (handle == ishandle)
{
handle = FindWindow(null, "集中控制系统-配电监测");
}
if (handle == ishandle)
{
handle = FindWindow(null, "集中控制系统-环境监控");
}
if (handle == ishandle)
{
handle = FindWindow(null, "集中控制系统-视频监测");
}
bool alreadyExist = false;
try
{
System.Diagnostics.Process curP = System.Diagnostics.Process.GetCurrentProcess();
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process p in ps)
{
if (p.ProcessName.Equals(curP.ProcessName) && p.Id != curP.Id)
{
alreadyExist = true;
}
}
}
catch (System.PlatformNotSupportedException ex) { ex.ToString(); }
catch (System.InvalidOperationException ex) { ex.ToString(); }
//如果已经存在,则放弃本进程
if (alreadyExist)
{
MessageBox.Show("该程序正在!");
ShowWindow(handle, 3);
return;
}
Application.Run(new Form1());
}
//===============================================================
FindWindow()函数的用法。要在C#里使用该API,写出FindWindow()函数的声明:
[DllImport("coredll.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较容易得到的,如"计算器",所以搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如"记事本",如果打开的文件不同,窗口标题也不同,这时使用窗口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该窗口的句柄,否则返回0。 看例子
IntPtr ParenthWnd = new IntPtr(0);
ParenthWnd = FindWindow(null,"Word Mobile");
//判断这个窗体是否有效
if (ParenthWnd != IntPtr.Zero)
{
MessageBox.Show("找到窗口");
}
else
MessageBox.Show("没有找到窗口");
注:不知道第一个参数应该怎么用,查了资料也试验过都不好用,谁知道“窗口的类”是什么可以告诉我。学习下。
//===============================================================[DllImp
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
函数功能:该函数设置指定窗口的显示状态。
参数:
hWnd:窗口句柄。
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。
SW_MIOE:隐藏窗口并激活其他窗口。
SW_MAXIMIZE:最大化指定的窗口。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其最小化。
SW_SHOWMINNOACTIVATE:窗口最小化,激活窗口仍然维持激活状态。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。
SW_SHOWNOMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。
返回值:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。
备注:应用程序第一次调用ShowWindow时,应该使用WinMain函数的nCmdshow参数作为它的nCmdShow参数。在随后调用ShowWindow函数时,必须使用列表中的一个给定值,而不是由WinMain函数的nCmdSHow参数指定的值。
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
- c#单一程序运行续-最小化后显示
- C#程序单一运行
- c# 单一程序运行
- 窗口最小化后,可在另一程序中点击程序图标,让程序显示出来,唯一程序运行
- 程序最小化后台运行
- C#控制台程序启动后最小化或者隐藏小黑板
- C# 托盘程序 实例 双击显示窗体,最小化到托盘
- C# 托盘程序 实例 双击显示窗体,最小化到托盘
- [Java]最小化后显示组件
- 窗口最小化后任务栏中不显示,将下面代码保存为vbs格式再运行
- MFC程序最小化托盘显示
- Qt程序最小化运行,还原后窗体不刷新的问题解决
- C#记录程序运行时间记录显示
- C#记录程序运行时间记录显示
- c# 程序最小化到系统托盘
- Windows下实现程序单一运行
- 让程序以单一实例运行
- c#中点击最小化时最小化到托盘后台运行
- Qt中文乱码问题解决办法【转】
- Destoon 多表查询
- C++拷贝构造函数(深拷贝,浅拷贝)
- 关于Mstar手机开发中关于对flash实际空间大小的简单说明
- 在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails
- c#单一程序运行续-最小化后显示
- 网络编程之socket常用接口
- C++Primer读书笔记(三)
- Tomcat全攻略
- UDP协议TCP/IP协义的区别
- 开源云计算系统Hadoop核心部件与Google的对应关系
- OpenGL 在Windows系统中显示文字
- AD中FSMO五大角色的介绍及操作(转移与抓取)
- 学习shell