Seite 1 von 1

MouseEvent reagiert nicht

Verfasst: 31.03.2006 19:09
von funk.munich
Hi zusammen,

ich habe da schon wieder eine Frage :(
Ich habe die Mauspositionen sowie die Aktionen der linken bzw. der rechten Maustaste aufgenommen.
Jetzt funktioniert es auch soweit, jedoch die Aktionen der Linken/Rechten
Maustaste werden nicht ausgeführt.

Könnte mir jemand einen Tipp geben, was ich nicht bedacht habe?

Das wäre super.

Danke,
Daniel

Code: Alles auswählen

Declare setPos(x, y, evt01, evt02)

Structure mouse
  x.l
  y.l
  evt01.l
  evt02.l
EndStructure

NewList pos.mouse()

MessageRequester("", "Start")

Procedure setPos(x.l, y.l, evt01.l, evt02.l)
  AddElement(pos())
  pos()\x = x
  pos()\y = y
  pos()\evt01 = evt01
  pos()\evt02 = evt02
EndProcedure

Repeat
  
    GetCursorPos_(Cursor.POINT)
    x.l = Cursor\x
    y.l = Cursor\y
  
    If GetAsyncKeyState_(#VK_ESCAPE)
      Quit = 1
    Else
    
      listCount.l = CountList(pos())
      
      If listCount > 0 
        SelectElement(pos(), listCount-1)
        If pos()\x <> x
          If GetAsyncKeyState_(#VK_LBUTTON)
            setPos(x, y, 2, 4)
          EndIf
          If GetAsyncKeyState_(#VK_LBUTTON)
            setPos(x, y, 8, 16)  
          Else
            setPos(x, y, 0, 0)     
          EndIf
          
        EndIf  
      Else
        setPos(x, y, 0, 0)
      EndIf
    
    EndIf
    
Until Quit = 1

listLeng.l = CountList(pos())

MessageRequester("", "Run: " + Str(listLeng))

For i = 0 To listLeng

  SelectElement(pos(), i)
  If pos()\evt01 <> 0
    mouse_event_(pos()\evt01, pos()\x, pos()\y, 0, 0)
    mouse_event_(pos()\evt02, pos()\x, pos()\y, 0, 0)
  Else
    SetCursorPos_(pos()\x, pos()\y)
  EndIf
  
  Delay(Abs(10))

Next

MessageRequester("", "End")

Verfasst: 01.04.2006 17:16
von funk.munich
Hi zusammen,

ich habe den Code noch einmal angepasst mit den Beiträgen aus anderen
Foren. Wenn ich die Linke/Rechte Maustaste nachdem Aufruf
des Compilers in PureBasic nutze, funktioniert es, aber wenn ich z.B.
ein Programm aus meiner Schnellstart Leiste anklicke erkennt das programm
die Aktion nicht.

Hätte vielleicht hierzu jemand einen Ratschlag?

Danke + Gruß,
Daniel

Code: Alles auswählen

Declare setPos(x, y, evt01, evt02)

#MOUSEEVENTF_MOVE = $1
#MOUSEEVENTF_ABSOLUTE = $8000
#MOUSEEVENTF_LEFTDOWN = $2
#MOUSEEVENTF_LEFTUP = $4
#MOUSEEVENTF_MIDDLEDOWN = $20
#MOUSEEVENTF_MIDDLEUP = $40
#MOUSEEVENTF_RIGHTDOWN = $8
#MOUSEEVENTF_RIGHTUP = $10

Structure mouse
  x.l
  y.l
  evt01.l
  evt02.l
EndStructure

NewList pos.mouse()

MessageRequester("", "Start")

Procedure setPos(x.l, y.l, evt01.l, evt02.l)
  AddElement(pos())
  pos()\x = x
  pos()\y = y
  pos()\evt01 = evt01
  pos()\evt02 = evt02
EndProcedure

Procedure MouseEvent(Ereignis.l)
  Mem.l=GlobalAlloc_(0,8)
  GetCursorPos_(Mem)
  mouse_event_(Ereignis|#MOUSEEVENTF_ABSOLUTE,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_())
  GlobalFree_(Mem)
EndProcedure

Repeat
  
    GetCursorPos_(Cursor.POINT)
    x.l = Cursor\x
    y.l = Cursor\y
  
    If GetAsyncKeyState_(#VK_ESCAPE) &$80000000
      Quit = 1
    EndIf
    
    If GetAsyncKeyState_(#VK_LBUTTON) & $80000000
      Debug 1
      setPos(x, y, #MOUSEEVENTF_LEFTDOWN, #MOUSEEVENTF_LEFTUP)
    EndIf
        
    If GetAsyncKeyState_(#VK_RBUTTON) &$80000000
      Debug 2
      setPos(x, y, #MOUSEEVENTF_RIGHTDOWN, #MOUSEEVENTF_RIGHTUP)  
    EndIf
    
    listCount.l = CountList(pos())
      
    If listCount > 0 
        
      SelectElement(pos(), listCount-1)
      If pos()\x <> x
        setPos(x, y, 0, 0)     
      EndIf
        
     Else
       setPos(x, y, 0, 0)
     EndIf
    
Until Quit = 1

listLeng.l = CountList(pos())

result = MessageRequester("", "Run: " + Str(listLeng), #PB_MessageRequester_YesNo)

If result = 6
For i = 0 To listLeng

  SelectElement(pos(), i)
  SetCursorPos_(pos()\x, pos()\y)
  
  Select pos()\evt01
    Case #MOUSEEVENTF_LEFTDOWN
      MouseEvent(#MOUSEEVENTF_LEFTDOWN)
      MouseEvent(#MOUSEEVENTF_LEFTUP)
      Delay(Abs(1000))
    Case #MOUSEEVENTF_RIGHTDOWN
      MouseEvent(#MOUSEEVENTF_RIGHTDOWN)
      MouseEvent(#MOUSEEVENTF_RIGHTUP)            
      Delay(Abs(1000))
  EndSelect
  
  Delay(Abs(50))

Next

MessageRequester("", "End")
EndIf

Verfasst: 01.04.2006 17:58
von funk.munich
Hi,

ich habe auf der MSDN Seite gefunden, dass man folgenden Wert
eingeben muss:

GetSystemMetrics(SM_SWAPBUTTON)

http://msdn.microsoft.com/library/defau ... dstate.asp

Jedoch, wie ich ihn nutzen soll ist mir noch nicht ganz klar?!

Gruß,
Daniel

Verfasst: 05.04.2006 22:11
von funk.munich
Hi,

ich habe es soweit hinbekommen. Vielleicht kann das der eine oder andere ja auch benötigen.

Des weiteren habe ich (mal wieder) eine weitere Frage. Das einzige was mich jetzt noch interessieren würde ist, wie ich es hinbekommen könnte z.B.
ein Fenster mit dem Mouse Event festzuhalten und zu einen neuen Punkt zu ziehen. Hat dazu jemand schon ein paar Erfahrungen gesammelt?

Danke + Gruß,
Daniel

Code: Alles auswählen

Global LB.l, RB.l
Structure mouse
  
  x.l
  y.l
  evt01.l
  evt02.l
  
EndStructure

NewList pos.mouse()

Procedure setPosInfo(x.l, y.l, evt01.l, evt02.l)
  
  AddElement(pos())
  pos()\x = x
  pos()\y = y
  pos()\evt01 = evt01
  pos()\evt02 = evt02
  
EndProcedure

Procedure MouseEvent(evt.l)

  Mem.l = GlobalAlloc_(0,8)
  GetCursorPos_(Mem)
  mouse_event_(evt|#MOUSEEVENTF_ABSOLUTE,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_())
  GlobalFree_(Mem)
  
EndProcedure

MessageRequester("", "Start")

Repeat

  GetCursorPos_(Cursor.POINT)
  x.l = Cursor\x
  y.l = Cursor\y

  If GetAsyncKeyState_(#VK_ESCAPE)
    Quit = 1
  EndIf

    If GetAsyncKeyState_(#VK_LBUTTON)
        If LB = 0
           LB = 1
        EndIf
    Else
        If LB = 1
           Debug "LB"
           setPosInfo(x, y, #MOUSEEVENTF_LEFTDOWN, #MOUSEEVENTF_LEFTUP)
           LB = 0
        EndIf
    EndIf
   
    If GetAsyncKeyState_(#VK_RBUTTON)
        If RB = 0
           RB = 1
        EndIf
    Else
        If RB = 1
           Debug "RB"
           setPosInfo(x, y, #MOUSEEVENTF_RIGHTDOWN, #MOUSEEVENTF_RIGHTUP) 
           RB = 0
        EndIf
    EndIf

    
  listCount.l = CountList(pos())
      
  If listCount > 0 
        
    SelectElement(pos(), listCount-1)
    If pos()\x <> x
      setPosInfo(x, y, 0, 0)     
    EndIf
        
  Else
    setPosInfo(x, y, 0, 0)
  EndIf
    
     ;Delay(10)      

Until Quit = 1


listLeng.l = CountList(pos())

result = MessageRequester("", "Run: " + Str(listLeng), #PB_MessageRequester_YesNo)

If result = 6
  For i = 0 To listLeng

    SelectElement(pos(), i)
    SetCursorPos_(pos()\x, pos()\y)
  
    Select pos()\evt01
      Case #MOUSEEVENTF_LEFTDOWN
        MouseEvent(pos()\evt01)
        MouseEvent(pos()\evt02)
      Case #MOUSEEVENTF_RIGHTDOWN
        MouseEvent(pos()\evt01)
        MouseEvent(pos()\evt02)          
    EndSelect
  
    Delay(Abs(50))

  Next

MessageRequester("", "End")
EndIf