如果我一个程序已经启动了
再启动的时候,就提示我已经启动了,然后把启动的那个窗口正常的显示给我
如下一段代码,有时候好使
但是如果前面启动的那个程序被最小化成系统托盘了,这段程序就不能把它的窗口显示在前面了
关键是IsIconic是怎么农的呢?
我做系统的托盘的时候,好像没有碰到
string proc=Process.GetCurrentProcess().ProcessName;
MessageBox.Show(proc);
Process[] processes=Process.GetProcessesByName(proc);
if (processes.Length > 1)
{
MessageBox.Show("程序已经启动!!", "Constants.MESSAGEBOX_TITLE");
Process p = Process.GetCurrentProcess();
int n = 0;
if (processes[0].Id == p.Id)
{ n = 1; } IntPtr hWnd = processes[n].MainWindowHandle;
MessageBox.Show(hWnd.ToString());
ShowWindowAsync(hWnd, SW_SHOWNORMAL);
//if (IsIconic(hWnd))
{
ShowWindowAsync(hWnd, SW_RESTORE);
} SetForegroundWindow(hWnd); return;
}
再启动的时候,就提示我已经启动了,然后把启动的那个窗口正常的显示给我
如下一段代码,有时候好使
但是如果前面启动的那个程序被最小化成系统托盘了,这段程序就不能把它的窗口显示在前面了
关键是IsIconic是怎么农的呢?
我做系统的托盘的时候,好像没有碰到
string proc=Process.GetCurrentProcess().ProcessName;
MessageBox.Show(proc);
Process[] processes=Process.GetProcessesByName(proc);
if (processes.Length > 1)
{
MessageBox.Show("程序已经启动!!", "Constants.MESSAGEBOX_TITLE");
Process p = Process.GetCurrentProcess();
int n = 0;
if (processes[0].Id == p.Id)
{ n = 1; } IntPtr hWnd = processes[n].MainWindowHandle;
MessageBox.Show(hWnd.ToString());
ShowWindowAsync(hWnd, SW_SHOWNORMAL);
//if (IsIconic(hWnd))
{
ShowWindowAsync(hWnd, SW_RESTORE);
} SetForegroundWindow(hWnd); return;
}
基于.Net平台应用程序唯一运行实例实现,
实现分析
http://blog.csdn.net/zhzuo/archive/2006/06/30/857405.aspx
源代码分析
http://blog.csdn.net/zhzuo/archive/2006/07/04/874745.aspx
唉
这些
MessageBox.Show(hWnd.ToString());
ShowWindowAsync(hWnd, SW_SHOWNORMAL);
//if (IsIconic(hWnd))
{
ShowWindowAsync(hWnd, SW_RESTORE);
} SetForegroundWindow(hWnd);
都不要了,写个PostMessage就行了