Dual Monitor - Conecte todas as bordas (Windows)

0

É possível conectar dois monitores em todas as arestas. O que quero dizer com isso é quando você atinge o topo da tela, o mouse deve entrar na parte inferior da segunda tela. Se você acertar na parte inferior, deve entrar no topo da segunda tela e o mesmo para esquerda e direita.

    
por Nimmi 13.07.2018 / 18:20

3 respostas

1

Tal coisa não faz sentido, dadas as coordenadas x-y que seu subsistema de exibição geralmente implementa. É tecnicamente possível, mas tem que ser necessário ter um driver personalizado para sua placa de vídeo, e como isso não faz sentido e que a Microsoft é muito improvável que assine tal coisa, duvido seriamente que você encontre um.

    
por 13.07.2018 / 19:57
0

Existem alguns programas que permitem que você faça isso, o mais simples e melhor que eu encontrei é este script AutoHotKey. Eu copiei o script abaixo em caso de futuros links quebrados: link

Instale o AutoHotKey e execute o script, ou você pode compilá-lo em um .exe para rodar em qualquer computador. (ou seja, mesmo sem o AutoHotKey instalado)

Fwd:

/*
 * MouseWrapper v1.2
 *
 * Description:
 *  Allows full mouse-wrapping in virtually any single or multi-monitor environment.
 *  Double-clicking the Tray icon shows a floating tooltip that gives you boundry information
 *  You can toggle the Tooptip, Vertical and Horizontal wrapping and can pause the wrapper.
 *  Basic configuration options are stored in a file that you can edit.
 *  The mouse position and display configuration polling times can only be set via the file.
 *
 * Changelog:
 *  v1.2
 *   Screen configuration is checked periodically for alterations.
 *   Added Tooltip info and tray menu toggles
 *   Added option for vertical wrapping
 *  v1.1
 *   No longer relies on Hard offsets.
 *  v1.0
 *   Initial Release
 *
 * Known Issues/Todo:
 *  Cannot wrap on edge of a smaller monitor if that edge is inline with a larger monitor's.
 *   Example: if you have 1280x1024 and 1024x768 in Right & Left position, you cannot wrap
 *    vertically on the 1024x768 screen since the top or bottom boundry is within 1280x1024
 *   Solution: actively track which monitor i'm in, how big it is and whether or not there is
 *    anything beyond it.
 *  If the tray menu is active the position polling etc halts.
 *
 * Contact/Etc:
 *  Author: Paegus ([email protected])
 *  Program: AutoHotKey (https://ahknet.autohotkey.com)
 *  Released under GNU General Public Licence
 */

App

; ------------------ Details ------------------ ;

AppName = MouseWrapper
AppVer = 1.2

; ------------------ Default Settings ------------------ ;

Default_bHWrap = true
Default_bVWrap = false
bShowTip = false
Default_PollTimeMouse = 50
Default_PollTimeDisplay = 2000

; ------------------ Read existing settings if any ------------------ ;

SettingsFile = %AppName%.ini

