Irgendwie funktioniert das nicht...
Mir ist es nicht gelungen den Fehler in einem "einfachen" Code zu reproduzieren. Also hier mal mein Programm:
Es ist ein Maus + Tastatur Recorder einzelne Recorder Arten funktionieren aber sobald 2 oder 3 Arten ausgewählt sind wird das Programm sofort beendet.
Code: Alles auswählen
; MouseRecorder
;
Global Result1$, Result2$, Result3$
Procedure.s recMouseMovement(Event)
GetAsyncKeyState_(1)
X = DesktopMouseX()
Y = DesktopMouseY()
Timer = ElapsedMilliseconds()
Repeat
StartTime = ElapsedMilliseconds()
Delay(1)
XNew = DesktopMouseX()
YNew = DesktopMouseY()
If XNew <> X Or YNew <> Y
NewTime = ElapsedMilliseconds() - StartTime +1
Result$ = Result$ + Str(XNew) + "|" + Str(YNew) + "|" + Str(NewTime) + "|"
EndIf
X = DesktopMouseX()
Y = DesktopMouseY()
Until GetAsyncKeyState_(Event)
Result1$ = Result$
ProcedureReturn Result$
EndProcedure
Procedure replayMouseMovement(dummy)
Record$ = Result1$
i = 1
Repeat
XNew = Val(StringField(Record$,i,"|"))
YNew = Val(StringField(Record$,i+1,"|"))
NewTime = Val(StringField(Record$,i+2,"|"))
SetCursorPos_(XNew,YNew)
Delay(NewTime)
i + 3
Until StringField(Record$,i,"|") = ""
EndProcedure
Procedure.s recWrite(Event)
GetAsyncKeyState_(1)
BetweenEventStartTime = ElapsedMilliseconds()
Repeat
For a = 1 To 254
If a <> 1 And a <> 2 And a <> 4 And a <> 160 And a <> 161 And a <> 162 And a <> 163 And a <> 164 And a <> 165
If GetAsyncKeyState_(a)
While GetAsyncKeyState_(a)
For b = 1 To 254
If a = $5B Or a = $5C Or a = $10 Or a = $11 Or a = $12
If b <> 1 And b <> 2 And b <> 4 And b <> 160 And b <> 161 And b <> 162 And b <> 163 And b <> 164 And b <> 165 And a <> b
If GetAsyncKeyState_(b)
vk2.s = Hex(b)
If Len(vk2) = 1
vk2 = "0" + vk2
EndIf
Continue
EndIf
EndIf
EndIf
Next b
Wend
BetweenEventStopTime = ElapsedMilliseconds() - BetweenEventStartTime
vk1.s = Hex(a)
If Len(vk1) = 1
vk1 = "0" + vk1
EndIf
If vk2
Result$ = Result$ + Str(BetweenEventStopTime) + "|" + vk1 + "|" + vk2 + "|"
BetweenEventStartTime = ElapsedMilliseconds()
Else
Result$ = Result$ + Str(BetweenEventStopTime) + "|" + vk1 + "|" + "-1" + "|"
BetweenEventStartTime = ElapsedMilliseconds()
EndIf
EndIf
vk1 = ""
vk2 = ""
EndIf
Next a
Until GetAsyncKeyState_(Event)
Result3$ = Result$
ProcedureReturn Result$
EndProcedure
Procedure replayWrite(dummy)
Record$ = Result3$
i = 1
Repeat
NewTime = Val(StringField(Record$,i,"|"))
Key1$ = StringField(Record$,i+1,"|")
Key2$ = StringField(Record$,i+2,"|")
If Len(Key1$) > 1
vk1 = Val("$" + Key1$)
Else
vk1 = VkKeyScan_(Asc(Key1$))
EndIf
If Len(Key2$) > 1 And Key2$ <> "-1"
vk2 = Val("$" + Key2$)
ElseIf Key2$ = "-1"
OneKey = 1
Else
vk2 = VkKeyScan_(Asc(Key2$))
EndIf
If OneKey = 0
keybd_event_(vk1, 0, 0, 0)
keybd_event_(vk2, 0, 0, 0)
keybd_event_(vk2, 0, #KEYEVENTF_KEYUP, 0)
keybd_event_(vk1, 0, #KEYEVENTF_KEYUP, 0)
Else
keybd_event_(vk1, 0, 0, 0)
keybd_event_(vk1, 0, #KEYEVENTF_KEYUP, 0)
EndIf
Delay(NewTime)
i + 3
Until StringField(Record$,i,"|") = ""
EndProcedure
Procedure.s recClicks(Event)
GetAsyncKeyState_(1)
BetweenEventStartTime = ElapsedMilliseconds()
Repeat
If GetAsyncKeyState_(#VK_LBUTTON)
BetweenEventStopTime = ElapsedMilliseconds() - BetweenEventStartTime
X = DesktopMouseX()
Y = DesktopMouseY()
ClickTime1 = ElapsedMilliseconds()
While GetAsyncKeyState_(#VK_LBUTTON) : Wend
ClickTime = ElapsedMilliseconds() - ClickTime1
Result$ = Result$ + Str(BetweenEventStopTime) + "|0" + "|" + Str(ClickTime) + "|" + Str(X) + "|" + Str(Y) + "|"
BetweenEventStartTime = ElapsedMilliseconds()
EndIf
If GetAsyncKeyState_(#VK_RBUTTON)
BetweenEventStopTime = ElapsedMilliseconds() - BetweenEventStartTime
X = DesktopMouseX()
Y = DesktopMouseY()
ClickTime1 = ElapsedMilliseconds()
While GetAsyncKeyState_(#VK_RBUTTON) : Wend
ClickTime = ElapsedMilliseconds() - ClickTime1
Result$ = Result$ + Str(BetweenEventStopTime) + "|1" + "|" + Str(ClickTime) + "|" + Str(X) + "|" + Str(Y) + "|"
BetweenEventStartTime = ElapsedMilliseconds()
EndIf
If GetAsyncKeyState_(#VK_MBUTTON)
BetweenEventStopTime = ElapsedMilliseconds() - BetweenEventStartTime
X = DesktopMouseX()
Y = DesktopMouseY()
ClickTime1 = ElapsedMilliseconds()
While GetAsyncKeyState_(#VK_MBUTTON) : Wend
ClickTime = ElapsedMilliseconds() - ClickTime1
Result$ = Result$ + Str(BetweenEventStopTime) + "|2" + "|" + Str(ClickTime) + "|" + Str(X) + "|" + Str(Y) + "|"
BetweenEventStartTime = ElapsedMilliseconds()
EndIf
Until GetAsyncKeyState_(Event)
Result2$ = Result$
ProcedureReturn Result$
EndProcedure
Procedure replayClicks(dummy)
Record$ = Result2$
i = 1
Repeat
NewTime = Val(StringField(Record$,i,"|"))
NewMouseButton = Val(StringField(Record$,i+1,"|"))
NewMouseTime = Val(StringField(Record$,i+2,"|"))
XNew = Val(StringField(Record$,i+3,"|"))
YNew = Val(StringField(Record$,i+4,"|"))
SetCursorPos_(XNew,YNew)
Select NewMouseButton
Case 0
mouse_event_(#MOUSEEVENTF_LEFTDOWN,0,0,0,0)
Delay(NewMouseTime)
mouse_event_(#MOUSEEVENTF_LEFTUP,0,0,0,0)
Case 1
mouse_event_(#MOUSEEVENTF_RIGHTDOWN,0,0,0,0)
Delay(NewMouseTime)
mouse_event_(#MOUSEEVENTF_RIGHTUP,0,0,0,0)
Case 2
mouse_event_(#MOUSEEVENTF_MIDDLEDOWN,0,0,0,0)
Delay(NewMouseTime)
mouse_event_(#MOUSEEVENTF_MIDDLEUP,0,0,0,0)
EndSelect
Delay(NewTime)
i + 5
Until StringField(Record$,i,"|") = ""
EndProcedure
;- Window Constants
;
Enumeration
#Window_0
#Toolbar
EndEnumeration
;- Gadget Constants
;
Enumeration
#Record
#Replay
#MouseMovement
#Keyboard
#MouseClicks
#Text_0
#Save
#Open
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 348, 471, 335, 240, "Mouse Recorder", #PB_Window_SystemMenu| #PB_Window_TitleBar | #PB_Window_ScreenCentered )
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Record, 30, 200, 80, 30, "Record")
ButtonGadget(#Replay, 230, 200, 80, 30, "Replay")
CheckBoxGadget(#MouseMovement, 40, 120, 140, 20, "record mouse movement")
CheckBoxGadget(#Keyboard, 40, 150, 110, 20, "record keystrokes")
CheckBoxGadget(#MouseClicks, 40, 90, 100, 20, "record clicks")
EndIf
If CreateToolBar(#Toolbar, WindowID(#Window_0))
ToolBarStandardButton(#Open, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#Save, #PB_ToolBarIcon_Save)
EndIf
SetGadgetState(#MouseMovement,1)
SetGadgetState(#Keyboard,1)
SetGadgetState(#MouseClicks,1)
EndIf
EndProcedure
Open_Window_0()
Repeat
WindowEvent = WaitWindowEvent()
Select WindowEvent
Case #PB_Event_Gadget
Select EventGadget()
Case #Record ; Record Button
If GetGadgetState(#MouseMovement) And Not GetGadgetState(#MouseClicks) And Not GetGadgetState(#Keyboard)
Record$ = "010|"
HideWindow(#Window_0,1)
Record$ = Record$ + recMouseMovement(#VK_ESCAPE)
HideWindow(#Window_0,0)
ElseIf GetGadgetState(#MouseClicks) And Not GetGadgetState(#MouseMovement) And Not GetGadgetState(#Keyboard)
Record$ = "100|"
HideWindow(#Window_0,1)
Record$ = Record$ + recClicks(#VK_ESCAPE)
HideWindow(#Window_0,0)
ElseIf GetGadgetState(#Keyboard) And Not GetGadgetState(#MouseMovement) And Not GetGadgetState(#MouseClicks)
Record$ = "001|"
HideWindow(#Window_0,1)
Record$ = Record$ + recWrite(#VK_ESCAPE)
HideWindow(#Window_0,0)
ElseIf GetGadgetState(#MouseMovement) And GetGadgetState(#MouseClicks) And Not GetGadgetState(#Keyboard) ; Ab hier mehrere Arten
Record$ = "110|"
HideWindow(#Window_0,1)
CreateThread(@recClicks(),#VK_ESCAPE)
Record$ = Record$ + recMouseMovement(#VK_ESCAPE)
HideWindow(#Window_0,0)
ElseIf GetGadgetState(#MouseClicks) And Not GetGadgetState(#MouseMovement) And GetGadgetState(#Keyboard)
Record$ = "101|"
HideWindow(#Window_0,1)
CreateThread(@recWrite(),#VK_ESCAPE)
Record$ = Record$ + recClicks(#VK_ESCAPE)
HideWindow(#Window_0,0)
ElseIf GetGadgetState(#Keyboard) And Not GetGadgetState(#MouseMovement) And GetGadgetState(#MouseClicks)
Record$ = "011|"
HideWindow(#Window_0,1)
CreateThread(@recClicks(),#VK_ESCAPE)
Record$ = Record$ + recWrite(#VK_ESCAPE)
HideWindow(#Window_0,0)
ElseIf GetGadgetState(#MouseMovement) And GetGadgetState(#MouseClicks) And GetGadgetState(#Keyboard)
Record$ = "111|"
HideWindow(#Window_0,1)
CreateThread(@recClicks(),#VK_ESCAPE)
CreateThread(@recWrite(),#VK_ESCAPE)
Record$ = Record$ + recMouseMovement(#VK_ESCAPE)
HideWindow(#Window_0,0)
EndIf
Case #Replay ; Replay Button
If Record$
Mode.s = Mid(Record$,0,3)
Select Mode
Case "010"
HideWindow(#Window_0,1)
replayMouseMovement(1)
HideWindow(#Window_0,0)
Case "100"
HideWindow(#Window_0,1)
replayClicks(1)
HideWindow(#Window_0,0)
Case "001"
HideWindow(#Window_0,1)
replayWrite(1)
HideWindow(#Window_0,0)
Case "110" ; Ab hier mehrere Arten
HideWindow(#Window_0,1)
CreateThread(@replayClicks(),0)
replayMouseMovement(1)
HideWindow(#Window_0,0)
Case "101"
HideWindow(#Window_0,1)
CreateThread(@replayWrite(),0)
replayClicks(1)
HideWindow(#Window_0,0)
Case "011"
HideWindow(#Window_0,1)
CreateThread(@replayMouseMovement(),0)
replayWrite(1)
HideWindow(#Window_0,0)
Case "111"
HideWindow(#Window_0,1)
CreateThread(@replayClicks(),0)
CreateThread(@replayMouseMovement(),0)
replayWrite(1)
HideWindow(#Window_0,0)
EndSelect
EndIf
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #Open
OpenFileRequester("Choose a saved session...","","",0)
Case #Save
SaveFileRequester("Save your current session...","","",0)
EndSelect
EndSelect
Until WindowEvent = #PB_Event_CloseWindow
End
EDIT: das wo ich glaub das der Fehler ist ist dort wo ich kommentiert habe.