Trouver le nom d'une session COM avec PureDisHelper [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Trouver le nom d'une session COM avec PureDisHelper [Résolu]

Message par Kwai chang caine »

Bonjour à tous

J'ai essayé de convertir un code VB utilisant l'AUTOMATION en PB qui utilise la lib DispHelper

Code : Tout sélectionner

Dim System As Object 
Dim Sessions As Object 
  
Set System = CreateObject("Atra.System") 
Set Sessions = System.Sessions 
  
For i = 1 To Sessions.Count 
  
 If Not Sessions(i) Is Nothing Then 
      
  MsgBox Sessions(i).Name 
   
 End If 
  
Next 


J'ai pu convertir une partie qui marche.

Je me connecte bien à l'objet COM
J'ai bien le nombre de sessions ouverte "Count"

Je n'ai pas compris comment faire pour retourner le nom d'une session

Code : Tout sélectionner

Define System.l 
Define Sessions.l 
Define Count.l 
Define Name.s 

System = dhCreateObject("Atra.System") 
Sessions = dhCreateObject("Atra.Sessions") 

dhGetValue("%d", @Count, Sessions, ".count") 

For i = 1 To Count 
  dhGetValue("%t", @Name, Sessions, ".item(%d)", 1) 
  Debug Name 
Next  
Si quelqu'un a une idée ...
Merci beaucoup
Bonne journée
Dernière modification par Kwai chang caine le mer. 28/mai/2008 12:02, modifié 1 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Et en rajoutant la ptite ligne là-dedans?

Code : Tout sélectionner

Define System.l 
Define Sessions.l 
Define Count.l 
Define Name.s 

System = dhCreateObject("Atra.System") 
Sessions = dhCreateObject("Atra.Sessions") 

dhGetValue("%d", @Count, Sessions, ".count")
 
Name = Space(256) ; Mh???

For i = 1 To Count 
 dhGetValue("%t", @Name, Sessions, ".item(" + Str(i) + ").name") 
 Debug Name 
Next  
ça marche?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour Ollivier content de te parler :wink:

Bah, j'ai pas l'impression que ça marche entretemps j'ai essayé ça et ça marche pas non plus :cry:

Code : Tout sélectionner

Define System.l
Define Sessions.l
Define Count.l
Define Name.s

System = dhCreateObject("Atra.System") 
Sessions = dhCreateObject("Atra.Sessions") 

dhGetValue("%d", @Count, Sessions, ".count") 

Name = Space(100)

For i = 1 To Count
 dhGetValue("%o", @Name, Sessions, ".Item(%d).Name", 1) 
 Debug Name
Next 
En fait je ne sais pas ce qu'il faut retourner au debut :

