Page 1 sur 2

[OK] Fermer Gestionnaire de tâches Windows 8

Publié : jeu. 27/févr./2014 18:00
par Ar-S
J'ai retesté de vieux codes et surtout retâter un peu les API de windows et j'ai un soucis pour fermer le gestionnaire de tâches.
Je me dis que c'est une sécurité de W8 mais je trouve tout de même étrange que cela ne fonctionne pas.
Version grossière et sans thread ni callback mais qui devrait marcher car la fenêtre est bien détectée.
J'ajoute que ce code fonctionne pour les autres fenêtre que j'ai pu tester.

Code : Tout sélectionner

; A Lancer avec le debugger activé

GT.s="Gestionnaire des tâches"						;		Nom de la fenêtre à fermer
Try = 0

Repeat
	Delay(500)		;		Pas de fenêtre / pas de timer je fait donc le porc avec un delai
	Hwnd 	= 	FindWindow_(0,GT)			; 		On choppe l'handle de la fenêtre
	If Hwnd <> 0									;		S'il le trouve, 
		Debug "Fenêtre trouvée ! Handle : " + Str(hwnd)	; 	il l'affiche
		Ferme = DestroyWindow_(Hwnd)						;	Et tente de fermer cette foutue fenêtre
		If Not Ferme = 0												;	Si ça marche
			Debug "Fenêtre fermée !"								;	On le signale
			End															; et on quitte
		Else																;	sinon
			Debug " Erreur ! fenetre pas fermée !"				;	on le signale
		EndIf					
		TRY+1															; 	On incrémente le nombre de tentative de 1
	EndIf
Until Try = 15															;	Jusqu'à ce qu'il ait tenté 15 fois
End

je me suis dit que ça venait du x86, j'ai donc compilé en x64 mais sans plus de résultat. Vous avez une idée d'ou peut venir ce blocage ?

Re: Fermer Gestionnaire de tâches Windows 8

Publié : jeu. 27/févr./2014 19:35
par nico
Si ça marchait avec DestroyWindow, t'as pensé qu'avec cette API tu ne fais que fermer une fenêtre et les threads associés au Processus, t'es sûr que tout se termine bien.

Je crois qu'un Fichier - quitter (par simulation) marcherais beaucoup mieux! ou alors un TerminateProcess, la première solution est la mieux car elle termine normalement le processus.

Re: Fermer Gestionnaire de tâches Windows 8

Publié : jeu. 27/févr./2014 20:57
par nico
Encore plus simple, en mettant la fenêtre du gestionnaire de tâche au premier plan et en simulant la touche Echap, cela ferme la fenêtre.

J'ai pas window 8 d'installé donc je ne peux pas faire de test!

Re: Fermer Gestionnaire de tâches Windows 8

Publié : jeu. 27/févr./2014 21:03
par nico
Apparemment, il y a deux interfaces, une simplifié et une autre complète, la simplifié on peut pas la fermer avec la touche Echap mais on devrait pouvoir le faire avec ALT+F4.

Re: Fermer Gestionnaire de tâches Windows 8

Publié : jeu. 27/févr./2014 22:54
par nico
Bon, je viens d'installer Window 8 et rien ne marche désolé!

Edit, ça marche mais avec les Privilèges Elevés (A cocher dans les options de compilation)

Code : Tout sélectionner

; A Lancer avec le debugger activé
Cocher : Privilèges Elevés 

#KEYEVENTF_UNICODE = 4

Procedure.l KeyCombi(Ctrl.l,Alt.l,Shift.l, key.a)
  Protected Extended.l,Scan.l,j.l=-1,Nb.l
  Protected  Dim SendInputData.INPUT(0)
  
  Nb=(Ctrl+Alt+Shift)*2
  If Key
    Nb=Nb+2
  EndIf 
  
  ReDim SendInputData.INPUT(Nb)
  
  If Ctrl 
    j=j+1     
    SendInputData(j)\type= #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk= #VK_CONTROL
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
  EndIf 
  
  If Alt
    j=j+1   
    SendInputData(j)\type= #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk= #VK_MENU
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
  EndIf
  
  If Shift 
    j=j+1      
    SendInputData(j)\type= #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk= #VK_SHIFT
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
  EndIf
  
  If Key 
    j=j+1  
    SendInputData(j)\type= #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk= Key
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|Extended
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
    
    j=j+1
    SendInputData(j)\Type = #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk = Key
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP|Extended
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
  EndIf 
  
  If Shift 
    j=j+1     
    SendInputData(j)\type= #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk= #VK_SHIFT
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
  EndIf
  
  If Alt 
    j=j+1     
    SendInputData(j)\type= #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk= #VK_MENU
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
  EndIf
  
  If Ctrl
    j=j+1      
    SendInputData(j)\type= #INPUT_KEYBOARD
    SendInputData(j)\ki\wVk= #VK_CONTROL
    SendInputData(j)\ki\dwExtraInfo = 0
    SendInputData(j)\ki\dwFlags = #KEYEVENTF_UNICODE|#KEYEVENTF_KEYUP
    SendInputData(j)\ki\time = 0
    SendInputData(j)\ki\wScan = 0
  EndIf 
  
  SendInput_(Nb, SendInputData(0), SizeOf(INPUT))
  
