在实际的应用程序开发中,我们可能会在程序里查找另一个程序是否已打开,如果查找的程序已打开就把它激活成当前的窗口。这里分别用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