%O un Dispatch ..(Je sais a peine ce que c'est :oops:)
%d un integer
%t un texte
Dernière modification par Kwai chang caine le mer. 28/mai/2008 10:13, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Le seul code qui me retourne quelque chose c'est celui la, mais je suis pas plus avancé car je sais pas quoi en faire et ce que ça veux dire :oops:

Retour :

Code : Tout sélectionner

1360868
1360868

Code : Tout sélectionner

Define System.l
Define Sessions.l
Define Count.l
Define Name.l

System = dhCreateObject("Atra.System") 
Sessions = dhCreateObject("Atra.Sessions") 

dhGetValue("%d", @Count, Sessions, ".count") 

For i = 1 To Count
 dhGetValue("%o", @Name, Sessions, ".Item") 
 Debug Name
Next 
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Salut Kwaï, je n'ai pas VB, alors c'est seulement à tâtons que je peux t'aider...

Ce nombre (1380000 etc...), ce ne serait pas l'adresse d'une chaîne disponible avec Nom$ = PeekS(1380000 etc...) ??

?

Ollivier
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Je pensais aussi qu'un nom c'est du texte dont %t et non pas %o.
Et si c'est %o, pourquoi un dispatch ça ne serait pas une liste d'adresse vers des chaînes ? (je te dis ça par pure ignorance...)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ollivier a écrit :Salut Kwaï, je n'ai pas VB, alors c'est seulement à tâtons que je peux t'aider...
Ce nombre (1380000 etc...), ce ne serait pas l'adresse d'une chaîne disponible avec Nom$ = PeekS(1380000 etc...) ??

Ollivier
Bah, j'y est aussi un peu pensé, mais ça n'a pas marché :cry:
Je pensais aussi qu'un nom c'est du texte dont %t et non pas %o.
Et si c'est %o, pourquoi un dispatch ça ne serait pas une liste d'adresse vers des chaînes ? (je te dis ça par pure ignorance...)
Oui c'est vrai que de toute evidence, ce serait logique que ce soit %T

Mais ça marche pour cette fonction

Code : Tout sélectionner

dhGetValue("%T", @Result, Session,".Screen.Area(%d, %d, %d, %d, %m, %d)", Lig, Col, Lig, Col + Longueur, 1)
ça me retourne bien ce qui est ecris sur l'ecran, mais ça marche pas avec le retour du nom de la session.
Peut etre parcequ'elle est dans un tableau ????
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

J'ai posé la question sur le forum allemand (Dur dur)

En fait c'etait bien une adresse de phrase, mais on met %T et on a quand meme un retour en adresse 8O
Moi je pensais bettement que j'aurais directement la phrase :oops:

Et le grand KIFFY m'a donné la solution.
Alors je vous la livre pour celui a qui ça pourrait servir :wink:

Code : Tout sélectionner

Define System.l
Define Sessions.l
Define Count.l
Sessions = dhCreateObject("Atra.Sessions") 

dhGetValue("%d", @Count, Sessions, ".count") 

For i = 1 To Count 

  dhGetValue("%T", @Name, Sessions, ".item(%d)", i) 

    If Name 
      Debug PeekS(Name) 
      dhFreeString(Name) 
    EndIf 

Next
Encore merci et bonne journée
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

heu !! tu es bientôt prêt a allez te faire cramer les avant bras
avec un Tigre et un Dragon ..!!!

parce que là c'est moi qui comprends rien a ton code :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour DOBRO

Tu te rappelle de la lib "PureDispHelper" qu'a créé TS-SOFT

http://www.purebasic.fr/french/viewtopi ... 3846#63846

Il l'avais tiré d'un programme C

http://disphelper.sourceforge.net/

J'ai essayé de faire marcher cette lib et j'avais un probleme de sessions.
J'ai donc posé la question a TS-SOFT et pas de reponse au bout de plusieurs jours :?

Je me suis donc dis que comme je voulais essayer le C, j'allais essayer de la faire en C puisque pas moyen de la faire marcher en PB

Donc KCC il a pris son baluchons et a trouvé un nouveau copain (Pauvre de lui) sur le forum de C.

Il est super calé, patient, et gentil donc tout ce qu'il faut a KCC :D

Pour le coté patient et gentil, je suis pas sur que ça dure :roll:
Parce que faire du C, mon roi avait raison, c'est aussi intuitif que le poste de pilotage de l'A380 :?

Bref, je suis arrivé a creer ma premiere DLL toute simple en C, pour m'appercevoir que ce bourrin de bilou, il avait pas mis l'automation en natif dans le VC++, le meme language qui est dans la meme boite que VB.

Bref KCC, il etait encore dans la "biiiip", heureusement le gentil copain il continue a m'aider mais en utilisant le code C de DispHelper, je ne sais pas si j'y arriverais un jour.

Parrallement à ça, j'ai continué à chercher en PB, et comme KCC il avait pas de reponse et malgré qu'il avait les jambres toutes dures, il est parti au pays ou les français ils articulent et prononcent des grands mots :D

Et la bas il s'est fait un autre copain, KIFFI, qui est aussi un dieux de la prog et qui en deux coup de cuillere a pot, m'a démélé la lib PB

Voila toute l'histoire

Code : Tout sélectionner

Define System.l 
Define Sessions.l 
Define Count.l 

; Tu créé la liaison avec l'appli residente par son objet COM
; ça aurait pu etre EXCEL, IE, ACCESS
Sessions = dhCreateObject("Atra.Sessions") 

; Tu compte les sessions existantes en memoire
dhGetValue("%d", @Count, Sessions, ".count") 
; Le retour se fait a l'adresse de count

For i = 1 To Count 
  
; Tu demande le nom de chaque session les une apres les autres dans une boucle
  dhGetValue("%T", @Name, Sessions, ".item(%d)", i) 

    If Name 
      ; Et tu les affichent si elle ne sont pas nulles
      Debug PeekS(Name) 
      dhFreeString(Name) 
    EndIf 

Next
En un mot ce code recensse toutes les sessions COM concernant l'application que tu as demandée :D
Voila pour une fois que je peux t'expliquer quelque chose :wink:

Bon c'est pas tout ça mais KCC, il retourne au pays du C, retrouver son copain avant qu'il se cache pour que je puisse le retrouver
Et il va se mettre de la biafine sur les bras, parce que les dragons ça brule :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci :)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Euh... Moi, c'est «bravo» que je te dis !!!

