Ücretsiz Eğitimler

Uzak Bağlantı Desteği

Bu dokümanda, VB.NET ve Python dillerinde yazılmış klavye hook kodlarının nasıl kullanılacağına dair bilgiler verilmiştir.Klavye hook'ları, klavye olaylarını (örneğin, bir tuşa basılması veya bırakılması) yakalamak ve bu olaylara tepki vermek için kullanılır. Aşağıda, her iki dildeki kodların temel işlevleri ve pratik kullanım örnekleri açıklanmıştır.
Not:

Paylaştığım klavye hook kodları, yalnızca temel bir örnek olarak klavye hook işlemini göstermek için ücretsiz olarak sunulmuştur.
Funny Macro | Klavye Yardımcısı adlı ürün ise tamamen farklı bir yaklaşımla, her kullanıcı için özel olarak buildlenmiş .exe dosyaları şeklinde çalışır.
Bu ürün, Rise Online gibi oyunlarda klavye ve fare kontrollerini optimize etmek için tasarlanmıştır ve en temel özelliği, anti-cheat sistemlerine yakalanmamak için her açılışta farklı bir build ve isimle çalışmasıdır.
Ücretsiz kodlar bu özellikleri içermez; onları yalnızca topluluğa yardımcı olmak amacıyla paylaştım. Ayrıntılı bilgi ve satın alma için: (Funny Macro - Uzak Bağlantı)

VB.NET Kodu Kullanımı

VB.NET ile yazılmış klavye hook kodu, düşük seviyeli klavye olaylarını yakalamak ve özellikle Control tuşuna basıldığında bir işlem yapmak için tasarlanmıştır. Bu kod, bir Windows uygulamasında klavye olaylarını dinlemek ve kullanıcı arayüzünü güncellemek için uygundur.

Temel Fonksiyonlar ve Kullanımları

  • HookKeyboard()
    Klavye hook'unu başlatır ve klavye olaylarını dinlemeye alır. Control tuşuna basıldığında bir işlem tetiklenir (örneğin, bir etiketin metni güncellenir).
    • Kullanımı: Bir formda bu fonksiyonu çağırarak klavye dinlemeyi başlatabilirsiniz. Mesela, bir düğmeye tıklama olayında HookKeyboard() kullanılabilir.
  • UnhookKeyboard()
    Aktif klavye hook'unu kaldırır ve dinlemeyi durdurur.
    • Kullanımı: Uygulama kapatıldığında veya hook’u devre dışı bırakmak istediğinizde bu fonksiyonu çağırın. Örneğin, form kapanırken UnhookKeyboard() ile kaynakları temizleyebilirsiniz.
  • KeyboardCallback()
    Klavye olaylarını işleyen ana geri dönüş fonksiyonudur. Control tuşuna basıldığında bir etiketin metnini günceller ve olayı engeller.
    • Kullanımı: Bu fonksiyon, HookKeyboard() tarafından otomatik ayarlanır ve sizin manuel müdahalenize gerek yoktur.
  • CheckHooked()
    Hook’un başarıyla ayarlanıp ayarlanmadığını kontrol eder. Hook aktifse kullanıcı arayüzünü günceller (örneğin, bir etikete mesaj yazar ve bir düğmenin rengini değiştirir). Aksi halde, bir hata mesajı gösterir.
    • Kullanımı: HookKeyboard() çağrıldığında otomatik çalışır, ama isterseniz manuel kontrol için de kullanabilirsiniz.

Pratik Kullanım Örneği

Bu kodu bir Windows Forms uygulamasında şöyle kullanabilirsiniz:

  1. Bir form oluşturun ve içine bir etiket (LblStatus) ile bir düğme (BtnSetKeyboard) ekleyin.
  2. Düğmeye tıklama olayında HookKeyboard() fonksiyonunu çağırın.
  3. Form kapanırken UnhookKeyboard() ile hook’u kaldırın.
  4. Control tuşuna basıldığında etiket güncellenir ve olay yakalanır.

Python Kodu Kullanımı

Python ile yazılmış klavye hook kodu, klavye olaylarını yakalar ve Control tuşuna basıldığında bir işlem gerçekleştirir. Bu kod, forumdan (njordsoftware)’in katkılarıyla hazırlanmıştır. Kendisine bu destek için teşekkür ederiz! (Forum Linki)

Temel Fonksiyonlar ve Kullanımları

  • hook_keyboard()
    Klavye hook'unu başlatır ve klavye olaylarını dinlemeye alır. Control tuşuna basıldığında bir işlem tetiklenir.
    • Kullanımı: Betiği çalıştırdığınızda bu fonksiyonu çağırarak klavye dinlemeyi başlatabilirsiniz. Örneğin, çağrıldığında konsolda "Keyboard Activated" mesajı görünür.
  • unhook_keyboard()
    Klavye hook'unu kaldırır ve dinlemeyi durdurur.
    • Kullanımı: Dinlemeyi bitirmek istediğinizde bu fonksiyonu çağırın. Örneğin, betik sonunda Enter tuşuna basıldığında otomatik olarak çağrılır.
  • keyboard_callback()
    Klavye olaylarını işleyen geri dönüş fonksiyonudur. Control tuşuna basıldığında olayı yakalar ve engeller.
    • Kullanımı: hook_keyboard() tarafından otomatik ayarlanır, manuel müdahale gerektirmez.
  • check_hooked()
    Hook’un başarıyla ayarlanıp ayarlanmadığını kontrol eder ve konsola bir mesaj yazdırır ("Keyboard Activated" veya "Keyboard Not Activated").
    • Kullanımı: hook_keyboard() içinde otomatik çağrılır, ama manuel kontrol için de kullanılabilir.

Pratik Kullanım Örneği

Bu kodu bir Python betiği olarak şöyle çalıştırabilirsiniz:

  1. Kodu bir .py dosyasına kaydedin.
  2. Terminalde dosyayı çalıştırın (python keyboard.py).
  3. Klavye olayları dinlenmeye başlar ve Control tuşuna basıldığında olay yakalanır.
  4. Konsolda "Press Enter to unhook the keyboard..." mesajı göründüğünde Enter tuşuna basarak hook’u kaldırabilirsiniz.

Not

Bu kodun çalışması için pywin32 kütüphanesine ihtiyacınız var. Kurulumu için şu komutu kullanabilirsiniz:

pip install pywin32

Kodlar

keyboard.vb
Imports System.Runtime.InteropServices
Imports System.Reflection

Namespace Helper
    Public Module Keyboard

        Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
        Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As IntPtr) As Boolean
        Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Integer, ByVal lpfn As KeyboardHookDelegate, ByVal hmod As IntPtr, ByVal dwThreadId As Integer) As IntPtr
        Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Integer
        Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As IntPtr, ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As FMHOOKSTRUCT) As Integer

        Private Const WM_KEYDOWN = &H100
        Private Const WM_KEYUP = &H101

        Public Structure FMHOOKSTRUCT
            Public vkCode As Integer
            Public scanCode As Integer
            Public flags As Integer
            Public time As Integer
            Public dwExtraInfo As Integer
        End Structure

        Private Const HC_ACTION As Integer = 0
        Private Const LLKHF_UP As Integer = &H80

        Public Const VK_CONTROL = &H11
        Private Const WH_KEYBOARD_LL As Integer = 13&
        Public KeyboardHandle As Integer

        Public Function IsHooked(ByRef Hookstruct As FMHOOKSTRUCT) As Boolean
            If Hookstruct.vkCode = VK_CONTROL AndAlso (Hookstruct.flags And LLKHF_UP) = 0 Then
                Return True
            End If
            Return False
        End Function

        Public Function KeyboardCallback(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As FMHOOKSTRUCT) As Integer
            If (Code = HC_ACTION) Then
                If (IsHooked(lParam)) Then
                    Main.LblStatus.Text = "Klavye aktif edildi.."
                    Return 1
                End If
            End If
            Return 0
        End Function

        Public Delegate Function KeyboardHookDelegate(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As FMHOOKSTRUCT) As Integer
        <MarshalAs(UnmanagedType.FunctionPtr)>
        Private callback As KeyboardHookDelegate

        Public Sub HookKeyboard()
            callback = New KeyboardHookDelegate(AddressOf KeyboardCallback)
            KeyboardHandle = SetWindowsHookEx(WH_KEYBOARD_LL, callback, Marshal.GetHINSTANCE([Assembly].GetExecutingAssembly.GetModules()(0)).ToInt32, 0)
            Call CheckHooked()
        End Sub

        Public Sub CheckHooked()
            If (Hooked()) Then
                Main.LblStatus.Text = "Klavye aktif edildi.."
                Main.BtnSetKeyboard.ForeColor = Color.Green
                'Main.Text = "Aktif Edildi!"
            Else
                Main.LblStatus.Text = “Klavye aktif edilemedi:& Err.LastDllError
            End If
        End Sub

        Private Function Hooked() As Boolean
            Return KeyboardHandle <> IntPtr.Zero
        End Function

        Public Sub UnhookKeyboard()
            If Hooked() Then
                UnhookWindowsHookEx(KeyboardHandle)
            End If
        End Sub

    End Module

End Namespace