Jump to content

Suche neue GK


Eichhorn

Recommended Posts

Hallo alle zusammen,

ich suche für meinen HTPC eine neue GK. Bisher tut eine ATI 4670 ihren Dienst darin. Diese kann aber keine BluRay in 3D wiedergeben. Ansonsten bin ich damit zufrieden. Jetzt dachte ich an eine 6670, aber irgendwie muss zu den neueren GK eine Inkompatibilität mit meinem Board herrschen. Ich nutze Voreinstellungen in Verbindung mit Hotkeys. (Frequenzumschaltung/Auflösungsumschaltung) Und genau die erstellten Voreinstellungen funktionieren bei den neueren Karten nicht. Ich habe da schon alles mögliche probiert, bis hin zum System völlig neu aufsetzten und nur den ATI Treiber installiert. Alles ohne Erfolg. Jetzt wollte ich gern mal eine NVIDIA GK probieren, nur kenne ich mich bei diesen gar nicht aus. Sie soll natürlich mit dem DVBViewer problemlos, ruckelfrei HD wiedergeben können. Wichtig wäre noch, das sie 3D Wiedergabe beherrscht. Ich habe keinen Plan, welche Grafikchips bei NVIDIA das beherrschen.

 

Bitte um eure Empfehlungen!

 

Ich weiß, es ist im TV-Kartenunterforum, aber das passte wohl am besten.

 

Gruß Eichhorn

Link to comment

Schaltest du mit dem Plugin hier im Forum die Frequenz um?

Weil das würde auch ohne die Hotkeys per winapi funktionieren.

 

Bei Nvidia hab ich leider etwas den Überblick verloren.

Würde eine kleine Karte mit 128er Speicherinterface der neusten Generation empfehlen.

Link to comment

Jo eine genauere Fehlerbeschreibung wäre nicht schlecht dann könnte man dem Problem auf die schliche kommen.

Bei mir funktionierte die Umschaltung mit der 6670 immer gut. Mit der APU mag das aber der LAV Decoder nicht besonders (BluRay).

Link to comment

Danke erst einmal für die Antworten.

Um diesen Fehler näher zu erklären (was ich auch schon alles probiert habe) muss ich etwas mehr schreiben. :glare:

In meinem System arbeitet eine 4670 von HIS auf einem älteren Board von GIGABYTE (GA-G31MX-S2). Alles funktioniert soweit bestens. Zur Auflösungsumschaltung habe ich mir 3 Profile im CCC angelegt. (720p, 1080p und 1080p/24) 720p nutze ich, wenn ich mal was im Internet suche oder sonstiges am PC mache, 1080p normal für DVBViewer und 1080p/24 für BluRay mittels TMT5. Jedes Profil hat einen Hotkey (Strg.+Shift+1) 2 und 3 natürlich. Jetzt habe ich mit AutoIT 3 exe Dateien gebastelt, welche beim Anklicken den jeweiligen benötigten Hotkey auslösen. Diese steuere ich entweder mit einer Taste auf der FB oder automatisch durch ein weiteres Script z.B. beim Starten von TMT5 und beim Beenden von TMT5 wird wieder auf 50Hz geschaltet. Klappt mit der 4670 alles wunderbar.

Jetzt gehen die Probleme los. (ich hatte den GK Wechsel übrigen vor einem Jahr auch schon mal probiert damals auch eine 6670 und eine 7750 beide gleiches Ergebnis) Nach dem Wechsel der GK konnte ich soweit das CCC usw. einwandfrei installieren. Auch die Einstellungen klappen soweit einwandfrei. Ich kann im CCC auch Profile (nennt sich dort Voreinstellungen) neu anlegen. Bei einem Anklicken des jeweiligen Profils, egal ob mit der Maus auf das Profil oder per Hotkey passiert nichts. D.h. gar nichts kann man so nicht sagen, man kann im Profil ja auch noch eine Anwendung auswählen, welche bei der Aktivierung automatisch gestartet wird. (zum Test notpad.exe) Wenn ich dieses Profil jetzt aktiviere, dann startet die notpad.exe, aber die Auflösung wird nicht umgeschaltet.

