Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Bonjour cher tous,
Il y a-t-il un script Pb qui permet de savoir le nom de la session Windows courante ou le nom de l'utilisateur connecté?
Merci d'avance
Dernière modification par bo10ka (13-05-2011 08:58:10)
Hors ligne
Bonjour, il faut passer par l'API windows : http://www.rgagnon.com/pbdetails/pb-0002.html
//You need to declare two API calls. FUNCTION long GetComputerNameA (ref string ComputerName, ref ulong BufferLength) LIBRARY "KERNEL32.DLL" FUNCTION long GetUserNameA(ref string UserName, ref ulong BufferLength) LIBRARY "ADVAPI32.DLL" // and then long ll_ret string ls_ComputerName, ls_UserName ulong BufferLength = 250 // you may need to adjust this. see Note ls_ComputerName = Space(BufferLength) ls_UserName = Space(BufferLength) ll_ret = GetComputerNameA(ls_ComputerName, BufferLength) ll_ret = GetUserNameA(ls_UserName, BufferLength)
Hors ligne
Merci Admin,
je vais essayé je te dit quoi!
Hors ligne
ça marche avec ce code :
long ll_id ContextKeyword lcxk_base string ls_Path string ls_values[] lcxk_base = create ContextKeyword this.GetContextService("Keyword", lcxk_base) lcxk_base.GetContextKeywords("USERNAME", ls_values) if Upperbound(ls_values) > 0 THEN ls_Path = ls_values[1] end if user = create nvo_user user.is_username = ls_Path //Passage des valeurs de connexion récuperée aux propriétés de l'objet SQLCA SQLCA.DBMS = "ODBC" SQLCA.DBParm = "ConnectString='DSN=SIRH;DelimitIdentifier='No',MsgTerse='Yes',CallEscape=''" SQLCA.AutoCommit = true Connect using SQLCA; If SQLCA.SQLCode <> 0 Then MessageBox ("Erreur Base de données, Veuillez contacter l'admin", SQLCA.SQLErrText ) End If open(w_mdi)
Dernière modification par bo10ka (13-05-2011 08:56:45)
Hors ligne
J'ai une petite question
pourquoi vous avez utiliser la fonction "Space" dans votre script.
Hors ligne
Pour forcer la taille des variables passées en référence aux API.
Sinon, il y aura plantage à l'exécution de celles-ci car la mémoire n'aura pas été correctement allouée.
(référence = pointer)
Hors ligne
Remarque en passant : je sais que PB existe depuis longtemps et qu'on réutilise (ou qu'on se refile sur le forum) des bouts de code qui existent depuis longtemps, mais dans la mesure du possible pour les PB >= 10 il faut utiliser les versions unicode des fonctions de l'API Windows :
- utiliser la version "W" au lieu de la version "A", par exemple GetComputerNameW au lieu de GetComputerNameA (quand les 2 versions existent c'est indiqué en bas de la page de doc chez krosoft, avec la version du système à partir de laquelle c'est dispo, et par quelle dll c'est fourni)
- enlever les ";ansi" dans les alias de déclaration des external
- du coup ça simplifie les calculs d'allocation d'espace, surtout que si on utilise Space() dans un PB récent ça alloue en fait des caractères unicodes, soit 2 octets par caractère, pour être compatible avec les wchart_t attendus par l'API (alors que si on veut allouer des octets à la manière du malloc() du C, on peut utiliser SpaceA() qui retourne des caractères classiques avec 1 octet par caractère)
Hors ligne
Pages: 1