|
|
| Metin kutusundaki şifreyi öğrenme |
Gürol Demir
Vergi Denetmeni
Metin kutusunda şifre vardır, ama size ***** şeklinde görülürler.
Böyle bir durumda şifreyi öğrenmek için sırasıyla bilinmesi gerekenlerden bahsediyoruz.
Arka planda çalışan program yapmak için
Göreceğiniz metin kutusu başka bir programda çalışıyor olacaktır.
Bu program büyük olasılıkla kendini en üste tutmaya çalışacak ve sizin programlarınız pasif bir şekilde çalışmadan bekliyor olacaktır.
Hangi koşulda olursa olsun programınızın çalışması için ona bir timer nesnesi eklemeniz ve bu timer nesnesinin interval değerini 0'dan farklı bir değerle değiştirmeniz gerekecektir.
Diğer taraftan programın çalışma sonuçlarını ana formun caption özelliğine eklerseniz, programınız araç çubuğunda pasif haldeyken dahi size sonuçları bildirecektir.
Örneklersek;
1) Yeni bir proje başlatıyoruz,
2) Forma bir timer nesnesi alıyoruz,
3) Timer nesnesinin interval özelliğini 100 yapıyoruz (her 1/10 saniyede çalışması için),
4) Şu kodu yazıyoruz,
Private Sub Timer1_Timer()
Caption = Time
End Sub
5) programı çalıştırıyoruz...
Artık diğer programlar çalıştırılsa bile bile bizim programımız arka planda çalışmaya devam edecektir.
Ve biz zamanı (veya sizin bağlacağınız herhangi bir sonucu) görev çubuğunda görebileceğiz.
Kursorun üzerinde bulunduğu nesnenin handle numarasını öğrenmek
Windows her nesneye bir handle numarası (tutamaç) verir. Ve nerdeyse tamamen handle numarası ile çalışır. Bu nedenle iyi bir programcının handle numarası kavramına yabancı olmaması gerekir.
Bir nesnenin handle numarasını öğrendiniz mi o nesne artık sizin demektir.
"WindowFromPoint" apisi koordinatları verilen her nesnenin handle numarasını geri döndürür.
İşin püf noktası nesnenin koordinatlarını öğrenmektedir. Bunun için de fareyi kullanacağız.
Fareyi nesnenin (örneğimizde metin kutusunun) üzerine götürüp, farenin koordinatlarını "WindowFromPoint" apisine parametre olarak verebiliriz.
Buna göre; yukarda verdiğimiz örnekteki timer olay kodlarını;
Private Sub Timer1_Timer()
GetCursorPos Fare
HandleNo = WindowFromPoint(Fare.x, Fare.y)
Caption = CStr(HandleNo)
End Sub
şeklinde yazabiliriz. Bu kodlar farenin üzerinden geçtiği bütün nesnelerin handle numaralarını bize verecektir.
Handle numarası verilen nesnedeki texti öğrenmek
Handle numarasını öğrendiğimiz her nesne için her türlü işlemi yapabiliriz.
Örneğimizde, sadece bu nesnenin içerdiği texti öğreneceğimize göre bunun için "SendMessage" apisini kullanabiliriz.
"SendMessage" apisi 4 parametre alır. Bunlardan birincisi mesajın gönderileceği nesnenin handle numarasıdır. İkinci parametre gönderilecek mesajın numarasıdır.
Üçüncü parametre ise bir değer, dördüncü parametre de başka bir değer içerir.
Örneğin bir nesneye tuş vuruşu göndermek için sendmessage kullanıldığında; birinci parametre hedef nesnenin handle numarası, ikinci parametre tuş vuruşunun numarası, üçüncü parametre tuşun kodu olur. Dördüncü parametrenin bu örnekte önemi yoktur. Önemi olmayan paranetreler sıfır (0) değeri alırlar.
Bizim örneğimizde ise; ikinci parametre, yani nesnedeki textin uzunluğu öğrenme istem numarası 14'dür.
Dim Boy As Long
Boy = SendMessage(HandleNo, 14, 0, 0)
kodları bize handle numarası verilen nesnedeki textin uzunluğunu verir.
Textin uzunluğunu öğrendikten sonra yine "SendMessage" apisini kullanacağınız. Ancak bu kez;
İkinci parametremiz, 13 olacak (yani textin kendisinin istem numarası),
üçüncü parametremiz, textin boyu,
dördüncü parametremiz ise textin okunacağı belleğin adresi olmalıdır.
Netice olarak tam kod aşağıdaki gibidir.
Option Explicit
Private Type Yerler
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As Yerler) As Long
Private Declare Function WindowFromPoint Lib "user32" _
(ByVal xPoint As Long, _
ByVal yPoint As Long) As Long
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Sub Timer1_Timer()
Dim Fare As Yerler
Dim HandleNo As Long
Dim Boy As Long, Oku As String
GetCursorPos Fare
HandleNo = WindowFromPoint(Fare.x, Fare.y)
Boy = SendMessage(HandleNo, 14, 0, 0)
Oku = Space(Boy + 1)
Call SendMessage(HandleNo, 13, ByVal (Boy + 1), ByVal Oku)
Caption = Oku
End Sub
Bu kod parçası; farenin üstünde bulunduğu, içersinde şifre olan ve size ***** şeklinde görülen metin kutusu içindeki şifreyi açık bir şekilde formunuzun başlığına yazar.
|
| :: Bu sayfaya 3.412 kere bakıldı :: | |