Bravissime pour un gars qui a tant de fois été dans la demande d'info avec l'art d'être convivial et léger pour éviter au max de passer pour un lourd et qui, petit à petit, arrive à renvoyer la balle.

A propos de balle, c'est moi désormais qui peut passer pour un gros lourd en te disant que j'ignore ce que c'est qu'une session COM...

ça me met tellement K.O. que je n'avais même pas réalisé sur le coup!

Ollivier
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bah, le COM, le OLE tout ça c'est les ActiveX. Je pourrais pas expliquer precisement mais c'est tout la meme soupe.
C'est l'evolution qui lui a fait changer de nom.
On appellais ça aussi l'automation

Un peu comme les runtimes qui maintenant s'appellent le framework, j'ai mis un temps fou à comprendre que c'etait la meme chose :oops:

Y nous gonfle bilou, y change le bocal mais jamais les cornichons :?

C'est la seule chose vraiment bien dans ce pachiderme de VB et VBA.

Toutes les applications offices, IE et d'autres encore son "pilotable" par les autres, grace au objets COM.

En simpliffié, tu appelle l'objet avec un "CreateObject(Excel)" par exemple et word peut aller ecrire dans Excel grace a son VBA intégré et "lycée de versaille".

Donc c'est quand meme genial, parce que tu peut avec quelques lignes piloter le dinosaure, et sans beaucoup de connaissance, enfin pour les fonctions simples, parce que j'ai fait un prg en Excel, eh bah..... les instructions, on dirait de l'allemand, elle font chacune 1 ligne :lol:

C'est une hierarchie, que j'ai encore pas tout compris, mais qui est assez logique.

"Application.Session.Screen.Row = 10" Dans l'application Excel, tu auras ouvert une session, et choisi l'objet ecran, pour y choisir la 10e ligne.
C'est à peu pres ça, pour te donner une idée de la hierarchie.

Mais l'automation, touche aussi plein d'autres giciel dont certains emulateur IBM de ma boite, pour pouvoir causer avec un T-Rex de l'informatique, et meme qu'il te comprend car il sourit :D

Donc avec un peu de VBA, des tests de synchronisation, on fait travailler des IBM 3270, je crois, avec une machine qui va 100 fois plus vite que lui et surtout qui parle pas du tout le meme language.
Avec une seule machine et un seul prog VBA, c'est comme si y'avais 200 gonzesses steno qui tapaient en meme temps sur des claviers à ILS

Voila, le peu que je peux te dire.
En tout cas merci pour vos compliments, ça fait drolement plaisir, peut etre que KCC, un jour y sera grand et y pourra expliquer aux petits.

En fin de compte, on ne voit le chemin parcouru qu'en se retournant, et pour l'instant, j'suis le groin dans le guidon, alors j'vais encore pédaler, parce que la ligne d'arrivée est loin, et je crois meme que plus j'avance, plus y'a des tronches de l'informatique qui la recule en inventant noir de languages, protocoles, etc ... :?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Kwai chang caine a écrit : " et lycée de versaille".
pour faire branché, genre le mec qui connais bien Versailles, faut dire : "et lycée Hoche" :D et la ça deviens un jeu de mot a 2 etages :)
en plus si tu dit ça a un versaillais , ben il comprends :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

:lol:
Répondre