GlobalHooks im eigenen Control...?!

  • VB.NET

    GlobalHooks im eigenen Control...?!

    Ich habe mehrere Ideen fuer ein paar kleine Helfercontrols die ich speziell fuer ein Projekt verwenden moechte, die sicherlich aber auch woanders genutzt werden koennten, dabei wuerde ich die UserActivityMonitor.dll (GlobalHooks => CodeProject Seite: Kompiliert und als Verweis eingebunden) nutzen und in mein Control einbinden.

    Nun mache ich mir gerade ein paar Gedanken ueber die Performance die dabei vielleicht verloren gehen koennte, wenn ich folgenden Sachverhalt zu Grunde lege:

    Das Control hat jeweils ein UserActivityMonitor, der MausKlicks und MausBewegung ueberwacht, erstmal soweit: Wenn ich nun das Control 10mal auf der Form X habe, wuerde dieses dann dazu führen das die 10 GlobalHooks das System beeintraechtigen - Meine Meinung ist: Nur wenn ueberhaupt minimal, da die Hooks ja nur mitgelesen werden und direkt weiter geschickt werden an die naechste Anwednung die sich in den MouseEventHooks eingetragen hat - Wie sieht das ganze in der Realitaet aus?

    Nun gehen wir ein Schritt weiter: Wir ueberwachen die Tastatur noch extra um den Escape Key abzufangen, sofern die Mouseevents abgefragt werden in diesen Moment um die Mouseevents zu ignorieren.


    Im Klartext heisst das nen flag (hier: _pickActive [boolean]) ist gesetzt:

    Vorab ein paar Variablen:
    _pickHandle = handleMode.hMatch, handleMode.hAlway, handleMode.hNever
    _pickPosition = point (point.empty)
    _pickNeededButton = mouseButton...

    -> handleMouse() Handles eventProvider.mouseMove
    -> wenn _pickActive dann
    -> setze _pickPositition = e.Position
    -> handleMouseKlick() Handles eventProvider.mouseClick
    -> wenn _pickActive dann
    -> e.Button = _pickNeededButton then _pickActive = not _pickActive
    -> if _pickHandle = handleMode.hMatch then e.handled = true (mouseevent "Klick" nicht weiterreichen)
    -> wenn _pickHandle = handleMode.hAlways then e.handled = true (alle mouseevent unterdruecken im pickmode)
    -> handleKeyboard() Handles eventProvider.KeyPress
    -> wenn _pickActive dann
    -> e.key = escape then _pickActive = not _pickActive; _pickPosition = 0
    -> e.key = _pickSaveKey

    Im Endeffekt wird das Control die Moeglichkeit bieten eine beliebige Mausposition (x, y) zu speichern, formatiert anzuzeigen und diese finden. Dazu wuerde ich die GlobalHooks nehmen um die Mauseevents global zu bekommen, die Tastur ist ein Extra das ich miteinplane aber nicht direkt implementieren mag.
    Der MouseCapture soll unter bestimmten Bedingungen erfolgen und nicht konsequent, daher auch die Frage nach der Performance, da der GlobalHook ja immer Events sendet, ich ignorier diese dann solange wie der Pick nicht aktiv ist...

    Bei Fragen gerne nochmal kurz Rueckfragen, allerdings denke ich das alles Klargeworden ist?

    // Edit:
    Vielleicht bitte ins Hauptforum - Passt dort vielleicht besser und sollte dort auch hin :sleeping:
    sfmStatus @konzeption: 2%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „shell“ () aus folgendem Grund: Forenzuordnung.