Simuler un Ctrl Alt Sup [Résolu]

fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 5 déc. 2006 à 19:14 - Dernière réponse : fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention
- 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
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 8 déc. 2006 à 14:24
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

Merci florenth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de florenth
Meilleure réponse
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 8 déc. 2006 à 17:02
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;

Merci fbalien 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de fbalien
Meilleure réponse
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 8 déc. 2006 à 17:37
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

Merci florenth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de florenth
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 7 déc. 2006 à 15:47
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
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 7 déc. 2006 à 19:24
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
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 10 déc. 2006 à 18:24
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.