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

VBScript Discussion :

appeler des API système


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Par défaut appeler des API système
    Bonjour à tous.

    Il existe un activeX qui permet de faire cela de manière assez simple. Il s'agit de wshAPIToolkitObject.ocx.

    Cet activeX permet d'appeler n'importe quelle API via une syntaxe du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set oATO = WScript.CreateObject("wshAPIToolkitObject.ucATO")
    result = oATO.CallApi("SHELL32.DLL", "SHGetPathFromIDList", lpIDList, adrPath)
    Le problème vient du fait que cet ocx n'est plus maintenu (le site de Jim Warrington a fermé en 2003), et d'après ce que j'ai pu lire plutôt désapprouvé du côté de Microsoft.

    Pourtant, cet activeX fonctionne encore très bien sous XP SP2 et permet en effet d'appeler n'importe quelle API Windows (changer la résolution, changer le titre dans la barre des tâches ..)

    Sous Windows Server 2003, cela ne marche plus du tout et c'est très très ennuyeux puisque mon appli DOIT passer sous cette version de MS Windows.


    Donc :
    - Est-ce que quelqu'un saurait comment faire fonctionner cet ocx sous Win Server 2003 ?

    - OU : quelqu'un aurait une autre solution pour lancer des API système à partir de script VB (ou jscript à la limite) sous win server 2003 ? (y compris des API prenant des objets par référence en paramètre ..)


    Si je ne suis pas clair, je vous en prie, posez moi des questions.

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonjour,
    quelle version de wshAPIToolkitObject.ocx ? (préciser taille et date de l'ocx)
    parce que l'ami jim était assez bordelique dans la gestion de ses versions
    la dernière dénommée genII donnait un ocx de 86016 octets daté du 11.10.03

    maintenant pour les appels api qui ne nécessitent ni callback ni paramètres structurés, le composant dynawrap fonctionne aussi très bien
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Par défaut
    Bonjour et merci de ta réponse.

    En effet, il y a à peu près 7 versions. La version que j'utilise a priori est celle du 15/11/2002 pesant 32ko. (donc la take 5 certainement) Cela dit, j'ai essayé avec la take 7 et cela ne marche pas mieux.

    Cette take 7 semble dater du 7/04/2003, tu aurais donc une version encore plus recente ? Cela m'intéresse on ne sait jamais. Connais-tu les différences

    A noter : Ces versions (jusqu'a la take 7) sont d'ailleurs dispos sur un site béni d'archives : http://web.archive.org/web/200402051...ObjectPage.htm


    Le problème du Dynawrap est celui que tu dit si bien .. et donc ne pourra hélas pas résoudre mon problème.

    PS: Si tu sais comment le faire marcher directement dans un vbs meme sous windows Xp SP2, cela m'interesse grandement. En effet, pour l'instant dans l'appli sur laquelle je travaille, l'appel fonctionne mais passe par différents "tubes" : appel d'un .bat sur un serveur qui lance un iexplore contenant un document Brioquery (propriétaire) qui appelle des .wsc contenant du jscript ET du vbscript (...................)

    Avec le code suivant dans un vbs, j'obtient (sous Win XP SP 2) :

    -un bug "variable non définie : Instantiate" ---- ??? dans le cas code suivant
    - un plantage sans bug apparent (seul MsgBox "MSG 001" s'affiche) dans le cas ou je passe par CreateObject(....

    J'ai bien registré le composant pourtant ..

    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
     
    Option Explicit
    '   (note: using "call instantiate" to provide better info in case obj is missing)
    Dim oATO
    Call Instantiate(oATO, "wshAPIToolkitObject.ucATO", "oATO_")  ' (catch dlg close)
    'Set oATO = CreateObject("wshAPIToolkitObject.ucATO")
    'Set oATO = WScript.CreateObject("wshAPIToolkitObject.ucATO")
    MsgBox("MSG 001")
    ' ------------------------------------------------
       Call hATO.CallAPI("user32.dll", "OpenClipboard", 0 )
       MsgBox("03")
       Dim hClipBd : hClipBd = hATO.CallAPI("user32.dll", "GetClipboardData", 1 )
       MsgBox("04")
       Dim hClpBdData : hClpBdData = hATO.CallAPI("kernel32.dll", "GlobalLock", hClipBd )
       MsgBox("05")
       Dim szClipB : szClipB = hATO.CallAPI("kernel32.dll", "lstrlenA", hClpBdData)
       MsgBox("06")
     
    ' ----------------------------------------------

    Avec ces nouveaux éléments si quelqu'un a l'illumination, je l'en remercie mille fois par avance .. !

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonsoir,
    Si tu sais comment le faire marcher directement dans un vbs meme sous windows Xp SP2, cela m'interesse grandement. En effet, pour l'instant dans l'appli sur laquelle je travaille, l'appel fonctionne mais passe par différents "tubes" : appel d'un .bat sur un serveur qui lance un iexplore contenant un document Brioquery (propriétaire) qui appelle des .wsc contenant du jscript ET du vbscript

    houla...
    1°- la méthode instantiate est une routine de création d'objet avec un errorcheck que jw définissait systématiquement dans ses exemples de script
    il faut donc utiliser simplement la fonction createobject
    2°- ton exemple de lecture de clipboard n'est de toute façon pas fonctionnel mais je suppose que ce n'est qu'un extrait
    je joins son dernier contrôle genII avec les exemples et la page de son site expliquant les changements de syntaxe. A essayer

    maintenant, s'il s'agit de lire du contenu texte dans le clipboard, j'ai donné un exemple dans les contributions VB6... (puisqu'il n'y a pas de contribs VBS )

    http://www.developpez.net/forums/sho...d.php?t=235564
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juin 2005
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juin 2005
    Messages : 175
    Par défaut
    Omen,

    1) il faut que je précise que je découvre vbs avec cette appli. Or, je ne pense pas que ce soit la manière la meilleure pour appréhender ce langage vu la complexité du sujet des API systèmes (mais passons). Je croyais donc que "Instantiate" était une fonction native de vbs ....

    2) Merci beaucoup pour cette dernière version du composant ocx (introuvable sur le net?),mais cela n'a pas résolu le problème sous Win server 2003 (serveur Citrix!)

    3) Bravo pour ton script de lecture de clipboard avec Dynawrap je n'ai pas testé mais ca devrait macrher sous Citrxi- Win server 2003 puisque j'ai pu faire des tests ok avec cette dll (comme changer le titre d'une fenetre dans la barre des taches), seulement il y a plusieurs autres fonctions qui marchent avec le toolkit et qui ne peuivent pas se servir "as is' de dynawrap (ET développées par mon prédecesseur et représentant des semaines de travail donc très diffcilement "jetables" sous le pretexte d'un changement d'OS...) :

    - ouvrir une boite de dialogue pour la selection d'un dossier
    - ouvrir une boite de dialogue pour la selection d'un fichier
    - retourner le handle de l'objet ayant le focus
    - set screen resolution
    - Set clipboardText (évidement ...)


    Voici maintenant un exemple de code : (une fonction contenue dans un WSC)
    - elle fonctionne sous Win XP
    - sous W server 2003 (Citrix), elle plante au moment du "CallAPI" mais PAS au moment du oATO.CreateTypDef -->>> donc je me demande si le problème n'est pas simplement un problème de sécurité (dans ce cas prions pour que ce soit paramétrable ) inhérent à Win server 2003 ou Citrix.
    - Note que cet exemple n'est pas pertinent puisque j'ai pu le faire fonctionner sous Ws2003 Citrix, en passant par Dynawrap (on peut le faire car les tyupes des paramètres sont "simples" : Long et String)


    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
     
    '=====================
    'NOM:	SetWindowText( hwnd As Long, nouveauTitre As String) As Long
    'DESC:	Remplace le titre de la fenetre dont le handle est hwnd par la chaine nouveauTitre
    '=====================
    Function SetWindowText( nouveauTitre, hwnd)
       On Error Resume Next
       lastError = ""
     
       Err.clear
     
       Dim tMEM, pMEM : tMEM = "WindowTitle"
       If Err.Number = 0 Then pMEM = oATO.CreateTypDef(tMEM, 250)
       If Err.Number <> 0 Then
          'Echec Allocation d'un objet ATO
          SetWindowText = -1
       Else
     
          oATO.PutString(tMEM, 0) = Left(nouveauTitre, 250)
     
          SetWindowText = oATO.CallAPI("User32.dll", "SetWindowTextA", hwnd, pMEM )
     
          Call oATO.DestroyTypDef(tMEM)
     
          If Err.Number = 0 Then
             SetWindowText = 1
          Else
             SetWindowText = -2
          End If      
       End If
     
    End Function

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonjour,
    sur les 5 fonctions,
    - les 2 premières demandent des params structurés
    - la 3ème à voir en fonction du code existant
    - les 2 dernières devraient pouvoir être appelées par dynawrap
    il ne devrait pas être impossible, moyennant un formatage adéquat des variables, de gérer les params structurés avec dynawrap mais j'avoue ne m'être jamais posé la question sérieusement

    s'agissant du contrôle de jw, sa méthode callapi utilise comme il l'indiquait sur son site une technique un peu scabreuse proposée par Arkadiy Olovyannikov toujours disponible ici: http://www.freevbcode.com/ShowCode.Asp?ID=1863
    qui détournait la windowproc et que l'os ne doit pas supporter
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

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

Discussions similaires

  1. Appel des api Oracle HRMS par une plateforme DotNet
    Par hanen97 dans le forum Accès aux données
    Réponses: 0
    Dernier message: 04/10/2010, 15h54
  2. appeler des web services, quel API choisir?
    Par amina.5 dans le forum Services Web
    Réponses: 2
    Dernier message: 24/02/2010, 17h40
  3. Réponses: 2
    Dernier message: 10/04/2007, 14h48
  4. Réponses: 1
    Dernier message: 14/03/2007, 15h56
  5. 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