Nvidia surround wisselen naar niet-surround

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online
Sinds een tijdje heb ik 4 monitoren op mijn NVidia 670 aangesloten. 1 ervan is een monitor voor alledaags normaal gebruik. De andere 3 worden alleen gebruikt voor mijn race opstelling.

De 3 monitoren zijn verbonden aan de displayport, hdmi en dvi-d poort van de 670 kaart.
Daarnaast is er op de DVI-I poort de alledaagse monitor.

Het probleem is dat ik graag zou kunnen wisselen tussen het gebruik van de surround set en de enkele monitor. Ik heb uiteraard gezocht of ik hierin niet alleen ben, maar de enige topics die ik erover tegenkom gaan over het wisselen tussen surround en 1 monitor. Dit werkt, en kan bereikt worden met (winkey) + P. Als je daar tussen rommelt kan je vrij aardig wisselen tussen de surround set en 1 van de monitoren uit de set.

Wat ik wil kan hier dus niet mee, ik wil wisselen naar een monitor buiten de surround set, wel op dezelfde videokaart. Wat ik ook geprobeerd heb is om alle 4 de monitoren actief te hebben, maar dan kan je op de enkele monitor niet gamen. Alle fullscreen/gaming gerelateerde zaken worden over de surround set heen geforceerd.

Ook heb ik gelezen over UltraMon, daar zou je met presets kunnen werken. Dit werkt in principe voor normale extended desktops, maar niet voor surround. Want wat er nu gebeurd is dat UltraMon de surround set als 1 enkele monitor ziet. Daar profielen voor aanmaken kan, maar zodra je tussen je profielen gaat wisselen werkt het niet meer goed en is de surround set ook vaak verbroken.

Daarbij komt nog dat de setup bij mij zodanig is dat ik de 3 monitoren in een andere ruimte heb staan als de enkele monitor. Dus al zou de oplossing zijn, alle 4 monitoren actief, zou dat niet heel handig zijn ivm een startbalk, of deze zou dubbel uit te voeren moeten zijn.


[edit]Voor de volledigheid wilde ik hierop terugkomen, want ik heb het inmiddels werkend met windows+p[/edit]

Waarschijnlijk heb ik tijdens de eerste tijden vaak de verkeerde optie gebruikt tijdens het switchen tussen de surround monitors en de losse monitor. De losse monitor zit nu onder de "Projector Only" optie van de Win+P, de surround set zit onder "PC Only". Als ik een van de twee andere opties kies, ben ik alles kwijt en kan ik opnieuw de surround opzetten.

Het komt er dus nu wel op neer dat dit werkt, en dusdanig goed dat ik niet langer kabels hoef te wisselen of surround steeds hoef in te stellen.


edit:
Wederom om hier op terug te komen, na een reinstall van Windows werkte m'n truukje niet meer, en het leek op geen mogelijkheid weer terug te komen


Kortom, het was tijd om wat andere dingen uit te gaan zoeken. Allereerst ben ik met NVapi aan de slag gegaan. Dit leek erg veelbelovend, waarschijnlijk gaat dit in de toekomst ook wel een keer werken. Maar het probleem is dat de enumeratie functie die beschikbare resoluties moet teruggeven bij mij volledig leeg blijft. Dat was dus op korte termijn ook een no-go om dit euvel te fixen. Om toch misschien hier nog wat feedback op te krijgen, hierbij de gebruikte code:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
NvAPI_Status retval = NvAPI_Initialize();
NV_MOSAIC_SUPPORTED_TOPO_INFO topoInfo;

    topoInfo.version = NVAPI_MOSAIC_SUPPORTED_TOPO_INFO_VER;

    retval = NvAPI_Mosaic_GetSupportedTopoInfo(&topoInfo, NV_MOSAIC_TOPO_TYPE_BASIC);

    if(retval != NVAPI_OK) {
        printhalt("Something went wrong while fetching MOSAIC info\n");
        return -1;
    }

    if(topoInfo.topoBriefsCount > 0 && topoInfo.displaySettingsCount > 0) {
        NV_MOSAIC_TOPO_GROUP group;
        group.version = NVAPI_MOSAIC_TOPO_GROUP_VER;

        retval = NvAPI_Mosaic_GetTopoGroup(&topoInfo.topoBriefs[0], &group);
        
        if(retval != NVAPI_OK) {
            printhalt("Something went wrong while fetching MOSAIC group\n");
            return -1;
        }

        retval = NvAPI_Mosaic_SetCurrentTopo(&topoInfo.topoBriefs[0], &topoInfo.displaySettings[0], 0, 0, 1);

        if(retval != NVAPI_OK) {
            printhalt("Something went wrong while activating MOSAIC topo\n");
            return -1;
        }

    } else {
        printhalt("No available surround modes found, exiting\n");
        return 0;
    }


