Aktuelle Zeit: 05.12.2020 07:15

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: [SOLVED] MouseWheel außerhalb eines Fenster
BeitragVerfasst: 17.11.2020 18:05 
Offline

Registriert: 11.03.2020 13:39
Moinmoin,
Frage:
Kann man irgendwie den Mousewheeldelta abfragen, während das Program keinen Focus hat?

Ich hab jetzt mal mit Mousehooks experimentiert, und genauso wie bei callbacks etc. bekommt man von der WinAPI ja die eventswparam(), da steht #wm_Mousewheel drinnen. Also ob oder ob kein mousewheel event anliegt. Eigentlich sollte dann ja im nächsten wparams das Mausdelte drin stehen.

Hier mal was ich meine:
Code:
hwnd = OpenWindow(#PB_Any,0,0,100,100,"")
SetFocus_(hwnd)

Repeat
  event = WaitWindowEvent(1)
  If event = #WM_MOUSEWHEEL
    Debug EventwParam()
  EndIf
ForEver


Solange mein Cusor auf das Fenster zeigt kann ich scrollen. Wie mache ich das, wenn der Cursor außerhalb ist?

Zweiter Codeschnipsel geht genauso wenig:

Code:
Structure MSLLHOOKSTRUCT
    pt.POINT;
    mouseData.l;
    flags.l;
    time.l;
    dwExtraInfo.l;
EndStructure

Procedure.l MouseProc(ncode.l,wParam.l,lParam.l)
   
    Static lbStarttime.i,lbEndtime.i
    Static rbStarttime.i,rbEndtime.i
    Static sx,ex,sy,ey
    Protected px,py
    Static mMouseInput.MSLLHOOKSTRUCT
    CopyMemory(lparam,@mMouseInput,SizeOf(MSLLHOOKSTRUCT))
    Static mInput.MOUSEINPUT
    lastevent = event
   
    If ncode = #HC_ACTION
      If wParam
        Select wParam
          Case #WM_MOUSEWHEEL
            Debug "DELTA?"
        EndSelect
      EndIf
    EndIf
   
   ProcedureReturn CallNextHookEx_(myMousehook, nCode, wParam, lParam)

EndProcedure

Procedure SetMouseHook()
    hInstance = GetModuleHandle_(0)
     
    If hInstance
       myMouseHook = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseProc(),hInstance,0)
    Else
       MessageRequester("hook", "can't get module handle")
    EndIf

EndProcedure
SetMouseHook()
Repeat
  Delay(1)
ForEver


Zuletzt geändert von Syr2 am 18.11.2020 09:30, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MouseWheel auserhalb eines Fenster
BeitragVerfasst: 17.11.2020 20:14 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Wahnsinn... was ein übles Beispiel
Code:
Repeat
  Delay(1)
ForEver
ernsthaft??


Code:
Global myMouseHook

Structure MSLLHOOKSTRUCT
    pt.POINT
    mouseData.l
    flags.l
    time.l
    *dwExtraInfo
EndStructure

Procedure MouseProc(ncode, wParam, lParam)
    Protected *mMouseInput.MSLLHOOKSTRUCT, MWheel.w
   
    If ncode = #HC_ACTION
       If wParam = #WM_MOUSEWHEEL
          *mMouseInput = lParam
          MWheel = *mMouseInput\mouseData >> 16
          If MWheel > 0
             Debug Str(MWheel) + " (Wheel Up)"
          ElseIf MWheel < 0
             Debug Str(MWheel) + " (Wheel Down)"
          EndIf
      EndIf
    EndIf
   
   ProcedureReturn CallNextHookEx_(myMousehook, nCode, wParam, lParam)

EndProcedure

Procedure SetMouseHook()
    hInstance = GetModuleHandle_(0)
     
    If hInstance
       myMouseHook = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseProc(), hInstance, 0)
    Else
       MessageRequester("hook", "can't get module handle")
    EndIf

EndProcedure
SetMouseHook()

OpenWindow(0, 0, 0, 300, 300, "Test")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

UnhookWindowsHookEx_(myMouseHook)

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MouseWheel auserhalb eines Fenster
BeitragVerfasst: 18.11.2020 09:21 
Offline

