FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 934, dernière mise à jour : 23 octobre 2024 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).
Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.
L'équipe Delphi de Developpez.com.
- 15.9.1. Réseau Microsoft (7)
La fonction ci-dessous permet d'obtenir le nom de l'ordinateur à partir de la fonction API GetComputerName. Ce nom est celui de l'ordinateur visible sur un réseau local.
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | function ComputerName: string; var lpBuffer: array[0..MAX_COMPUTERNAME_LENGTH] of char; nSize: dword; begin nSize:= Length(lpBuffer); if GetComputerName(lpBuffer, nSize) then result:= lpBuffer else result:= ''; end; |
L'adresse IP (pour Internet Protocol) est l'adresse de l'ordinateur sur un réseau IP. Il est utile de la connaître pour réaliser des échanges directs sur Internet via des composants TClientSocket/TServerSocket ou Indy.
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | Uses Sockets; function getIP:string; Begin With TCustomIpClient.Create(Nil) do Begin Result:=LocalHostAddr; Free; End; End; |
Ce premier code permet d'obtenir l'adresse du réseau local :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | uses winsock; function LocalIP : String; type TArrayPInAddr = array [0..10] of PInAddr; PArrayPInAddr = ^TArrayPInAddr; var phe : PHostEnt; pptr : PArrayPInAddr; Buffer : array [0..63] of char; i : integer; GInitData: TWSADATA; begin WSAStartup($101, GInitData); result := ''; GetHostName(Buffer, sizeof(Buffer)); phe := GetHostByName(Buffer); if phe=nil then exit; pptr := PArrayPInAddr(phe^.h_addr_list); i := 0; while pptr^[i]<>nil do begin result := StrPas(inet_ntoa(pptr^[i]^)); Inc(i); end; WSACleanup; end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 | function getIP:string; Begin With TPowerSock.Create(Nil) do Begin Result:= LocalIP; Free; End; End; |
La fonction API GetIpAddrTable permet d'obtenir la liste des adresses IP de l'ordinateur. Cette fonction n'est pas définie par défaut dans Delphi, il faut alors la déclarer complètement dans le code.
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | // Renvoie les adresses IP de la machine sous forme d'un TStrings Procedure GetIPAdresses(Result:TStrings); Const // Nom de la DLL IP Helper. dllIPHelperName = 'IpHlpApi.dll' ; Type // Ces éléments n'existent pas dans les unités standard Delphi, il faut // donc tout redéclarer "manuellement". // Structure contenant une définition d'adresse TMIB_IpAddrRow = Record dwAddr : DWord ; dwIndex : DWord ; dwWordMask : DWord ; dwBCastAddr : DWord ; dwReasmSize : DWord ; Unused1 : Word ; Unused2 : Word ; End; // Structure remplie par la fonction GetIpAddrTable PIpAddrTable = ^TIpAddrTable ; TIpAddrTable = Packed Record dwNumEntries : DWord ; Table : Array[Byte] Of TMIB_IpAddrRow ; End; // Définition du prototype de la fonction TGetIpAddrTable = Function ( IpTable : PIpAddrTable ; Var Long : DWORD ; Order : BOOL ) : DWORD ; stdcall ; Var GetIpAddrTable : TGetIpAddrTable ; Table : PIpAddrTable ; Long : DWORD ; I, DLLHandle : Integer ; Begin Result.Clear; // Chargement de la DLL IP Helper GetIpAddrTable:=Nil; DLLHandle:=0; DLLHandle:=LoadLibrary(dllIPHelperName); If (DLLHandle<>0) Then GetIpAddrTable:=GetProcAddress(DLLHandle,'GetIpAddrTable') ; // Tentative d'appel. If Assigned(GetIpAddrTable) Then Begin // La fonction de récupération d'adresse IP existe, on l'utilise. New(Table); Long:=SizeOf(TIpAddrTable); If GetIpAddrTable(Table,Long,False)=NO_ERROR Then For I:=0 To (Table^.dwNumEntries-1) Do Result.Add( Format('%d.%d.%d.%d', [ Table^.Table[i].dwAddr And $FF, (Table^.Table[i].dwAddr Shr 8) And $FF, (Table^.Table[i].dwAddr Shr 16) And $FF, (Table^.Table[i].dwAddr Shr 24) And $FF] ) ) ; Dispose(Table); End; // Libération de la DLL, si nécessaire. If (DLLHandle<>0) Then FreeLibrary(DLLHandle); End; |
L'adresse MAC est un identifiant physique que portent tous les matériels connectés à un réseau (donc, les cartes réseaux). C'est un numéro unique (au monde) inscrit physiquement, donc impossible à modifier.
Ce numéro unique peut servir de base pour générer des clés (type GUID ou autre) spécifiques à un PC : il peut donc servir à empêcher l'utilisation frauduleuse sur des postes non-autorisés...
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | uses NB30; function GetAdapterInfo(Lana: Char): String; var Adapter: TAdapterStatus; NCB: TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBRESET); NCB.ncb_lana_num := Lana; if Netbios(@NCB) <> Char(NRC_GOODRET) then begin Result := 'mac not found'; Exit; end; FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBASTAT); NCB.ncb_lana_num := Lana; NCB.ncb_callname := '*'; FillChar(Adapter, SizeOf(Adapter), 0); NCB.ncb_buffer := @Adapter; NCB.ncb_length := SizeOf(Adapter); if Netbios(@NCB) <> Char(NRC_GOODRET) then begin Result := 'mac not found'; Exit; end; Result := IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' + IntToHex(Byte(Adapter.adapter_address[5]), 2); end; function GetMACAddress: string; var AdapterList: TLanaEnum; NCB: TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBENUM); NCB.ncb_buffer := @AdapterList; NCB.ncb_length := SizeOf(AdapterList); Netbios(@NCB); if Byte(AdapterList.length) > 0 then Result := GetAdapterInfo(AdapterList.lana[0]) else Result := 'mac not found'; end; |
Les composants TClientSocket et TServerSocket ne sont plus installés par défaut avec Delphi7. Mais ils sont encore fournis. Il suffit d'installer le paquet /bin/dclsockets70.bpl via le menu Composants -> Installer des paquets….
Il faut éviter de s'en servir pour de nouvelles applications, ils sont remplacés par les composants TCPClient/TTcpServer ou les composants Indy TIDTcpClient/TIDTcpServer. Cette méthode n'est donnée ici que pour assurer la compatibilité des applications Delphi 5/Delphi 6 avec Delphi7.
Les composants TClientSocket et TServerSocket ne sont plus installés par défaut avec Delphi 2005. Mais ils sont encore fournis. Il suffit d'installer le paquet /bin/dclsockets90.bpl via le menu Composants -> Installer des paquets…
Il faut éviter de s'en servir pour de nouvelles applications, ils sont remplacés par les composants Indy TIDTcpClient/TIDTcpServer. Cette méthode n'est donnée ici que pour assurer la compatibilité des applications Delphi5/Delphi6 avec Delphi 2005.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.