L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013
-
27 nov. 2007 à 13:34
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013
-
5 juin 2008 à 08:25
Bonjour à tous !
Alors voilà, cela fait un bon moment que je cherche (vainement) à extraire une liste des utilisateurs connectés au reseau ...
Pour l'instant la seule solution que j'ai est de leur faire executer un script au démarrage qui écrit leur nom d'utilisateur dans un .txt et de l'effacer lorsqu'ils ferment la session, mais cette méthode est trés peu fiable ... :s
Si par hazard vous aviez une fonction magique je serai preneur :D
ActiveDs_TLB -> Ah tiens, c'est le fichier qu'aurait dû générer Delphi à partir de la dll. Il faut l'ajouter au projet.
ADHelper -> De quoi nous aider. Autant l'ajouter au projet.
adsadsysteminfo -> Un composant. Pas forcément utile.
ADSIError -> Les numéro d'erreur. Peut s'avérer utile...
Le code C précise qu'il faut appeler CoInitialize. Cette fonction est proposée par l'unité ActiveX.
On vat donc l'appeler en début de programme, et CoUnitialize à la fin.
Pour le reste, il faut traduire le C.
Delphi gère le COM plus que le C, les appels à Release pour décrémenter les compteurs de référence sont normalement inutiles (A part peut être en ce qui concerne ma récupération de IDispatch...). Les libérations de chaînes sont aussi intutile.
J'ai été tenté d'utiliser ADsBuildEnumerator. Mais elle prend un container alors que l'on a une collection.
Le code compile, mais ne fonctionne pas forcément ; comme je l'ai dit dans le message précédente, je n'ai à ma connaissance pas ce qu'il faut pour avoir une liste d'utilisateurs.
Désolé pour les 50 jours de vide, et bon courage si tu essais de faire tourner le code.
<hr />
program AllUsers;
uses
Forms,
ActiveX,
Variants,
ActiveDs_TLB in 'ActiveDs_TLB.pas',
ADHelper in 'ADHelper.pas',
ADSIError in 'ADSIError.pas';
// Récupération de l'objet Active Directory
hr:= ADsGetObject('WinNT://DOMAIN/SERVER/lanmanserver', IID_IADsFileServiceOperations, pFSOperations);
if (Failed(hr)) then
begin
Writeln('Echec de la récupération de l''objet Active Directory');
Exit;
end;
// On construit un énumérateur des sessions
hr:= pFSOperations.Sessions._NewEnum.QueryInterface(IID_IEnumVARIANT, pEnum);
if (Failed(hr)) then
begin
Writeln('Echec de la récupération de l''énumérateur de sessions');
Exit;
end;
// Pour toutes les sessions
while (ADsEnumerateNext(pEnum, 1, session, nFetched) = S_OK) do
begin
// Le variant session propose une interface IDispatch que l'on récupère
pDisp:= IDispatch(TVarData(session).VDispatch);
// On demande l'interface IID_IADsSession
pDisp.QueryInterface(IID_IADsSession, pSession);
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 24 mai 2008 à 19:18
Bonjour rt15 !
Merci pour l'interet que tu portes à ma question Mais depuis j'ai trouvé la solution, j'utilise la dll NETAPI32 et la fonction NetEnumSession, qui fonctionne trés bien (voir la seule et unique source que j'ai posté lol) mais je vais bien regardé ce que tu m'as donné pour voir et comprendre le travaille de "traduction", alors que je suis inpardonable puisque j'ai déjà utilisé l'ADSI pour lister les groupes, tous les utilisateurs, les ressources etc de l'Active Directory, et en plus j'avais cherché du côté de IadsSession et je n'avais pas trouvé...
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 2 juin 2008 à 13:18
Bonjour Rt15,
Je me suis un peu penché sur ton code, il me donne une erreur à la compil' sur la ligne "while (AdsEnumerateNext(...) = S_OK) do"...
Je n'ai pas fait le test en appli' console mais fiche VCL mais je ne pense pas que le soucis provienne de là...
Sinon en regardant de plus prés ce code et la source ActiveDs_TLB, je pense que c'est bien par ce biais que l'on peut extraire les utilisateurs connéctés, j'ai fais quelques test, peu concluants mais je continuerais lorsque j'aurais un peu de temps, je pense que la soluce' n'est pas loin :)
Et la version 6 de delphi que tu as téléchargé, j'ai vu qu'elle était gratuite mais demandent-ils une clé d'activation à l'installation ? Parce qu'en général lorsqu'on télécharge une version gratuite sur le site Borland ils demandent aussi une clé d'activation...
En tous cas, merci bien pour toutes ces infos
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 2 juin 2008 à 13:37
Salut L_art_ment, cantador,
Une erreur à la compile ?
Cela compilait chez moi.
Quel message d'erreur ?
Attention à S_OK qui est définit un peu plus haut :
const
S_OK: Integer = 0;*
En ce qui concerne la gratuité de la version 6, il faut effectivement une clé qui était frounie gratuitement par Borland. Elle n'est plus fournie. Mais on a un ami commun qui cherche très bien sur internet et qui peut t'en trouver une sans problème.
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 3 juin 2008 à 09:46
@Cantador : "tu peux aussi utiliser un composant sans l'installer ", bein de toutes maniéres, si j'ai bien compris, je suis obligé d'utiliser un composant sans l'installer car avec turbo delphi je ne peux pas en installer, mais ca ne me dérange pas, au contraire... Mais jettes un oeil du côté de ma source, j'suis fier de moi lol même si j'avoue je ne me suis pas foulé sur les commentaires, mais à l'occasion je ferai une MAJ, mais je bosse encore dessus alors...
@Rt15 : L'erreur était : "Les types des paramétres VAR originaux et formels doivent être identiques"... Et j'avais bien définit la constante au préalable.
Et je serai effectivement interéssé par une clé, si bien sûr, c'est en toute légalité qu'il les trouve lol (mais j'en doute pas c'est pas l'genre de la maison)
Merci beaucoups à vous deux de suivre les épisodes de ce post
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 5 juin 2008 à 08:25
Désolé pour le retard mais journées chargées en s'moment... Donc si j'ai bien compris Borland ne délivre plus de clés pour D6... Mais ce n'est pô grave, j'installerai TurboDelphi, c'est ce que j'ai sur mon PC du boulot et ca fait maintenant un an que je boss avec *soufflons la bougie d'anniversaire des un an d'amour entre moi et delphi* , ca m'aurai juste interréssé d'avoir une autre version de delphi histoire de voir les différences et de travailler avec une version différente...