Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Powerscripts
  •  » [RESOLU] Communication entre deux applications PowerBuilder
  • 1 évaluations, moyenne 71 évaluations, moyenne 71 évaluations, moyenne 7

#1 10-09-2007 13:29:57

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

[RESOLU] Communication entre deux applications PowerBuilder

Bonjour,

je désirerai manipuler dans mon application principal un programme de gestion de webcam, développé lui aussi en Powerbuilder.

Le souci est que j'aimerai avoir le schéma suivant :
1) A appelle B et attend
2) B manipule la webcam, et enregistre une image dans un répertoire défini. Bonus, B retourne le chemin d'accès à l'image.
3) A reconnait que B a fini son traitement et reprend la main.

Et là je suis perdu. La méthode run ne semble pas gérer le lien de parenté ?

A est en powerbuilder 7.0.3 et B en powerbuilder 9.0.2.

Merci de vos réponses !

Dernière modification par sbouvetJD (17-09-2007 13:02:51)

Hors ligne

 

#2 10-09-2007 13:52:49

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

Bon j'ai trouvé ce petit bout de code, je vous tiens au courant si ça marche :

Code: pb

OleObject wsh
integer  li_rc

CONSTANT integer MAXIMIZED = 3
CONSTANT integer MINIMIZED = 2
CONSTANT integer NORMAL = 1
CONSTANT boolean WAIT = TRUE
CONSTANT boolean NOWAIT = FALSE

wsh = CREATE OleObject
li_rc = wsh.ConnectToNewObject( "WScript.Shell" )

li_rc = wsh.Run("Notepad" , NORMAL, WAIT)
messagebox("hello", "world")


Hors ligne

 

#3 10-09-2007 13:54:46

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

It seems to work !

Hors ligne

 

#4 10-09-2007 13:55:35

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Communication entre deux applications PowerBuilder

pour l'info!


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#5 10-09-2007 14:38:35

FMolinas  
Membre Geek
Lieu: Lyon
Date d'inscription: 12-06-2007
Messages: 87
Pépites: 97
Banque: 6,435,474,948,567

Re: [RESOLU] Communication entre deux applications PowerBuilder

Ça marche dis tu... y compris le bonus du point 2) ?
Si oui, Peux-tu publier le code qui te permet de récupérer le chemin d'accès ? Ça s'apparente furieusement à un appel de fonction "callback", je croyais la chose à peu près impossible avec PowerBuilder !

Hors ligne

 

#6 10-09-2007 14:45:59

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Communication entre deux applications PowerBuilder

La méthode run lance un traitement puis reprends l'éxécution du programme directement , sans attendre de retour du traitement lancé.


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#7 10-09-2007 14:52:43

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

Alors non, effectivement, je n'ai pas encore trouvé comment récupérer une valeur de retour, mais je laisse mes collègues se pencher sur le problème aussi, je ne vais pas leur mâcher le travail non plus

Hors ligne

 

#8 10-09-2007 19:40:42

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Communication entre deux applications PowerBuilder

Pourquoi ne pas utiliser les objets des pbl de l'appli existante ?


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#9 11-09-2007 10:17:02

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Communication entre deux applications PowerBuilder

Juste une question, une fois qu'il est lancé, et t'il possible de lui donner l'ordre d'arreter ? ou de fermer l'application ?

Hors ligne

 

#10 11-09-2007 12:23:52

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

A la question de JCZ : nous nous confrontions à un problème lié à l'environnement CITRIX : application hébergée sur le serveur et webcam en local, d'où problème de communication...
A la question de Melke : je ne pense pas, mais en même temps je n'ai pas essayé ;)
C'est ici que j'ai trouvé le petit bout de code qui va bien.

Hors ligne

 

#11 11-09-2007 14:22:35

Melke  
L'Enigmatique Troll Taciturne
Lieu: Paris
Date d'inscription: 30-05-2007
Messages: 385
Pépites: 9,994
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Communication entre deux applications PowerBuilder

J'ai trouvé le petit bout de code
Dans Local external functions :

Code: pb

FUNCTION boolean PostMessageA(ulong hwndle,UINT wmsg,ulong wParam,ulong lParam) &
LIBRARY "user32.dll"

Dans le code :

Code: pb

CONSTANT uint WM_CLOSE = 16
CONSTANT uint WM_QUIT = 18
String ls_commande, lpWindowName, lpClassName[], ls_null
ulong    lul_whnd
setnull(ls_null)
n_cst_platform lnv_platform
f_setplatform(lnv_platform,true)
lpWindowName = "Calculatrice"
lpClassName[1] = ls_null
lnv_platform.of_setfindwindowclasses( lpClassName)

// lul_whnd : handle de la fenêtre, si plusieurs fenêtre ouvert du même nom, il prends le dernier ouvert
lul_whnd = lnv_platform.of_findwindow(lpWindowName)

IF lul_whnd > 0 THEN 
  // Au choix
  PostMessageA(lul_whnd, WM_CLOSE, 0, 0);
  PostMessageA(lul_whnd, WM_QUIT, 0, 0);
ELSE
  MessageBox("Oups", ls_app + " is not running!")
END IF

Si quelqu'un sait comment trouvé le handle de la fenêtre plus facilement, je suis preneur...
j'ai trouvé sur un site Coréen/Chinois (raillez la mention inutile) : ici

Dernière modification par Melke (11-09-2007 14:38:37)

Hors ligne

 

#12 14-09-2007 07:57:11

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

J'ai une erreur sur la station CITRIX : "Error calling external object function run" ; comme s'il n'arrivait pas à utiliser l'objet WScript.Shell ?
Je précise que ça marche en configuration C/S classique.
Complément :

