[R] Ouvrir un exe dans un programme en autoit...
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Ouvrir un exe dans un programme en autoit...
Bonjour, voila se la fait un moment que j'essaye de réaliser un petit programme permetant d'ouvrir dans chacun de ces onglets un programmes pour éviter de surcharger mon bureaux... J'ai créer la gui et commencer le code mais malheureusement je n'arrive pas ouvrir des fichier .exe dans chacun des onglets... Le maximum que j'ai put fair pour le moment c'est de les ouvrir en dehors du programme... Voila j'espère que vous pourrai m'aider . Ha oui merci d'avance
Re: [..]Ouvrir un exe dans un programme en autoit...
pas de solutions?
Re: [..]Ouvrir un exe dans un programme en autoit...
Des solutions non mais une ou deux questions :
Vous voulez ouvrir des logiciels dans des onglets ? ou vous voulez qu'un logiciel s'ouvre lorsque vous cliquez sur un onglet ?

Vous voulez ouvrir des logiciels dans des onglets ? ou vous voulez qu'un logiciel s'ouvre lorsque vous cliquez sur un onglet ?

Re: [..]Ouvrir un exe dans un programme en autoit...
enfaite j'aimerai ouvrir un programme dans chaque onglet. est-ce possible?
Re: [..]Ouvrir un exe dans un programme en autoit...
En première lecture je dirai non ... pas possible avec des exe...
Re: [..]Ouvrir un exe dans un programme en autoit...
donc? impossible?
-
- Niveau 7
- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..]Ouvrir un exe dans un programme en autoit...
bonsoir
ce qu'il veut dire c'est que un programme c'est vague, un programme c'est un ensemble de fonctions d'actions et de réactions.
Donc a toi d'être plus clair qu'elle fonctions dans les onglets.
ce qu'il veut dire c'est que un programme c'est vague, un programme c'est un ensemble de fonctions d'actions et de réactions.
Donc a toi d'être plus clair qu'elle fonctions dans les onglets.
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..]Ouvrir un exe dans un programme en autoit...
Bonsoir,
+1 pour moi sur l'impossibilité avec un .exe
par contre si il existe un objet com associé à l'exe tel qu'un ocx installé dans la foullé, alors on peut l'utilisé via un GUICtrlCreateObj.
Pour voir un exple, il suffit de voir l'aide de cette fonction justement.
On cré une instance d'un objet de type internet explorer (donc ici on ne lance pas iexplore.exe, mais on lance une instance Shell.Explorer) et à ce moment là on peut "encapsuler cet objet dans l'interface autoit.
Une autre façon de "jouer" avec ce concept est de lancer l'outil de GUI koda, et de créé une zone "Com object", puis cliquer sur "..." en face de "Axobject". Une liste des objet com installer apparaîtra. Elle n'est pas exhaustive vis à vis de tous les ocx / dll existant sur le pc, mais au moins ça aide à voir où on va.
Après la difficulté est "qu'est ce qu'il existe comme actions liées à l'objet". Et bien là c'est la doc (si il y a), google, ou certains outils d'exploration d'objet com (j'aime bien celui-ci : http://www.mitec.cz/Downloads/OLExp.zip , d'ailleurs il y a pleins de soft sympas du même goût)
Bref bonne chance ^^
+1 pour moi sur l'impossibilité avec un .exe
par contre si il existe un objet com associé à l'exe tel qu'un ocx installé dans la foullé, alors on peut l'utilisé via un GUICtrlCreateObj.
Pour voir un exple, il suffit de voir l'aide de cette fonction justement.
On cré une instance d'un objet de type internet explorer (donc ici on ne lance pas iexplore.exe, mais on lance une instance Shell.Explorer) et à ce moment là on peut "encapsuler cet objet dans l'interface autoit.
Une autre façon de "jouer" avec ce concept est de lancer l'outil de GUI koda, et de créé une zone "Com object", puis cliquer sur "..." en face de "Axobject". Une liste des objet com installer apparaîtra. Elle n'est pas exhaustive vis à vis de tous les ocx / dll existant sur le pc, mais au moins ça aide à voir où on va.
Après la difficulté est "qu'est ce qu'il existe comme actions liées à l'objet". Et bien là c'est la doc (si il y a), google, ou certains outils d'exploration d'objet com (j'aime bien celui-ci : http://www.mitec.cz/Downloads/OLExp.zip , d'ailleurs il y a pleins de soft sympas du même goût)
Bref bonne chance ^^
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
-
- Niveau 11
- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..]Ouvrir un exe dans un programme en autoit...
hm hm
D'après mes souvenirs qui sont fort lointain, il est tout à fait possible (apart avec l'objet)
Il suffit simplement à la gui principal d'etre parent et le handle (autre fenetre) soit enfant.
teintein!!
Exemple (1)
Exemple (2)
idem que le premier mais il faut cette fois utiliser setwindowlong pour attribuer a la fenetre enfant le style d'extension $WS_EX_MDICHILD
Y aura pas d'exemple ...
Conclusion = Ne dite pas que c'est pas possible lol
bonne continuation .°°°°
D'après mes souvenirs qui sont fort lointain, il est tout à fait possible (apart avec l'objet)
Il suffit simplement à la gui principal d'etre parent et le handle (autre fenetre) soit enfant.
teintein!!
Exemple (1)
Code : Tout sélectionner
$GuiParent = GuiCreate("Parent & Enfant",650, 319,-1,-1,BitOr($WS_CLIPCHILDREN,$WS_SYSMENU))
GUISetState(@SW_SHOW)
shellexecute("write","","","",@SW_HIDE)
$Enfant = WinGetHandle("Document - WordPad")
DllCall("user32.dll", "int", "SetParent", "hwnd",$Enfant, "hwnd",$GuiParent)
WinSetState($Enfant,"",@SW_SHOWMAXIMIZED)
Do
Sleep(10)
Until GuiGetMsg() =-3
idem que le premier mais il faut cette fois utiliser setwindowlong pour attribuer a la fenetre enfant le style d'extension $WS_EX_MDICHILD
Y aura pas d'exemple ...
Conclusion = Ne dite pas que c'est pas possible lol
bonne continuation .°°°°
-
- Niveau 11
- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..]Ouvrir un exe dans un programme en autoit...
vla un exemple du fofo anglais, j'ai rajouté SYSMENU (petit croix) et changer notepad en wordpad.
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("WorPad", 633, 454, 193, 125, BitOR($WS_SYSMENU,$WS_CLIPCHILDREN))
GUISetState(@SW_SHOW)
Run("write") ; on peut indiquer @sw_hide
WinWaitActive("Document - WordPad")
$WorPad= WinGetHandle("Document - WordPad")
_SetParent($WorPad, $hGUI)
WinSetState($WorPad, "", @SW_SHOWMAXIMIZED)
Do
Sleep(10)
Until GuiGetMsg() =-3
Func _SetParent($id_child, $h_parent)
If Not IsHWnd($h_parent) Then $h_parent = HWnd($h_parent)
If Not IsHWnd($id_child) Then $id_child = GUICtrlGetHandle($id_child)
If DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $id_child, "hwnd", $h_parent) <> 0 Then
Return 1
Else
seterror(1)
Return 0
EndIf
EndFunc
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..]Ouvrir un exe dans un programme en autoit...
bien vu pour la méthode, mais le use case d'inclusion dans une GUI est plus facile que dans un contrôle de type tab :
l'astuce réside à déclarer l'handle de l'exe en tant qu'enfant du handle "windows" de la gui entière (cas de l'exemple) ou d'un contrôle (notre cas avec le tab)
Le soucis du tab, est qu l'handle windows couvre le tab entier, du coups tous les tabitems ont le même handle.
La grosse bidouille consiste alors à faire l'insertion du handle de l'exe 1 après la création du tabitem1, l'exe 2 après le tabitme2 ...
Et là, oh rage, oh désespoire, il va falloire jongler avec le masquage des différents exe en fonction du tabitem sélectionné, car on, perds la souplesse "automatique" gérée par autoit.
voici un exple en tabitem avec les contraintes suivante :
- le refresh des déplacement a des lacunes, faut recliquer sur les tabitem pour "bien" repeindre, surtout pour wordpad ...
- j'ai fait un décalage volontaire des gui venant des "exe" passé en maximize, car sinon on ne peut plus cliquer sur les tabitem (sauf en déplaçant les gui)
- effet de bords : quand j'appel "write" j'ai un crash d'extinction", d'où l'appel direct en chemin absolu à wordpad (sans doute dû au pid renvoyé qui doit être celui d'un wrapper et non celui de wordpad, mais bon, là on s'écarte) :
l'astuce réside à déclarer l'handle de l'exe en tant qu'enfant du handle "windows" de la gui entière (cas de l'exemple) ou d'un contrôle (notre cas avec le tab)
Le soucis du tab, est qu l'handle windows couvre le tab entier, du coups tous les tabitems ont le même handle.
La grosse bidouille consiste alors à faire l'insertion du handle de l'exe 1 après la création du tabitem1, l'exe 2 après le tabitme2 ...
Et là, oh rage, oh désespoire, il va falloire jongler avec le masquage des différents exe en fonction du tabitem sélectionné, car on, perds la souplesse "automatique" gérée par autoit.
voici un exple en tabitem avec les contraintes suivante :
- le refresh des déplacement a des lacunes, faut recliquer sur les tabitem pour "bien" repeindre, surtout pour wordpad ...
- j'ai fait un décalage volontaire des gui venant des "exe" passé en maximize, car sinon on ne peut plus cliquer sur les tabitem (sauf en déplaçant les gui)
- effet de bords : quand j'appel "write" j'ai un crash d'extinction", d'où l'appel direct en chemin absolu à wordpad (sans doute dû au pid renvoyé qui doit être celui d'un wrapper et non celui de wordpad, mais bon, là on s'écarte) :
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
$pid_paint = Run("mspaint.exe")
$pid_word = Run("C:\Program Files\Windows NT\Accessoires\wordpad.exe")
Sleep(2000)
$GuiParent = GUICreate("Parent & Enfant", 650, 319, -1, -1, BitOR($WS_CLIPCHILDREN, $WS_SYSMENU))
$tabini = GUICtrlCreateTab(2, 2, 620, 250)
$tab = ControlGetHandle("Parent & Enfant", "", "[CLASS:SysTabControl32; INSTANCE:1]")
$tab0 = GUICtrlCreateTabItem("wordpad")
ConsoleWrite($tab0 & @CRLF)
$Enfant = WinGetHandle("Document - WordPad")
DllCall("user32.dll", "int", "SetParent", "hwnd", $Enfant, "hwnd", $tab)
WinSetState($Enfant, "", @SW_SHOWMAXIMIZED)
WinMove($Enfant,"",30,30)
$tab1 = GUICtrlCreateTabItem("paint")
$Enfant2 = WinGetHandle("Sans titre - Paint")
DllCall("user32.dll", "int", "SetParent", "hwnd", $Enfant2, "hwnd", $tab)
WinSetState($Enfant2, "", @SW_SHOWMAXIMIZED)
WinMove($Enfant2,"",30,30)
WinSetState($Enfant2, "", @SW_HIDE)
WinSetState($Enfant, "", @SW_SHOW)
GUISetState(@SW_SHOW)
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $tabini
switch_screen($tabini)
Case Else
;
EndSelect
WEnd
ProcessClose($pid_word)
ProcessClose($pid_paint)
exit 0
Func switch_screen($id_tab)
Local $itemid=GUICtrlRead($id_tab)
if $itemid = 0 Then
WinSetState($Enfant2, "", @SW_HIDE)
WinSetState($Enfant, "", @SW_SHOW)
Else
WinSetState($Enfant, "", @SW_HIDE)
WinSetState($Enfant2, "", @SW_SHOW)
EndIf
EndFunc
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
- Iste
- Niveau 11
- Messages : 1870
- Enregistré le : jeu. 04 déc. 2008 14:21
- Localisation : 76
- Status : Hors ligne
Re: [R] Ouvrir un exe dans un programme en autoit...
Hum, et comment peut-on 'sortir' un des programme de l'exe autoit ?
Edit : Ha ben, _SetParent($win, 0) !
J'avais testé avec la valeur "", mais il semblerait que ca soit different
Edit : Ha ben, _SetParent($win, 0) !
J'avais testé avec la valeur "", mais il semblerait que ca soit different
Signez ici