Haltepunkte beeinflussen Programmverlauf?!?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Sederic Enders.

    Haltepunkte beeinflussen Programmverlauf?!?

    Hi,
    Können Haltepunkte in Visual Studio (2012) den Verlauf des Programms beeinflussen? Weil ich hab grad ein Programm und da wird eine Event anscheinend nur ausgelöst, wenn ich da nen Haltepunkt hinsetze, ansonsten passiert nix?!?
    Hat jemand Hellseherische Kräfte und kann mir helfen? ;)

    Es handelt sich um Globale Tastaturerkennung nach dem Vorbild vom ErfinderDesRades: RegisterHotKey-Wrapper

    und zwar mach ich einen Haltepunkt bei:

    VB.NET-Quellcode

    1. Private Sub _Hotkeys_Pressed(ByVal sender As Object, ByVal e As HotKeys.PressedEventArgs) Handles HK.Pressed
    2. _Registered(e.Key)() 'assoziierte Aktion ausführen
    3. End Sub

    Dann läufts?!?
    Nennt sich Heißenbug.
    Ich vermute jetzt mal ins Blaue und sage, dass _Registered (vermutlich eine Action(Of Keys)) korrekt ausgeführt wird, Du das aber nicht mitbekommst. Zeig mal die Methode, auf die _Registered zeigt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hi
    kannst du bitte den Kontext etwas umschreiben? Verwendet das Programm Multithreading, etc.
    Btw, hätte ich gewusst, dass es bereits ein Thema dazu gibt, hätt' ich mir die Arbeit gespart, mikeb69s Beitrag zu ergänzen. ;) Vllt wäre ein Link zurück an das von ErfinderDesRades ganz praktisch. Das andere wird auch verlinkt, ggf. hilft dir der Code von mikeb69 oder der unten auch weiter ([VB.NET] Systemweiten Hotkey registrieren (kein Tastatur Hook)). Der ist halt etwas länger.

    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Ok mittlerweile glaub ich, das Problem liegt daran, dass

    VB.NET-Quellcode

    1. Public Shared Sub keybd_event(ByVal bVk As Byte, ByVal bScan As Byte, _
    2. ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
    3. End Sub

    irgendwie Zeit braucht, oder so?

    weil auch wenn ich davor sag

    VB.NET-Quellcode

    1. Console.Beep
    oder manchmal mit

    VB.NET-Quellcode

    1. Threading.Thread.Sleep(300)
    , dann läufts auch. Allerdings auch, wenn ich des mit nem Button aufruf...

    Kann des sein?!?

    Danke

    Spoiler anzeigen
    Des läuft übrgs so ab, dass ich Keys Registriere mit ErfinderDesRads Tutorial und dann wenn der Key gedrückt wurde, sucht er den in nem Dictionary raus, wo vorher alle mit ner Action verknüpft wurde, welche etz ausgeführt werden soll. Des is dann ne Methode, z.B.

    VB.NET-Quellcode

    1. Private Sub MediaPlayPause()
    2. 'Hier evtl die Pause, wie oben beschrieben
    3. keybd_event(VK_MEDIA_PLAY_PAUSE, 0, 0, 0) 'Medien-PlayPause-Taste wird simuliert
    4. keybd_event(Key_NONE, 0, 0, 0) 'Key up
    5. End Sub


    @~blaze~
    Spoiler anzeigen

    Des Prob an dem Tut, was du da sagst ist, dass das alles in ner Klasse ablaufen soll und ich net weiß, wie man da nen Handle herbekommen soll...

    Sederic Enders schrieb:

    den Verlauf des Programms beeinflussen?
    Ja, wenn Du mit mehreren sich gegenseitig bedingenden / beeinflussenden Threads arbeitest und einen Thread unterbrichst und die Option Break All Threads nicht aktiviert hast.
    Ein Sleep() gibt jedem aktiven anderen Thread zumindest eine Zeitscheibe, da kann auch schon mal etwas passieren. Teste mal Sleep(0).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. keybd_event(Key_NONE, 0, 0, 0) 'Key up
    So, sicher?

    Ich hätte gedacht mit keyUp wäre das so:

    VB.NET-Quellcode

    1. keybd_event(VK_MEDIA_PLAY_PAUSE, 0, 0, 0) 'Medien-PlayPause-Taste down
    2. keybd_event(VK_MEDIA_PLAY_PAUSE, 0, 2, 0) 'Medien-PlayPause-Taste up

    RodFromGermany schrieb:

    Teste mal Sleep(0).

    Scheint nicht zu funktionieren... Ich persönlich hab nichts direkt mit mehreren Threads gebaut, außer des mit den Keys senden und Hotkeys registrieren und erkennen läuft über andere Threads (kp). Was meinst du mit

    Quellcode

    1. Option Break All Threads
    ?

    Bluespide schrieb:

    keybd_event(VK_MEDIA_PLAY_PAUSE, 0, 0, 0) 'Medien-PlayPause-Taste down
    keybd_event(VK_MEDIA_PLAY_PAUSE, 0, 2, 0) 'Medien-PlayPause-Taste up
    funktioniert auch. Ich hab des irgendwo so gefunden und übernommen, weil ich keinen Plan hab ;) Allerdings geht das auch nur mit Unterbrechung...

    Sederic Enders schrieb:

    Option Break All Threads
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hast Du 2012 Express?
    Kann sein, dass das das nicht kann. :S
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, Express...

    ABER ICH HABS :D

    Ich will ja Tasten simulieren wenn ich andere Tastem drück...
    Allerdings wenn ich ne Tastenkombi drück und dann noch andere Tasten, also z.B. Medientasten simulier, dann erkennen es andere Progs nicht unbedingt, da ja dann meine Tastenkombi + die simulierte Tasten gedrückt werden.
    Wenn jetzt in der Zeit, während ich am Haltepunkt anhalte, ich von der Tastenkombi runtergeh, dann gehts...

    Danke an alle ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sederic Enders“ ()