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

 Delphi Discussion :

Probleme de Drag&Drop avec UAC (Seven/Vista)


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Par défaut Probleme de Drag&Drop avec UAC (Seven/Vista)
    Bonjour,

    J'ai besoin a l'aide de mon programme de lire des clé de registre qui se trouve dans HKEY_LOCAL_MACHINE. J'ai donc besoin des droits administrateurs sinon je suis redirigez vers un registre virtuel. Pour cela j'ai ajouter un manifest a mon application pour faire apparaitre l'invite UAC.

    Seul problème, Je gère dans l'application la récupération du chemin d'un fichier par drag&drop. Mais celui-ci n'as pas l'air de fonctionner si UAC Actif.

    Je crois avoir croisée 2/3 post indiquant que cela viendrais du fais que explorer est lancé en mode "User" et que mon application en mode "ADMIN",
    J'ai trouver qu'il faillais rajouter un (uiAccess="true") a mon manifest mais cela me génère un autre message d'erreur "Une référence a été renvoyée par le serveur"

    Je vois plus comment faire :S
    Pouvez-vous m'aider ou il faudra que je me passe de l'UAC?

    Voila mon manifest.
    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
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
      <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="UAC_Elevation_Prompt"
        type="win32"/> 
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="true"/>
          </requestedPrivileges>
        </security>
      </trustInfo>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            publicKeyToken="6595b64144ccf1df"
            language="*"
            processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>
    </assembly>

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Tu as besoin d'un manifest pour éviter la virtualisation, mais pas de droits administrateur si tu ne veux que lire HKEY_LOCAL_MACHINE.

    Manifest sur AsInvoker et ouverture de la clé par OpenKeyReadOnly.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Par défaut
    Hum bon j’avoue je doit aussi aller les modifié
    L'as n'est pas vraiment le problème j'arrive bien a avoir accès au registre que je veut

    Mais se qui se passe est que je n'ai plus de Drag&Drop
    Celui-Ci n’exécute aucun code si UAC activé. j'ai bien l’icône qui se met au dessus de mon appli mais après quand je lâche rien ne se passe

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Pourquoi écrire sous HKEY_LOCAL_MACHINE

    Deux applications de niveau d'intégrité différent ne peuvent communiquer entre elles. C'est le principe même de l'UAC.
    Tu peux cependant annuler certaines limitations de l'UIPI. Dans ton cas, il faut autoriser les messages Drag&Drop à l'aide de ChangeWindowsMessageFilterEx. WM_DROPFILES au minimum, mais il y en a peut-être d'autres...

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2012
    Messages : 28
    Par défaut
    J'en suis arriver un un code comme cela

    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
    procedure TSDIAppForm.FormCreate(Sender: TObject);
    Type
      TChangeWindowMessageFilterEx = function(msg: Cardinal; action: Word): BOOL; stdcall;
    Const
      WM_COPYGLOBALDATA = 73;
      MSGFLT_ADD        = 1;
    Var
      ChangeWindowMessageFilterEx: TChangeWindowMessageFilterEx;
      hUser32: HWND;
    begin
      If Win32MajorVersion >= 6 Then
      Begin
        hUser32 := GetModuleHandle('USER32');
        ChangeWindowMessageFilterEx := GetProcAddress(hUser32, 'ChangeWindowMessageFilterEx');
        ChangeWindowMessageFilterEx(WM_COPYGLOBALDATA,1);
        ChangeWindowMessageFilterEx($0233,1); { $0233 = WM_DROPFILE}
      End;
    End;
    Mais sa me lance une violation d’accès au démarrage de l'application.

    Désolé je suis Débutant en programmation Et je voit pas trop comment gerez ici.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    Que valent hUser32 et surtout ChangeWindowMessageFilterEx après le GetModuleHandle et le GetProcAddress ?

    La VA pourrait venir d'un appel de fonction non assignée...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/12/2007, 09h16
  2. [JLayerPane] glasspane et probleme de drag'n drop
    Par bouye dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 29/10/2007, 22h01
  3. [AJAX] Drag and Drop avec AJAX
    Par bonano dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/03/2007, 22h44
  4. probleme de Drag and Drop
    Par timsah dans le forum C++Builder
    Réponses: 8
    Dernier message: 03/12/2005, 09h19
  5. "Drag and drop" avec directinput
    Par batosai dans le forum DirectX
    Réponses: 1
    Dernier message: 16/06/2004, 16h48

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