Ankündigung

Einklappen
Keine Ankündigung bisher.

Thread Noob bittet um Hilfe (Global MouseWheel Hook)

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Thread Noob bittet um Hilfe (Global MouseWheel Hook)

    Hallo Leute,

    ich hab ein Problem, ich will prüfen lassen ob mein Mausrad gedreht wurde. Mit dem standart Form Event kann ich das leider nicht machen, da der Hintergrund komplett transparent ist und keine Events abgefeuert werden. Daher habe ich mich an Hooks versucht. Das hat auch geklappt, nur jetzt lagt alles was mit mouse_event von user32.dll abgefeuert wird. Im Netz habe ich gelesen das wenn man den Hook in einen seperaten Thread packt diese lags weg bekommt. Nur leider bekomm ich jetzt immer eine Fehlermeldung beim starten meiner App: CallbackOnCollectedDelegate

    Hier ist der Code: (Die Hook Klassen sind alle static)

    Code:
    public void Function()
    {
                Thread thread = new Thread(HookEngine.EnsureSubscribedToGlobalMouseEvents);
                thread.IsBackground = true;
                thread.Start();
                HookEngine.MouseWheel += this.HookEngine_MouseWheel;
    }
    
        public static partial class HookEngine
        {
            private delegate int HookProc(int nCode, int wParam, IntPtr lParam);
    
            private static HookProc s_MouseDelegate;
    
            private static int s_MouseHookHandle;
    
            public static void EnsureSubscribedToGlobalMouseEvents()
            {
                // install Mouse hook only if it is not installed and must be installed
                if (s_MouseHookHandle == 0)
                {
                    //See comment of this field. To avoid GC to clean it up.
                    s_MouseDelegate = MouseHookProc;
                    //install hook
                    s_MouseHookHandle = SetWindowsHookEx(WH_MOUSE_LL, s_MouseDelegate, GetModuleHandle("user32"), 0);
                    //If SetWindowsHookEx fails.
                    if (s_MouseHookHandle == 0)
                    {
                        //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.
                        int errorCode = Marshal.GetLastWin32Error();
                        //do cleanup
    
                        //Initializes and throws a new instance of the Win32Exception class with the specified error.
                        throw new Win32Exception(errorCode);
                    }
                }
            }
         }
    Kann mir Jemand helfen und für Dumme erklären wie ich das fixen kann?

    Grüße

  • #2
    Habs hinbekommen. Hab einfach das mouse_event in einem Thread gelegt. Jetzt gehts flüssig

    Kommentar

    Lädt...
    X