Um andere Fehlerquellen auszuschließen, hatte ich bei meinem ersten Versuch (voriges Jahr) mal Windows7 komplett neu aufgesetzt und nur den GK Treiber installiert. Auch da klappte es schon nicht. Es kann sich doch da nur um irgend eine Hardwareinkompalibilität handeln?

 

Gruß Eichhorn

Link to comment


#include <WindowsConstants.au3>

 

Global Const $DISP_CHANGE_SUCCESSFUL = 0

global Const $DISP_CHANGE_RESTART = 1 ;"Restart your computer for change display settings"

global Const $DISP_CHANGE_FAILED = -1 ;"The video driver not set a new mode"

global Const $DISP_CHANGE_BADMODE = -2 ;"Video mode not supported"

global Const $DISP_CHANGE_NOTUPDATED = -3 ;"Video mode not supported"

global Const $DISP_CHANGE_BADFLAGS = -4 ;"Bad flags"

global Const $DISP_CHANGE_BADPARAM = -5 ;"Bad parameters"

 

global Const $CDS_TEST = 0x4

global Const $CDS_UPDATEREGISTRY = 0x1

 

global Const $DM_PELSWIDTH = 0x80000

global Const $DM_PELSHEIGHT = 0x100000

global Const $DM_BITSPERPEL = 0x40000

global Const $DM_DISPLAYFREQUENCY = 0x400000

 

global Const $ENUM_CURRENT_SETTINGS = -1

global Const $HWND_BROADCAST = 0xFFFF

global Const $SPI_SETNONCLIENTMETRICS = 0x2A

 

_ScreenSetting(1920, 1080, @DesktopDepth, 50) ; => 1080p50

_ScreenSetting(1920, 1080, @DesktopDepth, 24) ; => 1080p24

_ScreenSetting(1920, 1080, @DesktopDepth, 23) ; => 1080p23

_ScreenSetting(1280, 720, @DesktopDepth, 60) ; => 720p60

 

;====================================================================================

;

;Function Name: _ScreenSetting()

;Description: Changes the screen resolution, color dept and refresh rate

;Version: 1.0

;Parameters: $iWidth - Width of the desktop screen in pixels. (horizontal resolution)

; $iHeight - Height of the desktop screen in pixels. (vertical resolution)

; $iDepth - Depth of the desktop screen in bits per pixel.

; $iRefresh - Refresh rate of the desktop screen in hertz.

;Return Value(s): On Success - Screen is adjusted

; On failure - Message with error description

;Requirement(s): Tested on AutoIt 3.2.10.0

;Autor(s): R.Gilman (a.k.a rasim); special thanks to amel27

; modified: nuts (www.autoit.de)

;====================================================================================

 

Func _ScreenSetting($iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iDepth = @DesktopDepth, $iRefresh = @DesktopRefresh)

 

Local $reterror = False

Local $DEVMODE, $DllRet

 

$DEVMODE = DllStructCreate("char dmDeviceName[32];ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;" & _

"ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;" & _

"short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;" & _

"short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;" & _

"byte dmFormName[32];dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;" & _

"dword dmDisplayFlags;dword dmDisplayFrequency")

 

$DllRet = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "dword", $ENUM_CURRENT_SETTINGS, _

"ptr", DllStructGetPtr($DEVMODE))

$DllRet = $DllRet[0]

 

If $DllRet = 0 Then

$reterror = "Unable to get graphic mode"

SetError(1, 0, 0)

Return $reterror

EndIf

 

$VGA_MAP_KEY = RegRead("HKLM\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video0")

$VGA_KEY = StringReplace($VGA_MAP_KEY, "\Registry\Machine", "HKLM")

 

RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 0)

 

DllStructSetData($DEVMODE, "dmSize", DllStructGetSize($DEVMODE))

DllStructSetData($DEVMODE, "dmPelsWidth", $iWidth)

DllStructSetData($DEVMODE, "dmPelsHeight", $iHeight)

DllStructSetData($DEVMODE, "dmBitsPerPel", $iDepth)

DllStructSetData($DEVMODE, "dmDisplayFrequency", $iRefresh)

DllStructSetData($DEVMODE, "dmFields", BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY))

 

$DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST) ; hier wird geprüft ob die Änderung angenommen wurde

$DllRet = $DllRet[0]

 

If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then ;Auswertung

$reterror = "Error: _ScreenSetting: " & $DllRet

EndIf

 

$DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY) ;hier wird die Änderung dann durchgeführt

$DllRet = $DllRet[0]

 

DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _

"int", $SPI_SETNONCLIENTMETRICS, "int", 0) ;abfeuern der WM_DISPLAYCHANGE Nachricht (Auswirkungen unklar :D)

 

RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 1)

 

$DEVMODE = ""

$DllRet = ""

 

Return $reterror

EndFunc ;==>_ScreenSetting

 

Edited by nuts
Link to comment

Das Problem im CCC ist folgendes:
Ein angelegtes Profil merkt sich das Mistding bei einem Neustart des Systems.
Bedeutet: Einstellungen vornehmen, Profil anlegen, Rechner neustarten.
Das machst du 3x, also für jedes Profil. Anschließend sollte das gehen.
Wenn du bereits Profile benannt hast nimm lieber neue Namen, die werden nicht richtig überschrieben.
Wenn du für alle Wiedergabearten den DVBViewer verwendest brauchst du das nicht, dann nimm das >Plugin< von SnoopyDog.

Link to comment

Bei dem Script verstehe ich leider nur Bahnhof :horror: Muss ich die 3au dann mehrfach starten???

 

@Tüftler

Ich nutze zur BluRay Wiedergabe TMT5. Bei der 4670 hat sich das CCC das Profil aber gleich gemerkt. Die 720p Auflösung nutze ich, wenn ich mal irgend was Anderes am PC mache. Wenn ich bei TMT5 auf "automatische Frequenzumschaltung" gehe, dann wird sie beim Starten einer BluRay auch brav auf 24Hz umgeschaltet. Wenn ich aber TMT5 schließe, dann bleibt es bei den 24Hz. Es wäre schön, wenn das dann wieder zurück schalten würde. Das mit dem Neustart werde ich noch einmal probieren.

Link to comment

Bei dem Script verstehe ich leider nur Bahnhof :horror: Muss ich die 3au dann mehrfach starten???

Du könntest den Aufruf der Funktion in deine schon vorhandenen Skripte einbinden.

Anstatt den Hotkey aufzurufen eben z.B.

_ScreenSetting(1920, 1080, @DesktopDepth, 50)  ; => 1080p50
P.S. Poste doch mal eines deiner Skripte, dann mach ich ein Beispiel. Edited by nuts
Link to comment

einmal das:

 

 

$read = IniRead(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 1)
Switch $read
Case 1
Send("^+{4}")
IniWrite(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 2)
Case 2
Send("^+{2}")
IniWrite(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 1)
EndSwitch

Edited by Eichhorn
Link to comment

Das erste Skript würde dann so aussehen:

#include <WindowsConstants.au3>

Global Const $DISP_CHANGE_SUCCESSFUL = 0
global Const $DISP_CHANGE_RESTART = 1 ;"Restart your computer for change display settings"
global Const $DISP_CHANGE_FAILED = -1 ;"The video driver not set a new mode"
global Const $DISP_CHANGE_BADMODE = -2 ;"Video mode not supported"
global Const $DISP_CHANGE_NOTUPDATED = -3 ;"Video mode not supported"
global Const $DISP_CHANGE_BADFLAGS = -4 ;"Bad flags"
global Const $DISP_CHANGE_BADPARAM = -5 ;"Bad parameters"

global Const $CDS_TEST = 0x4
global Const $CDS_UPDATEREGISTRY = 0x1

global Const $DM_PELSWIDTH = 0x80000
global Const $DM_PELSHEIGHT = 0x100000
global Const $DM_BITSPERPEL = 0x40000
global Const $DM_DISPLAYFREQUENCY = 0x400000

global Const $ENUM_CURRENT_SETTINGS = -1
global Const $HWND_BROADCAST = 0xFFFF
global Const $SPI_SETNONCLIENTMETRICS = 0x2A


