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 :

[D7] problème avec GetActiveOleObject


Sujet :

Delphi

  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 484
    Par défaut [D7] problème avec GetActiveOleObject
    Bonjour,
    mon programme doit écrire dans un document Word qui est ouvert au préalable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Try
      WordApp := GetActiveOleObject('Word.Application');
    except
      // OleCheck, appelée par GetActiveOleObject, peut déclencher une exception EOleSysError
      // message 'Opération non disponible'
        on EOleSysError do
         begin
           ShowMessage('Word n''est pas actif') ;
         end;
    end;
    Le problème est que GetActiveOleObject échoue même si un instance de word est ouverte, quand mon programme et Word n'ont pas le même niveau de privilèges. Par exemple, mon programme en mode admin et Word en mode normal.

    Y a t il un moyen de détecter dans mon appli, le niveau de privilèges des 2 programmes et éventuellement de les accorder ?

    Merci
    A+
    Charly

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 484
    Par défaut
    Pour mon appli je sais détecter le niveau de privilèges :

    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
    { ================================================================== }
    procedure isAdmin();
    var
      reg: TRegistry;
      openResult: Boolean;
    begin
      reg := TRegistry.Create(KEY_READ);
      reg.RootKey := HKEY_LOCAL_MACHINE;
      reg.Access := KEY_WRITE;
      openResult := reg.OpenKey('Software\MyCompanyName\MyApplication\',True);
      if not openResult = True then
        begin
        MessageDlg('Unable to write to registry. Your application does NOT have Administrator level privileges.',
                    mtError, mbOKCancel, 0);
        end
      else
        begin
        MessageDlg('Write to registry permitted. Your application has Administrator level privileges.',
                    mtInformation, mbOKCancel, 0);
        end;
      reg.CloseKey();
      reg.Free;
    end;
    { ================================================================== }
    Mais pour Word ? That is the question

    A+
    Charly

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 044
    Par défaut
    Cela me semblerait curieux qu'une application Admin ne puisse pas voir une application normale, l'inverse évidemment c'est interdit mais dans ce sens, ça serait étrange.

    Ayant un doute sur OLE, j'avoue que je n'en ai pas fait depuis longtemps et j'ai quasiment eu tout le temps les versions 32 et 64 bits installés en double.

    D7 32 Bits peut-il voir une instance de OLE 64 Bits ?
    Cela dépend
    Par exemple ODBC via ADO, on ne voit que les Drivers et Alias correspondant à l'architecture, mais ADO c'est de l'In-Process

    Alors que Excel c'est du Out-of-process donc un exe 32 Bits doit pouvoir appeler un OLE 64Bits par Automation ... à vérifier !
    En théorie cela doit fonctionner D7 32 + Excel 64

    Faut donc pousser plus loin Google donne tout de suite de ce lien intéressant GetObject ou GetActiveObject ne trouve pas une application Office en cours d’exécution en particulier la Solution de contournement pour C++ que j'avais évoqué ici pour un problème similaire

    En fait cela consiste à lancer Excel par le Shell pour le forcer à enregistrer son instance dans la Running Object Table car si Excel est déjà lancé, la nouvelle instance en réalité ne démarre pas mais peut mettre la prémière instance de Excel au premier plan (oui la perte de focus par Excel le force aussi à s'inscrire dans la ROT)
    Voir RegisterActiveObject qui t'expliquera la running object table (ROT)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 484
    Par défaut
    Merci Shai, je vais regarder le lien.

    Dans mon cas, D7 et Word sont en 32 bits

    A+
    Charly

Discussions similaires

  1. [XL-2016] Problme avec opérateur OR
    Par Superpat9999 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/07/2020, 13h57
  2. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  3. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  4. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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