Εφαρμογή Pure C# Hook
Για να εφαρμόσετε άγκιστρα συστήματος, είναι στην πραγματικότητα πολύ απλό, απλώς καλέστε τα τρία Win32 API. Το SetWindowsHookEx χρησιμοποιείται για τη ρύθμιση αγκίστρων. (Ρυθμίστε μια κάρτα για να ελέγξετε τις πληροφορίες που χρειάζεστε)
Το CallNextHookEx χρησιμοποιείται για τη μετάδοση αγκίστρων (τα μηνύματα είναι σημαντικά, επομένως από όπου προέρχονται, θα πρέπει να επιστρέψουν στο σημείο που θέλετε να τα αποκλείσετε)
UnhookWindowsHookEx Απεγκατάσταση αγκίστρων (η απεγκατάσταση είναι πολύ σημαντική, πάρα πολλές κολλημένες ρυθμίσεις θα προκαλέσουν συμφόρηση)
Το άρθρο "ΠΩΣ ΝΑ: Ρύθμιση αγκίστρων παραθύρων στο Visual C# .NET" το περιγράφει ως εξής: Τα καθολικά άγκιστρα δεν υποστηρίζονται στο πλαίσιο .NET Δεν μπορείτε να εφαρμόσετε καθολικά άγκιστρα στο πλαίσιο Microsoft .NET. Για να εγκαταστήσετε ένα καθολικό άγκιστρο, το άγκιστρο πρέπει να έχει μια εγγενή εξαγωγή βιβλιοθήκης δυναμικής σύνδεσης (DLL), ώστε να μπορεί να εισαχθεί σε μια άλλη διεργασία που πρέπει να κληθεί σε μια έγκυρη και συνεπή συνάρτηση. Αυτό απαιτεί εξαγωγή DLL, η οποία δεν υποστηρίζεται από το πλαίσιο .NET. Ο διαχειριζόμενος κώδικας δεν έχει την έννοια της ομοιόμορφης τιμής για τους δείκτες συναρτήσεων, επειδή αυτές οι συναρτήσεις είναι δυναμικά κατασκευασμένοι πληρεξούσιοι. Βρήκα πολύ κώδικα στο Διαδίκτυο και οι περισσότεροι από αυτούς περιέχουν ένα C++ DLL για τον προσδιορισμό του DLL που περιέχει την υπορουτίνα που αναφέρεται από το lpfn, κάτι που φαίνεται να επικυρώνει αυτόν τον ισχυρισμό.
Αλλά στην πραγματικότητα, αυτό δεν συμβαίνει και το καθολικό άγκιστρο μπορεί να εφαρμοστεί χρησιμοποιώντας τον ακόλουθο κώδικα: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule ); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 ); Σημείωση: Η ιδιότητα ManifestModule είναι μια νέα προσθήκη στο .Net Framework 2.0, οπότε όταν εξακολουθείτε να χρησιμοποιείτε το . Στο Net Framework 1.x, μπορείτε να χρησιμοποιήσετε τη μέθοδο GetModules για να λάβετε όλες τις λειτουργικές μονάδες της τρέχουσας διάταξης και, στη συνέχεια, να χρησιμοποιήσετε μία από αυτές ως παράμετρο στη μέθοδο GetHINSTAN για να λάβετε τον κατάλληλο δείκτη λαβής.
|