Ich habe ein sehr spezielles Problem mit einem meiner Programme in Zusammenhang mit dem Spiel League of Legends (LoL). Für alle, die das Spiel nicht kennen, es ist das derzeit populärste Spiel und stammt von Riot Games.
Das gemeinte Programm (ljtd.eu) ist eine Art Overlay, also quasi wird LoL im Fenstermodus gespielt und das Programm befindet sich on Top und bietet viele hilfreiche Zusatzinformationen. Alles funktioniert soweit sehr gut.
Nun ist das Problem, dass ich ein Feature eingebaut habe, welche dem Spiel automatisch den Fokus gibt wenn ein Element des Tools angeklickt wird. Dieses SetForegroundWindow funktioniert auch wunderbar. Allerdings hat es den Schönheitsfehler, dass wenn man nun über die Minimap in LoL fährt in ~50% aller Fälle der Mauszeiger "entführt" wird. Darunter ist zu verstehen, dass die Minimap ohne Linksklick nun an der Stelle fokussiert wird, wo sich der Mauszeiger über der Minimap befindet. Dies ist jedoch nicht gewollt und stellt eine starke Beeinträchtigung dar.
SetForegroundWindow
Also daher meine Frage, wieso klappt es in 50% der Fälle und in den anderen jedoch nur mit dem "Schönheitsfehler"? Viele meiner Nutzer haben das gleiche Problem und keine spezielle Hardware oder OS am laufen.
Ich hatte auch schon eine andere Idee und zwar einfach einen ganz normalen Klick zu simulieren. Aber dies führte zu dem gleichen "Bug". in beiden Fällen klappt es zu etwa 50%.
Andere Idee
Wäre echt schön wenn jemand eine Idee hätte, bin schon seit einiger Zeit am nachforschen und vermutlich ist die Lösung sehr trivial. Danke für eure Zeit =)
Das gemeinte Programm (ljtd.eu) ist eine Art Overlay, also quasi wird LoL im Fenstermodus gespielt und das Programm befindet sich on Top und bietet viele hilfreiche Zusatzinformationen. Alles funktioniert soweit sehr gut.
Nun ist das Problem, dass ich ein Feature eingebaut habe, welche dem Spiel automatisch den Fokus gibt wenn ein Element des Tools angeklickt wird. Dieses SetForegroundWindow funktioniert auch wunderbar. Allerdings hat es den Schönheitsfehler, dass wenn man nun über die Minimap in LoL fährt in ~50% aller Fälle der Mauszeiger "entführt" wird. Darunter ist zu verstehen, dass die Minimap ohne Linksklick nun an der Stelle fokussiert wird, wo sich der Mauszeiger über der Minimap befindet. Dies ist jedoch nicht gewollt und stellt eine starke Beeinträchtigung dar.
SetForegroundWindow
Quellcode
- Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
- Public Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As IntPtr) As Int32
- Public tHandle As Long = FindWindow(vbNullString, "League of Legends (TM) Client")
- Public Sub SetForeground()
- SetForegroundWindow(tHandle)
- End Sub
Also daher meine Frage, wieso klappt es in 50% der Fälle und in den anderen jedoch nur mit dem "Schönheitsfehler"? Viele meiner Nutzer haben das gleiche Problem und keine spezielle Hardware oder OS am laufen.
Ich hatte auch schon eine andere Idee und zwar einfach einen ganz normalen Klick zu simulieren. Aber dies führte zu dem gleichen "Bug". in beiden Fällen klappt es zu etwa 50%.
Andere Idee
Quellcode
- Public Structure PointAPI
- Public x As Integer
- Public y As Integer
- End Structure
- Module Module_SetMouseclick
- Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
- Public Declare Auto Function SetCursorPos Lib "User32.dll" (ByVal X As Integer, ByVal Y As Integer) As Long
- Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As PointAPI) As Boolean
- Private Const MOUSEEVENTF_LEFTDOWN = &H2
- Const MOUSEEVENTF_LEFTUP As Integer = &H4
- Public x, y As Integer
- Public Sub Position_Click(ByVal x As Integer, ByVal y As Integer, ByVal click As Boolean)
- SetCursorPos(x, y)
- If click Then
- mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 1)
- Else
- mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 1)
- End If
- End Sub
- End Module
Wäre echt schön wenn jemand eine Idee hätte, bin schon seit einiger Zeit am nachforschen und vermutlich ist die Lösung sehr trivial. Danke für eure Zeit =)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kwoxer“ ()