打开并激活已存在程序窗口

时间:2023-01-13 18:56:42

在实际的应用程序开发中,我们可能会在程序里查找另一个程序是否已打开,如果查找的程序已打开就把它激活成当前的窗口。这里分别用C#.NET和VB.NET两种程序来实现了这个功能,这两个程序里都可以打开一个标题是"我的电脑"的窗口:

-------------------C#.NET的实现---------------

[System.Runtime.InteropServices.DllImport("user32.dll")]

private static extern bool OpenIcon(IntPtr hWnd);

private static extern bool OpenIcon(IntPtr hWnd);

[System.Runtime.InteropServices.DllImport("user32.dll")]

private static extern bool IsIconic(IntPtr hWnd);

[System.Runtime.InteropServices.DllImport("user32.dll")]

private static extern int SetForegroundWindow(IntPtr hWnd);[System.Runtime.InteropServices.DllImport("user32.dll")]

private static extern IntPtr FindWindow(string strclassName, string strWindowName);

void FindAndOpenWindow(string Title)

{

     IntPtr hWnd = FindWindow(null, Title);

     if (hWnd != IntPtr.Zero)

     {

         bool isIcon = IsIconic(hWnd);

         if ( !isIcon )

         {

              SetForegroundWindow(hWnd);

         }

         else

         {

              OpenIcon(hWnd);

         }

     }

}

private void button1_Click(object sender, System.EventArgs e)

{

     FindAndOpenWindow("我的电脑");

} 

-------------------VB.NET的实现---------------

Private Declare Function OpenIcon Lib "user32.dll" (ByVal hWnd As IntPtr) As Boolean

Private Declare Function IsIconic Lib "user32.dll" (ByVal hWnd As IntPtr) As Boolean

Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As IntPtr) As Integer

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal strclassName As String, ByVal strWindowName As String) As IntPtr

Sub FindAndOpenWindow(ByVal Title As String)

    Dim hWnd As IntPtr = FindWindow(Nothing, Title)

    If Not hWnd.Equals(IntPtr.Zero) Then

        Dim isIcon As Boolean = IsIconic(hWnd)

        If Not isIcon Then

            SetForegroundWindow(hWnd)

        Else

            OpenIcon(hWnd)

        End If

    End If

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    FindAndOpenWindow("我的电脑")

End Sub