findwindow haricinde dosya indirme işlemini yasaklama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
incsoft

findwindow haricinde dosya indirme işlemini yasaklama

Mesaj gönderen incsoft »

Delphide pencere kontrolü yaparak bilgisayarların güvenliklerini sağlıyoruz.Bu işlemi başka bir yöntemle yapamamıştık.En çok istediğim şey internet üzerinden dosya indirme işlemini yasaklamak.Bunu da Güvenlik Uyarısı isminde açılan pencereyi kapattırarak yapıyorum.Fakat bazı email siteleri de Kullanıcı adı ve şifreyi yazdığımızda Güvenlik Uyarısı isimli bir pencere açıyorlar.Programımda Güvenlik Uyarısı isimli pencereyi kapattığından dolayı email sitesi açılmıyor.Mesela buna bir örnekte mymail.mynet.com adresi.Başka ne tür metodlarla internet üzerinden dosya yüklemeyi devre dışı bırakabiliriz?Ne şekilde olursa olsun pornografik vb.. gibi sitelerden bilgisayara dialer vb.. programlar yüklenemeyecek.

Şimdiden teşekkürler...
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

ddeclient başlığındaki örneğe bakarak yapabilirsin sanırım istediğini bu fikir aklıma gelmemişti doğrusu :).
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
incsoft

Mesaj gönderen incsoft »

function EnumWindowsProch(Wnd : HWnd;Form : TForm1) : Boolean;
Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
form1.listbox1.items.Add(StrPas(Buffer));
Result := True;
end;

function EnumWindowsProc (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;
Var Title : PChar;
begin
Result := True;
if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
(GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
(GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then
begin
Title:=StrAlloc(255);
GetWindowText(Wnd,Title,255);
form1.listbox1.items.add(StrPas(Title));
//ShowMessage(StrPas(Title));
StrDispose(Title);
end;
end;


Bu şekilde o anda aktif olan yazılımı Listbox ın ilk satırına getirdim.Fakat sorgulattırmasını yaparak o programı kapattıramadım.Orneğin Listbox1 in ilk satırında Delphi 6 isminde bir kayıt ekli ise program Delphi 6 yı otomatikmen kapatacak..Bu işlemi yapmak mümkünmü acaba?
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Merhaba aşağıdaki komut ile istediğin programı kapatabilirsin:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
   h:=handle;
   s:=listbox1.items.strings[listbox1.itemindex];
   h := FindWindow(NIL,pchar(s) );
   SendMessage(h, WM_SYSCOMMAND, SC_close, 0);
end;

Saygılar...
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- Kullanıcı, yanında disketle herhangi bir download programı getirmezse, çözüm yine FindWindow ile download dialog'unu buldurmak şeklinde kullandığın eski sisteme ufak bir eklenti ile mümkün...
Resim
Resim ....Resim
incsoft

Mesaj gönderen incsoft »

Evet Muharremm Hocam findwindow bence de en mantıklı olanı.Fakat dediğim gibi ordaki sorunu çözebilirsem findwindow la programı bitirmek istiyorum.Şuan da denemeler ve araştırmalar yapıyorum.

Bir kez daha teşekkürler..
incsoft

Mesaj gönderen incsoft »

Kodda bir uyuşmazlık var zannedersem.Şuan onu deniyorum...........
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Bende uyuşmazlık çıkmadığı için buraya yazdım makaleler bölümündede mevcut

ikinci verdiğim kodu da kendine göre yorumlayacaksın
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@incsoft
Selam...

- Yukarda verdiğin ve kullandığını söylediğin, listbox'un ilk elemanı olarak o anki aktif olan pencereyi verdiği şeklindeki söyleminde emin misin ?

- Bu tip kodları sistemde mevcut çalışan program listesini görebilmek için kullanırız... İlk verdiğin handle ise kendi programının handle numarası olduğundan hep kendi programının handle numarasını görmen lazım... Hata da buradan kaynaklandığı kanaatindeyim...

- Normalde kullanman gereken fonksiyon GetForegroundWindow olmalıydı. Bu fonksiyon o an aktif olan pencerenin handle'ini döndürür. Yani programın arkafonda çalışırken, Timer nesnesiyle her kontrol edişinde, kullanıcının focus olduğu pencerenin handle numarasını verir...

- Eğer focus olunan pencere hoşuna gitmezse o zaman @MicroChip'in verdiği koddaki

Kod: Tümünü seç

SendMessage(h, WM_SYSCOMMAND, SC_close, 0);
satırı yardımıyla o handle'e ait programı kapattırırsın...
Resim
Resim ....Resim
incsoft

Mesaj gönderen incsoft »

Teşekkürler.......
incsoft

Mesaj gönderen incsoft »

Maalesef başaramadık........
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

öncelikle kod gönderirken yazdığınız kodları "CODE" olarak belirtirseniz okunması daha kolay ve çözümü bulması daha kolay olur
function EnumWindowsProch(Wnd : HWnd;Form : TForm1) : Boolean;
Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer) <> 0 then
form1.listbox1.items.Add(StrPas(Buffer));
Result := True;
end;
....Form : TForm1) :...... parametre olark TForm1 göndermişsin ama "....form1.lis....." olarak kullanmışsın. bu problem çıkartmaz ama koduna göre değişir.

diğer konu ise açık olan pencerelerin listesini oluşturuyorsun burda problemin yok sanırım, yanılmıyorsam Listbox ın addobject i olması lazım, buraya formu bulduğunda ismiyle beraner handle ınıda eklersen, daha sonra burda silmek istediğini string i bulduktan sonra o satırın object kısmından handle ı alıp pencereyi kapatabilirsin. Object olarak kullanamazsan bir diğer öneride

Kod: Tümünü seç

var Wnd: HWND;  //     HWND = type LongWord; windows.pas içinde
    I : Integer;
begin
   I := Integer(Wnd);
   Wnd := I;
şeklinde integerlar üzerinde işlem yapabilirsin

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ı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: findwindow haricinde dosya indirme işlemini yasaklama

Mesaj gönderen warder »

incsoft yazdı:Başka ne tür metodlarla internet üzerinden dosya yüklemeyi devre dışı bırakabiliriz?
registry den ie için downloadı on-off yapmak mümkün. Tabii her on-off işleminden sonra ie durumdan haberdar edilmek için yeniden başlamalı.
Ancak harici download programı kullanılıyorsa olmaz.
Not: dialer için denemedim.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Cevapla