$read = IniRead(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 1)
Switch $read
    Case 1
        _ScreenSetting(1920, 1080, @DesktopDepth, 24) ;1080p24
		; _ScreenSetting(1920, 1080, @DesktopDepth, 23) ; oder 1080p23 => 23,976hz für Blurays
        IniWrite(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 2)
    Case 2
         _ScreenSetting(1920, 1080, @DesktopDepth, 50) ;1080p50
        IniWrite(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 1)
EndSwitch


;====================================================================================
;
;Function Name:  _ScreenSetting()
;Description:      Changes the screen resolution, color dept and refresh rate
;Version:         1.0
;Parameters:        $iWidth   - Width of the desktop screen in pixels. (horizontal resolution)
;               $iHeight  - Height of the desktop screen in pixels. (vertical resolution)
;               $iDepth   - Depth of the desktop screen in bits per pixel.
;               $iRefresh - Refresh rate of the desktop screen in hertz.
;Return Value(s):   On Success - Screen is adjusted
;               On failure - Message with error description
;Requirement(s):    Tested on AutoIt 3.2.10.0
;Autor(s):      R.Gilman (a.k.a rasim); special thanks to amel27
;               modified: nuts (www.autoit.de)
;====================================================================================

Func _ScreenSetting($iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iDepth = @DesktopDepth, $iRefresh = @DesktopRefresh)

	Local $reterror = False
	Local $DEVMODE, $DllRet

	$DEVMODE = DllStructCreate("char dmDeviceName[32];ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;" & _
			"ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;" & _
			"short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;" & _
			"short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;" & _
			"byte dmFormName[32];dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;" & _
			"dword dmDisplayFlags;dword dmDisplayFrequency")

	$DllRet = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "dword", $ENUM_CURRENT_SETTINGS, _
			"ptr", DllStructGetPtr($DEVMODE))
	$DllRet = $DllRet[0]

	If $DllRet = 0 Then
		$reterror = "Unable to get graphic mode"
		SetError(1, 0, 0)
		Return $reterror
	EndIf

	$VGA_MAP_KEY = RegRead("HKLM\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video0")
	$VGA_KEY = StringReplace($VGA_MAP_KEY, "\Registry\Machine", "HKLM")

	RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 0)

	DllStructSetData($DEVMODE, "dmSize", DllStructGetSize($DEVMODE))
	DllStructSetData($DEVMODE, "dmPelsWidth", $iWidth)
	DllStructSetData($DEVMODE, "dmPelsHeight", $iHeight)
	DllStructSetData($DEVMODE, "dmBitsPerPel", $iDepth)
	DllStructSetData($DEVMODE, "dmDisplayFrequency", $iRefresh)
	DllStructSetData($DEVMODE, "dmFields", BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY))

	$DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST) ; hier wird geprüft ob die Änderung angenommen wurde
	$DllRet = $DllRet[0]

	If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then ;Auswertung
		$reterror = "Error: _ScreenSetting: " & $DllRet
	EndIf

	$DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY) ;hier wird die Änderung dann durchgeführt
	$DllRet = $DllRet[0]

	DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
			"int", $SPI_SETNONCLIENTMETRICS, "int", 0) ;abfeuern der WM_DISPLAYCHANGE Nachricht (Auswirkungen unklar )

	RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 1)

	$DEVMODE = ""
	$DllRet = ""

	Return $reterror
EndFunc   ;==>_ScreenSetting
Link to comment

Sooo viel ist nur das 1. Script???? Das 2. und 3. sind nicht so nötig, habe aber in der Hektik 2 vergessen:

 

 

;TotalMedia Theatre Focus setzen
WinActivate("TotalMedia Theatre 6")

Sleep(1000)

; Wiedergabe stoppen
Send("{o}")

; TotalMedia Theatre beenden
ProcessClose("uMCEPlayer6.exe")
ProcessClose("uTotalMediaTheatre6.exe")

Sleep(1000)

; Auflösung auf 50Hz stellen
send("^+2"); = CTRG + SHIFT +2

; J.River starten
Run("C:\Program Files\J River\Media Center 19\media center 19.exe")

Exit

 

 

 

Sleep(500)
ProcessClose("Media Center 19.exe")
Sleep(500)

; Auflösung auf 24Hz stellen
Send("^+4"); = CTRG + SHIFT +4 (im Profilmanager entsprechend anlegen)

