Bonjour,
Dans certains cas Windows XP ne reconnecte pas les lecteurs réseaux déclarés, et donc mes programmes qui veulent accéder aux fichiers qui s'y trouvent bloquent betement là dessus.
Il suffit quand ça arrive de lancer l'explorateur Windows, d'ouvrir le partage, et magie il se reconnecte.
J'ai trouvé la fonction WNetRestoreConnectionW (doc API) de l'API Windows qui semble correspondre, et j'ai écris ça (comme elle n'est pas dans Windows.pas alors que d'autres de la même lib y sont)
Ca semble marcher, si je remplace le NIL par "Z:" il m'annonce que Z: est déjà connecté. Mais dans tous les cas, il plante ("Exception EExternalException dans le module... Exception externe C000001E").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 interface uses Windows; procedure RestaureConnexionsReseau; {$EXTERNALSYM WNetRestoreConnectionW} function WNetRestoreConnectionW(hwndParent : HWND; lpDevice : PWideChar; fUseUI: Boolean): DWORD; stdcall; implementation function WNetRestoreConnectionW; external mpr name 'WNetRestoreConnectionW'; procedure RestaureConnexionsReseau; var Result : Word; begin Result:=WNetRestoreConnectionW(0, Nil, True); end;
Qu'est-ce que j'utilise mal? Je n'ai pas trop l'habitude des API Windows, j'ai donc copié sur l'interface définie dans Windows.pas en comparant avec la doc M$.
A défaut il semble qu'un NET USE puisse marcher, mais d'un ça fait moyen propre je trouve les exec quand on peut utiliser les API, et de deux j'aimerai comprendre pour la prochaine fois que j'utilise l'API Windows.
Merci
Cédric
Partager