Code: pb

wsh = CREATE OleObject
li_rc = wsh.ConnectToNewObject( "WScript.Shell" )
li_rc = wsh.Run("C:\webcam\webcam.exe" , NORMAL, WAIT)

Le disque C:\ est le disque de la station ; le disque système du serveur est nommé S:\ donc normalement, il ne devrait pas y avoir de problème pour reconnaître le path ?

Dernière modification par sbouvetJD (14-09-2007 09:09:13)

Hors ligne

 

#13 14-09-2007 13:04:26

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

Quelqu'un aurait-il déjà manipulé les objets MetaFrameCOM.MetaFrameSession, MetaFrameCOM.MetaFrameServer, etc. ?

Hors ligne

 

#14 14-09-2007 13:12:51

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

Code: pb

wsh.Exec("C:\webcam\webcam.exe" , NORMAL, WAIT)

ca marche pas comme ca ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#15 14-09-2007 13:17:40

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

Et non, Exec n'aime pas non plus. En fait, on a essayé en mettant le webcam.exe dans le répertoire Winnt du serveur et en modifiant l'appel comme suit :

Code: pb

wsh.Exec("webcam.exe" , NORMAL, WAIT)

et là ça marchait. Mais l'exécutable sur le serveur ne pouvait discuter avec la webcam du poste client... ; enfin là j'essaie de récupérer le nom du poste client (via MetaFrameCOM.MetaFrameSession), mais c'est pô gagné...

Hors ligne

 

#16 14-09-2007 13:26:36

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

ce n'est pas lié avec un probleme de licence pb ? des fois...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#17 14-09-2007 13:34:00

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

en tentant cela ?

Code: pb

wsh = CREATE OleObject
li_rc = wsh.ConnectToNewObject( "WScript.Shell" )
li_rc = wsh.Run("~"C:\webcam\webcam.exe~"" , NORMAL, WAIT)

Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#18 14-09-2007 13:47:25

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

Qu'enteds-tu par "licence pb" ? On paie nos impôts nous môssieu C'est du PB7 tout ce qu'il y a de plus légal. (ça au moins)

Hors ligne

 

#19 14-09-2007 13:53:33

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

licence par pb professionnel , pb enterprise, ou autres...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#20 14-09-2007 13:54:56

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

L'ajout des tildes n'apporte rien de mieux. Merci quand même !

Hors ligne

 

#21 14-09-2007 14:04:21

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

bon courage à toi, et donnes nous des news sur tes recherches...
d'autres personnes pourraient rencontrer le meme probleme.

A+++


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#22 17-09-2007 09:19:53

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

Voici le code implémenté, utilisant l'API WFAPI.dll. Je crée un User Object UO_WFAPI

Code: pb

Long ll_retour, ll_recherche, ll_server, ll_buffer
Long i, ll_SessionId
String ls_retour

Choose Case as_recherche
  Case "username"
    ll_recherche = C_USERNAME /* 5 */
  Case "clientname"
    ll_recherche = C_CLIENTNAME /* 10 */
  Case "winstationname"
    ll_recherche = C_WINSTATIONNAME /* 6 */
End Choose

ll_SessionId = -1  /* SESSION EN COURS */
ll_server = WFOpenServerA(gComputerName)  /* HANDLE DU SERVEUR */
If WFQuerySessionInformationW(ll_server, ll_SessionId, ll_recherche, ll_buffer, ll_retour) Then
  If ll_retour > 0 Then  /* PARCOURS DU BUFFER RETOUR POUR RECONSTRUIRE */
    For i = 1 to ll_retour  /* LA VALEUR */
      ls_retour += String(ll_buffer, "address")
      ll_buffer ++
    Next
  End If
End If
WFFreeMemory(ll_buffer)  /* LIBERATION DU BUFFER */
WFCloseServer(ll_server)  /* DESALLOCATION DU HANDLE SERVEUR */
Return ls_retour

Ensuite, j'ai créé un partage sur le poste local sur le dossier contenant l'exécutable, et je l'appelle assez simplement :

Code: pb

UO_WFApi uo_citrix
    
uo_citrix = Create UO_WFApi
ls_ClientName = uo_citrix.uf_getinfosession("clientname")

lole_appli = CREATE OleObject
li_ret = lole_appli.ConnectToNewObject("WScript.Shell")
li_ret = lole_appli.Run("\\" + ls_clientname + "\WEBCAM\webcam.exe", C_NORMAL, C_WAIT)

Le problème reste entier car l'exécutable appelé sur le poste client est monté en mémoire sur le serveur et n'arrive donc pas à communiquer avec la webcam distante...

Hors ligne

 

#23 17-09-2007 13:02:32

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

La solution viendrait avec l'utilitaire psexec (en tous cas c'est ce que me dit mon chef) ; on a juste un problème de droit, l'utilisateur doit être administrateur du poste.

Code: pb

uo_citrix = Create UO_WFApi

ls_ClientName = uo_citrix.uf_getinfosession("clientname")

lole_appli = CREATE OleObject
li_ret = lole_appli.ConnectToNewObject("WScript.Shell")
li_ret = lole_appli.Run("psexec \\" + ls_clientname + " -i C:\webcam\webcam.exe", C_NORMAL, C_WAIT)


Et ça marche !

Hors ligne

 

#24 17-09-2007 13:09:37

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: [RESOLU] Communication entre deux applications PowerBuilder

merci à toi, et à ton chef... je lui paierai un hamburger si je le croise...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » [RESOLU] Communication entre deux applications PowerBuilder
  • 1 évaluations, moyenne 71 évaluations, moyenne 71 évaluations, moyenne 7

Pied de page des forums

Propulsé par FluxBB 1.2.22