2015年11月12日 星期四

C# 如何偵測現有的應用程式exe,並浮在最上層

 某種情況下我們的應用程式需要呼叫別人的應用程式,如果對方的應用程式已經開啟了,如果我的程式每次呼叫它之後,視窗就會多一個,為了防止這個的情況,所以只好用我的程式偵測該應用程式是否已經存在,如果存在就把該偵測完的應用程式浮在最上面。

一、 如何偵測其他應用程式

以下是示範偵測其應用名稱『application.exe』,只需檔案名稱
  Process[] telerecProcs = Process.GetProcessesByName("application");                    
     if (telerecProcs.Length > 0)
                    {      
                       bringToFront("Application"); //填入視窗的Title Name                      
                    }
                    else
                    {
                        Process sample = new Process();
                        sample.StartInfo.FileName = " application.exe ";
                        sample.Start();
                    }

二、 如何控制其他應用程式,並控制它浮在最上面

l   引用System32 的函式庫
  [DllImport("user32.dll", SetLastError = true)]
  static extern bool BringWindowToTop(IntPtr hWnd);

  [DllImport("user32.dll", SetLastError = true)]
  static extern bool ShowWindow(IntPtr hWnd,  int  nCmdShow);

  [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
  public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);

l   使用的範例
public static void bringToFront(string title)
        {
            // Get a handle to the Calculator application.
            IntPtr handle = FindWindow(null, title);
            // Verify that Calculator is a running process.
            if (handle == IntPtr.Zero)
            {
                return;
            }
            BringWindowToTop(handle); // 將視窗浮在最上層
            ShowWindow(handle, 3); // 將視窗最大化
        }

ü   FindWindow參數title : 視窗的名稱 傳入
ü   BringWindowToTop 參數 handle : (IntPtr) FindWindow 物件傳入
ü   ShowWindow 參數nCmdShow : 0~11不同的視窗行為,大家可以參考https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms633548(v=vs.85).aspx

 希望對大家有所幫助囉謝謝各位的到訪。

沒有留言:

張貼留言