Simuler un Ctrl Alt Sup [Résolu]

Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Dernière intervention
11 novembre 2016
- - Dernière réponse : fbalien
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Dernière intervention
11 novembre 2016
- 10 déc. 2006 à 18:24
Bonjours
Je cherche donc à simuler via l'api Keybd_event la séquence
de touches Ctrl alt et Del

j'ais testé ceci sans succès :



      keybd_event(VK_LCONTROL ,0,0,0 );
      keybd_event(VK_LMENU  ,0,0,0 );
      keybd_event(VK_DELETE ,0,0,0 );
      keybd_event(VK_DELETE ,0,2,0 );
      keybd_event(VK_LMENU  ,0,2,0 );
      keybd_event(VK_LCONTROL ,0,2,0 );
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
1
3
Merci
Salut,
Logiquement c'est un peu plus complexe qu'un simple Keyboard event mais j'ai trouvé un lien qui porrait t'intresser : http://www.codeproject.com/system/alt_control_delete.asp

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.

++
Flo

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de florenth
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Dernière intervention
11 novembre 2016
1
3
Merci
Merci florenth

ça marche
je précise que je l'utilise dans un service qui démarre en
tant que system donc ne marche pas forcement dans un prog classique



convertie en Delphi çà donne çà


procedure sendCtrlAltSup ;

var

  hda : THandle;

  hdk : THandle;

begin

  hda := 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);

    if hda = 0 then exit;

    //

    // Set the windowstation to be winsta0

    //

    if  not SetProcessWindowStation(hda)then exit;

    //

    // Get the default desktop on winsta0

    //

    hdk := 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);

    if (hdk =0)then exit;

    //

    // Set the desktop to be "default"

    //

    if not SetThreadDesktop(hdk) then exit;

    PostMessage(HWND_BROADCAST,WM_HOTKEY,0,MAKELPARAM(MOD_ALT or MOD_CONTROL,VK_DELETE));

end;

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de fbalien
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
1
3
Merci
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.

A+
Flo

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de florenth
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
11
0
Merci
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).


@+
Commenter la réponse de cs_rt15
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Dernière intervention
11 novembre 2016
1
0
Merci
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
Commenter la réponse de fbalien
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Dernière intervention
11 novembre 2016
1
0
Merci
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 );
Commenter la réponse de fbalien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.