Ağ Bağlantıları Dialog Kutusu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
nilnur
Üye
Mesajlar: 60
Kayıt: 21 Tem 2004 05:06

Mesaj gönderen nilnur »

internette araştırma yaparken bir program indirdim delphi'de yazılmış. 3 tane proje var içinde. incelemeye çalıştım ama anlamadım. rica etsem bana ne yaptığını anlatır mısınız?. .zip formatında 71 kb yer kaplıyor ve kodlar uzun. kodları mı göndereyim yoksa .zip dosyasını mı? dosyayı gönder derseniz nereye nasıl göndereyim?

kolay gelsin....
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhabalar....

- Konuyla ilgili size çözüm üretti mi ? Yani derleyip çalıştırdınız ve istediğiniz bilgileri size sundu mu :?:

- Cevap evet ise en güzeli kaynak araştırması adına bulduğunuz sayfanın linkini ve/veya internette bir yere koyup bu yeni linki yazarsanız. bu başlığı gören birden fazla kişi analiz edebilir ve gözden kaçabilecek ayrıntılar da keşfedilmiş olur... :idea:
Resim
Resim ....Resim
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

Mrmcop bu kodlar için çok teşekkür ederim. Ama bir sorunum var.
Program çalışınca buldugu microsoft Windows Network.

Benim istegim ise microsoft windows network altında 20 tane domain var. bunlarda sadece bana ait olanı ANKARA isimli domain. Ankara altındaki cleint ları nasıl gösterebilrim. (diğer domainlerin gözükmesine gerek yok.)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhabalar...

- Ben WindowsME kullandığımdan registry kayıtlarından WorkGroup bilgisine ulaşıyor ve işlerimi halledebiliyordum... :)

- WinXP işletim sisteminde WorkGroup listesi bahsettiğiniz şekilde (microsoft Windows Network) geliyor... :?

- Yine de gerçek WorkGroup adını biliyorsanız fonksiyona girip bu gruptaki ağa login olmuş bilgisayarların listesini görebilirsiniz...

- Size bilgisayarların yanı sıra paylaştırılmış kaynakları (klasör, yazıcı vb.) da listeleyen başka bir örnek sunmak isterim... Yine Internetten derlenmiştir.

http://divxturk.divxforever.com/files/g ... aklari.zip

- Ümit ederim, işinize yarayacaktır....
Resim
Resim ....Resim
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

merhaba mrcomp
bu kodlar galiba sadece me da çalışıyor. bendeki xp.
ayrıca son verdigini linkide denedim. Baya bir kastım ama malesef buda 10 sn. işlem yapmadan duruyor ardından
wnetopenenum
hatası veriyor. galiba buda işletim sistemi, ile ilgili olabilir.

yinede ilginize teşekkürler
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Bu verdiğim linki Bürodaki makineden deneyip yollamıştım... XP Prof.SP1 TR kurulu. Bir başka hata olmalı...

- Şu an yine bürodayım ve denediğimde aldığım sonuç aşağıdaki IMAGE gibi... Yani normal...

Resim

- Yine de başka bişi bulursam buraya yazarım.. :idea:
Resim
Resim ....Resim
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

teşekkürler ilgine. Bende tr yerine en yüklü ama dedigim hatayı veriyor. Ama ben biraz daha cırmalayım bakalım.
Bu arada daha önceki yazdıgınız kodu halen değişik denemeler yapmama ragmen malesef olmuyor. function da gerekli değişiklikleri yapmamaı söylemiştiniz. Ama Xp de hangi api leri kullandıgını bir türlü bulamadım.
Me de vnetsup ile bulabiliyorsunuz ama xp de ne kullanmam gerektigini bir türlü bulamadım.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

ilk sayfadaki turbopower shelltreeview komponentini denedinizmi?
viewtopic.php?p=10692#10692
.-.-.-.-.-.-.-. ^_^
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

Evet kullandım onu. Ama 20 domainli bir network de son kullanıcı için biraz zor olur gibi yanlış domainlere girebilme olasılıgı olur.
shelltreeview da ilk çalışma anında direk olarak kendi domainime atama şansım varmı ?
biraz inceledim ama sadece root kısmında ki seçenekleri gördüm.
Buda Xp gibi işletim sistemlerinde son kullanıcıya biraz sıkıntı yaratır gibi.
Nt olsa bir problem yok :)
Ayrıca shelltreeview da istedigim cleinta select yoluyla map olabilme şansı verebiliyrmu ona daha bakmadım.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Önceki kodlarımı tekrar inceledim... Neden çalışmadıkları hakkında kuşkularım vardı, umarım doğru sonuçlardır...

- Aşağıdaki kodu içeren projeyi aşağıdaki linkten indirip bir dener misin ?

http://divxturk.divxforever.com/files/g ... klari2.zip

- Yukardaki linkteki örnekte aşağıdaki kod uygulandı... Download edip dene ve ComboBox içerisinde Domain olarak isimlendiridiğin WorkGroup listesini görüp görmediğini, listede Ankara olup olmadığını kontrol edip, ComboBox'tan seçeceğin ANKARA ile Button2'ye basınca bilgisayarları görebiliyor musun incele...

Resim

Kod: Tümünü seç

// 1 Adet ComboBox : ComboBox1
// 1 Adet ListBox  : ListBox1
Var
  WorkgroupCount : Integer;
  Workgroup      : Array[1..50] of String;
  Computer       : Array[1..100] of String;
  ComputerCount  : Integer;

procedure TForm1.FindAllWorkgroups;
Var
  EnumHandle, hEnum2        : THandle;
  Buf, aBuf2                : Array[0..100] of TNetResource;
  BufSize                   : DWORD;
  Entries, iEntries2        : DWORD;
  i, j                      : Integer;
