Un thread pour ctrl+alt+del & barre menu windows

Soyez le premier à donner votre avis sur cette source.

Vue 9 102 fois - Téléchargée 551 fois

Description

devrait fonctionner sous toutes les versions de windows

c'est que je cherche une façon plus agréable que d'utiliser une dll...

je n'ai aucune idée du comportement dans de gros programme.

j'ai trouver une autre façon de faire sans thread ,

donc mise à jour

Source / Exemple :


{   2er Méthode

    Pour cette façon de faire l'idée c'est de fermer EXPLORER.EXE pour que le
    message du taskMonitor ne soit pas gérer donc pas d'icone dans la barre du
    menu.Or ce faisant EXPLORER redémarre automatiquement après x temps
    du à l'appel de taskmgr,comme le service
    taskMgr n'a pas reçu d'autorisation son icone ne pourra pas être affiché,et
    comme le service est déjà démarré toutes demandes subséquantes renvoient 
    au premier service ouvert qui est caché.

    inconvéniants :lenteur du démarrage
                  nécessite un "splash Screen" pour que l'on ne puisse percevoir
                  les actions effectuées ou toutes autres méthode simulant la
                  non disparition de la barre de tâches(capture?) 
    positif:
            + de ressources disponibles question utilisation cpu.

unit unit2;

interface

uses
  Windows,SysUtils,Classes,tlHelp32;

implementation
var

OldVal : LongInt;
C: Boolean;
FH: THandle;
FP: TProcessEntry32;
StartUpInfo: TStartUpInfo;
ProcessInfo1: TProcessInformation;

initialization

 CASE Win32Platform of
  VER_PLATFORM_WIN32_WINDOWS:           //supposé fonctionner sur 95-98 me
   SystemParametersInfo(SPI_SCREENSAVERRUNNING,Word(true),@OldVal,0);
  VER_PLATFORM_WIN32_NT:
     begin
        FH :=CreateToolhelp32Snapshot(2,0);
        FP.dwSize := Sizeof(FP);
        C := Process32First(FH,FP);
        while (C <> false) do
        begin
           if ((UpperCase(ExtractFileName(FP.szExeFile)) ='EXPLORER.EXE')or
               (UpperCase(FP.szExeFile) ='EXPLORER.EXE')) then
              TerminateProcess(OpenProcess($0001,false,FP.th32ProcessID), 0);
           C := Process32Next(FH,FP);
       end;
       CloseHandle(FH);

       FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
       with StartupInfo do
       begin
          cb := SizeOf(TStartupInfo);
          dwFlags := STARTF_USESHOWWINDOW;
          wShowWindow := SW_HIDE;
       end;
       CreateProcess(PChar('C:\WINDOWS\SYSTEM32\TASKMGR.EXE'), nil, nil, nil, False,
       NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo1);
     end;
 END;

finalization
  CASE Win32Platform of
  VER_PLATFORM_WIN32_WINDOWS:
   SystemParametersInfo(SPI_SCREENSAVERRUNNING,Word(false),@OldVal,0);
  VER_PLATFORM_WIN32_NT:
     begin
        FH :=CreateToolhelp32Snapshot(2,0);
        FP.dwSize := Sizeof(FP);
        C := Process32First(FH,FP);
        while (C <> false) do
        begin
           if ((UpperCase(ExtractFileName(FP.szExeFile)) ='TASKMGR.EXE')or
               (UpperCase(FP.szExeFile) ='TASKMGR.EXE')) then
           TerminateProcess(OpenProcess($0001,false,FP.th32ProcessID), 0);
           C := Process32Next(FH,FP);
        end;
        CloseHandle(FH);
     end;
  END;
end.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
9 déc. 2004 à 00:12
Il serait préférable de faire repartir l'explorateur (explorer.exe) à la fin du Thread pour éviter de devoir le faire soi-même....
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
5 nov. 2004 à 20:28
Pour être efficace, c'est efficace (Win98 SE). Mais des bidules pareils ça peut-être redoutable. Supposons qu'il n'y a pas de fenêtre dans l'EXE, et qu'elle soit de type console (pas de TApplication), on n'est pas supposé savoir que l'application est chargée en mémoire et peut même passer inappercu dans un THREAD VIEWER. Si de plus l'EXE se lance à chaque démarrage, et que pour un peu le reboot soit lui aussi désactivé, le PC est littéralement paralysé.

C'est pour cela qu'il faut toujours un fameux PROCESS KILLER à portée d'icône !

Remarque importante: je lis dans les commentaires "OpenKey('LeNom', TRUE)". Il ne faut jamais mettre de TRUE !!!!!!!!!!! Il faut un FALSE sécurisant... on va pas créer une clé si elle n'existe pas. De plus, l'apparition de certaines clés dans la base de registre peut entraîner quelques conséquences dans Windows. Avec Delphi 7, il faut écrire OpenKeyReadOnly.
yvemoreau Messages postés 308 Date d'inscription mardi 11 juin 2002 Statut Membre Dernière intervention 26 septembre 2008
29 déc. 2003 à 16:42
_______________________________________________________________
bonjour DelphiProg,

javais calculé que:

VER_PLATFORM_WIN32_NT:
nous renverrais toutes les versions où le "ctrl+alt+del"
ne se gère pas avec l'écran de veille...

Mes calculs sont-ils erronés ?
yve
_______________________________________________________________

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.