Obtenir les ordinateurs serveur dns
le Code pour récupérer les ordinateurs serveur DNS qui fonctionne sur Windows 9x/ME / 2000/XP, indépendant de IpHelper API, etc ...
j'ai vu des messages sur divers forums de discussion et de programmation de sites demander comment obtenir les ordinateurs serveur DNS. J'ai testé ce 'hack' de la méthode sur '95, '98, ME, NT, 2000 et XP et cela fonctionne très bien... le IpHelper API nécessite Windows 2000.
& [snip] &
unité de BaclDnsHelper
interface
& nbsp & nbsp SysUtils,
& nbsp & nbsp Classes,
& nbsp & nbsp Windows
fonction de GetDnsIp : string
application
const
& nbsp & nbsp //
& nbsp & nbsp // NOTE: Pour les 9x, nous devons utiliser /de lot ou de l'interface graphique s'affichera donc
& nbsp & nbsp // nous utilisons un fichier fictif
& nbsp & nbsp //
& nbsp & nbsp IPCFG_DUMMY_FILE = '_dmytmpdns.tmp'
& nbsp & nbsp IPCFG_WIN9X = 'winipcfg.exe /toutes les /lot '/ / _dmytmpgdns.txt'
& nbsp & nbsp IPCFG_WINNT = 'ipconfig.exe /tous les'
& nbsp & nbsp IPCFG_DNS_SERVER_LINE = 'Serveurs DNS'
& nbsp & nbsp REG_NT_NAMESERVER_PATH =
& ! & ! & ! & ! 'System\CurrentControlSet\Services\Tcpip\Parameters'
& nbsp & nbsp REG_NT_NAMESERVER = 'DhcpNameServer'
& nbsp & nbsp REG_9X_NAMESERVER_PATH = 'System\CurrentControlSet\Services\MSTCP'
& nbsp & nbsp REG_9X_NAMESERVER = 'NameServer'
fonction de BackSlashStr (const s : string) : string
begin
& nbsp & nbsp Résultat := s
& nbsp & nbsp si le Résultat[Longueur(Suite)] < > ' \ '
& ! & ! & ! & nbsp Résultat := Résultat '\'
fin
fonction de GetWindowsPath : string
var
& nbsp & nbsp Temp : array [0..MAX_PATH] de char
begin
& nbsp & nbsp GetWindowsDirectory (Temp, SizeOf(Temp))
& nbsp & nbsp Résultat := BackSlashStr (Temp)
fin
fonction de GetSystemPath : string
var
& nbsp & nbsp Temp : array [0..MAX_PATH] de char
begin
& nbsp & nbsp GetSystemDirectory (Temp, SizeOf(Temp))
fin
fonction de LooksLikeIP(StrIn: string): boolean
var
& nbsp & nbsp IPAddr : string
& nbsp & nbsp période, l'octuor, j'ai : Entier
begin
& nbsp & nbsp result := false // par défaut
& nbsp & nbsp IPAddr := StrIn
& nbsp & nbsp for i := 1 to 4 do begin
& ! & ! & ! & nbsp si i = 4 période := 255 autre période := pos('.',IPAddr)
& ! & ! & ! & nbsp si la période = 0 then exit
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp octet := StrToInt(copie(Ip,1,période - 1))
& ! & ! & ! & nbsp à l'exception de
& ! & ! & ! & ! & ! & nbsp sortie
& ! & ! & ! & nbsp fin // ci-dessous, l'octuor < 1 si i = 1, < 0 si i > 1
& ! & ! & ! & nbsp si (octet < (1 div i)) ou (octet > 254) puis la sortie
& ! & ! & ! & nbsp si i = 4 then result := true else IPAddr := copy(adresse Ip,période 1,255)
& nbsp & nbsp fin
fin
procédure GetConsoleOutput (const ligne de commande : string
& nbsp & nbsp var de Sortie : TStringList)
var
& nbsp & nbsp SA: TSecurityAttributes
& nbsp & nbsp SI: TStartupInfo
& nbsp & nbsp PI: TProcessInformation
& nbsp & nbsp StdOutFile, AppProcess, AppThread : THandle
& nbsp & nbsp RootDir, WorkDir, StdOutFileName:string
const
& nbsp & nbsp FUNC_NAME = 'GetConsoleOuput'
begin
& nbsp & nbsp essayer
& ! & ! & ! & nbsp StdOutFile:=0
& ! & ! & ! & nbsp AppProcess:=0
& ! & ! & ! & nbsp AppThread:=0
& ! & ! & ! & nbsp // Initialiser dirs
& ! & ! & ! & nbsp RootDir:=ExtractFilePath(ParamStr(0))
& ! & ! & ! & nbsp WorkDir:=ExtractFilePath(ligne de commande)
& ! & ! & ! & nbsp // Vérifier WorkDir
& ! & ! & ! & nbsp si ce n' (FileSearch(ExtractFileName(ligne de commande),WorkDir)<>')
& ! & ! & ! & ! & ! & nbsp WorkDir:=RootDir
& ! & ! & ! & nbsp // Initialisation du fichier de sortie attributs de sécurité
& ! & ! & ! & nbsp FillChar(SA,SizeOf(SA),#0)
& ! & ! & ! & nbsp SA.nLength:=SizeOf(SA)
& ! & ! & ! & nbsp SA.lpSecurityDescriptor:=nil
& ! & ! & ! & nbsp SA.bInheritHandle:=True
& ! & ! & ! & nbsp // Créer le Fichier de Sortie
& ! & ! & ! & nbsp StdOutFileName:=RootDir 'sortie.tmp'
& ! & ! & ! & nbsp StdOutFile:=CreateFile(PChar(StdOutFileName),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GENERIC_READ ou GENERIC_WRITE,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FILE_SHARE_READ ou FILE_SHARE_WRITE
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp @SA,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp CREATE_ALWAYS, // Toujours le créer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FILE_ATTRIBUTE_TEMPORARY ou // en cache dans la mémoire
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // si possible
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FILE_FLAG_WRITE_THROUGH,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp 0)
& ! & ! & ! & nbsp // Vérifiez le débit de la Poignée
& ! & ! & ! & nbsp si StdOutFile = INVALID_HANDLE_VALUE puis
& ! & ! & ! & ! & ! & nbsp raise Exception.CreateFmt (Fonction ' %s() a échoué!' #10#13
& ! & ! & ! & ! & ! & ! & ! & nbsp ligne de Commande = %s',[FUNC_NAME,en ligne de commande])
& ! & ! & ! & nbsp // initialisation de Démarrage Info
& ! & ! & ! & nbsp FillChar(SI,SizeOf(SI),#0)
& ! & ! & ! & ! avec la SI do begin
& ! & ! & ! & ! & ! & nbsp cb:=SizeOf(SI)
& ! & ! & ! & ! & ! & nbsp dwFlags:=STARTF_USESHOWWINDOW ou STARTF_USESTDHANDLES
& ! & ! & ! & ! & ! & nbsp wShowWindow:=SW_HIDE
& ! & ! & ! & ! & ! & nbsp hStdInput:=GetStdHandle(STD_INPUT_HANDLE)
& ! & ! & ! & ! & ! & nbsp hStdError:=StdOutFile
& ! & ! & ! & ! & ! & nbsp hStdOutput:=StdOutFile
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp // Créer le processus de
& ! & ! & ! & nbsp si la fonction CreateProcess(nil, PChar(ligne de commande), de néant, de néant,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp True, 0, nil,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PChar(WorkDir), SI, PI), puis commencer
& ! & ! & ! & ! & ! & nbsp WaitForSingleObject(PI.hProcess,INFINI)
& ! & ! & ! & ! & ! & nbsp AppProcess:=PI.hProcess
& ! & ! & ! & ! & ! & nbsp AppThread:=PI.hThread
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp raise Exception.CreateFmt('CreateProcess() dans la fonction %s() a échoué!'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & ! & ! & ! & ! & ! & ! #10#13 'ligne de Commande = %s',[FUNC_NAME,en ligne de commande])
& ! & ! & ! & nbsp CloseHandle(StdOutFile)
& ! & ! & ! & nbsp StdOutFile:=0
& ! & ! & ! & nbsp Sortie.Clair
& ! & ! & ! & nbsp Sortie.LoadFromFile (StdOutFileName)
& nbsp & nbsp enfin
& ! & ! & ! & nbsp // Fermer les poignées
& ! & ! & ! & nbsp si StdOutFile <> 0 alors CloseHandle(StdOutFile)
& ! & ! & ! & nbsp si AppProcess <> 0 alors CloseHandle(AppProcess)
& ! & ! & ! & nbsp si AppThread <> 0 alors CloseHandle(AppThread)
& ! & ! & ! & nbsp // Suppression du fichier de Sortie
& ! & ! & ! & nbsp if FileExists(StdOutFileName)
& ! & ! & ! & ! & ! & nbsp SysUtils.DeleteFile(StdOutFileName)
& nbsp & nbsp fin
fin
fonction de GetBasicOsType : LongWord
var
& nbsp & nbsp VerInfo : TOsVersionInfo
begin
& nbsp & nbsp VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo)
& nbsp & nbsp GetVersionEx (VerInfo)
& nbsp & nbsp Résultat := VerInfo.dwPlatformId
fin
fonction de GetIpCfg9xOutPath : string
begin
& nbsp & nbsp Résultat := GetWindowsPath IPCFG_DUMMY_FILE
fin
fonction de GetIpCfgExePath : string
begin
& nbsp & nbsp Résultat := '
& nbsp & nbsp Cas GetBasicOsType de
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_WINDOWS : Résultat := GetWindowsPath IPCFG_WIN9X
& ! & ! & ! & ! & ! & nbsp GetIpCfg9xOutPath
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_NT : Result := GetSystemPath IPCFG_WINNT
& nbsp & nbsp fin
fin
fonction de GetDnsIpFromReg : string
var
& nbsp & nbsp OpenKey : HKEY
& nbsp & nbsp Vn,
& nbsp & nbsp sous-Clé : PChar
& nbsp & nbsp Type de données,
& nbsp & nbsp données. datasize : integer
& nbsp & nbsp Temp : array [0..2048] de char
begin
& nbsp & nbsp Résultat := '
& nbsp & nbsp sous-Clé := '
& nbsp & nbsp Vn := '
& nbsp & nbsp cas GetBasicOsType de
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_WINDOWS :
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp sous-Clé := REG_9X_NAMESERVER_PATH
& ! & ! & ! & ! & ! & nbsp Vn := REG_9X_NAMESERVER
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_NT :
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp sous-Clé := REG_NT_NAMESERVER_PATH
& ! & ! & ! & ! & ! & nbsp Vn := REG_NT_NAMESERVER
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
& nbsp & nbsp si RegOpenKeyEx (HKEY_LOCAL_MACHINE, sous-Clé, REG_OPTION_NON_VOLATILE,
& ! & ! & ! & nbsp KEY_READ, OpenKey) = ERROR_SUCCESS puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp DataType := REG_SZ
& ! & ! & ! & nbsp données. datasize := SizeOf(Temp)
& ! & ! & ! & nbsp si RegQueryValueEx (OpenKey, Vn, néant, @Type de données, @Temp
& ! & ! & ! & ! & ! & nbsp @données. datasize) = ERROR_SUCCESS puis
& ! & ! & ! & ! & ! & nbsp Résultat := chaîne de caractères(Temp)
& ! & ! & ! & nbsp RegCloseKey (OpenKey)
& nbsp & nbsp fin
fin
fonction de GetDnsIpFromIpCfgOut (const Sortie : TStringList
& nbsp & nbsp var DnsIp : string) : boolean
var
& nbsp & nbsp i : integer
begin
& nbsp & nbsp Result := FALSE
& nbsp & nbsp si la Sortie.Count >= 1
& ! & ! & ! & nbsp for i := 0 à la Sortie.Count - 1 do
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si Pos(IPCFG_DNS_SERVER_LINE, de Sortie[i]) > 0, alors
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp DnsIp := Trim(Copie (Sortie[i], Pos(':', Sortie[i]) 1,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Longueur(Sortie[i])))
& ! & ! & ! & ! & ! & ! & ! & nbsp Résultat := LooksLikeIp (DnsIp)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp fin
fin
fonction de GetDnsIp : string
var
& nbsp & nbsp Sortie : TStringList
& nbsp & nbsp DnsIp,
& nbsp & nbsp CmdLine : string
begin
& nbsp & nbsp CmdLine := GetIpCfgExePath
& nbsp & nbsp si CmdLine < > '
& nbsp & nbsp commencer
& ! & ! & ! & nbsp Sortie := TStringList.Créer
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp cas GetBasicOsType de
& ! & ! & ! & ! & ! & ! & ! & nbsp VER_PLATFORM_WIN32_WINDOWS :
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetConsoleOutput (CmdLine, Sortie)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Sortie.LoadFromFile (GetIpCfg9xOutPath)
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetConsoleOutput (CmdLine, Sortie)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp si GetDnsIpFromIpCfgOut (Sortie, DnsIp)
& ! & ! & ! & ! & ! & ! & ! & nbsp Résultat := DnsIp
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp //
& ! & ! & ! & ! & ! & ! & ! & nbsp // Tenter de trouver par l'intermédiaire du registre
& ! & ! & ! & ! & ! & nbsp & nbsp & nbsp //
& ! & ! & ! & ! & ! & ! & ! & nbsp Résultat := GetDnsIpFromReg
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & nbsp Sortie.Gratuit
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
fin
à la fin.
Obtenir les ordinateurs serveur dns
Obtenir les ordinateurs serveur dns : Plusieurs milliers de conseils pour vous faciliter la vie.
le Code pour recuperer les ordinateurs serveur DNS qui fonctionne sur Windows 9x/ME / 2000/XP, independant de IpHelper API, etc ...
j'ai vu des messages sur divers forums de discussion et de programmation de sites demander comment obtenir les ordinateurs serveur DNS. J'ai teste ce 'hack' de la methode sur '95, '98, ME, NT, 2000 et XP et cela fonctionne tres bien... le IpHelper API necessite Windows 2000.
& [snip] &
unite de BaclDnsHelper
interface
& nbsp & nbsp SysUtils,
& nbsp & nbsp Classes,
& nbsp & nbsp Windows
fonction de GetDnsIp : string
application
const
& nbsp & nbsp //
& nbsp & nbsp // NOTE: Pour les 9x, nous devons utiliser /de lot ou de l'interface graphique s'affichera donc
& nbsp & nbsp // nous utilisons un fichier fictif
& nbsp & nbsp //
& nbsp & nbsp IPCFG_DUMMY_FILE = '_dmytmpdns.tmp'
& nbsp & nbsp IPCFG_WIN9X = 'winipcfg.exe /toutes les /lot '/ / _dmytmpgdns.txt'
& nbsp & nbsp IPCFG_WINNT = 'ipconfig.exe /tous les'
& nbsp & nbsp IPCFG_DNS_SERVER_LINE = 'Serveurs DNS'
& nbsp & nbsp REG_NT_NAMESERVER_PATH =
& ! & ! & ! & ! 'System\CurrentControlSet\Services\Tcpip\Parameters'
& nbsp & nbsp REG_NT_NAMESERVER = 'DhcpNameServer'
& nbsp & nbsp REG_9X_NAMESERVER_PATH = 'System\CurrentControlSet\Services\MSTCP'
& nbsp & nbsp REG_9X_NAMESERVER = 'NameServer'
fonction de BackSlashStr (const s : string) : string
begin
& nbsp & nbsp Resultat := s
& nbsp & nbsp si le Resultat[Longueur(Suite)] < > ' \ '
& ! & ! & ! & nbsp Resultat := Resultat '\'
fin
fonction de GetWindowsPath : string
var
& nbsp & nbsp Temp : array [0..MAX_PATH] de char
begin
& nbsp & nbsp GetWindowsDirectory (Temp, SizeOf(Temp))
& nbsp & nbsp Resultat := BackSlashStr (Temp)
fin
fonction de GetSystemPath : string
var
& nbsp & nbsp Temp : array [0..MAX_PATH] de char
begin
& nbsp & nbsp GetSystemDirectory (Temp, SizeOf(Temp))
fin
fonction de LooksLikeIP(StrIn: string): boolean
var
& nbsp & nbsp IPAddr : string
& nbsp & nbsp periode, l'octuor, j'ai : Entier
begin
& nbsp & nbsp result := false // par defaut
& nbsp & nbsp IPAddr := StrIn
& nbsp & nbsp for i := 1 to 4 do begin
& ! & ! & ! & nbsp si i = 4 periode := 255 autre periode := pos('.',IPAddr)
& ! & ! & ! & nbsp si la periode = 0 then exit
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp octet := StrToInt(copie(Ip,1,periode - 1))
& ! & ! & ! & nbsp a l'exception de
& ! & ! & ! & ! & ! & nbsp sortie
& ! & ! & ! & nbsp fin // ci-dessous, l'octuor < 1 si i = 1, < 0 si i > 1
& ! & ! & ! & nbsp si (octet < (1 div i)) ou (octet > 254) puis la sortie
& ! & ! & ! & nbsp si i = 4 then result := true else IPAddr := copy(adresse Ip,periode 1,255)
& nbsp & nbsp fin
fin
procedure GetConsoleOutput (const ligne de commande : string
& nbsp & nbsp var de Sortie : TStringList)
var
& nbsp & nbsp SA: TSecurityAttributes
& nbsp & nbsp SI: TStartupInfo
& nbsp & nbsp PI: TProcessInformation
& nbsp & nbsp StdOutFile, AppProcess, AppThread : THandle
& nbsp & nbsp RootDir, WorkDir, StdOutFileName:string
const
& nbsp & nbsp FUNC_NAME = 'GetConsoleOuput'
begin
& nbsp & nbsp essayer
& ! & ! & ! & nbsp StdOutFile:=0
& ! & ! & ! & nbsp AppProcess:=0
& ! & ! & ! & nbsp AppThread:=0
& ! & ! & ! & nbsp // Initialiser dirs
& ! & ! & ! & nbsp RootDir:=ExtractFilePath(ParamStr(0))
& ! & ! & ! & nbsp WorkDir:=ExtractFilePath(ligne de commande)
& ! & ! & ! & nbsp // Verifier WorkDir
& ! & ! & ! & nbsp si ce n' (FileSearch(ExtractFileName(ligne de commande),WorkDir)<>')
& ! & ! & ! & ! & ! & nbsp WorkDir:=RootDir
& ! & ! & ! & nbsp // Initialisation du fichier de sortie attributs de securite
& ! & ! & ! & nbsp FillChar(SA,SizeOf(SA),#0)
& ! & ! & ! & nbsp SA.nLength:=SizeOf(SA)
& ! & ! & ! & nbsp SA.lpSecurityDescriptor:=nil
& ! & ! & ! & nbsp SA.bInheritHandle:=True
& ! & ! & ! & nbsp // Creer le Fichier de Sortie
& ! & ! & ! & nbsp StdOutFileName:=RootDir 'sortie.tmp'
& ! & ! & ! & nbsp StdOutFile:=CreateFile(PChar(StdOutFileName),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GENERIC_READ ou GENERIC_WRITE,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FILE_SHARE_READ ou FILE_SHARE_WRITE
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp @SA,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp CREATE_ALWAYS, // Toujours le creer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FILE_ATTRIBUTE_TEMPORARY ou // en cache dans la memoire
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp // si possible
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FILE_FLAG_WRITE_THROUGH,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp 0)
& ! & ! & ! & nbsp // Verifiez le debit de la Poignee
& ! & ! & ! & nbsp si StdOutFile = INVALID_HANDLE_VALUE puis
& ! & ! & ! & ! & ! & nbsp raise Exception.CreateFmt (Fonction ' %s() a echoue!' #10#13
& ! & ! & ! & ! & ! & ! & ! & nbsp ligne de Commande = %s',[FUNC_NAME,en ligne de commande])
& ! & ! & ! & nbsp // initialisation de Demarrage Info
& ! & ! & ! & nbsp FillChar(SI,SizeOf(SI),#0)
& ! & ! & ! & ! avec la SI do begin
& ! & ! & ! & ! & ! & nbsp cb:=SizeOf(SI)
& ! & ! & ! & ! & ! & nbsp dwFlags:=STARTF_USESHOWWINDOW ou STARTF_USESTDHANDLES
& ! & ! & ! & ! & ! & nbsp wShowWindow:=SW_HIDE
& ! & ! & ! & ! & ! & nbsp hStdInput:=GetStdHandle(STD_INPUT_HANDLE)
& ! & ! & ! & ! & ! & nbsp hStdError:=StdOutFile
& ! & ! & ! & ! & ! & nbsp hStdOutput:=StdOutFile
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp // Creer le processus de
& ! & ! & ! & nbsp si la fonction CreateProcess(nil, PChar(ligne de commande), de neant, de neant,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp True, 0, nil,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PChar(WorkDir), SI, PI), puis commencer
& ! & ! & ! & ! & ! & nbsp WaitForSingleObject(PI.hProcess,INFINI)
& ! & ! & ! & ! & ! & nbsp AppProcess:=PI.hProcess
& ! & ! & ! & ! & ! & nbsp AppThread:=PI.hThread
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp raise Exception.CreateFmt('CreateProcess() dans la fonction %s() a echoue!'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & ! & ! & ! & ! & ! & ! #10#13 'ligne de Commande = %s',[FUNC_NAME,en ligne de commande])
& ! & ! & ! & nbsp CloseHandle(StdOutFile)
& ! & ! & ! & nbsp StdOutFile:=0
& ! & ! & ! & nbsp Sortie.Clair
& ! & ! & ! & nbsp Sortie.LoadFromFile (StdOutFileName)
& nbsp & nbsp enfin
& ! & ! & ! & nbsp // Fermer les poignees
& ! & ! & ! & nbsp si StdOutFile <> 0 alors CloseHandle(StdOutFile)
& ! & ! & ! & nbsp si AppProcess <> 0 alors CloseHandle(AppProcess)
& ! & ! & ! & nbsp si AppThread <> 0 alors CloseHandle(AppThread)
& ! & ! & ! & nbsp // Suppression du fichier de Sortie
& ! & ! & ! & nbsp if FileExists(StdOutFileName)
& ! & ! & ! & ! & ! & nbsp SysUtils.DeleteFile(StdOutFileName)
& nbsp & nbsp fin
fin
fonction de GetBasicOsType : LongWord
var
& nbsp & nbsp VerInfo : TOsVersionInfo
begin
& nbsp & nbsp VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo)
& nbsp & nbsp GetVersionEx (VerInfo)
& nbsp & nbsp Resultat := VerInfo.dwPlatformId
fin
fonction de GetIpCfg9xOutPath : string
begin
& nbsp & nbsp Resultat := GetWindowsPath IPCFG_DUMMY_FILE
fin
fonction de GetIpCfgExePath : string
begin
& nbsp & nbsp Resultat := '
& nbsp & nbsp Cas GetBasicOsType de
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_WINDOWS : Resultat := GetWindowsPath IPCFG_WIN9X
& ! & ! & ! & ! & ! & nbsp GetIpCfg9xOutPath
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_NT : Result := GetSystemPath IPCFG_WINNT
& nbsp & nbsp fin
fin
fonction de GetDnsIpFromReg : string
var
& nbsp & nbsp OpenKey : HKEY
& nbsp & nbsp Vn,
& nbsp & nbsp sous-Cle : PChar
& nbsp & nbsp Type de donnees,
& nbsp & nbsp donnees. datasize : integer
& nbsp & nbsp Temp : array [0..2048] de char
begin
& nbsp & nbsp Resultat := '
& nbsp & nbsp sous-Cle := '
& nbsp & nbsp Vn := '
& nbsp & nbsp cas GetBasicOsType de
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_WINDOWS :
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp sous-Cle := REG_9X_NAMESERVER_PATH
& ! & ! & ! & ! & ! & nbsp Vn := REG_9X_NAMESERVER
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp VER_PLATFORM_WIN32_NT :
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp sous-Cle := REG_NT_NAMESERVER_PATH
& ! & ! & ! & ! & ! & nbsp Vn := REG_NT_NAMESERVER
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
& nbsp & nbsp si RegOpenKeyEx (HKEY_LOCAL_MACHINE, sous-Cle, REG_OPTION_NON_VOLATILE,
& ! & ! & ! & nbsp KEY_READ, OpenKey) = ERROR_SUCCESS puis
& nbsp & nbsp commencer
& ! & ! & ! & nbsp DataType := REG_SZ
& ! & ! & ! & nbsp donnees. datasize := SizeOf(Temp)
& ! & ! & ! & nbsp si RegQueryValueEx (OpenKey, Vn, neant, @Type de donnees, @Temp
& ! & ! & ! & ! & ! & nbsp @donnees. datasize) = ERROR_SUCCESS puis
& ! & ! & ! & ! & ! & nbsp Resultat := chaîne de caracteres(Temp)
& ! & ! & ! & nbsp RegCloseKey (OpenKey)
& nbsp & nbsp fin
fin
fonction de GetDnsIpFromIpCfgOut (const Sortie : TStringList
& nbsp & nbsp var DnsIp : string) : boolean
var
& nbsp & nbsp i : integer
begin
& nbsp & nbsp Result := FALSE
& nbsp & nbsp si la Sortie.Count >= 1
& ! & ! & ! & nbsp for i := 0 a la Sortie.Count - 1 do
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si Pos(IPCFG_DNS_SERVER_LINE, de Sortie[i]) > 0, alors
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp DnsIp := Trim(Copie (Sortie[i], Pos(':', Sortie[i]) 1,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Longueur(Sortie[i])))
& ! & ! & ! & ! & ! & ! & ! & nbsp Resultat := LooksLikeIp (DnsIp)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp fin
fin
fonction de GetDnsIp : string
var
& nbsp & nbsp Sortie : TStringList
& nbsp & nbsp DnsIp,
& nbsp & nbsp CmdLine : string
begin
& nbsp & nbsp CmdLine := GetIpCfgExePath
& nbsp & nbsp si CmdLine < > '
& nbsp & nbsp commencer
& ! & ! & ! & nbsp Sortie := TStringList.Creer
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp cas GetBasicOsType de
& ! & ! & ! & ! & ! & ! & ! & nbsp VER_PLATFORM_WIN32_WINDOWS :
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetConsoleOutput (CmdLine, Sortie)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Sortie.LoadFromFile (GetIpCfg9xOutPath)
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetConsoleOutput (CmdLine, Sortie)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp si GetDnsIpFromIpCfgOut (Sortie, DnsIp)
& ! & ! & ! & ! & ! & ! & ! & nbsp Resultat := DnsIp
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & nbsp //
& ! & ! & ! & ! & ! & ! & ! & nbsp // Tenter de trouver par l'intermediaire du registre
& ! & ! & ! & ! & ! & nbsp & nbsp & nbsp //
& ! & ! & ! & ! & ! & ! & ! & nbsp Resultat := GetDnsIpFromReg
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & nbsp Sortie.Gratuit
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
fin
a la fin.
Obtenir les ordinateurs serveur dns
By commentfaire
Obtenir les ordinateurs serveur dns : Plusieurs milliers de conseils pour vous faciliter la vie.