findwindow haricinde dosya indirme işlemini yasaklama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
findwindow haricinde dosya indirme işlemini yasaklama
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...
Şimdiden teşekkürler...
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?
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?
Merhaba aşağıdaki komut ile istediğin programı kapatabilirsin:
Saygılar...
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...
@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
satırı yardımıyla o handle'e ait programı kapattırırsın...
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);
öncelikle kod gönderirken yazdığınız kodları "CODE" olarak belirtirseniz okunması daha kolay ve çözümü bulması daha kolay olur
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
şeklinde integerlar üzerinde işlem yapabilirsin
Kolay gele
....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.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;
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;
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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: findwindow haricinde dosya indirme işlemini yasaklama
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ı.incsoft yazdı:Başka ne tür metodlarla internet üzerinden dosya yüklemeyi devre dışı bırakabiliriz?
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...
Mustafa Kemal Atatürk...