Bon c'est pas du Delphi mais c'est largement traduisible puisque les fonctions API ont le même nom partout.
Par contre, chez moi ça ne marche pas, mais bon, ça te donnera peut être des idées.
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20082 8 déc. 2006 à 17:37
Content que ça te plaise.
Par contre, n'oublie pas de bien libérer les variables hda et hdk.
En effet, c'est une petite lacune du code que je t'ai donné, car il ne le fait pas.
En corrigé, indenté, sécurisé et avec des commentaires, cela donne ceci :
procedure SendCtrlAltDel;
var hStation, hDesktop: THandle;
begin {>> Ouvre la station WinSta0 }
hStation : = OpenWindowStation('Winsta0', False, WINSTA_ACCESSCLIPBOARD
or WINSTA_ACCESSGLOBALATOMS or WINSTA_CREATEDESKTOP or WINSTA_ENUMDESKTOPS
or WINSTA_ENUMERATE or WINSTA_EXITWINDOWS or WINSTA_READATTRIBUTES
or WINSTA_READSCREEN or WINSTA_WRITEATTRIBUTES);
{>> Test de réussite }
if hStation <> 0then
try
{>> Définit la station comme station par défaut de ce thread }
if not SetProcessWindowStation(hStation) then Exit;
{>> Ouverture du bureau par défaut }
hDesktop := OpenDesktop('Winlogon', 0, False, DESKTOP_CREATEMENU
or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL
or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS
or DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS);
{>> Test de réussite }
if hDesktop <> 0then
try
{>> Définit le bureau comme bureau par défaut de ce thread }
if not SetThreadDesktop(hDesktop) then Exit;
{>> Envoi du message de hotkey à toutes le fenêtres du bureau }
PostMessage(HWND_BROADCAST, WM_HOTKEY, 0,
MakeLParam(MOD_ALT or MOD_CONTROL, VK_DELETE));
finally {>> Libération du bureau }
CloseDesktop(hDesktop);
end;
finally {>> Libération de la station }
CloseWindowStation(hStation);
end;
end;
<hr size ="2" width="100%" />
NB: Il faut avoir les droits adéquats pour pouvoir ouvrir le bureau, c'est pour cela que ça ne marche pas chez moi.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 7 déc. 2006 à 15:47
Salut,
Je vais regarder un peu ce que Windows propose en matière d'envoie de
message de touche... Hésites pas à me spamer en postant si j'ai pas
répondu d'ici qautre cinq jours.
De base, pour simuler un control alt suppr sous XP, suffit de lancer
manuellement l'exe qui est lancé par Windows lorsque l'on appuie sur la
combinaison de touche.
Il s'appelle taskmgr.exe, et se trouve dans C:\WINDOWS\system32 (Ou équivalent).
Un petit shellexecute, et le tour est joué (Unité ShellAPI).
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
fbalien
Messages postés251Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention11 novembre 2016 7 déc. 2006 à 19:24
je necharche pas forcement à lancer le Gestionaire de tache
çà peut etre pour changer le mot de passe
ou ouvrir une session lors d'une prise de main à distance
fbalien
Messages postés251Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention11 novembre 2016 10 déc. 2006 à 18:24
on peut meme faire un sauvegarde du bureau initial avnat de basculer sur 'winlogon'
hOrgDesktop :=GetThreadDesktop(GetCurrentThreadId());
pour apres rebasculer sur le bureau initial une fois l'envoie du Ctr alt Sup fait
SetThreadDesktop(hOrgDesktop );
sans oublier de libérer le bureau
CloseDesktop(hOrgDesktop );