begin
  try
    if WnetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, nil, EnumHandle) <> NO_ERROR
    then exit;
    BufSize := sizeof(Buf);
    Entries := 64;
    while WNetEnumResource(EnumHandle, Entries, @Buf[0], BufSize) = NO_ERROR do
    begin
      for i := 0 to (Entries-1) do
      begin
        if  ((Buf[i].dwUsage and RESOURCEUSAGE_CONTAINER) = RESOURCEUSAGE_CONTAINER)
             and
            (pos(UpperCase('Microsoft Windows'), UpperCase(string(Buf[i].lpRemoteName))) = 1) then
        begin
          try
            if WnetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Buf[i], hEnum2) <> NO_ERROR then
            begin
              exit;
            end;
            BufSize := sizeof(aBuf2);
            iEntries2 := 64;
            while WNetEnumResource(hEnum2, iEntries2, @aBuf2[0], BufSize) = NO_ERROR do
            begin
              for j := 0 to (iEntries2 - 1) do
              begin
                Inc( WorkgroupCount );
                Workgroup[WorkgroupCount] := string(abuf2[j].lpRemoteName);
                ComboBox1.Items.Add(Workgroup[WorkgroupCount]);
              end;
              iEntries2 := 64;
            end;
          finally
            WNetCloseEnum(hEnum2);
          end;
        end;
      end;
      Entries := 64;
    end;
  finally
  WnetCloseEnum(EnumHandle);
  end;
end;

procedure TForm1.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;


procedure TForm1.Button1Click(Sender: TObject);
begin
  FindAllWorkGroups();
end;


procedure TForm1.Button2Click(Sender: TObject);
Var
  Sayac : Integer;
begin
  FindAllComputers(ComboBox1.Items[ComboBox1.ItemIndex]);
  For Sayac := 1 to ComputerCount do ListBox1.Items.Add(Computer[Sayac]);
end;
Resim
Resim ....Resim
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

selam mrcomp
evet şimdi istedigim oldu. bir iki değişiklik yaparak kullanıcı hatalarınıda azalttım.
Ör. combobox da String kısmına sadece kendi domainimi koydum. :wink:

sadece bir problemim kaldı. oda yazdıgınız kod da makine isimlerinin başındaki // işaretlerini kaldırmam lazım. Nerden buldugunu bir bulabilirsem.

tekrar teşkkür ederim mrcomp
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

Problemimin çözümünü şu şekilde bir yere kadar çözdüm

Kod: Tümünü seç

procedure TForm1.Edit1Change(Sender: TObject);
var
al : shortstring;
begin
al :=  listbox1.Items[ind]; //ind publicde string bir ifadedir
edit1.Text := al[3]+al[4]+al[5]+al[6]+al[7]al[8];
ilk 3 harfi alıyor. Fakat 3 harfden sonrası rakam içermektedir.
mesala ank5689ank
burdaki ilk ank yı alıyor. Fakat rakama gelince 56 yerine 00 yazıyor
bu nedendir acaba ?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba... Çözüldüğüne sevindim...

- Burada Edit1'in onChange eventine değil onExit gibi işlem sonu olaylarından birine konmasında fayda var...

- Çünkü Edit1Change olayında yaptığım her atama yeninden change olayı meydana getiriyor ve paradoksa sebep olur...

- Ek olarak kodda yapmak istediğin şeyi yanlış ifade etmişsin...
mesela ind değikeni Public bir değişken olabilir ama String olamaz. Herhalde yanlışlıkla yazdın...

- Eğer Edit1'in içeriğinde hangi makine için sorgu yapıldığını yansıtmak istiyorsan bunu listbox'un OnClick olayı ile OnKeyPress veya OnKeyUp olayında yap. Aşağıdaki kodu dene istersen ...

Kod: Tümünü seç

If ListBox1.ItemIndex >= 0 then // kontrol adına
begin
  Edit1.Text := Copy(ListBox1.Items[ListBox1.ItemIndex], 4, 999);
end;


gibi bir ifade kullanırsan, ListBox üzerinde tıklanan satırın makina adını çekmiş olursun...

- Çalışmalarında başarılar...
Resim
Resim ....Resim
Armani
Üye
Mesajlar: 104
Kayıt: 18 Mar 2004 05:32
Konum: Ankara

Mesaj gönderen Armani »

Merhaba arkadaşlar
agdaki pc lerin yanında description da tanımlı isimleride görmek mümkünmü ?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@Armani

Merhabalar... Sorunu geç gördüm... Tabii ki mümkün...

- Bilgisayar isimlerinin bulunduğu procedure FindAllComputers isimli olanı olduğunu görmüştük...

- Gördüğün üzere Bilgisayar isimleri lpRemoteName ile alınıyor. lpComment'i de işleme alırsan bunun içinde de istediğin bilgisayar description'una erişebilirsin... Örnek olsun diye aşağıdaki kodu eskisinin üzerine kopyala/yapıştır yaparsan kolayca göreceksin...

Eski Kod...

Kod: Tümünü seç

    If (Result = NO_ERROR) and (Entries = 1) then 
    begin 
      Inc(ComputerCount); 
      Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName); 
    end; 
Yeni Kod...

Kod: Tümünü seç

    If (Result = NO_ERROR) and (Entries = 1) then 
    begin 
      Inc(ComputerCount); 
      Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName) + ' - ' + StrPas(Buf[1].lpComment);
    end; 
- Çalışmalarında başarılar...
Resim
Resim ....Resim
Cevapla