printhalt is een functie van mezelf die print en pause aanroept zodat de commandline niet sluit (makkelijker testen vanuit visual studio) Het probleem hierbij is dus dat topoInfo.displaySettingsCount en topoInfo.displaySettings volledig leeg blijven. Dus kom ik nooit zover om een surround set te activeren. Wanneer ik zelf een displaysetting vul met volledige data van mijn surround opzet en daarmee de NvAPI_Mosaic_SetCurrentTopo functie aanroep resulteerd dat ook in niks.


Omdat dit dus niet werkt... ben ik gaan kijken naar macro's en wel met het gratis tooltje "AutoHotkey". Hier had ik al wel wat ervaring mee en had wel het idee dat het ermee moest kunnen. Situatie is verder onveranderd, ik heb een losse monitor en ik heb een setup van 3 monitoren die af en toe in surround gebruikt worden. Daar wil ik tussen switchen.

Hierbij het script dat ik er nu voor gebruik:
met Win+O schakel ik nu naar m'n surround omgeving
met Win+i schakel ik weer terug naar de enkele monitor (kantoor)

Er zitten wat "vieze" dingen in zoals het killen van de cpl, dit heb ik gedaan omdat soms na het switchen het cpl process niet netjes sloot met een WinClose of WinWaitClose. En wanneer er nog een cpl process draait wil een 2e gewoonweg niet opstarten. Dus dan maar killen...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
; go to "Surround" use
#o::
Runwait, taskkill /im nvcplui.exe /f
Run "C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe"
WinWait NVIDIA Control Panel
WinActivate

; click on "Configure Surround, PhysX"
ControlClick, Configure Surround, NVIDIA Control Panel,,,,

; wait & click on "Span &displays with Surround"
WinWait NVIDIA Control Panel, Span &displays with Surround
ControlClick, Span &displays with Surround, NVIDIA Control Panel,,,,

; wait & click on "Apply"
WinWait NVIDIA Control Panel, Apply Bar
WinWait NVIDIA Control Panel, Apply
ControlClick, &Apply, NVIDIA Control Panel,,,,

WinWait Apply Changes - Surround
; in new surround wizard window
ControlClick, &Apply, Apply Changes - Surround,,,,

WinWait Apply Changes - Surround, Next
; in surround wizard window
ControlClick, Cancel, Apply Changes - Surround,,,,

; close the nvidia control panel
WinWait NVIDIA Control Panel, Span &displays with Surround
Runwait, taskkill /im nvcplui.exe /f

return


; go to single screen use (not part of surround)
#i::
; Startup nvidia control panel
Runwait, taskkill /im nvcplui.exe /f
Run "C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe"
WinWait NVIDIA Control Panel
WinActivate

; click on "Configure Surround, PhysX"
ControlClick, Configure Surround, NVIDIA Control Panel,,,,

; wait & click on "Span &displays with Surround"
WinWait NVIDIA Control Panel, Span &displays with Surround
ControlClick, Span &displays with Surround, NVIDIA Control Panel,,,,

; wait & click on "Apply"
WinWait NVIDIA Control Panel, Apply Bar
WinWait NVIDIA Control Panel, Apply
ControlClick, &Apply, NVIDIA Control Panel,,,,

; Some much needed time to allow disabling surround
Sleep 5000

; switch to correct monitor ("projector" in this case)
Send {LWin Down}
send p
send p
send p
send p
Send {LWin Up}

; close Control panel
WinWait NVIDIA Control Panel, Span &displays with Surround
Runwait, taskkill /im nvcplui.exe /f


return

[ Voor 66% gewijzigd door DirkT op 15-07-2013 15:29 . Reden: Toch werkend gekregen ]

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!