Ağ Bağlantıları Dialog Kutusu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Policemal
Üye
Mesajlar: 13
Kayıt: 18 Şub 2004 10:43
İletişim:

Ağ Bağlantıları Dialog Kutusu

Mesaj gönderen Policemal »

benim sorum şu Bir butona basınca TreeWiev gibi bir ileşim kutusu yada bir dialog kutusu gelsin içerisinde Çalışma gurupları ve bilgisaylar gözüksün seçilen bilgisayar adını edit e yazsın istiyorum
*******Yardımcı olan herkese Çok Tşk ederim***********
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

bunları yapan hazır 3party bileşenler var torry den falan bulabilirsin. Diğer taraftan sen yapmak iatiyorsan API lerle yapabilirsin. API nin adı aklıma gelmede maalesef :(
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selamlar...

- Arşivimde, internetten derlediğim, uygulamalarımda Network işlemleri gerektiğinde kullandığım faydalı fonksiyonlar vardı onları bildiriyorum... Herkesin işine yarayacak türden...

- Aşağıda önce fonksiyonu sonra da örneğin bir buton procedure içerisindeki uygulamasını göreceksiniz... Afiyet olsun... :wink:

:arrow: Mevcut bağlı bulunulan WorkGroup (Çalışma Grubu)

Kod: Tümünü seç

function GetNetWorkgroup: string;
var
  Reg: TRegistry; // Uses Registry
begin
  Reg := TRegistry.create;
  Result := '(n/a)';
  with Reg do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKey('System\CurrentControlSet\Services\VxD\VNETSUP',
      false) then
      Result := ReadString('Workgroup');
  finally
    CloseKey;
    free;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ShowMessageFmt('Ağ Çalışma Grubu Adı : %s', [GetNetWorkgroup]);
end;
:arrow: Ağ altındaki mevcut WorkGroup isimleri (Çalışma Grupları Listesi)

Kod: Tümünü seç

var
  WorkgroupCount: Integer;
  Workgroup: array[1..500] of string[25];

procedure FindAllWorkgroups;
var
  EnumHandle: THandle;
  EntireNetwork: TNetResource;
  Buf: array[1..500] of TNetResource;
  BufSize: DWORD;
  Entries: DWORD;
begin
  FillChar(EntireNetwork, SizeOf(EntireNetwork), 0);
  with EntireNetwork do
  begin
    dwScope := 2;
    dwDisplayType := 6;
    dwUsage := 2;
  end;

  WNetOpenEnum(RESOURCE_GLOBALNET,
    RESOURCETYPE_ANY,
    0,
    @EntireNetwork,
    EnumHandle);

  WorkgroupCount := 0;
  repeat
    Entries := 1;
    BufSize := SizeOf(Buf);

    WNetEnumResource(EnumHandle,
      Entries,
      @Buf,
      BufSize);
    if Entries = 1 then
    begin
      Inc(WorkgroupCount);
      Workgroup[WorkgroupCount] := StrPas(Buf[1].lpRemoteName);
    end;
  until (Entries <> 1);

  WNetCloseEnum(EnumHandle);
end;

procedure TForm1.Button4Click(Sender: TObject);
Var
  Sayac : Integer;
begin
  FindAllWorkgroups();
  Sayac := 1;
  Repeat
    ListBox1.Items.Add(WorkGroup[Sayac]);
    Inc(sayac);
  Until Sayac = WorkgroupCount+1;
end;
:arrow: Belirtilen bir WorkGroup dahilindeki bilgisayarların listesi

Kod: Tümünü seç

var
  Computer: array[1..500] of string[25];
  ComputerCount: Integer;

procedure FindAllComputers(Workgroup: string);
var
  EnumHandle: THandle;
  WorkgroupRS: TNetResource;
  Buf: array[1..500] of TNetResource;
  BufSize: DWord;
  Entries: DWord;
  Result: Integer;

begin
  ComputerCount := 0;

  Workgroup := Workgroup + #0;

  FillChar(WorkgroupRS, SizeOf(WorkgroupRS), 0);
  with WorkgroupRS do
  begin
    dwScope := 2;
    dwType := 3;
    dwDisplayType := 1;
    dwUsage := 2;
    lpRemoteName := @Workgroup[1];
  end;

  WNetOpenEnum(RESOURCE_GLOBALNET,
    RESOURCETYPE_ANY,
    0,
    @WorkgroupRS,
    EnumHandle);

  repeat
    Entries := 1;
    BufSize := SizeOf(Buf);

    Result :=
      WNetEnumResource(EnumHandle,
      Entries,
      @Buf,
      BufSize);
    if (Result = NO_ERROR) and (Entries = 1) then
    begin
      Inc(ComputerCount);
      Computer[ComputerCount] := StrPas(Buf[1].lpRemoteName);
    end;
  until (Entries <> 1) or (Result <> NO_ERROR);

  WNetCloseEnum(EnumHandle);
end; { Find All Computers }

procedure TForm1.Button5Click(Sender: TObject);
Var
  Sayac : Integer;
begin
  FindAllComputers(GetNetWorkgroup);
  Sayac := 1;
  Repeat
    ListBox2.Items.Add(Computer[Sayac]);
    Inc(sayac);
  Until Sayac = ComputerCount+1;
end;
:arrow: Hostname bilinen bilgisayarın IP adresini bulma...

Kod: Tümünü seç

//Uses Winsock;
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;
En son mrmarman tarafından 03 Oca 2006 06:02 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Policemal
Üye
Mesajlar: 13
Kayıt: 18 Şub 2004 10:43
İletişim:

olmadı

Mesaj gönderen Policemal »

dediğin kodları denedim ama hata verdi olmadı bildiğiniz bir compenet varsa gönderebilirmisiniz...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Hangi kodları denedin ve ne hatası verdi yazsan da bilsek...

Benim sistem WinME - Delphi 5 deneyip de gönderdim... Hatayı ve sitemini bildirir misin ?
Resim
Resim ....Resim
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

turbopower in shelltreeview componentinde root olarak rfnetwork seçip otomatik işini halledebilir diye düşünüyorum.
tabii nekadar işinize yarar bilemem
Policemal
Üye
Mesajlar: 13
Kayıt: 18 Şub 2004 10:43
İletişim:

Mesaj gönderen Policemal »

mrmcop delphi 6 ile win 2000 serverde denedim olmadı. megedediğin gibi yaptım ağ bağlantılarımı görüntüledim ancak seçtiğim bilgisayarın adını bir edite yazdıramadım. her ikinizede tşk ederim.
Kullanıcı avatarı
akgun83
Üye
Mesajlar: 106
Kayıt: 26 Eyl 2003 11:34

Mesaj gönderen akgun83 »

uses kısmına Registry i eklersen çalışır. :wink:
Petex
Üye
Mesajlar: 2
Kayıt: 26 Mar 2004 08:21

olmuyor

Mesaj gönderen Petex »

denedim olmuyor arkadaşlara seçtiğim bilgisayarın adını edite yada labele yazdıramadım.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Re: olmuyor

Mesaj gönderen mege »

Petex yazdı:denedim olmuyor arkadaşlara seçtiğim bilgisayarın adını edite yada labele yazdıramadım.
ShellTreeView1. yazınca orada bir combobox açılır, oradan dikkatle okursan isimlerden çıkartabilirsin neyin ne olduğunu

Kod: Tümünü seç

procedure TForm1.ShellTreeView1DblClick(Sender: TObject);
var sMyPath:string;
begin
sMyPath:= ShellTreeView1.SelectedFolder.PathName;
showmessage(sMyPath);
end;
Policemal
Üye
Mesajlar: 13
Kayıt: 18 Şub 2004 10:43
İletişim:

Mesaj gönderen Policemal »

petex ben denedim oldu uygulamayı mail adresine gönderdim bak istersen

***********ilgilenen tüm arkadaşlara çok tşk*************
nilnur
Üye
Mesajlar: 60
Kayıt: 21 Tem 2004 05:06

Mesaj gönderen nilnur »

sayın mrmcop

verdiğiniz kodlar çok faydalı, teşekkürler...

sormak istediğim: bilgisayara bağlantı yapan bilgisayarlar hakkında bilgi veren bir program yapmak istiyorum. yardımcı olursanız sevinirim. elde etmek istediğim bilgiler:
bağlanan bilgisayarın ip adresi,
hangi kullanıcı adı ile bağlandığı,
bağlantı saati,
hangi dizindeki hangi programı kullandığı / çalıştırdığı,
bağlandığı bilgisayara dosya gönderdi mi, oradan dosya aldı mı?

bu konu ile ilgili yardımlarınızı bekliyorum. teşekkürler...
ProgMan
Üye
Mesajlar: 16
Kayıt: 23 Tem 2004 05:18
Konum: İzmir

Mesaj gönderen ProgMan »

JVCL component setinin içinde JvDialogs Paketinde böyle bir component var sourceforge.net den aratıp bulabilirsin
nilnur
Üye
Mesajlar: 60
Kayıt: 21 Tem 2004 05:06

Mesaj gönderen nilnur »

teknik ingilizcem o siteyi anlayabileceğim düzeyde değil. başka türlü yardımcı olabilir misiniz???
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhabalar...

- Command Prompt'da "NET SESSION" ve "NET FILE" dediğimizde aldığımız cevapları içeren bir liste istiyorsunuz...

- Burada sorduğunuz soru itibariyle bire-bir takip etmek mümkün mü, açıkçası bilemiyorum... Diğer yandan windows mesaj sisteminde bunu içeren bir WM_xxx mesajı var olabileceğini ve bu mesaj takip edilerek tetikleme yaptırılmak yoluyla liste güncellemesi yapılabileceğini değerlendiriyorum.

- Şimdilik basit olarak o anki durumu bulmak için Command Promtta, text file yönlendirmesinden yararlanıp listenin oluşturulacağı "sonuc.txt" gibi bir dosya okunarak geçici çözüm üretilebilir...

Kod: Tümünü seç

Var
  Sonuc1, Sonuc2 : String;
begin
  // Sonuc1 = Bağlı Bilgisayar ve IP
  // Sonuc2 = Çalıştığı programlar
  Sonuc1 := '"'+ExtractFilePath(Application.ExeName)+'Sonuc01.TXT"';
  Sonuc2 := '"'+ExtractFilePath(Application.ExeName)+'Sonuc02.TXT"';
  WinExec( PChar('CMD /c NET SESSION > ' + Sonuc1), SW_MINIMIZE );
  WinExec( PChar('CMD /c NET FILE    > ' + Sonuc2), SW_MINIMIZE );
  ShowMessage('Ok');
end;
- Yapılacak işlem program dizininizde oluşacak Sonuc01 ve Sonuc02 isimli iki dosyaya gözatmak veya delphi ile bunu yaptırmak... Timer ile saniyelik peryodlarla bu işlem tekrarlanarak, 1 saniye hassasiyetinde sonuçlar alınabilir...

- Tabi NetWork'ün genişliği de göz önüne alınmalıdır -keza gelecek sonuç 1 saniyeyi geçkin olabilir... :idea: - Bu yönde tecrübem yok ama bu ihtimali gözardı etmemek lazım...

- Üzülerek söylüyorum ki, buradaki alacağınız dosya isimleri kısaltıldığından net bir yol bilgisi sunmayacaktır...

- Karşıma sorunuzun çözümünü içeren bir bilgi çıkarsa bu başlık altına eklerim...
Resim
Resim ....Resim
Cevapla