如何调用单一外部程序?
ProcessStartInfo psi = new ProcessStartInfo( "help.exe ");
Process ps = Process.Start(psi);
在一个按钮的事件里面我调用了一个“help.exe”,显示了一个帮助的flash文件,如何让之后点击这个按钮时让焦点到这个flash文件上来,不再显示更多的帮助文件?
现在的问题是多点一下就多显示一个帮助文件。
------解决方案--------------------//也许是这样
Process[] vProcesses = Process.GetProcessesByName( "help.exe ");
if (vProcesses.Length <= 0)
{
ProcessStartInfo psi = new ProcessStartInfo( "help.exe ");
Process ps = Process.Start(psi);
}
else
{
//ShowWindow(vProcesses[0].MainWindowHandle, SW_SHOW);//API
}
------解决方案--------------------使用singleton模式,在类的构造函数中使用process启动 "help.exe ",并在重复判断时,将help.exe进程主窗口提前
------解决方案--------------------public static void CreateProcess(string fn, string Arguments, MsgCallback Callback)
{
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = fn;
pi.Arguments = Arguments;
pi.UseShellExecute = false;
pi.CreateNoWindow = true;
pi.WindowStyle = ProcessWindowStyle.Hidden;
pi.RedirectStandardOutput = true;
pi.RedirectStandardError = true;
System.Diagnostics.Process p = new Process();
p.StartInfo = pi;
p.Start();
while (!p.HasExited)
{
System.Windows.Forms.Application.DoEvents();
if (Callback != null)
{
string s;
while ((s = p.StandardOutput.ReadLine()) != null)
{
Callback(s);
}
}
p.WaitForExit(100);
}
}
------解决方案--------------------public delegate void MsgCallback(string msg);
------解决方案--------------------up
------解决方案--------------------大哥,你就不能google一下?
这样不就行了:
[DllImport( "user32.dll ", EntryPoint = "FindWindow ")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport( "user32.dll ")]
static extern IntPtr SetActiveWindow(IntPtr hWnd);
[DllImport( "user32.dll ")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
IntPtr DIALOG_HANDLER = FindWindow(null, 进程主窗体名);
if (DIALOG_HANDLER != IntPtr.Zero)
{
SetForegroundWindow(DIALOG_HANDLER);
}