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 :

Questions au sujet des API windows


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Questions au sujet des API windows
    Bonjour à toutes et à tous.

    Je viens ici pour poser une question relativement général mais poussé à la fois. Voilà je développe une application avec C++ builder6 et je vais faire tourner cette application sur une tablette Windows 8.1. La est mon problème, la compatibilité est parfaitement assuré mais je suis face à un problème.

    Je ne veux que la tablette serve exclusivement à mon application. C'est à dire au démarrage la tablette ne lance que mon application (qui est en plein écran bien sûr). Je ne veux pas d'explorer.exe, je ne veux rien d'autre que mon application et aussi je souhaiterais désactiver les fonctions Windows 8.

    Pour ceux qui connaissent, je parle de pouvoir faire apparaitre un bandeau sur la gauche ou alors de pouvoir réduire l'application en partant du haut de l'écran, tous ces raccourcis je souhaiterais les "interdire". Je pense que c'est réalisable via les API mais j'ai du mal à savoir ou et qui chercher.

    Voilà merci pour votre aide

  2. #2
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    oui, ce que vous voulez est possible au moins en partie, je vous laisse quelques lignes de codes qui utilisent la libraire WinLock.dll qu'il faut mettre dans le même répertoire que le fichier exécutable :

    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
    //---------------------------------------------------------------------------
    TWindows::TWindows(void)
    {
       FHinstDLL=LoadLibrary("WinLock.dll");
     
       if (FHinstDLL)
       {
          FWinGoLock=(TWinGoLock)GetProcAddress(FHinstDLL,"WinGoLock");
          FWinFlagLock=(TWinFlagLock)GetProcAddress(FHinstDLL,"WinFlagLock");
          FWinEndLock=(TWinEndLock)GetProcAddress(FHinstDLL,"WinEndLock");
       }
    }
    //---------------------------------------------------------------------------
    TWindows::~TWindows(void)
    {
       if (FHinstDLL)
          FreeLibrary(FHinstDLL);
    }
    //---------------------------------------------------------------------------
    void TWindows::VerrouilleWindows(void)
    {
       if (FHinstDLL && FWinGoLock)
          FWinGoLock(0x001F);
    }
    //---------------------------------------------------------------------------
    void TWindows::DeverrouilleWindows(void)
    {
       if (FHinstDLL && FWinEndLock)
          FWinEndLock();
    }
    //---------------------------------------------------------------------------
    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
    class TWindows
    {
       private:
          typedef void (__stdcall *TWinGoLock) (Word);
          typedef void (__stdcall *TWinFlagLock) (Word);
          typedef void (__stdcall *TWinEndLock) (void);
     
          HINSTANCE FHinstDLL;   
          TWinGoLock FWinGoLock;
          TWinFlagLock FWinFlagLock;
          TWinEndLock FWinEndLock;
     
       public:
          void VerrouilleWindows(void);
          void DeverrouilleWindows(void);
     
          TWindows(void);
          ~TWindows(void);
    };
    Voilà le fichier WinLock.dll : WinLock.zip

    Comme je suis sympa, je vous rajoute quelques fonctions dont vous pourriez avoir besoin :

    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
    void TWindows::ActivationDemarrageAutomatique(AnsiString tag, AnsiString exename)
    {
       TRegistry *reg=new TRegistry();
       reg->RootKey=HKEY_LOCAL_MACHINE;
       reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);
       if (reg->ReadString(tag)!=exename)
          reg->WriteString(tag,exename);
       reg->CloseKey();
       delete reg;
    }
    //---------------------------------------------------------------------------
    void TWindows::DesactivationDemarrageAutomatique(AnsiString tag)
    {
       TRegistry *reg=new TRegistry();
       reg->RootKey=HKEY_LOCAL_MACHINE;
       reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);
       if (reg->KeyExists(tag))
          reg->DeleteValue(tag);
       reg->CloseKey();
       delete reg;
    }
    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
    bool TWindows::AdjustAutorisation(void)
    {
       HANDLE handle;
       LUID valeur;
       TOKEN_PRIVILEGES jeton;
       if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&handle))
          return false;
       if (!LookupPrivilegeValue(0,SE_SHUTDOWN_NAME,&valeur))
          return false;
       jeton.PrivilegeCount=1;
       jeton.Privileges[0].Luid=valeur;
       jeton.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
       AdjustTokenPrivileges(handle, false,&jeton,sizeof(TOKEN_PRIVILEGES),0,0);
       if (GetLastError())
          return false;
       return true;
    }
    //---------------------------------------------------------------------------
    void TWindows::FermerWindows(int type)
    {
       if (AdjustAutorisation())
       { 
          switch (type)
          {
             case ETEINDRE:
                ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
             break;
             case REBOOT:
                ExitWindowsEx(EWX_FORCE | EWX_REBOOT,0);
             break;
             case LOGOFF:
                ExitWindowsEx(EWX_FORCE | EWX_LOGOFF,0);
             break;
             case VEILLE:
                SetSystemPowerState(false,true);
             break;
          }
       }
    }
    Sinon, vous pouvez faire une fenêtre avec juste le bouton "fermer" activé que vous bloquerez de la façon suivante dans l'évènement FormClose() :


  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup pour votre aide je regarde tout de suite et je vous tiens au courant.

    MERCI

    [edit] J'ai regardé, mais je ne comprend pas pas vraiment comment utiliser ce .dll, comment puis-je faire pour que lorsque j'appuie sur un bouton de la classe TForm1 appelle une des vos fonctions ?

  4. #4
    Membre habitué
    Avatar de Freeze
    Homme Profil pro
    Inscrit en
    Octobre 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut
    Tout d'abord, il faut créer les fichiers Windows.cpp et Windows.h avec le code de la classe TWindows.
    Ensuite copier la dll dans le répertoire du fichier exécutable,
    Ensuite, dans le .h de la form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "Windows.h"
     
    ...
     
    private:
    TWindows *windows;
    Dans le .cpp de la form : Constructeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TWindows *windows = new TWindows();
    Destructeur:

    Bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    windows->VerrouilleWindows();
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    windows->DeverrouilleWindows();

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Pff.... Merci beaucoup j'avais tout simplement oublier de créer a classe ...

    Je vais donc utiliser ces fonction et voir si cela correspond à mes attentes. Uni idée pour "tuer" le processus explorer.exe ?

    edit: j'arrive a compiler mais lorsque je tente d'executer une fonction j'ai une erreur qui apparait au sujet d'une violation d'accès

    edit2: Comment avez-vous eu des informations concernant cette dll car j'ai beau chercher je ne trouve rien la concernant...

    edit3: En continuant de me documenter je suis tomber sur les GPO, apparemment cela pourrait aussi répondre à mon problème ?

Discussions similaires

  1. question au sujet des threads
    Par Portanoo dans le forum Général Python
    Réponses: 1
    Dernier message: 31/07/2008, 17h29
  2. Questions au sujet des archives et des packages
    Par lecharcutierdelinux dans le forum Administration
    Réponses: 17
    Dernier message: 15/06/2007, 09h14
  3. Questions au sujet des activex
    Par Sonic dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/04/2007, 12h32
  4. Comment appeler des API windows en C ?
    Par JuanLopez1966 dans le forum Windows
    Réponses: 6
    Dernier message: 22/12/2004, 10h34

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