Sleep(1000)

; TotalMedia Theatre starten
Run("C:\Program Files\ArcSoft\TotalMedia Theatre 6\uMCEPlayer6.exe", "", @SW_MAXIMIZE)

Edited by Eichhorn
Link to comment

@Tüftler

Das mit dem Neustart hat leider keine Verbesserung gebracht.

 

@nuts

Suuuper, das 1. Script von Dir geht erst einmal super. Kannst Du mir die Anderen noch machen?

 

Gruß Eichhorn

Link to comment

@nuts

Kannst Du mir die beiden letzten Scipte noch anpassen? Einfach die Hotkey Zeie gegen _ScreenSetting(1920, 1080, @DesktopDepth, 50) ; => 1080p50 autausche geht nicht. (natürlich mit 24Hz in dem Fall) Ich habe auch schon versuch Dein Script anzupassen, aber irgendwie wird es dann nicht korrekt abgearbeitet oder ich bekomme Fehlermeldungen.

Kannst Du mir da bitte noch einmal helfen?

 

Gruß Eichhorn

Link to comment

Irgendwie war es wohl eher meine eigene Blöödheit, dass die Scripte nicht funktionierten. Ich hatte immer mal was vergessen oder halt einfach was falsches eingetragen. Jetzt sehen sie so aus:

#include <WindowsConstants.au3>
 
Global Const $DISP_CHANGE_SUCCESSFUL = 0
global Const $DISP_CHANGE_RESTART = 1 ;"Restart your computer for change display settings"
global Const $DISP_CHANGE_FAILED = -1 ;"The video driver not set a new mode"
global Const $DISP_CHANGE_BADMODE = -2 ;"Video mode not supported"
global Const $DISP_CHANGE_NOTUPDATED = -3 ;"Video mode not supported"
global Const $DISP_CHANGE_BADFLAGS = -4 ;"Bad flags"
global Const $DISP_CHANGE_BADPARAM = -5 ;"Bad parameters"
 
global Const $CDS_TEST = 0x4
global Const $CDS_UPDATEREGISTRY = 0x1
 
global Const $DM_PELSWIDTH = 0x80000
global Const $DM_PELSHEIGHT = 0x100000
global Const $DM_BITSPERPEL = 0x40000
global Const $DM_DISPLAYFREQUENCY = 0x400000
 
global Const $ENUM_CURRENT_SETTINGS = -1
global Const $HWND_BROADCAST = 0xFFFF
global Const $SPI_SETNONCLIENTMETRICS = 0x2A
 
ProcessClose("Media Center 19.exe")
Sleep(500)

; Auflösung auf 24Hz stellen
 _ScreenSetting(1920, 1080, @DesktopDepth, 24) ;1080p24
; _ScreenSetting(1920, 1080, @DesktopDepth, 23) ; oder 1080p23 => 23,976hz für Blurays

Sleep(1000)

; TotalMedia Theatre starten
Run("C:\Program Files\ArcSoft\TotalMedia Theatre 6\uMCEPlayer6.exe", "", @SW_MAXIMIZE)

 
;====================================================================================
;
;Function Name:  _ScreenSetting()
;Description:      Changes the screen resolution, color dept and refresh rate
;Version:         1.0
;Parameters:        $iWidth   - Width of the desktop screen in pixels. (horizontal resolution)
;               $iHeight  - Height of the desktop screen in pixels. (vertical resolution)
;               $iDepth   - Depth of the desktop screen in bits per pixel.
;               $iRefresh - Refresh rate of the desktop screen in hertz.
;Return Value(s):   On Success - Screen is adjusted
;               On failure - Message with error description
;Requirement(s):    Tested on AutoIt 3.2.10.0
;Autor(s):      R.Gilman (a.k.a rasim); special thanks to amel27
;               modified: nuts (www.autoit.de)
;====================================================================================
 
