1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Sub test()
Set IE = IeNavigateprivée("https://www.google.fr/")
Do Until IE.ReadyState = 4 Or IE.busy: DoEvents: Loop
'code pour traiter ou manipuler le document
'...
'...
End Sub
Public Function IeNavigateprivée(URL) As Object
' necessite d'activer la reference "microsoft shell controls et automation" sinon tu fait une recherche pour le faire en late binding
Dim objShell As Shell, IE As Object
Set IE = CreateObject("internetexplorer.application")
With IE: .navigate "about:Blank": .Visible = True: .resizable = True: End With
Do Until IE.ReadyState = 4 Or IE.busy: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:01")) ' pour les PCS un peu mous du bulbe
'principe:
' action sur la touche , code ascii de la touche , 0=la fenetre active , le sens: 0=appuyé ou &h2=lacher , 0 tout le temps)
' l'avantage de cette methode par raport a sendkeys c'est que l'on est sur de taper sur la bonne fenetre avec le 2d argument(0=fenetre active)
keybd_event 17, 0, 0, 0 ' le keycode 17 correspont a la touche ctrl
keybd_event 16, 0, 0, 0 ' le code 16 correspond a la touche maj
keybd_event "80", 0, 0, 0 ' le code 80 correspond la touche "p"
'on relache les touche avec argument "&H2" & 2 eme argument important!!!!!!! de toujours relacher les touche avec l'apis
keybd_event 17, 0, &H2, 0
keybd_event 16, 0, &H2, 0
keybd_event "80", 0, &H2, 0
Application.Wait (Now + TimeValue("0:00:01")) ' pour les PCS un peu mous du bulbe
' alors voila on a taper les touche ctrl+maj+"p" une autre fenetre IE s'est ouverte inprivate
'il nous faut donc la retrouver donc pointer cette nouvelle instance de IE de facon a lui donner la bonne url
Set objShell = New Shell
For Each obj In objShell.Windows
If TypeName(obj.document) = "HTMLDocument" Then
Set objIE = obj
'des que l'on a trouvé la fentre avec about:InPrivate" c'est la bonne alors on change la location
If objIE.LocationURL = "about:InPrivate" Then objIE.document.Location = URL 'c'est là que ça bugge plus!!!
End If
Next
IE.Quit 'on peut fermer la premiere fenetre IE que l'on a lancer en premier
Set IeNavigateprivée = objIE
End Function |
Partager