IfExist %SettingsFile%
{
    ; Read Settings
    FileReadLine bHWrap, %SettingsFile%, 1
    FileReadLine bVWrap, %SettingsFile%, 2
    FileReadLine PollTimeMouse, %SettingsFile%, 3
    FileReadLine PollTimeDisplay, %SettingsFile%, 4

    ;MsgBox bHWrap : %bHWrap%'nbVWrap : %bVWrap%'nPollTimeMouse : %PollTimeMouse%'nPollTimeDisplay : %PollTimeDisplay%
    if bHWrap <> true
    {
        if bHWrap <> false
        {
            Error = Invalid value on line 1: %bHWrap%
            bHWrap := Default_bHWrap
        }
    }

    if bVWrap <> true
    {
        if bVWrap <> false
        {
            Error = %Error%'nInvalid value on line 2: %bVWrap%
            bVWrap := Default_bVWrap
        }
    }

    if PollTimeMouse is not integer
    {
        Error = %Error%'nInvalid value on line 3: %PollTimeMouse%
        PollTimeMouse := Default_PollTimeMouse
    }
    else if PollTimeMouse < 10
    {
        Error = %Error%'nInvalid value on line 3: %PollTimeMouse%
        PollTimeMouse := Default_PollTimeMouse
    }

    if PollTimeDisplay is not integer
    {
        Error = %Error%'nInvalid value on line 4: %PollTimeDisplay%.
        PollTimeDisplay := Default_PollTimeDisplay
    }
    else if PollTimeDisplay < 100
    {
        Error = %Error%'nInvalid value on line 4: %PollTimeDisplay%.
        PollTimeDisplay := Default_PollTimeDisplay
    }

    ;MsgBox bHWrap : %bHWrap%'nbVWrap : %bVWrap%'nPollTimeMouse : %PollTimeMouse%'nPollTimeDisplay : %PollTimeDisplay%
    if Error
    {
        MsgBox 262192, %AppName%: Error, %Error%
    }

}
else
{
    ; Set Defaults
    bHWrap := Default_bHWrap
    bVWrap := Default_bVWrap
    PollTimeMouse := Default_PollTimeMouse
    PollTimeDisplay := Default_PollTimeDisplay

    ; Write Defaults
    FileAppend %bHWrap%'n, %SettingsFile%
    FileAppend %bVWrap%'n, %SettingsFile%
    FileAppend %PollTimeMouse%'n, %SettingsFile%
    FileAppend %PollTimeDisplay%'n, %SettingsFile%
    FileAppend 'nLine 1: Horizontal Wrapping <true|false>'nLine 2: Vertical Wrapping <true|false>'nLine 3: Mouse Poll-time <milliseconds>'nLine 4: Display configuration Poll-time <milliseconds>, %SettingsFile%

    MsgBox 262208,%AppName%: Launch,This is the first time you've launched %AppName%.'nDefault settings loaded. The settings file is located at:'n'n%A_WorkingDir%\%SettingsFile%
}

; ------------------ Tray Icon & Tooltip ------------------ ;

Menu TRAY, Icon, %A_WinDir%\system32\main.cpl,,1
Menu TRAY, Tip, %AppName% v%AppVer%
Menu TRAY, NoStandard
Menu TRAY, Add, &About, MenuINFO
Menu TRAY, Add
Menu TRAY, Add, Mouse: %PollTimeMouse%ms, MenuNULL
Menu TRAY, Disable, Mouse: %PollTimeMouse%ms
Menu TRAY, Add, Disp: %PollTimeDisplay%ms, MenuNULL
Menu TRAY, Disable, Disp: %PollTimeDisplay%ms
Menu TRAY, Add
Menu TRAY, Add, &Tooltip, MenuTTT
Menu TRAY, Add, &X-Wrap, MenuTHW
Menu TRAY, Add, &Y-Wrap, MenuTVW
Menu TRAY, Add, &Pause, MenuPAUSE
Menu TRAY, Add, &Edit, MenuEDIT
Menu TRAY, Add, &Reload, MenuRELOAD
Menu TRAY, Add
Menu TRAY, Add, &Quit, MenuQUIT
Menu TRAY, Default, &About

if bShowTip = true
{
    Menu TRAY, Check, &Tooltip
}
if bHWrap = true
{
    Menu TRAY, Check, &X-Wrap
}
if bVWrap = true
{
    Menu TRAY, Check, &Y-Wrap
}

; ------------------ Inner Workings ------------------ ;

CoordMode Mouse, Screen

#SingleInstance force

#Persistent
    SetTimer ScreenUpdate, %PollTimeDisplay%
    SetTimer ScreenWrap, %PollTimeMouse%
return

; ------------------ Tray Menus ------------------ ;

MenuNULL:
return

MenuTTT:
    if bShowTip = true
    {
        bShowTip = false
        Menu TRAY, UnCheck, &Tooltip
        Tooltip
    }
    else
    {
        bShowTip = true
        Menu TRAY, Check, &Tooltip
    }
return

MenuTHW:
    if bHWrap = true
    {
        bHWrap = false
        Menu TRAY, UnCheck, &X-Wrap
    }
    else
    {
        bHWrap = true
        Menu TRAY, Check, &X-Wrap
    }

    ; Update File
    FileDelete %SettingsFile%
    FileAppend %bHWrap%'n, %SettingsFile%
    FileAppend %bVWrap%'n, %SettingsFile%
    FileAppend %PollTimeMouse%'n, %SettingsFile%
    FileAppend %PollTimeDisplay%'n, %SettingsFile%
    FileAppend 'nLine 1: Horizontal Wrapping <true|false>'nLine 2: Vertical Wrapping <true|false>'nLine 3: Mouse Poll-time <milliseconds>'nLine 4: Display configuration Poll-time <milliseconds>, %SettingsFile%
return

MenuTVW:
    if bVWrap = true
    {
        bVWrap = false
        Menu TRAY, UnCheck, &Y-Wrap
    }
    else
    {
        bVWrap = true
        Menu TRAY, Check, &Y-Wrap
    }

    ; Update File
    FileDelete %SettingsFile%
    FileAppend %bHWrap%'n, %SettingsFile%
    FileAppend %bVWrap%'n, %SettingsFile%
    FileAppend %PollTimeMouse%'n, %SettingsFile%
    FileAppend %PollTimeDisplay%'n, %SettingsFile%
    FileAppend 'nLine 1: Horizontal Wrapping <true|false>'nLine 2: Vertical Wrapping <true|false>'nLine 3: Mouse Poll-time <milliseconds>'nLine 4: Display configuration Poll-time <milliseconds>, %SettingsFile%
return

MenuINFO:
    MsgBox 262208,%AppName%: Info,%AppName% v%AppVer%'n'nCreated by Paegus ([email protected])'n'nUsing AutoHotKey v%A_AhkVersion%'n'nhttp://www.autohotkey.com
return

MenuPAUSE:
    if A_IconTip = %AppName% v%AppVer%
    {
        Menu TRAY, Icon, %A_WinDir%\system32\SHELL32.dll,110,1
        Menu TRAY, Tip, %AppName% v%AppVer%'n    -  PAUSED  -
        Menu TRAY, Check, &Pause
        Pause
    }
    else
    {
        Menu TRAY, Icon, %A_WinDir%\system32\main.cpl,,1
        Menu TRAY, Tip, %AppName% v%AppVer%
        Menu TRAY, UnCheck, &Pause
        Pause
    }
return

MenuEDIT:
    run notepad %A_WorkingDir%\%SettingsFile%
return

MenuReload:
    Reload
return

MenuQUIT:
    ExitApp 0
return

; ------------------ Core Functions ------------------ ;

ScreenUpdate:
    SysGet Monitors, MonitorCount

    iBorderLeft = 0
    iBorderRight = 0
    iBorderTop = 0
    iBorderBottom = 0
    TipString = Monitors...

    Loop, %Monitors%
    {
        SysGet Monitor, Monitor, %A_Index%

        if MonitorLeft < %iBorderLeft%
        {
            ;MsgBox %A_Index%'s Left %MonitorLeft% < %iBorderLeft%
            iBorderLeft := MonitorLeft
        }

        if MonitorRight > %iBorderRight%
        {
            ;MsgBox %A_Index%'s Right %MonitorRight% > %iBorderRight%
            iBorderRight := MonitorRight - 1
        }

        if MonitorTop < %iBorderTop%
        {
            ;MsgBox %A_Index%'s Top %MonitorTop% < %iBorderTop%
            iBorderTop := MonitorTop
        }

        if MonitorBottom > %iBorderBottom%
        {
            ;MsgBox %A_Index%'s Bottom %MonitorBottom% > %iBorderBottom%
            iBorderBottom := MonitorBottom - 1
        }

        if bShowTip = true
        {
            TipString = %TipString%'n%A_Index%: %MonitorLeft%',%MonitorTop% x %MonitorRight%',%MonitorBottom%
        }
    }
return

ScreenWrap:
    MouseGetPos PosX, PosY
    if bHWrap = true
    {
        if PosX <= %iBorderLeft%
        {
            NPosX := iBorderRight - 1
            MouseMove %NPosX%, %PosY%, 0
        }
        else if PosX >= %iBorderRight% 
        {
            NPosX := iBorderLeft + 1
            MouseMove %NPosX%, %PosY%, 0
        }
    }

    if bVWrap = true
    {
        if PosY <= %iBorderTop%
        {
            NPosY := iBorderBottom - 1
            MouseMove %PosX%, %NPosY%, 0
        }
        else if PosY >= %iBorderBottom% 
        {
            NPosY := iBorderTop + 1
            MouseMove %PosX%, %NPosY%, 0
        }
    }

    if bShowTip = true
    {
        ToolTip Boundries...'nX: %iBorderLeft% < %PosX% > %iBorderRight%'nY: %iBorderTop% < %PosY% > %iBorderBottom%'n%TipString%
    }
return

; ------------------ End ------------------ ;
    
por 13.07.2018 / 22:08
0

Sim: O departamento de TI da Universidade de Atenas (Grécia) oferece um link para um aplicativo freeware (não Open Source), Edgeless2 , que, se instalado, daria o que você deseja.

    
por 13.07.2018 / 22:19