Mausklick an Webgadget senden
Verfasst: 11.06.2010 12:44
Hallo zusammen
Ich habe ein kleines Programm, das wie ein Makrorecoder funktionert (funktionieren soll) um in einem Browsergame das nervtötende "204 Felder 2x nacheinander klicken" mir zu vereinfachen.
Der Rekoder an sich geht gut, nur das Abspielen tut nicht. Ich habe verschiedene Sachen probiert:
habs nicht wirklich hinbekommen... Maus positionieren geht, aber er sendet kein Klick...
Kann mir jemand helfen, wie man einen Mausklick an ein Webgadget schickt?
Hab ich irgendwas übersehen?
Hier der gesamte Code...
Ich habe ein kleines Programm, das wie ein Makrorecoder funktionert (funktionieren soll) um in einem Browsergame das nervtötende "204 Felder 2x nacheinander klicken" mir zu vereinfachen.
Der Rekoder an sich geht gut, nur das Abspielen tut nicht. Ich habe verschiedene Sachen probiert:
Code: Alles auswählen
SetCursorPos_(Macros()\x + 4, Macros()\y + 23)
mouse_event_(#MOUSEEVENTF_LEFTDOWN, Macros()\x + 4, Macros()\y + 23, 0, 0)
SimulateClick(Macros()\x + 4, Macros()\y + 23)
Import ""
PB_Gadget_SendGadgetCommand(hwnd, EventType)
EndImport
PB_Gadget_SendGadgetCommand(GadgetID(#Web_0), #PB_EventType_LeftClick)
Procedure SimulateClick(x.w, y.w)
SendMessage_(WinHandle_I, WM_LBUTTONDOWN, 0, x + (y << 16));
SendMessage_(WinHandle_I, WM_LBUTTONUP, 0, x + (y << 16));
EndProcedure
Kann mir jemand helfen, wie man einen Mausklick an ein Webgadget schickt?
Hab ich irgendwas übersehen?
Hier der gesamte Code...
Code: Alles auswählen
;{ Constants
;- Window Constants
;
Enumeration
#Window_Meerkatze
EndEnumeration
;- MenuBar Constants
;
Enumeration
#MenuBar_0
EndEnumeration
;- Keyboard SK
Enumeration
#KB_F2
#KB_F3
#KB_1
#KB_2
EndEnumeration
;- Gadget Constants
;
Enumeration
#Web_0
#Frame3D_MK_Record
#Frame3D_MK_Play
#Combo_MK_Play_Modus
#Text_MK_Play_Modus
#Text_MK_Rec_Name
#String_MK_Rec_Name
#Button_MK_Rec
#Text_MK_Play_Anz
#Spin_MK_Play_Anz
#Text_MK_Play_Wait
#Spin_1
#Text_MK_Play_min
#CheckBox_MK_Play_Repeat
#Button_MK_Play_Run
#Frame3D_MK_Auto
#CheckBox_MK_Auto_
EndEnumeration
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
#BackSlash ="/"
CompilerElse
#BackSlash ="\"
CompilerEndIf
#ExtMacro = ".mcr"
#FileTemp = 0
#Dir = 0
;}
;{ Vars
Structure mcr
x.l
y.l
Text_S.s
Delay.l
EndStructure
Global NewList Macros.mcr()
Global WinHandle_I.i
;}
Import ""
PB_Gadget_SendGadgetCommand(hwnd, EventType)
EndImport
;
Procedure SimulateClick(x.w, y.w)
SendMessage_(WinHandle_I, WM_LBUTTONDOWN, 0, x + (y << 16));
SendMessage_(WinHandle_I, WM_LBUTTONUP, 0, x + (y << 16));
EndProcedure
Procedure LeseMacroListe() ; liest alle Macros in die Combobox ein
S.s
ClearGadgetItems(#Combo_MK_Play_Modus)
If ExamineDirectory(#Dir, "Macros" + #BackSlash, "")
While NextDirectoryEntry(#Dir)
If DirectoryEntryType(#Dir) = #PB_DirectoryEntry_File
S = DirectoryEntryName(#Dir)
AddGadgetItem(#Combo_MK_Play_Modus, -1, StringField(S, 1, "."))
EndIf
Wend
FinishDirectory(#Dir)
EndIf
EndProcedure
Procedure SaveMacro(Name_S.s) ; speichert das Macro
OK_I.i
While FileSize("Macros" + #BackSlash + Name_S + #ExtMacro) > -1
If MessageRequester("Dateiname schon vorhanden", "Soll die Datei überschrieben werden?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
OK_I = 1
Else
Name_S = InputRequester("DateiName umbenennen", "Geben Sie einen anderen Dateinamen an", Name_S)
OK_I = 1
EndIf
Wend
If CreateFile(#FileTemp, "Macros" + #BackSlash + Name_S + #ExtMacro)
WriteLong(#FileTemp, ListSize(Macros()))
ForEach Macros()
WriteLong(#FileTemp, Macros()\x)
WriteLong(#FileTemp, Macros()\y)
WriteStringN(#FileTemp, Macros()\Text_S)
WriteLong(#FileTemp, Macros()\Delay)
Next
CloseFile(#FileTemp)
EndIf
LeseMacroListe()
EndProcedure
Procedure LoadMacro(Name_S.s) ; läd das Macro
If ReadFile(#FileTemp, "Macros" + #BackSlash + Name_S + #ExtMacro)
ClearList(Macros())
n = ReadLong(#FileTemp)
For x = 1 To n
AddElement(Macros())
Macros()\x = ReadLong(#FileTemp)
Macros()\y = ReadLong(#FileTemp)
Macros()\Text_S = ReadString(#FileTemp)
Macros()\Delay = ReadLong(#FileTemp)
Next
CloseFile(#FileTemp)
EndIf
EndProcedure
Procedure PlayMacro() ; spielt das aktuelle Macro
ForEach Macros()
Delay(Macros()\Delay)
SetCursorPos_(Macros()\x + 4, Macros()\y + 23)
If Macros()\Text_S = "" ;kein Text, also Mausklick
Debug "klick"
SimulateClick(Macros()\x + 4, Macros()\y + 23)
; mouse_event_(#MOUSEEVENTF_LEFTDOWN, Macros()\x + 4, Macros()\y + 23, 0, 0)
; PB_Gadget_SendGadgetCommand(GadgetID(#Web_0), #PB_EventType_LeftClick)
Else
; gebe den Text aus
EndIf
Next
EndProcedure
Procedure Open_Window_Meerkatze()
StartMacro_I.i
StartTime_I.i
MouseDown.i
StartpunktX_I.i = -1 ; für die Autofunktion
StartpunktY_I.i
EndpunktX_I.i = -1
EndpunktY_I.i
Diff_I.i = 40
S.s
WinHandle_I = OpenWindow(#Window_Meerkatze, 0, 0, 1230, 860, "Meerkatze", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) ;{
Debug "WinHandle_I" + Str(WinHandle_I)
If WinHandle_I
If CreateMenu(#MenuBar_0, WindowID(#Window_Meerkatze))
MenuTitle("")
MenuItem(#KB_F2, "1")
MenuItem(#KB_F3, "2")
MenuItem(#KB_1, "1")
MenuItem(#KB_2, "2")
HideMenu(#KB_F2, 1)
HideMenu(#KB_F2, 1)
HideMenu(#KB_1, 1)
HideMenu(#KB_2, 1)
EndIf
AddKeyboardShortcut(#Window_Meerkatze, #PB_Shortcut_F2, #KB_F2)
AddKeyboardShortcut(#Window_Meerkatze, #PB_Shortcut_F3, #KB_F3)
AddKeyboardShortcut(#Window_Meerkatze, #PB_Shortcut_1, #KB_1)
AddKeyboardShortcut(#Window_Meerkatze, #PB_Shortcut_2, #KB_2)
Frame3DGadget(#Frame3D_MK_Record, 1050, 40, 170, 130, "Aufnehmen")
Frame3DGadget(#Frame3D_MK_Play, 1050, 210, 170, 200, "Abspielen")
ComboBoxGadget(#Combo_MK_Play_Modus, 1060, 250, 150, 20)
TextGadget(#Text_MK_Play_Modus, 1060, 230, 150, 20, "Abspielen", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_MK_Rec_Name, 1060, 63, 35, 17, "Name")
StringGadget(#String_MK_Rec_Name, 1100, 60, 110, 20, "")
ButtonGadget(#Button_MK_Rec, 1080, 140, 110, 20, "Aufnahme", #PB_Button_Default | #PB_Button_Toggle)
TextGadget(#Text_MK_Play_Anz, 1060, 293, 50, 17, "Anzahl")
SpinGadget(#Spin_MK_Play_Anz, 1120, 290, 60, 20, 0, 10)
TextGadget(#Text_MK_Play_Wait, 1060, 320, 50, 17, "Wartezeit")
SpinGadget(#Spin_1, 1120, 317, 60, 20, 0, 10)
TextGadget(#Text_MK_Play_min, 1180, 320, 20, 17, "min")
CheckBoxGadget(#CheckBox_MK_Play_Repeat, 1060, 350, 150, 20, "Wiederholen")
ButtonGadget(#Button_MK_Play_Run, 1080, 370, 110, 20, "Run", #PB_Button_Default | #PB_Button_Toggle)
Frame3DGadget(#Frame3D_MK_Auto, 1050, 430, 170, 200, "Automation")
CheckBoxGadget(#CheckBox_MK_Auto_, 1060, 460, 150, 20, "Pflanzen/Wässern")
WebGadget(#Web_0, 10, 10, 1024, 768, "http://www.kapibados.de")
;}
LeseMacroListe()
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
; Debug Str(WindowMouseX(#Window_Meerkatze)) + " - " + Str(WindowMouseY(#Window_Meerkatze))
If Event = #PB_Event_Menu ;{
MenuID = EventMenu()
If MenuID = #KB_F2
If StartMacro_I = 0
StartMacro_I = 1
StartTime_I = ElapsedMilliseconds()
SetGadgetState(#Button_MK_Rec, 1)
EndIf
ElseIf MenuID = #KB_F3
If StartMacro_I = 1
StartMacro_I = 0
SaveMacro(GetGadgetText(#String_MK_Rec_Name))
SetGadgetState(#Button_MK_Rec, 0)
EndIf
ElseIf MenuID = #KB_1
If StartpunktX_I = -1
StartpunktX_I = WindowMouseX(#Window_Meerkatze)
StartpunktY_I = WindowMouseY(#Window_Meerkatze)
EndIf
ElseIf MenuID = #KB_2
If StartpunktX_I <> -1
EndpunktX_I = WindowMouseX(#Window_Meerkatze)
EndpunktY_I = WindowMouseY(#Window_Meerkatze)
a = (EndpunktX_I - StartpunktX_I) / Diff_I
b = (EndpunktY_I - StartpunktY_I) / Diff_I
For x = 0 To a-1
For y = 0 To b-1
Delay(Random(150) + 250)
SetCursorPos_(StartpunktX_I + x * Diff_I + 4, StartpunktY_I + y * Diff_I + 23)
PB_Gadget_SendGadgetCommand(GadgetID(#Web_0), #PB_EventType_LeftClick)
Next
Next
StartpunktX_I = -1 ; autofunktion zurücksetzen
EndIf
EndIf
EndIf
;}
If StartMacro_I = 1 ;{
; wenn Maustaste loslassen erkennen
If GetAsyncKeyState_(#VK_LBUTTON)
MouseDown = 1
Else
If MouseDown = 1
MouseDown = 0
AddElement(Macros())
Macros()\x = WindowMouseX(#Window_Meerkatze)
Macros()\y = WindowMouseY(#Window_Meerkatze)
Macros()\Text_S = ""
Macros()\Delay = ElapsedMilliseconds() - StartTime_I
EndIf
EndIf
; Tastatureingabe abfragen
If 0
EndIf
EndIf
;}
If Event = #PB_Event_Gadget ;{
If GadgetID = #Web_0
ElseIf GadgetID = #Combo_MK_Play_Modus
ElseIf GadgetID = #String_MK_Rec_Name
ElseIf GadgetID = #Button_MK_Rec ;{
If EventType = #PB_EventType_LeftClick
n = GetGadgetState(#Button_MK_Rec)
If n = 0
StartMacro_I = 0
SaveMacro(GetGadgetText(#String_MK_Rec_Name))
Else
StartMacro_I = 1
EndIf
EndIf
;}
ElseIf GadgetID = #Spin_MK_Play_Anz
ElseIf GadgetID = #Spin_1
ElseIf GadgetID = #CheckBox_MK_Play_Repeat
ElseIf GadgetID = #Button_MK_Play_Run ;{
If EventType = #PB_EventType_LeftClick
n = GetGadgetState(#Combo_MK_Play_Modus)
If n <> -1
S = GetGadgetItemText(#Combo_MK_Play_Modus, n)
LoadMacro(S)
PlayMacro()
SetGadgetState(#Button_MK_Play_Run, 0)
EndIf
EndIf
;}
ElseIf GadgetID = #CheckBox_MK_Auto_
EndIf
;}
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndIf
EndProcedure
Open_Window_Meerkatze()
End