Question creer nouveau process iexplorer

Plus d'informations
il y a 15 ans 9 mois #2513 par daniel soares
Hello

j'utilise la creation d'un objet IE pour controler le fonctionnement de sites intranet
pour cela
j'utilise
[code:1]
$IE = new-object -ComObject internetexplorer.application
[/code:1]
le pb est que si IE etait deja ouvert cette session IE va s'initialiser a partir du process iexplorer existant
je voudrais pouvoir creer un process totalement independant pour pouvoir le killer sans toucher aux sessions ouvertes manuellement
j'imagine qu'il y a des arguments qui le permettent mais je n'ai rien trouvé sur le sujet chez microsoft.
qqun a t'il une idée?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2514 par Laurent Dardenne
Salut,
IE a un comportement particulier ce qui fait que cela sera difficile sous PS, voir :
www.generation-nt.com/reponses/debutant-...entraide-168441.html
et
groupes.codes-sources.com/article-url-ie-powershell-341718.aspx

De mon coté j'ai tenté une approche par la face nord :lol:
[code:1]
$psi = new-object system.diagnostics.processStartInfo
$psi.fileName = \"C:\Program Files\Internet Explorer\iexplore.exe\"
$psi.arguments= \"\"
$psi.loadUserProfile = $false
$psi.useShellExecute = $false
$proc = [system.diagnostics.process]::«»start($psi)
[void][reflection.assembly]::LoadWithPartialName(\"Interop.SHDocVw.InternetExplorer\"«»)
#ne fonctionne pas, dommage ;«»-)
#$IEC=$proc -as [SHDocVw.IWebBrowserApp]

#ne fonctionne pas :/
[type] $T=[SHDocVw.IWebBrowserApp]
$o=[System.Runtime.InteropServices.Marshal]::GetComInterfaceForObject($proc,$T);
[/code:1]
Mais sans succés :(
L'idée étant de récupérer d'un objet process une interface de type IWebBrowserApp. De plus étant dans le domain COM+.NET le code, si c'est possible, risque d'être \"particulier\".

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2515 par Laurent Dardenne
Tout compte fait le code est simple, c'était de trouver l'info qui ne l'était pas :lol:
Essaie ceci:
[code:1]
#Crée un process IE
$psi = new-object system.diagnostics.processStartInfo
$psi.fileName = \"C:\Program Files\Internet Explorer\iexplore.exe\"
$psi.arguments= \"\"
$psi.loadUserProfile = $false
$psi.useShellExecute = $false
$proc = [system.diagnostics.process]::«»start($psi)

#Retrouve les browser via une instance de ShellWindowsClass
# pour IExplore : document=mshtml.HTMLDocumentClass
# pour Explorer : document=$null
$shellWindows = new-object SHDocVw.ShellWindowsClass
$ie=$Null
foreach ($item in $shellWindows)
{
#Retrouve la nouvelle instance de IE via un handle commun
if ($item.Hwnd -eq $Proc.MainWindowHandle)
{$ie=$Item
break
}
}
$shellWindows=$null
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 26/06/08 11:13

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2516 par daniel soares
genial ca fonctionne Merci Laurent

par contre sur mon poste il manquait la dll
Interop.SHDocVw.dll
que j'ai du télécharger
ensuite je la charge par

[void][Reflection.Assembly]::LoadFile(\&quot;c:\daniel\Interop.SHDocVw.dll\&quot;)


au cas ou qqun d'autre aurai le meme pb :)

en outre
j'ai vu un posts faisant reference a
IE = New SHDocVw.InternetExplorer() (code vb) alors j'ai testé ce qui nous aurai permis d'eviter l'etape ShellWindowsClass
[code:1]
$shellWindows = new-object SHDocVw.InternetExplorer
[/code:1]
sans succes :angry:

il y a t'il un moyen de lire ce qu'il y a dans cette dll pour voir ce qu'elle peut nous proposer?

par contre ce post peut etre cloturé car ta solution fonctionne :)<br><br>Message édité par: Dan, à: 26/06/08 13:34

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2517 par Laurent Dardenne
Dan écrit:

par contre sur mon poste il manquait la dll
Interop.SHDocVw.dll

Oui je n'étais pas sûr qu'elle soit installée d'office, sur mon poste j'ai VS 2005...
Il y a peut être une moyen de générer l'assembly voir ceci (chapitre 5) et ce pour les postes ayant ie6 ou 7.

Dan écrit:

alors j'ai testé ce qui nous aurai permis d'eviter l'etape ShellWindowsClass

Oui javais testé cette piste, comme pas mal d'autres.
Dan écrit:

il y a t'il un moyen de lire ce qu'il y a dans cette dll pour voir ce qu'elle peut nous proposer?

Oui ILDasm.exe ou Reflector.
Pour débuter autant choisir ILDasm qui devrait se trouver dans le runtime .NET (à confirmer). Reflector permet l'usage de plug-in et est plus avancé.
Mais il faut qq connaissances supplémentaires sur .NET et les concepts de base de la POO sous .NET.

Pour info, l'approche autour de GetComInterfaceForObject cela ne peut pas fonctionner car la classe Process n'expose pas les interfaces COM de IE.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.073 secondes
Propulsé par Kunena