Func _ScreenSetting($iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iDepth = @DesktopDepth, $iRefresh = @DesktopRefresh)
 
    Local $reterror = False
    Local $DEVMODE, $DllRet
 
    $DEVMODE = DllStructCreate("char dmDeviceName[32];ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;" & _
            "ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;" & _
            "short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;" & _
            "short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;" & _
            "byte dmFormName[32];dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;" & _
            "dword dmDisplayFlags;dword dmDisplayFrequency")
 
    $DllRet = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "dword", $ENUM_CURRENT_SETTINGS, _
            "ptr", DllStructGetPtr($DEVMODE))
    $DllRet = $DllRet[0]
 
    If $DllRet = 0 Then
        $reterror = "Unable to get graphic mode"
        SetError(1, 0, 0)
        Return $reterror
    EndIf
 
    $VGA_MAP_KEY = RegRead("HKLM\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video0")
    $VGA_KEY = StringReplace($VGA_MAP_KEY, "\Registry\Machine", "HKLM")
 
    RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 0)
 
    DllStructSetData($DEVMODE, "dmSize", DllStructGetSize($DEVMODE))
    DllStructSetData($DEVMODE, "dmPelsWidth", $iWidth)
    DllStructSetData($DEVMODE, "dmPelsHeight", $iHeight)
    DllStructSetData($DEVMODE, "dmBitsPerPel", $iDepth)
    DllStructSetData($DEVMODE, "dmDisplayFrequency", $iRefresh)
    DllStructSetData($DEVMODE, "dmFields", BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY))
 
    $DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST) ; hier wird geprüft ob die Änderung angenommen wurde
    $DllRet = $DllRet[0]
 
    If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then ;Auswertung
        $reterror = "Error: _ScreenSetting: " & $DllRet
    EndIf
 
    $DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY) ;hier wird die Änderung dann durchgeführt
    $DllRet = $DllRet[0]
 
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
            "int", $SPI_SETNONCLIENTMETRICS, "int", 0) ;abfeuern der WM_DISPLAYCHANGE Nachricht (Auswirkungen unklar )
 
    RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 1)
 
    $DEVMODE = ""
    $DllRet = ""
 
    Return $reterror
EndFunc   ;==>_ScreenSetting

und das zweite Script:

#include <WindowsConstants.au3>
 
Global Const $DISP_CHANGE_SUCCESSFUL = 0
global Const $DISP_CHANGE_RESTART = 1 ;"Restart your computer for change display settings"
global Const $DISP_CHANGE_FAILED = -1 ;"The video driver not set a new mode"
global Const $DISP_CHANGE_BADMODE = -2 ;"Video mode not supported"
global Const $DISP_CHANGE_NOTUPDATED = -3 ;"Video mode not supported"
global Const $DISP_CHANGE_BADFLAGS = -4 ;"Bad flags"
global Const $DISP_CHANGE_BADPARAM = -5 ;"Bad parameters"
 
global Const $CDS_TEST = 0x4
global Const $CDS_UPDATEREGISTRY = 0x1
 
global Const $DM_PELSWIDTH = 0x80000
global Const $DM_PELSHEIGHT = 0x100000
global Const $DM_BITSPERPEL = 0x40000
global Const $DM_DISPLAYFREQUENCY = 0x400000
 
global Const $ENUM_CURRENT_SETTINGS = -1
global Const $HWND_BROADCAST = 0xFFFF
global Const $SPI_SETNONCLIENTMETRICS = 0x2A
 
;TotalMedia Theatre Focus setzen
WinActivate("TotalMedia Theatre 6")

Sleep(1000)

; Wiedergabe stoppen
Send("{o}")

; TotalMedia Theatre beenden
ProcessClose("uMCEPlayer6.exe")
ProcessClose("uTotalMediaTheatre6.exe")

Sleep(1000)

; Auflösung auf 50Hz stellen
_ScreenSetting(1920, 1080, @DesktopDepth, 50) ;1080p50

; J.River starten
Run("C:\Program Files\J River\Media Center 19\media center 19.exe")

 
;====================================================================================
;
;Function Name:  _ScreenSetting()
;Description:      Changes the screen resolution, color dept and refresh rate
;Version:         1.0
;Parameters:        $iWidth   - Width of the desktop screen in pixels. (horizontal resolution)
;               $iHeight  - Height of the desktop screen in pixels. (vertical resolution)
;               $iDepth   - Depth of the desktop screen in bits per pixel.
;               $iRefresh - Refresh rate of the desktop screen in hertz.
;Return Value(s):   On Success - Screen is adjusted
;               On failure - Message with error description
;Requirement(s):    Tested on AutoIt 3.2.10.0
;Autor(s):      R.Gilman (a.k.a rasim); special thanks to amel27
;               modified: nuts (www.autoit.de)
;====================================================================================
 
