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

  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 303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 303
    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 303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 303
    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 303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 303
    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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 303
    Par défaut
    voir également ici: http://groups.google.com.tw/group/mi...aea72af921bfe7
    concernant la méthode utilisée par jw (alias mr_unreliable ) qui doit être incompatible avec w2003+cytrix
    bonne lecture
    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

  8. #8
    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
    Incroyable ! Il était encore vivant au 23 mai 2006. Tout n'est peut être pas perdu .. ( )

    Passer la journée sur ces problèmes , ca relève bien du ,tu l'a dit.

    - retourner le handle de l'objet ayant le focus : OK ca fonctionne
    - set screen resolution : OK : je décide de m'en passer, on ne va pas modifier la résolution du serveur citrix de toute manière.

    - Set clipboardText (évidement ...)
    - ouvrir une boite de dialogue pour la selection d'un dossier
    - ouvrir une boite de dialogue pour la selection d'un fichier

    Alors la, je suis un peu mal, puisqu'en cherchant longuement sur le sujet, je n'ai trouvé personne qui ait réussi à gérer les params structurés avec dynawrap (si on excepte le passage par ref de William Epp qui ne fonctionne qu'avec des String : voir : http://people.freenet.de/gborn/WSHBa...SHDynaCall.htm que tu dois également connaitre). Or moi, je ne suis pas Jim Wrrington ou consort, je sais déjà que je n'y arriverai pas en un temps raisonnable.

    Pour setclipboard, c'est surement possible mais je ne vois pas comment. Le code dont je dispose utilise à cette fin 7 ou 8 appels a CallAPI dont au 1 par référence, il faudrait squizzer celui ci (remplacé par quoi ?) et les autres avec Dybnawrap.

    Pour les boites de selection fichier, il doit peut etre exister un moyen. Comment font les programmes de téléchargement par exemple (plug-in de navigateurs)?

    Ah, au fait, le prog est prévu pour passer exclusivement par iexplore.exe, peut-etre y a t-il moyen d'utiliser une des fonctions du browser pour trouver la solution...
    ?

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 303
    Par défaut
    Incroyable ! Il était encore vivant au 23 mai 2006
    il est même toujours actif sur les groups google ou d'autres forums encore aujourd'hui mais refuse de réactiver son site. il boude...
    d'après la discussion visée dans mon post précédent, il semble bien que le problème posé par son contrôle soit lié au dep (Data Execution Prevention) de windows 2003
    une solution consisterait à modifier son source avec le code proposé par mr schmidt ici: http://groups.google.com.tw/group/mi...c941ac7eba9b43
    pour le clipboard, si le script doit être embarqué dans ie, il existe un objet clipboard disponible dans l'objet internet application mais qui peut être indisponible si le niveau de sécurité est élevé...
    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

  10. #10
    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
    En ce qui concerne mon cas de moi même,personellement , le problème de règlage de sécu dans IE n'en est pas un, puisque justement le but du serveur Citrix est de centraliser les applis sur une seule machine. Donc une fois le règlage fait une bonne fois pour toutes sur le serveur, on n'en parle plus. Cela dit, le problème sera plus pour le choix d'un fichier sur disque que pour le clipboard.

    Maintenant effectivement, on pourrait tout résoudre d'un coup en "rendant l'ocx de mr Unreliable" compatible avec w server 2003.... (peut etre que des gorilles de chez MS sont venus chez lui en 2003 ...)

    Si on modifie son source, c'est un coup à devenir aussi "célèbres" que lui Autant le dire clairement, j'en suis complètement incapable, trop de choses m'échappent dans le processus. C'est bien le problème depuis le début, même si en partie grace à toi je commence à comprendre certaines choses.

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

    Informations forums :
    Inscription : Février 2006
    Messages : 1 303
    Par défaut
    Si on modifie son source, c'est un coup à devenir aussi "célèbres" que lui
    j'ai le source de la version take 7 à ta disposition
    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

  12. #12
    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
    Tu as mal lu la suite ....

    Par contre en désactivant sur Citrix la DSE, tiens toi bien CA MARCHE !

    Enfin il y a quelques trucs à changer encore certainement, mais l'appel à CallAPI fonctionne !

    Je vous tiens au courant sur ce topic (je mettrais résolu plus tard) Merci Omen999!

  13. #13
    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
    Cette fois c'est sur, ce problème précis est résolu. (cf les posts ci-dessus)

+ 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