Bonjour, Je cherche à savoir si un dossier est en partage pour bloquer certaine fonction , je suppose que c'est un api du kernel , si quelqu'un à une idée , je suis preneur . En windev bien sûr ... Merci d'avance . EDIT : WD 21
Salut Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! , la commande dos net share te liste les partages existant. il existe 3 classe permettant d'utiliser le dos sous windev dont celles-ci Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!
merci de ta réponse popoy mais je cherche quelque chose de direct et rapide car l'utilisateur est obligé d'attendre dessus , donc un api windows serait idéal , j'ai juste besoin de savoir si le dossier de l'exécutable est partagé au démarrage de celui-ci .
J'avais mal compris la question. Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! voilà la liste. Avec WDAPI, tu auras la réponse complète.
j'ai trouver ceci sur netapi32 , un Code qui marche bien , bon il ne fait pas ce que je veux mais c'est un bon début de travail . Code (Text): chDomaine, chServeur est une chaîne // Noms du domaine et du CPD (Contrôleur Principal du Domaine) pDomaine, pServeur est une chaîne UNICODE // Les mêmes en UNICODE hInst est un entier // Instance de l'API pInfos est un entier // Pointeur sur les infos retournées par l'API res est un entier // Résultat de l'appel à l'API EntreesLues, TotalEntrees, ResumeHandle sont des entiers // Pour NetUserEnum boolEncoreDesInfos est un booléen // Structure USER_INFO_10 (Il existe : USER_INFO_0,1 à 4,10,11,20 à 23,1003,1005 à 1014,1017,1018,1020,1023 à 1025,1051 à 1053 USER_INFO_10 est une Structure p_name est un entier // Pointeur sur une chaine UNICODE : login p_comment est un entier // Pointeur sur une chaine UNICODE : commentaires p_usr_comment est un entier // Pointeur sur une chaine UNICODE : commentaires p_full_name est un entier // Pointeur sur une chaine UNICODE : nom complet FIN InfoUtilisateur est une USER_INFO_10 NiveauInformation est un entier =10 // Niveau d'informations de NetUserEnum, correspond à la structure USER_INFO_10 nbInfos est un entier = 1 // Nombre d'infos à retourner, si on met plus, il faut récupérer un tableau de structure // Filtre de recherche pour NetUserEnum FILTER_TEMP_DUPLICATE_ACCOUNT est un entier = 1 FILTER_NORMAL_ACCOUNT est un entier = 2 FILTER_INTERDOMAIN_TRUST_ACCOUNT est un entier = 8 FILTER_WORKSTATION_TRUST_ACCOUNT est un entier = 16 FILTER_SERVER_TRUST_ACCOUNT est un entier = 32 USER_INFO_CH est une Structure // J'utilise une structure de chaine, on pourrait prendre autre chose ch_name est une chaîne ch_comment est une chaîne ch_usr_comment est une chaîne ch_full_name est une chaîne FIN InfoUtilisateurCH est une USER_INFO_CH // Récupération du nom de domaine sur lequel est connecté le poste chDomaine = SansEspace(SysEnvironnement("USERDOMAIN")[[12 A ]]) // Conversion en UNICODE pDomaine = AnsiVersUnicode(chDomaine,alphabetAnsi) // Chargement de l'API adéquate hInst = ChargeDLL("Netapi32.dll") SI hInst = 0 ALORS Erreur("Impossible de charger la DLL") SINON // Récupération du nom du CPD res = API("NetApi32.dll","NetGetDCName",Null,&pDomaine,&pInfos) // Récupération de l'info retournée par NetGetDCName en UNICODE chServeur = SansEspace(ChaîneRécupère(pInfos,crAdresseUNICODE)) // Conversion en UNICODE pServeur = AnsiVersUnicode(chServeur,alphabetAnsi) // Libération de la mémoire réservée par NetGetDCName res = API("NetApi32.dll","NetApiBufferFree",pInfos) Info("Domaine : "+chDomaine+RC+"Serveur : "+chServeur) // Enumération des utilisateurs ResumeHandle = 0 // Pour récupérer la première info BOUCLE res = API("NetApi32.dll","NetUserEnum", pServeur, NiveauInformation, FILTER_NORMAL_ACCOUNT, &pInfos, nbInfos , &EntreesLues, &TotalEntrees, &ResumeHandle) boolEncoreDesInfos = ( TotalEntrees > 1 ) // Récupération des informations, l'opérateur C -> n'existant pas sous windev, on utilise la fonction Transfert Transfert(&InfoUtilisateur,pInfos,16) // On transfert le contenu de la mémoire réservée par NetUserEnum dans notre structure. // 16 c'est la taille de ma structure ( 4 entiers = 4 * 4 octets ) // Les infos récupérées sont des chaines UNICODE, il convient donc de les convertir InfoUtilisateurCH:ch_name = ChaîneRécupère(InfoUtilisateur:p_name,crAdresseUNICODE) InfoUtilisateurCH:ch_comment = ChaîneRécupère(InfoUtilisateur:p_comment,crAdresseUNICODE) InfoUtilisateurCH:ch_usr_comment = ChaîneRécupère(InfoUtilisateur:p_usr_comment,crAdresseUNICODE) InfoUtilisateurCH:ch_full_name = ChaîneRécupère(InfoUtilisateur:p_full_name,crAdresseUNICODE) Info(InfoUtilisateurCH:ch_name+RC+InfoUtilisateurCH:ch_full_name+RC+InfoUtilisateurCH:ch_comment+RC+InfoUtilisateurCH:ch_usr_comment) // Libération de la mémoire réservée par NetUserEnum res = API("NetApi32.dll","NetApiBufferFree",pInfos) SI PAS boolEncoreDesInfos ALORS SORTIR FIN DéchargeDLL(hInst) FIN
merci jollyjumper ,le problème est le temps de la procédure et les anti-virus qui risque de bloquer tout le biz pendant un bon moment ... un api c'est 1000 fois plus rapide à mon avis . mais c'est pas simple , je pense que c'est NetShareGetInfo , un peu complexe à faire fonctionné .
merci mais je suis en 21 ...lol ... Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! , c'est sympa mais dur dur de le refaire en wlangage , j'ai même pas vu si c'était le bonne api
Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! A partir du code que tu as donné au-dessus et celui en C#, je t’ai fait un mixte pour avoir un exemple : Code (Text): SHARE_INFO_2 est une Structure shi2_netname est un entier shi2_type est un entier shi2_remark est un entier shi2_permissions est un entier shi2_max_uses est un entier shi2_current_uses est un entier shi2_path est un entier shi2_passwd est un entier FIN si2 est un SHARE_INFO_2 sPath est une chaîne pNomShare est une chaîne UNICODE //pServeur est une chaîne UNICODE hInst est un entier // Instance de l'API pInfos est un entier // Pointeur sur les infos retournées par l'API res est un entier // Résultat de l'appel à l'API // Chargement de l'API adéquate hInst = ChargeDLL("Netapi32.dll") SI hInst = 0 ALORS Erreur("Impossible de charger la DLL") SINON //pServeur = AnsiVersUnicode("\\remote_server", alphabetAnsi) pNomShare = AnsiVersUnicode("nom_partage", alphabetAnsi) // Récupération du nom du CPD //res = API("NetApi32.dll", "NetShareGetInfo", &pServeur, &pDomaine, 2, &pInfos) res = API("NetApi32.dll", "NetShareGetInfo", Null, &pNomShare, 2, &pInfos) SI res = 0 ALORS Transfert(&si2, pInfos, 8 * 4) // 8 entiers de 4 octets sPath = ChaîneRécupère(si2:shi2_path, crAdresseUNICODE) Info(sPath) // Libération de la mémoire réservée par NetGetDCName res = API("NetApi32.dll", "NetApiBufferFree", pInfos) FIN DéchargeDLL(hInst) FIN Il ne manque que la gestion du code retour en cas d’erreur. A+.
Bonjour, Merci Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! , effectivement ton code ne renvoie pas d'erreur mais ne renvoi pas un bon résultat , l'api me renvoi toujours 2310 ? si on change SI res = 0 , SI res > 0 , la sa plante j'ai testé avec "nom_partage" = c:\toto\ .... c:\toto\toto.exe ...\\partage\toto etc ... une petite idée ?
Salut johndoe, La fonction NetShareGetInfo demande le nom du partage et retourne ces informations. Par exemple, tu as partagé ton répertoire de jeux sur "E:", donc la demande est "Jeux", et le résultat serait "E:\jeux". Pour ton cas, ce serait la fonction NetShareEnum pour énumérer les partages : Code (Text): SHARE_INFO_2 est une Structure shi2_netname est un entier shi2_type est un entier shi2_remark est un entier shi2_permissions est un entier shi2_max_uses est un entier shi2_current_uses est un entier shi2_path est un entier shi2_passwd est un entier FIN ptabListe est un tableau dynamique nTailleMax est un entier = 368880 // MAX_PREFERRED_LENGTH nInfoLues est un entier nInfoTotales est un entier nHandleReprise est un entier = 0 sNomShare est une chaîne sPath est une chaîne //pServeur est une chaîne UNICODE hInst est un entier // Instance de l'API pInfos est un entier // Pointeur sur les infos retournées par l'API res est un entier // Résultat de l'appel à l'API // Chargement de l'API adéquate hInst = ChargeDLL("Netapi32.dll") SI hInst = 0 ALORS Erreur("Impossible de charger la DLL") SINON //pServeur = AnsiVersUnicode("\\remote_server", alphabetAnsi) // Récupération du nom du CPD //res = API("NetApi32.dll", "NetShareEnum", &pServeur, 2, &pInfos, nTailleMax, &nInfoLues, &nInfoTotales, &nHandleReprise) res = API("NetApi32.dll", "NetShareEnum", Null, 2, &pInfos, nTailleMax, &nInfoLues, &nInfoTotales, &nHandleReprise) SI res = 0 ALORS ptabListe = allouer un tableau dynamique nInfoLues SHARE_INFO_2 Transfert(&ptabListe, pInfos, nInfoLues * 8 * 4) POUR nPos = 1 À nInfoLues sNomShare = ChaîneRécupère(ptabListe[nPos]:shi2_netname, crAdresseUNICODE) sPath = ChaîneRécupère(ptabListe[nPos]:shi2_path, crAdresseUNICODE) SI sNomShare <> EOT ET sNomShare <> "" ALORS Info(sNomShare + " = " + sPath) FIN FIN libérer ptabListe // Libération de la mémoire réservée par NetShareEnum res = API("NetApi32.dll", "NetApiBufferFree", pInfos) FIN DéchargeDLL(hInst) FIN A+.
bonsoir, joli freudWD .!! , j'avais effectivement vu un code de ce genre pour lister , mais j'ai peur que sur certaine machine cela prenne un temp de fou , surtout que je vais l'exécuter à chaque démarrage . La fonction NetShareGetInfo ne peut donc pas fonctionner avec le nom du répertoire comme "E:\jeux" ou d'un fichier pour savoir si il est partager ? aucune fonction de ce genre donc ? en tout cas merci pour ses deux codes au poil ...
Si c'est a chaque démarrage de session il est possible d'insérer un script dos . voir Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! En entreprise , c'est souvent connu des utilisateurs qui ont l'habitude d'attendre. Pourquoi as tu besoin de cette rapidité?
j'interdis l'utilisation de mon logiciel en fichier partagé , il faut l'utiliser en client/serveur pour plusieurs postes , voila pourquoi .
Tu peut lire le nom d'ordinateur et enregistré l'information. Etant donné qu'il n'est pas possible d'avoir un même nom d'ordinateur sur le réseau , il ne sera pas possible d'avoir ton logiciel 2 fois sur le réseau. Il y a donc plus simple pour protéger ton application.