Func _ScreenSetting($iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iDepth = @DesktopDepth, $iRefresh = @DesktopRefresh)
 
    Local $reterror = False
    Local $DEVMODE, $DllRet
 
    $DEVMODE = DllStructCreate("char dmDeviceName[32];ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;" & _
            "ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;" & _
            "short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;" & _
            "short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;" & _
            "byte dmFormName[32];dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;" & _
            "dword dmDisplayFlags;dword dmDisplayFrequency")
 
    $DllRet = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "dword", $ENUM_CURRENT_SETTINGS, _
            "ptr", DllStructGetPtr($DEVMODE))
    $DllRet = $DllRet[0]
 
    If $DllRet = 0 Then
        $reterror = "Unable to get graphic mode"
        SetError(1, 0, 0)
        Return $reterror
    EndIf
 
    $VGA_MAP_KEY = RegRead("HKLM\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video0")
    $VGA_KEY = StringReplace($VGA_MAP_KEY, "\Registry\Machine", "HKLM")
 
    RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 0)
 
    DllStructSetData($DEVMODE, "dmSize", DllStructGetSize($DEVMODE))
    DllStructSetData($DEVMODE, "dmPelsWidth", $iWidth)
    DllStructSetData($DEVMODE, "dmPelsHeight", $iHeight)
    DllStructSetData($DEVMODE, "dmBitsPerPel", $iDepth)
    DllStructSetData($DEVMODE, "dmDisplayFrequency", $iRefresh)
    DllStructSetData($DEVMODE, "dmFields", BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY))
 
    $DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST) ; hier wird geprüft ob die Änderung angenommen wurde
    $DllRet = $DllRet[0]
 
    If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then ;Auswertung
        $reterror = "Error: _ScreenSetting: " & $DllRet
    EndIf
 
    $DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY) ;hier wird die Änderung dann durchgeführt
    $DllRet = $DllRet[0]
 
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
            "int", $SPI_SETNONCLIENTMETRICS, "int", 0) ;abfeuern der WM_DISPLAYCHANGE Nachricht (Auswirkungen unklar )
 
    RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 1)
 
    $DEVMODE = ""
    $DllRet = ""
 
    Return $reterror
EndFunc   ;==>_ScreenSetting

Beide funktionieren soweit. Ob da jetzt viel zu viel drin steht??? :innocent:

Link to comment
  • 2 years later...

Hallo Leute, ich muß hier diesen uralten Thread noch einmal vor holen. Ich habe mein System vor einigen Wochen auf Win 10 geupdatet.

Bis zu diesem Zeitpunkt funktionierte das Script zum Umschalten der Auflösung und Frequenz einwandfei. Jetzt unter Win10 habe ich das Problem, dass das Script an irgend einer Stelle pausiert und nicht weiter abgearbeitet wird. Es hängt als Icon in der Taskleiste und es steht Pause da. Auch wenn ich dann auf Exit klicke wird es nicht beendet. Das ganze passiert aber nicht immer. Ich habe aber noch keine Regelmäßigkeit heraus gefunden. Das ganze muß vor dem erstellen der ini Datei passieren, da diese nicht geändert wird. Kann mir da jemand helfen? Hier noch einmal das Script.

 

 

#include <WindowsConstants.au3>

Global Const $DISP_CHANGE_SUCCESSFUL = 0
global Const $DISP_CHANGE_RESTART = 1 ;"Restart your computer for change display settings"
global Const $DISP_CHANGE_FAILED = -1 ;"The video driver not set a new mode"
global Const $DISP_CHANGE_BADMODE = -2 ;"Video mode not supported"
global Const $DISP_CHANGE_NOTUPDATED = -3 ;"Video mode not supported"
global Const $DISP_CHANGE_BADFLAGS = -4 ;"Bad flags"
global Const $DISP_CHANGE_BADPARAM = -5 ;"Bad parameters"

