[S] Tool, dass den Cursor in einem bestimmten Fenster hält!

hier bitte nur *nach* Benutzen der Boardsuche (siehe oben) posten

Moderatoren: |Gordon|, Jean, Moderatoren

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

[S] Tool, dass den Cursor in einem bestimmten Fenster hält!

Beitrag von hubutz » 07.12.07, 21:23

'n abend!

Ich suche ein Tool mit dem ich einstellen kann, dass das aktive Fenster nicht durch die Maus verlassen werden kann. Im Grunde brauche ich es für ein Szenario:

Ich spiele ab und an Warcraft 3 mit 2 Monitoren, im Vollbildmodus ist der zweite Monitor ausgeschwarzt durch WC3, wenn man es also als "Fenster" startet geht es. Das Problem hierbei ist, dass man bei Realtime Strategie (RTS) Games nun mal oft mit der Maus scrollt. Und ich finde es halt doof wenn ich auf einmal im Browser lande und deshalb ne Schlacht verliere :/

Hat jemand ne Idee? Im Grunde müsste das Tool auch nur für WC3 funzen.

Wäre echt super!
Liebe Grüße,
hubutz

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 09.12.07, 8:49

keiner ne Idee? :(

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 09.12.07, 11:28

Ich weiß nicht, ob ich dich komplett richtig verstehe und ob das Script bei dir klappt, aber eigentlich sollte es das machen, was du wünscht:

Code: Alles auswählen

#NoTrayIcon
#include <Misc.au3>
#include <Array.au3>

Opt("TrayMenuMode", 1)
Opt("WinTitleMatchMode", 2)
TraySetIcon(@SystemDir & "\shell32.dll", -121)

Global $gsOldPos
Global $gsExe = IniRead("MouseTrap.ini", "Settings", "Exe", -1)

If $gsExe = -1 Then
	MsgBox(32, "MouseTrap-Fehler", "Bitte Exe zum Ausführen mit kompletten Pfad in der MousTrap.ini setzen!")
	Exit
EndIf

If Not FileExists($gsExe) Then
	MsgBox(32, "MouseTrap-Fehler", "Der Pfad zur Exe in der MouseTrap.ini ist nicht korrekt!")
	Exit
EndIf

Global $gsTitle = IniRead("MouseTrap.ini", "Settings", "Title", -1)
If $gsTitle = -1 Then
	MsgBox(32, "MouseTrap-Fehler", "Bitte Fenstertitel in der MouseTrap.ini setzen!")
	Exit
EndIf

Run($gsExe)

WinWait($gsTitle, "", 30)

If Not WinExists($gsTitle) Then
	MsgBox(32, "MouseTrap-Fehler", "Das angegebene Fenster konnte auch nach 30 Sekunden nicht gefunden werden!")
	Exit
EndIf 



While WinExists("Notepad")
	_Trap()
	Sleep(10)
WEnd

Func _Trap()
	Local $aPos = WinGetPos("Notepad")
	Local $sPos = _ArrayToString($aPos, "|")
	If $gsOldPos <> $sPos Then
		$gsOldPos = $sPos
		_MouseTrap($aPos[0], $aPos[1], $aPos[2] + $aPos[0], $aPos[3] + $aPos[1])
	EndIf
EndFunc
Die kompilierte Exe (inkl. Source) kannst du dir hier herunterladen: http://rapidshare.com/files/75342784/MouseTrap.rar


Einfach irgendwohin entpacken und die beiliegende MouseTrap.ini anpassen. Der komplette Pfad zur auszuführenden Exe muss unter Settings hier Exe= und der Fenstertitel hinter Title=

Als Fenstertitel nimmst du einen eindeutigen Teil des Fensternamens, der angezeigt wird, wenn du das Spiel im Fenstermodus laufen lässt.

Das Script beendet sich automatisch, wenn das Spiel beendet wird.
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 09.12.07, 12:53

Hey, das funzt fast so wie ich es bräcuhte, hat aber einen Haken:

in dre .ini kann ich nur einen Pfad zur .exe angeben, ich müsste allerdings eine .exe + einen Paramter angeben:

"C:\Program Files (x86)\Warcraft III\Frozen Throne.exe" -window

Das frisst er dann leider nicht :( Ist das viel Arbeit das zu ändern? Grüße!

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 09.12.07, 12:59

Funktioniert das nicht, wenn du genauso wie du eben geschrieben hast "C:\Program Files (x86)\Warcraft III\Frozen Throne.exe" -window angibst? Wenn nicht schaue ich mir das gleich nochmal an, aber probier es erst noch Mal aus ;)
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 09.12.07, 13:40

"Der Pfad zur Exe in der MouseTrap.ini ist nicht korrekt" sagt er dann :(

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 09.12.07, 15:21

Jep, ist logisch, da er ja den Pfad prüft ;)

Hier eine überarbeitete Version, die den zusätzlichen Key "Params" in der INI unterstützt. Einfach die gewünschten Parameter dort hinschreiben.

Download: http://rapidshare.com/files/75384218/MouseTrap.rar
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 09.12.07, 15:26

hehe :)

