[R] Masquer un programme avec Alt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

[R] Masquer un programme avec Alt

#1

Message par Raz2Kill »

Salut à tous,

Je suis un novice à AutoIt depuis quelques jours mais pas dans la programmation ce qui m'a permit d'avancer assez vite.

Mon script actuel lance un .exe externe et ne se quitte pas tant que le .exe n'est pas fermé.
Voici la partie du script en question (l'autre n'a aucune utilité dans le problème je pense)

Code : Tout sélectionner

$pid=Run("Prog.exe")

If ProcessWaitClose($pid) Then
ProcessClose($pid)
EndIf
 
Mon problème est que je souhaite cacher de la barre de tâches l'exe par une simple pression de Alt+Tab.Et bien sur à l'inverse en ré-appuyant sur Alt+Tab que le programme réapparaissent.

J4ai essayé de m'inspirer de ce topic ( http://www.autoitscript.fr/forum/viewto ... w=previous ) mais malheureusement sans succès.

Merci d'avance pour votre aide :wink:

Cordialement,
Raz2Kill
Modifié en dernier par Raz2Kill le sam. 18 sept. 2010 13:52, modifié 1 fois.

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#2

Message par Tlem »

Que je sache, le Alt+Tab est réservé par le système pour le basculement d'une tâche à l'autre.
Vous devriez choisir une autre combinaison de touches.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#3

Message par Raz2Kill »

Dans ce cas,même chose mais juste en appuyant sur Alt?L'important est la programmation qui va derrière non? :?

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#4

Message par Tlem »

Code : Tout sélectionner

#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
    Sleep ( 250 )
    If _IsPressed("12", $dll) and _IsPressed("4C", $dll) Then
        Sleep(500)
        MsgBox(0,"_IsPressed", "ALT + L")
        Exit
    EndIf
WEnd

DllClose($dll)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#5

Message par Raz2Kill »

Ce code ne fait pas exactement ce qui est prévu.Il m'affiche la MsgBox et ensuite le script se termine.En revanche la fenêtre du .exe reste en place... :o

Il faut que le script cache temporairement le programme .exe.Je crois que celui que tu m'a donné ne fait que cacher la tray_icon :|

Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#6

Message par Tlem »

Ce script n'est là que pour vous montrer le chemin.
Comme vous l'avez dit :
L'important est la programmation qui va derrière
Vous savez comment gérer la/les touches, donc maintenant vous devez chercher comment réduire une fenêtre. :roll:
Pour réduire une fenêtre, le mieux est d'avoir son handle.
Donc transformez le PID en Handle (http://www.autoitscript.fr/forum/viewto ... =21&t=5411).
Ensuite, vous devez indiquer l'état de la fenêtre avec WinSetState (au lieu du titre de la fenêtre, utilisez son handle. ;)).
Et voilà ... :mrgreen:

PS : J'ai supprimé la citation du code dans votre message, car le bouton citation n'est à utiliser uniquement pour souligner certaines phrases ou paragraphes lorsque cela est nécessaire.
Ici, en l'occurrence, votre message est après le miens, donc inutile de reprendre l'intégralité de mon message ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#7

Message par Raz2Kill »

Après avoir bouillonné tout ça j'en arrive à un beau script bien long que voici :mrgreen:

Code : Tout sélectionner

Func _GetHwndFromPID($PID)
    $hWnd = 0
    $stPID = DllStructCreate("int")
    Do
        $winlist2 = WinList()
        For $i = 1 To $winlist2[0][0]
            If $winlist2[$i][0] <> "" Then
                DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i][1], "ptr", DllStructGetPtr($stPID))
                If DllStructGetData($stPID, 1) = $PID Then
                    $hWnd = $winlist2[$i][1]
                    ExitLoop
                EndIf
            EndIf
        Next
        Sleep(100)
    Until $hWnd <> 0
    Return $hWnd
EndFunc ;==>_GetHwndFromPID

