I need to use shell to open an application only if the application is not already open.
If the user tries to open it when it is open it should be ignored whereas right now it'll open another window with the application.
Anyone know how??
Printable View
I need to use shell to open an application only if the application is not already open.
If the user tries to open it when it is open it should be ignored whereas right now it'll open another window with the application.
Anyone know how??
Something like this. You must know at least part of the window caption, which shouldn't be a problem because things like "Microsoft Word", "Microsoft Internet Explorer","Notepad" usually get appended to the end
In a Module
Form Code:VB Code:
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long Private Const WM_GETTEXT = &HD Private aCaptions() As String Private lCount As Long Public Function GetAllCaptions() As Variant lCount = 0 Call EnumWindows(AddressOf EnumWindowsProc, 0&) If lCount Then ReDim Preserve aCaptions(lCount - 1) GetAllCaptions = IIf(lCount, aCaptions, Array()) End Function Private Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long Dim sBuffer As String * 260 If IsWindowVisible(hwnd) Then ReDim Preserve aCaptions(lCount) aCaptions(lCount) = Left(sBuffer, SendMessage(hwnd, WM_GETTEXT, 260, ByVal sBuffer)) If Len(Trim(aCaptions(lCount))) Then lCount = lCount + 1 End If EnumWindowsProc = hwnd End FunctionVB Code:
Public Function IsOpen(strTitle As String) As Boolean Dim vCaps As Variant Dim lIndex As Long vCaps = GetAllCaptions() For lIndex = 0 To UBound(vCaps) If InStr(1, vCaps(lIndex), strTitle, vbTextCompare) Then IsOpen = True Exit Function End If Next IsOpen = False End Function Private Sub Command1_Click() If IsOpen("Notepad") = False Then Shell "Notepad.exe", vbMaximizedFocus End If End Sub