irgendwie statet es jetzt, aber den cursor fängt es nicht. geht auch nicht wenn ich es mit TotalComander teste z.B. :/

MUss jetzt aber leider bis spätabends weg, danke für die Hilfe, vllt findest du ja den Fehler (oder ich finde ihn, werde morgen auf der Arbeit mal schauen, ob ich den Code irgendwie verstehen kann).

Vllt hab ich den fehler schon:
If Not WinExists("Notepad") Then
MsgBox(32, "MouseTrap-Fehler", "Das angegebene Fenster konnte auch nach 30 Sekunden nicht gefunden werden!")
Exit
EndIf

Func _Trap()
Local $aPos = WinGetPos("Notepad")
Local $sPos = _ArrayToString($aPos, "|")
If $gsOldPos <> $sPos Then
$gsOldPos = $sPos
_MouseTrap($aPos[0], $aPos[1], $aPos[2] + $aPos[0], $aPos[3] + $aPos[1])
EndIf
EndFunc
Habe da mal "Notepad" durch $gsTitle ersetzt. Ziehe mir gerade Autoit, mal testen, muss das Treffen halt ein paar MIns warten:)


EDIT2: Hah! Es geht! Jetzt bräuchte ich nur noch ein Tool um die oberste Zeile (wo der Name steht) und den Rand mehr oder weniger zu minimieren oder auszublenden (das zählt ja leider noch zum Fenster, möchte ich aber auch nicht unbedingt draufklicken :)) )

Oder kann man mit dem Script auch direkt irgendwie sagen, dass es nicht ausserhalb des eigentlich FEnster (Windows-Rahmen etc. abgesehen) gehen soll/darf?

Merci!

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 09.12.07, 16:14

Oh, sorry, hatte aus Versehen eine Testversion hochgeladen...

Jetzt nochmal eine überarbeitete Version, die nur noch Bewegungen innerhalb des Fensters zulässt.

Download: http://rapidshare.com/files/75394459/MouseTrap.rar
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 09.12.07, 16:24

Ich will das auch könne. Ich glaube AutoIt muss auch auf meine Liste!

Im übrigen funktioniert es - mit einer kleinen Einschränkung: Man kann links, rechts und unten an den FEnsterand, und dann kommt das "resize"-Icon. Schafft man es so, die Größe zu verändern funzt das ganze dingens nich mehr.

Aber ist ja echt genial, danke für die viele Arbeit und Mühe. Würd dich ja fast auf nen Bier einladen (fast nur, weil ich keine Ahnung habe ob du hier in der gegend wohnst :>)

EDIT: Das Problem ist doch ein größeres: Sobald man einmal aus dem Fenster raus ist funzt das fangen schlicht und ergreifend nicht mehr.

Jetzt muss ich aber (leider) weg. Schönen Abend!

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 09.12.07, 17:03

Schick mir mal einen Screenshot vom Fenster, damit ich sehen kann, was alles nicht berührt werden darf, dann kann ich das noch integrieren ;)

AutoIt ist übrigens sehr einfach zu erlernen - erste Anlaufstelle ist die sehr gute Hilfedatei. Mittlerweile gibt es auch eine fast fertige deutsche Übersetzung auf http://www.autoit.de. Diese Seite ist auch gleichzeitig eine sehr aktive und hilfsbereite Community :)
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 09.12.07, 17:13

So, das mit heute abend ist wohl ins Wasser gefallen (hier gießt es).

Dafür gehen wir dann gleich was Essen beim Italiener um die Ecke.

Der Screnshot wäre hier:

http://www.hubutz.de/temp/ScreenShot%20 ... %20III.png

mit AutoIt muss ich mal gucken:) Im MOment hab ich leider zu wenig Zeit, aber prinzipiell sieht das echt genial aus =)

Woran liegt es denn, dass es nicht mehr geht sobald das Programm einmal nicht im Vordergrund war? Das find ich strange:)

EDIT: Nach oben geht der Zeiger z.B. nicht weig genug :/ Irgendwie ist das doof. :( Sind das nur irgendwelche Parameter bei denen du jetzt +x oder so machst? Dann könnte ich das vllt bei nem Glas Wein die Tage auch mal probierne. Wenn es nicht mehr wäre :)

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 09.12.07, 18:02

Dein Fenster hat schon mal kein Menü, dass hatte ich allerdings einberechnet. Ja, es sind nur einige Pixel, die man verschieben muss.

Habe dir jetzt die Keys Left, Top, Right und Bottom eingebaut, die du beliebig anpassen kannst. Die Werte werden in Pixel angegeben und jeweils von der aktuellen Fenstergröße abgezogen.

