
Ağdaki bilgisayarların ad ve ip nolarını listeleme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Ağdaki bilgisayarların ad ve ip nolarını listeleme
Arkadaşlar.Bir bilgisayarın bağlı bulunduğu lokal ağdaki pclerin adlarını ve ip nolarını listeletmek istiyorum.Belki çok basittir ama yapamayınca zor.
Bununlar ilgili arama yaptım ama bulamadım?yardımcı olacak arkadaşlara şimdiden teşekkür ederim.

Aşağıdaki kodları bir unit olarak kaydedin,
sonra projenizin uses kısmına bunu ekleyin.
Meselâ bir buton ve listbox koyun,butonclik e yazın
Listboxta ağdaki PCleri göreceksiniz.
Aynı unit içindeki HostToIPAddr fonksiyonu adını verdiğiniz bilgisayarın IP nosunu gönderir, örneğin bir başka butan daha ekleyip listboxtan seçtiğiniz bilgisayr adının IP sini showmessage olarak gösterilim,
Kolay gelsin.
Kod: Tümünü seç
unit findcomp;
interface
uses
Windows, Classes;
function FindComputers: DWORD;
function HostToIPAddr(Name: string; var Ip: string): Boolean;
var
Computers: TStringList;
implementation
uses
SysUtils, winsock;
const
MaxEntries = 500;
function HostToIPAddr(Name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin
IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end
end;
function FindComputers: DWORD;
var
EnumbilgHandle, EnumWorkGroupHandle, EnumComputerHandle: THandle;
EnumError: DWORD;
Network: TNetResource;
bilgEntries, WorkGroupEntries, ComputerEntries: DWORD;
EnumbilgBuffer, EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource;
bilgEnumbufferlength, workEnumbufferlength, compEnumBufferLength: DWORD;
k,I, J: DWORD;
st : string;
begin
Computers.Clear;
FillChar(Network, SizeOf(Network), 0);
with Network do
begin
dwScope := RESOURCE_GLOBALNET;
dwType := RESOURCETYPE_ANY;
dwUsage := RESOURCEUSAGE_CONTAINER;
end;
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle);
if EnumError = NO_ERROR then
begin
WorkGroupEntries := MaxEntries;
workEnumBufferLength := SizeOf(EnumWorkGroupBuffer);
EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, workEnumBufferLength);
if EnumError = NO_ERROR then
begin
for I := 1 to WorkGroupEntries do
begin
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle);
if EnumError = NO_ERROR then
begin
ComputerEntries := MaxEntries;
compEnumBufferLength := SizeOf(EnumComputerBuffer);
EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, compEnumBufferLength);
if EnumError = NO_ERROR then
begin
for j := 1 to computerEntries do
begin
Computers.Add(EnumcomputerBuffer[j].lpRemoteName);
EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumcomputerBuffer[J], EnumbilgHandle);
if EnumError = NO_ERROR then
begin
bilgEntries := MaxEntries;
bilgEnumBufferLength := SizeOf(EnumbilgBuffer);
EnumError := WNetEnumResource(EnumbilgHandle, bilgEntries, @EnumbilgBuffer, bilgEnumBufferLength);
if EnumError = NO_ERROR then
for k := 1 to bilgEntries do
begin
st := EnumbilgBuffer[k].lpRemoteName;
delete(st,1,2);
Computers.Add(' '+st);
end;
WNetCloseEnum(EnumbilgHandle);
end;
end;
end;
WNetCloseEnum(EnumComputerHandle);
end;
end;
end;
WNetCloseEnum(EnumWorkGroupHandle);
end;
if EnumError = ERROR_NO_MORE_ITEMS then
EnumError := NO_ERROR;
Result := EnumError;
end;
initialization
Computers := TStringList.Create;
finalization
Computers.Free;
end.
sonra projenizin uses kısmına bunu ekleyin.
Meselâ bir buton ve listbox koyun,butonclik e yazın
Kod: Tümünü seç
FindComputers;
listbox.items:=Computers;
Aynı unit içindeki HostToIPAddr fonksiyonu adını verdiğiniz bilgisayarın IP nosunu gönderir, örneğin bir başka butan daha ekleyip listboxtan seçtiğiniz bilgisayr adının IP sini showmessage olarak gösterilim,
Kod: Tümünü seç
var
IP:String;
begin
HostToIPAddr(ListBox1.Items[ListBox1.ItemIndex],IP);
ShowMessage(IP);
end;
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
@vkamadan çok teşekkür ederim.bu kod pcleri çok güzel bir şekilde listeletiyor.Ayrıca @mrmarman'ında bu konuda bir kodunu buldum forumda.Ancak şöyle bir sorun var.Her iki durumda da.
Bu bilgisayar adlarını listelerttikten sonra bu kod ip numaralarını döndürmüyor.
Aşağıdaki kodda @mrmarmanın verdiği kod.Bu ip numaralarını veriyor.Ancak bilgisayar paylaşıma açık değilse ip numarasını null döndürüyor.Yani sadece ağdaki bilgisayarların paylaşıma açık olanlarının ip numaralarını döndürüyor.Acaba paylaşıma açık olmasada ip numarasını alabilirmiyiz.
Teşekkürler....
Bu bilgisayar adlarını listelerttikten sonra bu kod ip numaralarını döndürmüyor.
Aşağıdaki kodda @mrmarmanın verdiği kod.Bu ip numaralarını veriyor.Ancak bilgisayar paylaşıma açık değilse ip numarasını null döndürüyor.Yani sadece ağdaki bilgisayarların paylaşıma açık olanlarının ip numaralarını döndürüyor.Acaba paylaşıma açık olmasada ip numarasını alabilirmiyiz.
Teşekkürler....
Kod: Tümünü seç
function GetAddressByName(name : string) : string;
var
wsdata : TWSAData;
he : PHostEnt;
ss : pchar;
ip : TInAddr;
begin
WSAStartup(MakeWord(1, 1), wsdata);
he := gethostbyname(pchar(name));
if he<>nil then
begin
ip.S_addr := integer(pointer(he^. h_addr_list^)^);
ss := inet_ntoa(ip);
Result := string(ss);
end;
WSACleanup();
end;
-
- Üye
- Mesajlar: 62
- Kayıt: 04 Oca 2009 06:36
vkamadan hocam verdiğiniz kodlar windows 8 de çalışır mı çalışmaz ise ne yapmamız lazım. kolay gelsin.vkamadan yazdı:Aşağıdaki kodları bir unit olarak kaydedin,
Kod: Tümünü seç
unit findcomp; interface uses Windows, Classes; function FindComputers: DWORD; function HostToIPAddr(Name: string; var Ip: string): Boolean; var Computers: TStringList; implementation uses SysUtils, winsock; const MaxEntries = 500; function HostToIPAddr(Name: string; var Ip: string): Boolean; var wsdata : TWSAData; hostName : array [0..255] of char; hostEnt : PHostEnt; addr : PChar; begin WSAStartup ($0101, wsdata); try gethostname (hostName, sizeof (hostName)); StrPCopy(hostName, Name); hostEnt := gethostbyname (hostName); if Assigned (hostEnt) then if Assigned (hostEnt^.h_addr_list) then begin addr := hostEnt^.h_addr_list^; if Assigned (addr) then begin IP := Format ('%d.%d.%d.%d', [byte (addr [0]), byte (addr [1]), byte (addr [2]), byte (addr [3])]); Result := True; end else Result := False; end else Result := False else begin Result := False; end; finally WSACleanup; end end; function FindComputers: DWORD; var EnumbilgHandle, EnumWorkGroupHandle, EnumComputerHandle: THandle; EnumError: DWORD; Network: TNetResource; bilgEntries, WorkGroupEntries, ComputerEntries: DWORD; EnumbilgBuffer, EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource; bilgEnumbufferlength, workEnumbufferlength, compEnumBufferLength: DWORD; k,I, J: DWORD; st : string; begin Computers.Clear; FillChar(Network, SizeOf(Network), 0); with Network do begin dwScope := RESOURCE_GLOBALNET; dwType := RESOURCETYPE_ANY; dwUsage := RESOURCEUSAGE_CONTAINER; end; EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle); if EnumError = NO_ERROR then begin WorkGroupEntries := MaxEntries; workEnumBufferLength := SizeOf(EnumWorkGroupBuffer); EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, workEnumBufferLength); if EnumError = NO_ERROR then begin for I := 1 to WorkGroupEntries do begin EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle); if EnumError = NO_ERROR then begin ComputerEntries := MaxEntries; compEnumBufferLength := SizeOf(EnumComputerBuffer); EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, compEnumBufferLength); if EnumError = NO_ERROR then begin for j := 1 to computerEntries do begin Computers.Add(EnumcomputerBuffer[j].lpRemoteName); EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumcomputerBuffer[J], EnumbilgHandle); if EnumError = NO_ERROR then begin bilgEntries := MaxEntries; bilgEnumBufferLength := SizeOf(EnumbilgBuffer); EnumError := WNetEnumResource(EnumbilgHandle, bilgEntries, @EnumbilgBuffer, bilgEnumBufferLength); if EnumError = NO_ERROR then for k := 1 to bilgEntries do begin st := EnumbilgBuffer[k].lpRemoteName; delete(st,1,2); Computers.Add(' '+st); end; WNetCloseEnum(EnumbilgHandle); end; end; end; WNetCloseEnum(EnumComputerHandle); end; end; end; WNetCloseEnum(EnumWorkGroupHandle); end; if EnumError = ERROR_NO_MORE_ITEMS then EnumError := NO_ERROR; Result := EnumError; end; initialization Computers := TStringList.Create; finalization Computers.Free; end.
sonra projenizin uses kısmına bunu ekleyin.
Meselâ bir buton ve listbox koyun,butonclik e yazın
Listboxta ağdaki PCleri göreceksiniz.Kod: Tümünü seç
FindComputers; listbox.items:=Computers;
Aynı unit içindeki HostToIPAddr fonksiyonu adını verdiğiniz bilgisayarın IP nosunu gönderir, örneğin bir başka butan daha ekleyip listboxtan seçtiğiniz bilgisayr adının IP sini showmessage olarak gösterilim,Kolay gelsin.Kod: Tümünü seç
var IP:String; begin HostToIPAddr(ListBox1.Items[ListBox1.ItemIndex],IP); ShowMessage(IP); end;
Re: Ağdaki bilgisayarların ad ve ip nolarını listeleme
MErhaba ,
Bildiğim kadarıyla Windows 8, alt yapı olarak Windows 7 den ciddi farklılıklar içermiyor, şahsen uzun uzun kullanmadım win 8 i, fakat tüm sistemini win 8 e çevirmiş bir sistemci arkadaşımdan aldığım bilgiye göre win 7 de çalışıp win 8 de çalışmayan program yokmuş.
Bildiğim kadarıyla Windows 8, alt yapı olarak Windows 7 den ciddi farklılıklar içermiyor, şahsen uzun uzun kullanmadım win 8 i, fakat tüm sistemini win 8 e çevirmiş bir sistemci arkadaşımdan aldığım bilgiye göre win 7 de çalışıp win 8 de çalışmayan program yokmuş.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
-
- Üye
- Mesajlar: 62
- Kayıt: 04 Oca 2009 06:36
Re:
Programınızı yönetici olarak ve winXP yada Win7 uyumluluk modun da çalıştırdığınız da da sorun devam ediyor mu? Ediyorsa maalesef daha detaylı malumatım yok konu hakkında.erkankurtaga yazdı:Cevabınız için teşekkürler.
Verdiğiniz kod ile bilgisayarları win7 de bulabiliyorum fakat, win8 bilgisayarları getirmiyor. Sizce sebebi ne olabilir.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr