YasserKhalil
YasserKhalil

Reputation: 9538

minimize window driver selenium excel vba

I have searched a lot for a way to minimize the window of the driver in selenium for excel vba. I have found ways for Java and python and tried to adopt them but all my tries failed I just found a way to maximize the window using

bot.Window.Maximize

But when trying to use Minimize I got an error

Again I am searching for excel vba as for selenium ... Thanks advanced for help

Upvotes: 2

Views: 5321

Answers (3)

Noam Brand
Noam Brand

Reputation: 346

Minimize window by windows API

This is a workaround for Selenium VBA not having a working minimize window option.

''compiler constants
#If VBA7 Then
    Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Boolean
    Public Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As Long) As Long
    Public Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
#Else
    Public Declare Function ShowWindow Lib "USER32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Boolean
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
#End If

    Dim hwnd As Long
    Dim Botwindowtitle As String
    bot.Start    
    Botwindowtitle = bot.Window.Title
    hwnd = GetAllWindowHandles(Botwindowtitle)
    Call ShowWindow(hwnd, 7) 'Show the window minimized (SW_SHOWMINNOACTIVE = 7) http://www.jasinskionline.com/windowsapi/ref/s/showwindow.html
     bot.Get "https://www.google.com/"



Private Function GetAllWindowHandles(partialName As String) As Long
    Dim hwnd As Long, lngRet As Long
    Dim strText As String
    Dim hWndTemp As Long
    hwnd = FindWindowEx(0&, 0&, vbNullString, vbNullString)

Do While hwnd <> 0
        strText = String$(100, Chr$(0))
        lngRet = GetWindowText(hwnd, strText, 100)

        If InStr(1, strText, partialName, vbTextCompare) > 0 Then
            Debug.Print "Window Handle:" & hwnd & vbNewLine & _
                        "Window title:" & Left$(strText, lngRet) & vbNewLine & _
                        "----------------------"
            hWndTemp = hwnd
            GetAllWindowHandles = hWndTemp
        End If

        '~~> Find next window
        hwnd = FindWindowEx(0&, hwnd, vbNullString, vbNullString)
Loop
End Function

Upvotes: 1

Noam Brand
Noam Brand

Reputation: 346

Driver.Window.SetSize 0, 0 just made the window smaller, without minimizing the browser to the taskbar.

How to use GetWindowPlacement in selenium vba?

    'for vb6
Private Type POINTAPI
        x As Long
        y As Long
End Type
 
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
 
 
Private Type WINDOWPLACEMENT
        Length As Long
        flags As Long
        showCmd As Long
        ptMinPosition As POINTAPI
        ptMaxPosition As POINTAPI
        rcNormalPosition As RECT
End Type
 
Private Declare Function GetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long
 
 
Private Sub Command1_Click()
    Dim wp As WINDOWPLACEMENT
    wp.Length = Len(wp)
    GetWindowPlacement targetHandle, wp
End Sub

Upvotes: 1

QHarr
QHarr

Reputation: 84455

AFAIK there is no method for this in VBA implementation (there is in Python for example). There are a number of ways to manipulate size and position e.g.

bot.Window.SetSize 0, 0

Or you can run headless

bot.AddArgument "--headless"

You might also try to:

1) Emulate Windows Key + Down

2) Write a javscript function that performs window.minimize() and async execute off the parent window

3) Capture your target co-ordinates by generating a GetWindowPlacement call along with implementing your own WINDOWPLACEMENT struct. Looks like gets ugly fast.

See also:

Getting the size of a minimized window

Upvotes: 5

Related Questions