Left = 4, Right = 8, Top = 100, Bottom = 60 würde bedeuten:
Halte die Maus im Fenster, aber Links 4 Pixel weiter nach innen, Rechts 8 Pixel weiter nach innen, oben 100 Pixel nach innen und unten 60 Pixel nach innen. Habe dir schon mal Werte eingetragen, die zumindest beim Notepad passen, aber ungefähr auch so bei dir passen sollten.

Außerdem habe ich zur Aktivierung und Deaktivierung der "Mausfalle" noch den HotKey STRG+SHIFT+F12 hinzugefügt.

Versuch es mal damit :)

Download: http://rapidshare.com/files/75415480/MouseTrap.rar
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 09.12.07, 18:46

Super! Aber echt :))

Eine "Komfort-"Frage aber noch *ggg*

Sowas wie in .ahk gibts nicht?
---
If (WinActive("Warcraft III")) {
}
---
Damit könnte man sich doch den Button sparen, oder? Hatte mir mit .ahk irgendwann mal ein Skript zusammengeklaut was bestitmmte Tasten umbelegt *gg* (aber das war auch trivial im Gegensatz hierzu).

z.B. :)
Danke

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 09.12.07, 20:19

Klar könnte man das integrieren, aber hat das in diesem Fall denn einen Sinn? Ich mein, man will ja im aktiven Fenster bleiben und nicht in ein anderes wechseln. Oder verstehe ich dich da falsch?

Wenn du mir eine gute Erklärung lieferst, integriere ich es noch :P

Ich hatte das eigentlich auch nur integriert, damit man bei Bedarf trotzdem komfortabel die Maus normal nutzen kann ;)
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 10.12.07, 8:08

Guten Morgen *gähn*

Also, der Hauptzweck den das Programm für mich haben soll ist folgender.

Warcraft 3 im Fenstermodus, solange die Maus darinnen ist, soll sie sich nicht aus dem Fenster (-Rand) bewegen können. Deswegen habe ich mich gefragt, ob man nicht irgendwie
If (WinActive("Warcraft III")) { [Halt die Maus im Fenster]} machen könnte.

Das Programm wie es gerade ist ist an sich schon sehr genial, da es für mehrere Programme funzt (wobei, man könnte ja sicher auch If (WinActive($[Varibaler Fensternamen aus der ini-Datei])...) setzen.

Naja, ich kann so schon damit leben :) Wäre nur noch ein kleiner Komfortgewinn :o

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 10.12.07, 10:07

Hubutz hat geschrieben:...solange die Maus darinnen ist, soll sie sich nicht aus dem Fenster (-Rand) bewegen können...
?(

Genau das meinte ich, das verstehe ich so nicht. Wenn sie drinnen ist soll sie doch nicht raus können... oder meinst du einfach, dass wenn man mit z. B. STRG+TAB das Fenster gewechselt hat, ein komplette Bewegen wieder möglich sein soll?
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 10.12.07, 10:37

Genau, wenn man mit aus dem Fenster raustabbed dann soll die Maus sich "normal" verhalten, erst wenn sie wieder in dem Fenster ist, soll sie gefangen sein. Grummel, ich hätte in der Schule besser aufpassen und irgendwelche Artikulationskurse machen/belegen sollen *ggg*

Nehmen wir an ich habe Warcraft3 im Fenstermodus geöffnet und ansonsten noch den Windows-Explorer (im Hintergrund). Solange ich in WC3 bin soll die Maus sich nicht aus dem Fenster bewegen lassen. Wechsele ich jetzt mit ALT+Tab zum Explorer soll die Maus dort aber ganz "normal" funktionieren. Gehe ich zurück in WC3 soll sie wieder gefangen sein.

ich glaube ich kann mich echt nicht ausdrücken. Sorry :(

Benutzeravatar
Kostenlos
Mitglied
Beiträge: 578
Registriert: 22.07.06, 0:55

Beitrag von Kostenlos » 10.12.07, 10:56

Alles klar, ist jetzt integriert. Den Hotkey habe ich trotzdem mal dringelassen.

Download: http://rapidshare.com/files/75561794/MouseTrap.rar
Liebe Grüße,
Kostenlos
-----------------------------------------------------------
Kostenlos ist nicht umsonst...

Jedes Windows-Problem lässt sich mit einem Script lösen ;)

hubutz
Mitglied
Beiträge: 146
Registriert: 20.12.06, 8:06

Beitrag von hubutz » 10.12.07, 11:02

Merci, kann es leider erst heute nachmittag/abend austesten.
Aber wenn ich mir den Code so anschaue sieht es nur ein wenig nach Hexenwerk aus :o

Mal noch ne kleine OT-Frage an dich hierbei: Was für einen Editor nutzt du dafür? Gibt es einen der Syntaxhighligthting für AutoIt unterstütz? Mal gleich auf der PsPad-Seite suchen.

Ne andere Frage: Hättest du was dagegen, wenn ich dein Skript ein paar Kumpels, mit Credit an dich, weitergebe?

Antworten