如果程序已经运行的,怎么把窗口前置 winform程序,如果程序运行着,点击按钮做事件处理时隐藏了窗体,然后调用其它程序,当再通过Process或者其它的方式启运这程序,可以带参数的方式启动,判断当前程序是否运行,如果运行就把窗体前置。这里有2个问题一个是窗体如果前置,一个是Process启动exe程序的时候传参数,怎么传,exe程序怎么接收参数。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的要求 this.TopMost = true; 不能用的 要用也得,主要是 Process.Start 方式传参数,怎么接收,还有,看进程是否有当前进程,如果有就前置 Process可以帮你达到,具体看你怎么设置process的startinfo了Process p = new Process();//换你自己的p.StartInfo.FileName = @"lsbuild\lsbuild.exe";//换你自己的p.StartInfo.Arguments = string.Format("edb2lcl /o " + " \"" + targetPath + "\"" + " \"" + edbFile + "\"");p.StartInfo.UseShellExecute = false;p.StartInfo.CreateNoWindow = true;p.Start();p.WaitForExit(); http://www.bitscn.com/pdb/dotnet/200701/88887.html /// <summary> 概述:应用程序扩展类。 /// </summary> public static class ProgramEx { /// <summary> 概述:表示应用程序重启的参数。 /// </summary> public const string RestartArgument = "RESTARTMYSELF"; /// <summary> 该函数设置由不同线程产生的窗口的显示状态。 /// </summary> /// <param name="hWnd">窗口句柄</param> /// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。</param> /// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。</returns> [DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); /// <summary> 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。 /// </summary> /// <param name="hWnd">将被激活并被调入前台的窗口句柄。</param> /// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。</returns> [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); private const int WS_SHOWNORMAL = 1; /// <summary> 概述:判断当前应用程序是否唯一实例。倘若不是,显示已存在的实例。 /// </summary> public static bool UniqueInstance() { return UniqueInstance(true); } /// <summary> 概述:判断当前应用程序是否唯一实例。并指示当非唯一时,是否显示已存在的实例。 /// </summary> public static bool UniqueInstance(bool showNo) { var instance = RunningInstance(); if (instance == null) return true; else HandleRunningInstance(instance); return false; } /// <summary> 概述:获取正在运行的实例,没有运行的实例返回【null】。 /// </summary> private static Process RunningInstance() { Process current = Process.GetCurrentProcess(); foreach (Process process in Process.GetProcesses()) //查找相同名称的进程 { if (process.Id != current.Id && process.ProcessName == current.ProcessName && process.MainModule.FileName == current.MainModule.FileName) { return process; } } return null; } /// <summary> 概述:显示已运行的程序。 /// </summary> private static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //显示,可以注释掉 SetForegroundWindow(instance.MainWindowHandle); //放到前端 } /// <summary> 概述:重启当前应用程序。 /// </summary> public static void RestartApplication() { // Get the parameters/arguments passed to program if any string arguments = RestartArgument; string[] args = Environment.GetCommandLineArgs(); for (int i = 1; i < args.Length; i++) // args[0] is always exe path/filename arguments += " " + args[i]; // Restart current application, with same arguments/parameters Application.Exit(); System.Diagnostics.Process.Start(Application.ExecutablePath, arguments); } /// <summary> 概述:判断当前应用程序是否属于重启状态。 /// </summary> public static bool IsRestart(string[] args) { return (args != null && args.Length > 0 && args[0] == ProgramEx.RestartArgument); } } Main方法可以写成static void Main(string[] args){}args就是参数了 stream 怎么转成 struct对象 如何过滤数据库表中的Html标记? 如何实现Winform的自动更新? 做图书添加,可一直不成功,不知怎么办?以下是实现代码,望各位帮帮忙 大量数据显示问题 TcpListener是不是每次只能接受一个连接啊?? 关于这样的短信网站开发求教!(asp.net c#)恳请指教! 高手帮忙 C#里怎么获得一个窗体除了标题栏和边框的内部部分的位置和大小(知道窗体句柄) 请问在TextBox的事件中KeyPress,KeyDown,KeyUp的根本区别是什么,能说的具体点吗? 求正则表达式 vs2008怎么关闭保存时自动编译。
//换你自己的
p.StartInfo.FileName = @"lsbuild\lsbuild.exe";
//换你自己的
p.StartInfo.Arguments = string.Format("edb2lcl /o " + " \"" + targetPath + "\"" + " \"" + edbFile + "\"");
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;p.Start();
p.WaitForExit();
/// </summary>
public static class ProgramEx
{
/// <summary> 概述:表示应用程序重启的参数。
/// </summary>
public const string RestartArgument = "RESTARTMYSELF"; /// <summary> 该函数设置由不同线程产生的窗口的显示状态。
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。</param>
/// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。</returns>
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
/// <summary> 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。
/// </summary>
/// <param name="hWnd">将被激活并被调入前台的窗口句柄。</param>
/// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。</returns>
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1; /// <summary> 概述:判断当前应用程序是否唯一实例。倘若不是,显示已存在的实例。
/// </summary>
public static bool UniqueInstance() { return UniqueInstance(true); } /// <summary> 概述:判断当前应用程序是否唯一实例。并指示当非唯一时,是否显示已存在的实例。
/// </summary>
public static bool UniqueInstance(bool showNo)
{
var instance = RunningInstance();
if (instance == null) return true;
else HandleRunningInstance(instance); return false;
} /// <summary> 概述:获取正在运行的实例,没有运行的实例返回【null】。
/// </summary>
private static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcesses()) //查找相同名称的进程
{
if (process.Id != current.Id &&
process.ProcessName == current.ProcessName &&
process.MainModule.FileName == current.MainModule.FileName)
{
return process;
}
}
return null;
} /// <summary> 概述:显示已运行的程序。
/// </summary>
private static void HandleRunningInstance(Process instance)
{
ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //显示,可以注释掉
SetForegroundWindow(instance.MainWindowHandle); //放到前端
} /// <summary> 概述:重启当前应用程序。
/// </summary>
public static void RestartApplication()
{
// Get the parameters/arguments passed to program if any
string arguments = RestartArgument;
string[] args = Environment.GetCommandLineArgs();
for (int i = 1; i < args.Length; i++) // args[0] is always exe path/filename
arguments += " " + args[i];
// Restart current application, with same arguments/parameters
Application.Exit();
System.Diagnostics.Process.Start(Application.ExecutablePath, arguments);
} /// <summary> 概述:判断当前应用程序是否属于重启状态。
/// </summary>
public static bool IsRestart(string[] args)
{
return (args != null && args.Length > 0 && args[0] == ProgramEx.RestartArgument);
}
}
static void Main(string[] args)
{
}
args就是参数了