global Const $CDS_TEST = 0x4
global Const $CDS_UPDATEREGISTRY = 0x1

global Const $DM_PELSWIDTH = 0x80000
global Const $DM_PELSHEIGHT = 0x100000
global Const $DM_BITSPERPEL = 0x40000
global Const $DM_DISPLAYFREQUENCY = 0x400000

global Const $ENUM_CURRENT_SETTINGS = -1
global Const $HWND_BROADCAST = 0xFFFF
global Const $SPI_SETNONCLIENTMETRICS = 0x2A


$read = IniRead(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 1)
Switch $read
Case 1
_ScreenSetting(1920, 1080, @DesktopDepth, 24) ;1080p24
; _ScreenSetting(1920, 1080, @DesktopDepth, 23) ; oder 1080p23 => 23,976hz für Blurays
IniWrite(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 2)
Case 2
_ScreenSetting(1920, 1080, @DesktopDepth, 50) ;1080p50
IniWrite(@ScriptDir & "\Umschalt.ini", "Frequenzumschaltung", "NextMode", 1)
EndSwitch


;====================================================================================
;
;Function Name: _ScreenSetting()
;Description: Changes the screen resolution, color dept and refresh rate
;Version: 1.0
;Parameters: $iWidth - Width of the desktop screen in pixels. (horizontal resolution)
; $iHeight - Height of the desktop screen in pixels. (vertical resolution)
; $iDepth - Depth of the desktop screen in bits per pixel.
; $iRefresh - Refresh rate of the desktop screen in hertz.
;Return Value(s): On Success - Screen is adjusted
; On failure - Message with error description
;Requirement(s): Tested on AutoIt 3.2.10.0
;Autor(s): R.Gilman (a.k.a rasim); special thanks to amel27
; modified: nuts (www.autoit.de)
;====================================================================================

Func _ScreenSetting($iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iDepth = @DesktopDepth, $iRefresh = @DesktopRefresh)

Local $reterror = False
Local $DEVMODE, $DllRet

$DEVMODE = DllStructCreate("char dmDeviceName[32];ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;" & _
"ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;" & _
"short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;" & _
"short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;" & _
"byte dmFormName[32];dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;" & _
"dword dmDisplayFlags;dword dmDisplayFrequency")

$DllRet = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "dword", $ENUM_CURRENT_SETTINGS, _
"ptr", DllStructGetPtr($DEVMODE))
$DllRet = $DllRet[0]

If $DllRet = 0 Then
$reterror = "Unable to get graphic mode"
SetError(1, 0, 0)
Return $reterror
EndIf

$VGA_MAP_KEY = RegRead("HKLM\HARDWARE\DEVICEMAP\VIDEO", "\Device\Video0")
$VGA_KEY = StringReplace($VGA_MAP_KEY, "\Registry\Machine", "HKLM")

RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 0)

DllStructSetData($DEVMODE, "dmSize", DllStructGetSize($DEVMODE))
DllStructSetData($DEVMODE, "dmPelsWidth", $iWidth)
DllStructSetData($DEVMODE, "dmPelsHeight", $iHeight)
DllStructSetData($DEVMODE, "dmBitsPerPel", $iDepth)
DllStructSetData($DEVMODE, "dmDisplayFrequency", $iRefresh)
DllStructSetData($DEVMODE, "dmFields", BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY))

$DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST) ; hier wird geprüft ob die Änderung angenommen wurde
$DllRet = $DllRet[0]

If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then ;Auswertung
$reterror = "Error: _ScreenSetting: " & $DllRet
EndIf

$DllRet = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY) ;hier wird die Änderung dann durchgeführt
$DllRet = $DllRet[0]

DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
"int", $SPI_SETNONCLIENTMETRICS, "int", 0) ;abfeuern der WM_DISPLAYCHANGE Nachricht (Auswirkungen unklar :D)

RegWrite($VGA_KEY, "PruningMode", "REG_DWORD", 1)

$DEVMODE = ""
$DllRet = ""

Return $reterror
EndFunc ;==>_ScreenSetting

 

 

Gruß Eichhorn

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...