IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Comment bloquer le clavier et la souris


Sujet :

C++Builder

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut Comment bloquer le clavier et la souris
    Salut
    Voici une API qui me semble non documentee dans l'aide Window SDK de BCB6, elle permet de bloquer et debloquer le clavier et la souris
    Le lien qui en parle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // #include <winable.h> // ne pa oublier d'inclure
    // #include <windows.h> // ne pa oublier d'inclure
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    BlockInput(true);
    Sleep( 10000 ); // 10 secondes avant de quitter
    BlockInput(false);
    Label1->Caption = "Clavier / Souris debloques";
    }

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 70
    Points : 69
    Points
    69
    Par défaut
    Sympa comme fonction,
    Le seul problème est que le ctrl+alt+supr fonctionne encore

    Si quelqu'un arrive à bloquer le ctrl+alt+supr qu'il en fasse part ici ^^

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Galip:
    A ma connaissance on ne peut pas bloquer " ctrl+alt+supr "

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Si on peut en allant dans la base de registre, je l'ai déjà fait, mais faut être sur un compte admin pour pouvoir acceder a la base de registre

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut pottiez
    Si tu peu nous mettre un bout de code, car la je ne connais pas

  6. #6
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Oui, je retrouve ça et je poste.

  7. #7
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    J'ai ceci en Delphi, mais il me semble qu'il y avait aussi en BCB.
    je continu de chercher

  8. #8
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Je ne retrouve pas le code en BCB, mais je l'ai déjà fait je vais le chercher sur un de mes programme

  9. #9
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        registre = new TRegistry ;
        try{
          ActiverDesactiverCtrlAltSuppr(true) ;
          CtrlAltSuppr = true ;
        }catch(Exception &exception){
          ShowMessage("La combinaison Ctrl+Alt+Suppr n'a put être désactivé") ;
          CtrlAltSuppr = false ;
        }
        delete registre ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    void TForm2::ActiverDesactiverCtrlAltSuppr(bool prmDesactiver){
      if(prmDesactiver == true){
        registre->RootKey = HKEY_CURRENT_USER ;
        if(registre->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", False)){
          registre->WriteString("DisableTaskMgr", "1");
        }else{
          registre->RootKey = HKEY_CURRENT_USER;
          registre->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", True);
          registre->WriteString("DisableTaskMgr", "1");
        }
        registre->CloseKey() ;
      }else{
        registre->RootKey = HKEY_CURRENT_USER;
        if(registre->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", False)){
          registre->DeleteValue("DisableTaskMgr");
        }else{
          registre->RootKey = HKEY_CURRENT_USER;
          registre->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", True);
          registre->DeleteValue("DisableTaskMgr");
        }
        registre->CloseKey();
      }
    }
    //---------------------------------------------------------------------------

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    J'ai verifie dans ma base de registre, dans la cle " policies " la sous cle " system " n'existe pas, en regardant ton code si je ne me trompe pas tu fais un teste, si cette sous cle " system " n'existe pas tu la cree

  11. #11
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Exactement

  12. #12
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    C'est genial on peut imaginer plein d'utilisation de clavier completement bloque, par exemple la protection enfant

  13. #13
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Oui c'est un code plutôt intéressant, le seul problème et que generalement lorsque l'on veut désactiver le ctrl alt suppr, c'est sur un compte qui n'est pas admin et du coup il refuse l'accès

  14. #14
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    pourquoi ne pas vérifier les processus qui tourne simplement ?

    je l'ai déjà fait , c'est meilleur car avec le regedit il faut soit redémarrer le p soit forcer windows a tenir compte des modifications du regedit sans
    redémarrer le pc.

    si on sécurise par regedit, pour contourner cette securite faire le programme inverse simplement. mettre 0 ou supprimer la clef

    la meilleur solution est donc scanner les process et si on trouve
    taskmgr on tue le processus ( programme en boucle ) !

    voici l'exemple de : MiGoN dans www.developpez.com

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include <tlhelp32.h>
    #include <string.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
     
    short index = -1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
        RefreshProcess();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    bool KillProcess(char *ExeName)
    {
        //Recherche du processus:
        HANDLE hSnapShot;
        PROCESSENTRY32 uProcess;
        bool r;
        unsigned int PID = 0; //variable qui va stocker l'ID du processus de l'application que l'on désire fermer.
     
        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
        uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
     
        r = Process32First(hSnapShot, &uProcess);
        do   // Cette boucle énnumère tout les processus
        {
            //on cherche le nom de notre application dans le chemin d'accès de l'éxécutable du processus.
            if ( !strcmp(uProcess.szExeFile, ExeName) )
                PID = (unsigned int) uProcess.th32ProcessID;
     
            r = Process32Next(hSnapShot, &uProcess);
        } while ( r );
     
        CloseHandle(hSnapShot);
     
        if ( PID == 0)
            return false;
     
        //Fermeture du processus:
        HANDLE hTemp = OpenProcess(PROCESS_ALL_ACCESS, false, (DWORD) PID);
        TerminateProcess(hTemp,0);
     
        return true;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    // rafraichir la liste des processus en cours d'executions
    void TForm1::RefreshProcess()
    {
        HANDLE hSnapShot;
        PROCESSENTRY32 uProcess;
        bool r;
        char ExeName[256];
     
        ListBoxProcess->Clear();
     
        hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
        uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
     
        r = Process32First(hSnapShot, &uProcess);
        do   // Cette boucle énnumère tout les processus
        {
            //on cherche le nom de notre application dans le chemin d'accès de l'éxécutable du processus.
            strcpy(ExeName, uProcess.szExeFile);
            ListBoxProcess->Items->Add(ExeName);
            r = Process32Next(hSnapShot, &uProcess);
        } while ( r );
     
        CloseHandle(hSnapShot);
     
        ListBoxProcess->ItemIndex = index;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TForm1::Kill1Click(TObject *Sender)
    {
        if(ListBoxProcess->ItemIndex > -1)
        {
            int msg = MessageDlg("Êtes-vous sûr de vouloir tuer la tâche suivante :\n"
                +ListBoxProcess->Items->Strings[ListBoxProcess->ItemIndex],mtInformation,
                TMsgDlgButtons() << mbYes << mbNo,0);
            if(msg == mrYes)
                KillProcess(ListBoxProcess->Items->Strings[ListBoxProcess->ItemIndex].c_str());
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    void __fastcall TForm1::ListBoxProcessClick(TObject *Sender)
    {
        index = ListBoxProcess->ItemIndex;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // Affichage des icons de chaque processus
    // aucun resultat visible avec XP
    void __fastcall TForm1::ListBoxProcessDrawItem(TWinControl *Control,
          int Index, TRect &Rect, TOwnerDrawState State)
    {
     
        TCanvas *pCanvas = ((TListBox *)Control)->Canvas;
        pCanvas->FillRect(Rect);
        pCanvas->TextOut(Rect.Left+Rect.Height()+2,Rect.Top+1,((TListBox *)Control)->Items->Strings[Index]);
     
        WORD pIcon = 0;
        HICON hicon = ExtractAssociatedIcon(HInstance, ((TListBox *)Control)->Items->Strings[Index].c_str(), &pIcon);
        DrawIconEx( pCanvas->Handle, Rect.Left, Rect.Top, hicon, Rect.Height(), Rect.Height(), 0, NULL,  DI_NORMAL );
        DestroyIcon(hicon);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // rafraichissement automatique de la ListBox
        RefreshProcess();
    }

  15. #15
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    pour connaitre plus de détail sur les processus je fais cela de cette manière

    le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
     
    #define MAX_ID  1024
    //---------------------------------------------------------------------------
     
    typedef struct _UNICODE_STRING {
      WORD    Length;
      WORD    MaximumLength;
      PWSTR   Buffer;
    } UNICODE_STRING;
     
    typedef struct _VM_COUNTERS {
      DWORD        PeakVirtualSize;
      DWORD        VirtualSize;
      DWORD        PageFaultCount;
      DWORD        PeakWorkingSetSize;
      DWORD        WorkingSetSize;
      DWORD        QuotaPeakPagedPoolUsage;
      DWORD        QuotaPagedPoolUsage;
      DWORD        QuotaPeakNonPagedPoolUsage;
      DWORD        QuotaNonPagedPoolUsage;
      DWORD        PagefileUsage;
      DWORD        PeakPagefileUsage;
    } VM_COUNTERS;
     
    typedef struct _SYSTEM_THREAD_INFORMATION {
      LARGE_INTEGER KernelTime;
      LARGE_INTEGER UserTime;
      LARGE_INTEGER CreateTime;
      ULONG         WaitTime;
      PVOID         StartAddress;
      DWORD         UniqueProcess;
      DWORD         UniqueThread;
      long          Priority;
      long          BasePriority;
      DWORD         ContextSwitchCount;
      long          State;
      long          WaitReason;
    } SYSTEM_THREAD_INFORMATION, * PSYSTEM_THREAD_INFORMATION;
     
    typedef struct _SYSTEM_PROCESS_INFORMATION {
      DWORD             NextEntryDelta;
      DWORD             ThreadCount;
      DWORD             Reserved1[6];
      LARGE_INTEGER     CreateTime;
      LARGE_INTEGER     UserTime;
      LARGE_INTEGER     KernelTime;
      UNICODE_STRING    ProcessName;
      long              BasePriority;
      DWORD             ProcessId;
      DWORD             InheritedFromProcessId;
      DWORD             HandleCount;
      DWORD             Reserved2[2];
      VM_COUNTERS       VmCounters;
    #if _WIN32_WINNT >= 0x500
      IO_COUNTERS       IoCounters;
    #endif
      SYSTEM_THREAD_INFORMATION Threads[1];
    } SYSTEM_PROCESS_INFORMATION, * PSYSTEM_PROCESS_INFORMATION;
     
    class TForm1 : public TForm
    {
        TStringList *SLName;
        TStringList *SLPid;
     
        DWORD pID[MAX_ID];
        void PROCESSUS();
     
        // ajouter aussi 2 composant TListBox 
        Task_Exec et Task_Exec_Handle
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    namespace Windows{
    #include "Aclapi.h"
    #include "psapi.h"
    }
     
    TForm1 *Form1;
     
    BOOL __stdcall ntEnumProcess(int *pID, TStringList *SL, TStringList *SLPID, int *p_nCount)
    {
     
      long (WINAPI *pZwQuerySysInfo)(UINT, PVOID, ULONG, PULONG);
      SYSTEMTIME sttm;
      FILETIME fltm;
      PSYSTEM_PROCESS_INFORMATION pprcss;
      HANDLE hheap;
      long status;
      DWORD len;
      void *pbuff;
      char szname[MAX_PATH + 40];
      char *c;
      int nCount = 0;
      PCWSTR pszProcessName;
      SL->Clear();
      SLPID->Clear();
     
      //Récup procédure
      HINSTANCE hdll = GetModuleHandle("ntdll.dll");
      if(!hdll) return 0;
      *(FARPROC *)&pZwQuerySysInfo = GetProcAddress(hdll, "ZwQuerySystemInformation");
      if(pZwQuerySysInfo == NULL) {
        SetLastError(0);//SetLastError(ERROR_PROC_NOT_FOUND);
        return 0;
      }
     
      //Récup données
      hheap = GetProcessHeap();
      len = 0x8000; // 32Ko pour buffer, on verra
      do {
        pbuff = HeapAlloc(hheap, 0, len);
        if(pbuff == NULL) {
          SetLastError(0);//SetLastError(ERROR_NOT_ENOUGH_MEMORY);
          return 0;
        }
        status = pZwQuerySysInfo(5, pbuff, len, 0);
        if(status == 0xC0000004) { // BUFFER TROP PETIT
          HeapFree(hheap, 0, pbuff);
          len <<= 1; // on double la taille
        }
        else if(status < 0) { // ERREUR, FAUT SORTIR
          HeapFree(hheap, 0, pbuff);
          SetLastError(0);//SetLastError(status);
          return 0;
        }
      } while(status == 0xC0000004);
      pprcss = (PSYSTEM_PROCESS_INFORMATION)pbuff;
     
      //Récup nom des processus
    do{
           pszProcessName = pprcss->ProcessName.Buffer;
     
         if(pszProcessName == NULL) pszProcessName = L"Idle";
           len = WideCharToMultiByte(CP_ACP, 0, pszProcessName, -1, szname, 
                   MAX_PATH, 0, 0);
     
          pID[nCount++] = pprcss->ProcessId;
     
     
             SL->Add( (AnsiString) szname );
         SLPID->Add( (AnsiString) pprcss->ProcessId );
     
         /*
          tester szname avec taskman||taskmgr
         if(!strcmp(szname == "taskman" ) ) // -> identique -> kill
         {
            unsigned int PID = (unsigned int) pprcss->ProcessId;
            HANDLE hTemp = OpenProcess(PROCESS_ALL_ACCESS, false, 
            (DWORD)  PID);
            TerminateProcess(hTemp,0);
         } 
            */
     
      pprcss = (PSYSTEM_PROCESS_INFORMATION)(((LPBYTE)pprcss)+ 
      pprcss->NextEntryDelta);
      }
      while(pprcss->NextEntryDelta);
     
      //Récupère le dernier élément
      pszProcessName = pprcss->ProcessName.Buffer;
      if(pszProcessName == NULL) pszProcessName = L"Idle";
      len = WideCharToMultiByte(CP_ACP, 0, pszProcessName, -1, szname, MAX_PATH, 0, 0);
       pID[nCount++] = pprcss->ProcessId;
     
      *p_nCount = nCount;
      HeapFree(hheap, 0, pbuff);
      return 1;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
     
    DWORD  SetPermissions(int pid )
    {
        DWORD dwErr;
        HANDLE hpWriteDAC = OpenProcess( WRITE_DAC, FALSE, pid );
        dwErr = GetLastError();
     
        SID world = { SID_REVISION, 1, SECURITY_WORLD_SID_AUTHORITY, 0   
          };
     
        EXPLICIT_ACCESS ea =
        {
            PROCESS_TERMINATE,
            DENY_ACCESS,
            NO_INHERITANCE,
            {
                0, NO_MULTIPLE_TRUSTEE,
                TRUSTEE_IS_SID,
                TRUSTEE_IS_USER,
                reinterpret_cast<char*>( &world )
            }
        };
        ACL* pdacl = 0;
        dwErr = SetEntriesInAcl( 1, &ea, 0, &pdacl );
     
        dwErr = SetSecurityInfo( hpWriteDAC, SE_KERNEL_OBJECT,
                               DACL_SECURITY_INFORMATION,
                               0, 0, pdacl, 0 );
     
     
        LocalFree( pdacl );
        return dwErr;
    }
     
    __fastcall TForm2::TForm2(TComponent* Owner)
            : TForm(Owner)
    {
     
      SLName = new TStringList();  // création de l'objet
         SLPid = new TStringList();
     
      PROCESSUS();
     
       //Permet de ne pas couper votre programme via un autre 
       SetPermissions(GetCurrentProcessId());
       // la fonction est avant l'appel car n'est pas déclaré dans le .h
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    // fonction permettant de lire les processus
    // a mettre l'appel de cette fonction dans un Timer
     
    void TForm2::PROCESSUS()
    {
      static DWORD OldpID[MAX_ID];
      static int nOldCount = 0, nCount = 0;
     
      bool bOK = false;
     
        if (ntEnumProcess( (int*)&pID, SLName, SLPid, &nCount ))
        {
     
          if( nOldCount != nCount ) bOK = true;
          else
          {
            for (int i=0; i<nCount; i++)
               if (pID[i] != OldpID[i]) {bOK = true; break;}
          }
     
          if (bOK) // il y a eu un changement dans la liste des processus
          {
              Form1->Task_Exec->Clear();
              Form1->Task_Exec->Items->AddStrings(SLName);
              Form1->Task_Exec_Handle->Clear();
              Form1->Task_Exec_Handle->Items->AddStrings(SLPid);
     
            nOldCount = nCount;
            for (int i=0; i<nCount; i++)  { OldpID[i] = pID[i]; }
          }
        }
    }
    //---------------------------------------------------------------------------
    @+

  16. #16
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Merci Bily.sdi
    Ces codes sont tres complets et complexes, il va falloir prendre le temps de decortiquer tout cela, a premiere vue on n'a pas besoin d'etre un compte " admin " pour executer ce code, je ne pense pas que l'on bloque le clavier mais que l'on deroute l'action sur celui-ci, de toute facon il faut tester

  17. #17
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    oui , mais qu'elle est le but de bloquer le clavier et la souris ?

    moi j'ai fait ma petit protection de mode veille.

    j'ai bloquer la souris sur mon interface !

    impossible d'aller en dehors !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // mettre l'interface en : BorderStyle = bsNone
    // ne pas permettre la fermeture par Alt+F4
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
     CanClose=false;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    // dans un Timer mettez l'Interval à 1
    // les positions limites de la souris seront les coordonnées de l'interface
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
       TRect r;
     
       TPoint SG,ID;
     
       SG.x=Form1->Left;
       SG.y=Form1->Top;
       ID.x=Form1->Left+Form1->Width;
       ID.y=Form1->Top+Form1->Height;
     
       r=TRect(SG,ID);
       ClipCursor(&r);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // IMPORTANT POUR QUITTER FAUT FAIRE UN EXIT(int)
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
        //  testez si le code de sécurité est valide -> exit(0)
     
        exit(0);
    }
    //---------------------------------------------------------------------------
    Sinon la meilleur méthode pour tout bloquer " clavier et souris " est bien
    la tienne mais comment débloquer et l'utilité ?

    blockinput

    A Bientot

  18. #18
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    oui , mais qu'elle est le but de bloquer le clavier et la souris ?
    Je prepare tranquillement un programme perso de gestion de telescope, et certaines partie du programme ne permettront pas l'intervention du clavier et de la souris tant que leur traitement ne sera pas fini, afin d'eviter d'eventuelles perturbations amenant un plantage du programme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bloquer le clavier et la souris en VB6
    Par castelom dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/06/2009, 14h09
  2. Réponses: 2
    Dernier message: 19/03/2007, 01h47
  3. [C]Bloquer le clavier ou la souris ?
    Par The Lord of Nesquik dans le forum Windows
    Réponses: 13
    Dernier message: 22/05/2006, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo