Seite 1 von 1

Maustasten abfragen ohne Initmouse???

Verfasst: 11.01.2005 16:54
von Agent
Hallo Leute.

Kann ich die Maustasten auch ohne initmouse abfragen? Initmouse funzt ja nur über directX. Ich brauche es aber ohne directX, da es sich um ein System-/Hilfs-Tool handelt.

Danke.

Verfasst: 11.01.2005 17:02
von ChaOsKid
hi Agent,

Code: Alles auswählen

OpenWindow(0, 0, 0, 300 , 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "oink") 
Repeat 
  Event = WaitWindowEvent() 
  Select Event
    Case #WM_RBUTTONDOWN ; rechte Maustaste
      Debug "#WM_RBUTTONDOWN"
    Case #WM_MBUTTONDOWN ; mittlere Maustaste
      Debug "#WM_MBUTTONDOWN"
    Case #WM_LBUTTONDOWN ; linke Maustaste
      Debug "#WM_LBUTTONDOWN"
  EndSelect 
Until Event = #PB_EventCloseWindow
mfG
Tobi

Verfasst: 11.01.2005 17:23
von Laurin
Und wie bekommt man mit, wo die Maus geklickt hat?

Verfasst: 11.01.2005 17:33
von Leo

Code: Alles auswählen

Procedure DebugMouse()
  Debug WindowMouseX()
  Debug WindowMouseY()
EndProcedure
OpenWindow(0, 0, 0, 300 , 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "oink") 
Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #WM_RBUTTONDOWN ; rechte Maustaste 
      Debug "#WM_RBUTTONDOWN" 
      DebugMouse()
    Case #WM_MBUTTONDOWN ; mittlere Maustaste 
      Debug "#WM_MBUTTONDOWN" 
      DebugMouse()
    Case #WM_LBUTTONDOWN ; linke Maustaste 
      Debug "#WM_LBUTTONDOWN" 
      DebugMouse()
  EndSelect 
Until Event = #PB_EventCloseWindow
Einfach mit WindowMouseX() und WindowMouseY()

Verfasst: 11.01.2005 19:19
von Agent
OOOHHH Mann...

DAS ist mir jetzt peinlich.

Kenn ich alles schon. Da stand ich (mal wieder) extrem auf der langen Leitung. LOL


Admin:
Topic bitte löschen *kopfschüttel*

sorry folks für die arbeit....peitscht-mich.

Verfasst: 11.01.2005 19:51
von Agent
hm...ganz so einfach ists dann im meinem prog doch nicht, weil

hier mal aus'm kopf was passiert (das ganze coding wäre zuviel)

repeat...

select windowevent()
case #pb_event_menu
select eventmenuid()
case ...
default <--- hier wirds interessant, jemand hat im menu was ausgewählt
### An dieser Stelle möchte ich wissen, ob er User, wenn er die linke Maustaste drückt, auch die rechte gedrückt hatte
ODER
### Ob der User z.b. die linke Shift gedrückt hatte

endselect
endselect....

Natürlich frage ich in der schleife viele case's ab, hier nur die Grobstruktur. Leider geht das mit

default
If WindowEvent()=#WM_RBUTTONDOWN And WindowEvent()=#WM_LBUTTONDOWN
RunProgram(clipboarddata(clipboard_set))
EndIf

nicht. Warum? Kann ich nicht abfragen ob 2 Tasten zugleich gedrückt wurden? Cool wäre auch, wenn RunProgramm ebenfalls gestartet wird, wenn der User eine bestimmte Taste gedrückt hat. keyboardreleased() geht ja wieder nur mit initkeyboard und directx... :(

Also, wie frag ich ab, ob ein User, wenn er in einem PopUpMenü eine Auswahl trifft (mit linker Maustaste - standart), die rechte gerade gedrückt hatte? Das Programm soll in diesem Fall etwas anderes machen.

Verfasst: 11.01.2005 20:14
von Leo
Tastendruck geht entweder mit GetAsyncState_(taste) oder so (guck auf www.microsoft.com unter msdn) oder mit AddKeyboardShurtcut (guck in der hilfe..)

Und ein WindowEvent kann doch nicht gleichzeitig zwei sachen zurück geben du kannst dir zwei variablen anlegen, lbutton und rbutton, jetzt setzt du lbutton auf 1, wenn das event #WM_LBUTTONDOWN ist und rbutton auf 1, wenn das event #WM_RBUTTONDOWN ist, und lbutton auf 0 wenn das event #WM_LBUTTONUP ist und rbutton auf 0, wenn das event #WM_RBUTTONUP ist, also:

Code: Alles auswählen

hWnd=OpenWindow(0,0,0,400,300,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"lbutton,rbutton")
lbutton.l:rbutton.l

Repeat
  Select WaitWindowEvent()
    Case #WM_LBUTTONDOWN : lbutton = 1
    Case #WM_LBUTTONUP   : lbutton = 0
    Case #WM_RBUTTONDOWN : rbutton = 1
    Case #WM_RBUTTONUP   : rbutton = 0
    Case #WM_CLOSE : Quit = #True 
  EndSelect
  
  If lbutton = 1 And rbutton = 1
    Debug "Beide Maustasten gedrückt"
  EndIf
  
Until Quit = #True 

Verfasst: 11.01.2005 20:15
von Agent
Danke Leo. Ich probiers mal. hab aber auch was gefunden:


If GetAsyncKeyState_(#VK_RBUTTON)
runprog...
endif