#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
    Sleep ( 250 )
    If _IsPressed("12", $dll) and _IsPressed("4C", $dll) Then
        MsgBox(0,"HideProject", "Ok to test...")
        WinSetState ( "hWnd", "", @SW_HIDE )
    EndIf
    Exit
WEnd
Cependant après la MsgBox,plus rien ne se passe.

De plus,
If ProcessWaitClose($pid) Then
ProcessClose($pid)
EndIf
Ne fonctionne plus,je doit remplacer le PID par le handle je suppose? :?
Mais j'ai du mal à comprendre quel est le handle.... :oops:

Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#8

Message par Tlem »

Par convention et facilité de lecture du code, placez vos fonctions à la fin du code.

En ce qui concerne votre question, je ne comprend pas ce que vous cherchez à faire avec le ProcessWaitClose. :cry:
Sinon, en ce qui concerne l'argument de la commande, je pense que la documentation est claire :
ProcessWaitClose

ProcessWaitClose ( "process" [, timeout] )

process The name or PID of the process to check
timeout [optional] Specifies how long to wait (in seconds). Default is to wait indefinitely
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#9

Message par Raz2Kill »

Le ProcessWaitClose est là pour fermer le script quand je quitte le .exe :wink:

Mais dois-je mettre ProcessWaitClose ( "process" [, timeout] ) à la place?

Si je le met en place,je n'arrive pas à trouver le "process",y a-t-il un rapport avec les processus dans le gestionnaire de tâches? :oops:

En ce qui concerne le handle,je n'ai toujours pas saisis ce qu'il fallait mettre dans le "_ICI_"
WinSetState ( "_ICI_", "", @SW_HIDE )
EDIT:Finalement j'ai réussi à le faire fonctionner.La fenêtre disparait bien comme y faut 8)

Il faut maintenant que lorsque j'appuie sur Alt+L cela la fasse réapparaittre et tout sera nikel chrome :mrgreen:

On va y arriver


EDIT2:J'essaye de placer le code pour relancer la fenêtre du .exe mais je n'arrive pas à le positionner de façon à cela soit pris en compte seulement lorsqu'elle a été caché...
Voici ce que j'ai tenté sans succès:

While 1
Sleep ( 250 )
If _IsPressed("12", $dll) Then
MsgBox(0,"HideProject", "Ok to test")
WinSetState ( "Fenêtre exe", "", @SW_HIDE )
If _IsPressed("12", $dll) Then
MsgBox(0,"HideProject", "Hide end")
WinSetState ( "Fenêtre exe", "", @SW_SHOW )
Endif
EndIf
WEnd
Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#10

Message par Tlem »

Je pense que nous gagnerons du temps tout les deux si je vous donne un code fonctionnel. :roll:
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#11

Message par Raz2Kill »

Merci pour le code final cependant un bémol reste présent,rien ne se passe lorsque j'appuie sur Alt+L.J'ai placé des MsgBox pour voir si il avait au moins une réaction du script lors de la pression mais rien ne se passe. :|

Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#12

Message par Tlem »

Ce code fonctionne parfaitement sur mon PC (Windows XP SP3).
Donc à ce stade, je ne peut vous aider plus. Vous devez chercher de votre coté.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#13

Message par Raz2Kill »

Effectivement j'ai essayé avec un autre .exe et cela fonctionne.Je verrais ce problème par la suite...J'utilise cependant WinSetState($Hwnd, "", @SW_HIDE) au lieu de WinSetState($Hwnd, "", @SW_MINIMIZE)

En revanche la réapparition de fonctionne pas. WinSetState($Hwnd, "", @SW_SHOW) n'a aucun effet.D'après la ocumentation (http://www.autoitscript.fr/autoit3/docs ... tState.htm),@SW_SHOW restaure "la fenêtre cacher précédemment".Arrête moi si je me trompe,cela veut dire que c'est la boucle qui cause le problème de "précédemment indéfini" ?

Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#14

Message par Tlem »

Vous oubliez cette ligne :

Code : Tout sélectionner

If BitAnd(WinGetState($Hwnd, ""), 16) Then ; On vérifie l'état de la fenêtre (si minimisée).
Lorsque votre fenêtre est cachée, elle n'est pas minimisée ... :roll:
Donc la condition n'est pas vraie. :mrgreen:

Vous devez inverser le test et utiliser d'autres valeur que 16. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#15

Message par Raz2Kill »

Oui ce n'est pas faux :?

Je me suis renseigné à ce propos (http://www.adminscripteditor.com/syntax ... t=v&id=614) et ai choisis "1 = Window exists " mais rien n'y fait cela plante le script et la fenêtre ne veut même pas se cacher.Je dois bien remplacer le 16 par 1?

Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#16

Message par Tlem »

Extrait de la documentation de la commande WinGetState :
Return Value

Success: Returns a value indicating the state of the window. Multiple values are added together so use BitAND() to examine the part you are interested in:
1 = Window exists
2 = Window is visible
4 = Window is enabled
8 = Window is active
16 = Window is minimized
32 = Window is maximized

Failure: Returns 0 and sets @error to 1 if the window is not found.
Faites votre choix. :mrgreen:
Sachez que vous pouvez additionner des valeurs afin de correspondre à différente conditions. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#17

Message par Raz2Kill »

J'ai justement essayé mais rien ne fonctionne!Je crois m'être emmêlé les pinceaux sur la position de If BitAnd(WinGetState($Hwnd, ""), X)

Et lorsque vous dîtes que je peut additionner cela signifie mettons X=1+4+8=13?

Je ne saisis pas trop :oops:

Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#18

Message par Tlem »

L'information sur le fait de pouvoir additionner les nombres, n'était là que pour information. Le but était de vous expliquer qu'il était possible de contrôler plusieurs condition en même temps ...

Pour votre cas, remplacez la boucle de mon exemple précédent par celle-ci ;) :
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Raz2Kill
Niveau 2
Niveau 2
Messages : 22
Enregistré le : jeu. 02 sept. 2010 10:46
Status : Hors ligne

Re: [..] Masquer un programme avec Alt+Tab

#19

Message par Raz2Kill »

Effectivement cette fois-ci tout fonctionne.Je revoit le script final en additionnant ces lignes et vous donne un résultat :wink:

EDIT:Je ne comprend vraiment pas.Le script fonctionne avec un autre .exe mais celui pour lequel j'ai besoin du script ne veut pas se cacher alors qu'il voulait bien avant :cry:

Il démarre bien mais refuse tout chose lors de la pression de Alt+L

EDIT2:En regardant de plus près sur la tray_icon lorsque le script est en route,celui-ci se met en pause tout seul (avec la petite croix rouge) et lorsque je ferme le .exe,le script reste ouvert en pause :(

EDIT3:Après quelque bidouilles par-ci par là,je me suis rendu compte que c'est le .exe en question qui ne doit pas être compatible avec le handle.Du coup en re-basant tout sur la prise en compte du titre de la fenêtre et du PID normale,tout roule!Je donne les lignes si cela peut servir à quelqu'un,non pas avec Alt+L mais juste Alt (plus près de ce dont j'avais besoin finalement...)

Code : Tout sélectionner

#include <Misc.au3>

$dll = DllOpen("user32.dll")

$PID = Run("Programme.exe", "")


While 1
    Sleep ( 100 )
    If _IsPressed("12", $dll) Then
        If BitAnd(WinGetState("Titre de la fenêtre", ""), 2) Then
            WinSetState("Titre de la fenêtre", "", @SW_HIDE)
        Else
            WinSetState("Titre de la fenêtre", "", @SW_SHOW)
        EndIf
        Sleep(100)
    EndIf
    If Not ProcessExists($PID) Then Exit
WEnd

 
Merci à toi Tlem nous avons fini par y arriver :mrgreen:

Cordialement,
Raz2Kill

Code : Tout sélectionner

If Online_Assistant_Help ( "[b]Cool[/b]" , "[b]Listening[/b]" ) Then 
Show $PID
$PID=([b]Cordialement,Raz2Kill[/b])
Répondre