EndProcedure


GT.s="Gestionnaire des tâches"                

Delay(500)  

Hwnd    =    FindWindow_(0, GT)        
If Hwnd <> 0                 

  SetForegroundWindow_(hwnd)
  Delay(1000)
  KeyCombi(0, 1, 0, #VK_F4)
  Delay(1000)
  
  If FindWindow_(0,"Gestionnaire des tâches")  = 0
    Debug "Fenêtre Fermée!"
  EndIf
  
EndIf

End

Re: Fermer Gestionnaire de tâches Windows 8

Publié : jeu. 27/févr./2014 23:08
par Backup
essaye ça :

Code : Tout sélectionner

; trouve le handle d'une application
; et change la position de l'application trouve
; et force a quitter  ;)

hWinCalc = FindWindow_(#Null,"Gestionnaire des tâches de Windows")
Calldebugger
xw=100
yw=300
if hWinCalc
	SetWindowPos_ (hWinCalc, -1, xw, yw, 0, 0, #SWP_NOSIZE )
Endif
SendMessage_(hWinCalc,#WM_SYSCOMMAND,#SC_CLOSE,0)


; EPB

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 0:02
par nico
Je suis vert, ça fait 4H30 que je suis dessus :lol:

Marche aussi très bien sans Move:

Code : Tout sélectionner

; By Dobro
; trouve le handle d'une application
; et force a quitter  ;)

hWinCalc = FindWindow_(#Null,"Gestionnaire des tâches")
CallDebugger
If hWinCalc
   SetWindowPos_ (hWinCalc, -1, 0, 0, 0, 0, #SWP_NOSIZE | #SWP_NOMOVE )
EndIf
SendMessage_(hWinCalc,#WM_SYSCOMMAND,#SC_CLOSE,0)
Delay(100)
If FindWindow_(#Null,"Gestionnaire des tâches") = 0
  Debug "Fonctionne, merci Dobro!"
Else
  Debug "Ne fonctionne pas"
EndIf 

; EPB

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 0:19
par Backup
bah .. un coup de bol :mrgreen: :)
Marche aussi très bien sans Move:
j'avais laissé le move, car je suis parti d'un exemple de sendmessage avec le move seulement ...
je n'ai eu plus qu'a chercher sur Microsoft, comment envoyer un message de terminaison :)

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 0:39
par nico
Ben heureusement que t'es intervenu parce que je continuais le truc pour faire fonctionner mon exemple sans que l'UAC n'apparaisse ce qui est tout à fait possible en passant par les tâches planifiées.

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 0:50
par Backup
ben , là , précisément , tu me parles chinois :lol:

l'UAC ?? quezako que ct'affaire là bondiou la germaine ...
pis alors le : "en passant par les tâches planifiées." .....
Image

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 0:56
par nico
Ben en fait j'ai découvert ça en allant sur le forum Autoit, il est possible de lancer un programme avec les privilèges élevés en programmant une tâche, c'est comme ça que procède les anti-virus.

Donc se méfier et regarder ce qui est programmé dans le planificateur de tâche.

Je ferais un exemple quand j'aurais le temps, ça peut se programmer en ligne de commande ou en com.

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 0:59
par Backup
ça peut toujours etre intéressant a connaitre :)
meme si je n'en vois pas l’intérêt que je pourrai en tirer, pour ce que je fait de mon ordi ... mais bon je coucherai moins bete :)

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 4:47
par Ar-S
Merci pour vos réponses, je teste ça demain. Je rentre juste (4h47...) je vais me pieuter.

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 8:33
par nico
L' UAC , c'est l'avertissement de sécurité qui apparait pour installer un programme et qui requiert une action de l'utilisateur, cela permet donc d'écrire dans le dossier Program files, la base de registre etc...

Je suis étonné que tu ne puisses voir l'intérêt d'une telle chose ainsi que sa dangerosité.

Re: Fermer Gestionnaire de tâches Windows 8

Publié : ven. 28/févr./2014 10:31
par Backup
ben n'etant pas malfaisant, de nature, je vois plutot tout ces protocoles comme des limitations

ça me gave de ne pas pouvoir acceder a l'ensemble de mon ordi sans etre obligé de confirmer ceci ou cela ..

surtout lorsque la commande, viens du clavier.. de l'ordinateur meme ...
je peux comprendre la parano lorsqu'elle viens du reseau ...
mais meme déconnecté de celui-ci . les alertes continues ... :)

sur mon atari , j'etais pas si embété :lol:
alors tout ces trucs , ça me dépasse un peu :)