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

Soyez le premier à donner votre avis sur cette source.

Vue 8 734 fois - Téléchargée 505 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

cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24 -
Pas mal !
J'ai pas testé mais j'ai regardé avec attention. Un bon code, ça se repère au premier coup d'oeil.
Pour connaitre les différentes versions de Windows, tu peux utiliser : http://www.delphifr.com/code.aspx?ID=11811
yvemoreau
Messages postés
320
Date d'inscription
mardi 11 juin 2002
Statut
Membre
Dernière intervention
26 septembre 2008
-
_______________________________________________________________
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
_______________________________________________________________
cs_grandvizir
Messages postés
1237
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
8 -
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.
ni69
Messages postés
1529
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
6 -
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....
josswel
Messages postés
70
Date d'inscription
lundi 23 mai 2005
Statut
Membre
Dernière intervention
3 juin 2009
-
delphiprog ton adresse "": http://www.delphifr.com/code.aspx?ID=11811 " ne marche pas ??
bon code ! bien que je ne sois pas specialiste en thread

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.