Registriert: 11.03.2020 13:39
BAAM! Sehr geil, dein Code funktioniert, genau was ich gesucht habe! Danke!
PS:
Was spricht denn gegen den Beispielcode? Der Hook ist gesetzt, also kann ich doch sinnlos loopen und damit das program offen halten. (Der Hook geht ja trotzdem)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MouseWheel auserhalb eines Fenster
BeitragVerfasst: 18.11.2020 11:02 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Syr2 hat geschrieben:
PS:
Was spricht denn gegen den Beispielcode? Der Hook ist gesetzt, also kann ich doch sinnlos loopen und damit das program offen halten. (Der Hook geht ja trotzdem)

Lass es mal mit dem x64 Compiler laufen.

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: MouseWheel auserhalb eines Fenster
BeitragVerfasst: 18.11.2020 11:08 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
HeX0R hat geschrieben:
Lass es mal mit dem x64 Compiler laufen.

Anderen Forenmitgliedern ist allerdings davon abzuraten. :mrgreen:

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [SOLVED] MouseWheel außerhalb eines Fenster
BeitragVerfasst: 18.11.2020 11:24 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Definitiv! :mrgreen:
Am besten mit x64 und OHNE Debugger ausführen, dann bekommt man dicke Backen ;)

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [SOLVED] MouseWheel außerhalb eines Fenster
BeitragVerfasst: 19.11.2020 12:09 
Offline

Registriert: 11.03.2020 13:39
HeX0R hat geschrieben:
Definitiv! :mrgreen:
Am besten mit x64 und OHNE Debugger ausführen, dann bekommt man dicke Backen ;)


keine Ahnung was ihr meint... Habs mal auf x64 ohne Debugger gestartet (Also einfach nur die Loop). Ist erwartungsgemäß genau gar nichts passiert.
Also so wie ich das auch erwartet hätte. Er macht eine ms lang ein sleep_() und dann loopt er. Kostet die CPU ja mal gar keine Rechenleistung. Lassts mal Laufen und gebt mir Recht :P

PS: Bitte nicht unter DOS laufen lassen, da wird während dem sleep kein anderer Prozess drankommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [SOLVED] MouseWheel außerhalb eines Fenster
BeitragVerfasst: 19.11.2020 13:44 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
Syr2 hat geschrieben:
PS: Bitte nicht unter DOS laufen lassen, da wird während dem sleep kein anderer Prozess drankommen.
Redest du über PureBasic :?:

PureBasic-Programme laufen nicht unter DOS.

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [SOLVED] MouseWheel außerhalb eines Fenster
BeitragVerfasst: 19.11.2020 18:47 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo!
An Syr2:

Welche Windowsversion verwendest du?

Die Windows-Konsole hat schon lange nichts mehr mit der (DOS)-Eingabeaufforderung zu tun.

Und dein Loooooooooooooooooooooooooo...∞p
Zitat:
Repeat
Delay(1)
ForEver

ist echt uncool.

Kannst du bei dem Beispiel den Mauszeiger noch vernünftig bewegen?

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [SOLVED] MouseWheel außerhalb eines Fenster
BeitragVerfasst: 23.11.2020 10:20 
Offline

Registriert: 11.03.2020 13:39
ccode_new hat geschrieben:
Hallo!
An Syr2:

Welche Windowsversion verwendest du?

Die Windows-Konsole hat schon lange nichts mehr mit der (DOS)-Eingabeaufforderung zu tun.

Und dein Loooooooooooooooooooooooooo...∞p
Zitat:
Repeat
Delay(1)
ForEver

ist echt uncool.
Kannst du bei dem Beispiel den Mauszeiger noch vernünftig bewegen?


Wundert mich das da scheinbar einige Leute Probleme haben... Ich schreibe schon seit Jahren mit derartigen Loops und hatte nie irgendwelche Probleme. (Die Leute die meine Programme nutzen ebenfalls nicht). Ich würde ja sagen dann Mehrkernprozessoren ist das kein Problem. Aber eigentlich ist es erstmal dank dem Delay kein Problem. Kann das Programm problemlos 100000x parallel laufen lassen ohne das auch nur irgendwas laggt oder die CPU minimal warm wird.

Zugegebenermaßen ist es etwas behindert dass ich keine Abbruchbedingung eingebaut habe. Will mir mal einer das Ding einfach starten und irgendwie aufzeichnen was da bitte schön das Problem sein soll?

Zum Thema Windowsversion: habe und entwickle auch aktiv unter win 7 und win 10, früher war aber auch win xp und vista nicht das Problem. Sowohl 32 als auch 64 bit btw. und Ubuntu gelgentlich.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye