日期:2014-05-20  浏览次数:20802 次

如何激活已有的应用程序?
如何判断并且激活已有的应用程序?
比如打开了notepad,再次打开是判断是否打开了,并激活。

if(notepad已经打开)
{
      激活已经打开的notepad
}
else
{
      打开notepad
}
谢谢!

------解决方案--------------------
// 已经有一个实例在运行了,激活原已启动的程序并且退出本程序,这个列子是常用的程序单启动,如果已经有实例存在,则激活原实例.楼主也可以用FindWindow来寻找特定标题的程序.

[DllImport( "user32.dll ")] private static extern bool
SetForegroundWindow(IntPtr hWnd);
[DllImport( "user32.dll ")] private static extern bool ShowWindowAsync(IntPtr
hWnd, int nCmdShow);
[DllImport( "user32.dll ")] private static extern bool IsIconic(IntPtr hWnd);
// 消息函数
[DllImport( "user32.dll ",EntryPoint= "PostMessageA ")]
public static extern bool PostMessage( IntPtr hWnd, int Msg, int wParam, int lParam );


// 寻找已运行实例并取得其句柄
Process ThisProc = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(ThisProc.ProcessName);
int n;
for(n=0; n <processes.Length; n++)
if( processes[n].Id != ThisProc.Id ) break;
IntPtr hWnd = processes[n].MainWindowHandle;
PostMessage( hWnd, WM_MYWINDOW_MSG,WM_MYWINDOW_SHOW, 0 );


// 如果原实例窗体已最小化那么要先把它还原
if( IsIconic(hWnd) )
ShowWindowAsync(hWnd, 9); // 9就是SW_RESTORE标志,表示还原窗体
// 激活已启动的实例
SetForegroundWindow(hWnd);