A more .net style function for getting a window using an indexOf:
''API Imports <Runtime.InteropServices.DllImport("user32.dll", CharSet:=Runtime.InteropServices.CharSet.Auto)> Private Shared Sub GetClassName(ByVal hWnd As System.IntPtr, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer) End Sub <Runtime.InteropServices.DllImport("user32.dll", CharSet:=Runtime.InteropServices.CharSet.Auto)> Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr End Function ''FoundWindow stricture Public Structure FoundWindow Dim strWindowName As String Dim strClassName As String Dim hWnd As IntPtr End Structure ''' <summary> ''' This function is used to loop through all running processes, checking their main windows to see which ones contain a specific string ''' </summary> ''' <param name="strIndexOf">The string that you wish to check for in the window captions</param> ''' <param name="boolCase">Whether the function is should check for case</param> ''' <returns>A list of FoundWindow's containing the window name, class and handle</returns> ''' <remarks>As this function only loops through running processes main windows, it may miss some windows.</remarks> Public Function FindWindowsIndexOf(ByVal strIndexOf As String, ByVal boolCase As Boolean) As List(Of FoundWindow) Dim foundWindows As New List(Of FoundWindow) If boolCase = False Then strIndexOf = strIndexOf.ToLower End If For Each p As Process In Process.GetProcesses Dim windowCaption As String = p.MainWindowTitle If boolCase = False Then windowCaption = windowCaption.ToLower End If If windowCaption.IndexOf(strIndexOf) > -1 Then Dim foundWindow As New FoundWindow foundWindow.hWnd = FindWindow(vbNullString, p.MainWindowTitle) foundWindow.strWindowName = p.MainWindowTitle Dim sbClassName As New System.Text.StringBuilder("", 256) GetClassName(foundWindow.hWnd, sbClassName, 256) foundWindow.strClassName = sbClassName.ToString foundWindows.Add(foundWindow) End If Next Return foundWindows End Function Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For Each fWnd As FoundWindow In FindWindowsIndexOf("TeST", False) Debug.WriteLine(fWnd.strWindowName & " : " & fWnd.hWnd.ToString) Next End Sub
Same as the last function, you can choose whether or not the function is case sensitive.
0 Responses to “[VB.Net] FindWindowsIndexOf – .Netish Version”