_MouseTrap() nur für Fensterinhalt ohne Rahmen

  • Hei,

    ich bin grade am überlegen wie man die Maus für Spiele im Fenstermodus am besten nur für den Fensterinhalt eingrenzen kann.
    Dazu müsste man irgentwie die dicke den Fensterrahmens oder die Breite und Höhe den Inhalts ermitteln.
    Habt ihr eine Idee wie man das bewerkstelligen könnte?

    Für Leute mit 2 Monitoren ganz praktisch. Bei Warcraft3 wird durch berühren des Randes die Kamera bewegt und das ist bescheuert wenn man die Maus aus dem Fenster rausbewegen kann. Man muss Pixelgenau die Kante treffen :S . Der Fensterrahmen zählt schon nicht mehr mit.

    Bisher soweit:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $GUI = GUICreate("MouseTrap", 138, 86, 192, 124, Default, $WS_EX_TOOLWINDOW)
    $Windowtitle = GUICtrlCreateInput("MouseTrap", 8, 8, 121, 21)
    $Button = GUICtrlCreateButton("Toggle", 8, 48, 75, 25, $WS_GROUP)
    $Label = GUICtrlCreateLabel("Hotkey: Scrollock", 8, 32, 126, 17)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Running = False

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{SCROLLLOCK}","toggle")

    [/autoit] [autoit][/autoit] [autoit]

    Func toggle()

    if $Running Then
    $Running = False
    _MouseTrap()
    Else
    $Running = True
    $size = WinGetPos(GUICtrlRead($Windowtitle))
    if IsArray($size) Then
    _MouseTrap($size[0],$size[1],$size[0]+$size[2],$size[1]+$size[3])
    Else
    $Running = false
    _MouseTrap()
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button
    toggle()
    EndSwitch
    WEnd

    [/autoit]

    3 Mal editiert, zuletzt von Worfox (2. Januar 2011 um 22:00)

  • ' dank euch!

    Mit WinGetClientSize habe ich es dann hinbekommen.

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    opt("WinTitleMatchMode",-2)

    [/autoit] [autoit][/autoit] [autoit]

    $GUI = GUICreate("MouseTrap", 138, 86, 192, 124, Default, $WS_EX_TOOLWINDOW)
    $Windowtitle = GUICtrlCreateInput("MouseTrap", 8, 8, 121, 21)
    $Button = GUICtrlCreateButton("Toggle", 8, 48, 75, 25, $WS_GROUP)
    $Label = GUICtrlCreateLabel("Hotkey: Scrollock", 8, 32, 126, 17)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Global $Running = False

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{SCROLLLOCK}","toggle")

    [/autoit] [autoit][/autoit] [autoit]

    Func toggle()

    [/autoit] [autoit][/autoit] [autoit]

    if $Running Then
    $Running = False
    _MouseTrap()
    Else
    $Running = True
    $title = GUICtrlRead($Windowtitle)
    $size = WinGetPos($title)
    $csize = WinGetClientSize($title)
    dim $frameSize[2] = [$size[2]-$csize[0],$size[3]-$csize[1]] ; Fensterbreite-breite des Inhalts...
    $FrameX = $frameSize[0]/2 ; Seitlicher Rand
    $FrameY = $frameSize[1]-$FrameX ; Rand oben
    $X = $size[0]+$FrameX ; Position Oben Links
    $Y = $size[1]+$FrameY ;
    $X1 = $size[0]+$csize[0]+$FrameX ; Unten Rechts
    $Y1 = $size[1]+$csize[1]+$FrameY ;
    if IsArray($size) Then
    _MouseTrap($X,$Y,$X1,$Y1)
    Else
    $Running = false
    _MouseTrap()
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button
    toggle()
    EndSwitch
    WEnd

    [/autoit]