NVIDIA nTune GPU-FanSpeed v1.0.3

  • Hi,

    habe mal eben ein Skript geschrieben, dass es ermöglicht die GPU-Lüftergeschwindigkeit einer NVIDIA Grafikkarte mittels der Software nTune zu setzen.
    Es funktioniert wie folgt:
    Der erste Aufruf durch z.B.: nTuneFanSpeed.exe 65 setzt die GPU-Lüftergeschwindigkeit auf 65%, der zweite setzt sie wieder auf automatisch (Volllast).

    BENUTZT DAS SKRIPT AUF EURE EIGENE GEFAHR! EINE ZU NIEDRIGE LÜFTERGESCHWINDIGKEIT KANN ZU EINER ÜBERHITZUNG DER GPU UND SOGAR ZU EINER DEFEKTEN GRAFIKKARTE FÜHREN!!!

    Ich empfehle im Desktopbetrieb minimale Werte um die 60%. Zum Spielen sollte man das Skript erneut ausführen, damit der Lüfter wieder mit 100% arbeitet.

    Hier der SourceCode (v1.0.3:(

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\..\icons\nTuneService.ico
    #AutoIt3Wrapper_Outfile=..\release\nTuneFanSpeed.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Description=Sets the GPU fan speed of a NVIDIA videocard.
    #AutoIt3Wrapper_Res_Fileversion=1.0.3.0
    #AutoIt3Wrapper_Res_LegalCopyright=teh_hahn
    #AutoIt3Wrapper_Au3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #Tidy_Parameters=/pr /tc 0
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ;===============================================================================
    ; Script Name.......: NVIDIA nTune GPU-FanSpeed
    ; Description.......: Sets the GPU fan speed of a NVIDIA videocard.
    ; Version...........: 1.0.3
    ; Change Date.......: 2008-06-30
    ; AutoIt Version....: 3.2.12.1
    ;
    ; Script File(s)....: nTuneFanSpeed.au3 - This script.
    ; Requirements(s)...: #include <GuiSlider.au3>
    ; #include <Misc.au3>
    ; #include "VarsConvs.au3"
    ; Exit Value(s).....: 0 - Application exited successful.
    ; 1 - Wrong number of parameters specified.
    ; 2 - <fan speed> is not an integer between 0 and 100.
    ; 3 - NVIDIA nTune is not installed on this system.
    ; 4 - The NVIDIA software may have an unsupported language version.
    ; 5 - There is no NVIDIA driver installed on this system.
    ; 6 - Application is already running.
    ;
    ; Author(s).........: teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    ; Company...........: None
    ; URL...............: None
    ; Note(s)...........: - TO USE THIS SCRIPT IN YOUR OWN SCRIPT(S), ASK FOR MY PERMISSION FIRST!
    ; - USE AT OWN RISK! SETTING THE GPU FAN SPEED TOO LOW CAN DAMAGE OR DESTROY YOUR VIDEO CARD!
    ;===============================================================================
    #include <GuiSlider.au3>
    #include "..\..\..\lib\AutoIt.au3"
    #include "..\..\..\lib\Dialogs.au3"
    #include "..\..\..\lib\VarsConvs.au3"

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

    main()

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

    Func OnAutoItStart()
    _AutoItRunOnce(6)
    Opt("MustDeclareVars", 1)
    EndFunc ;==>OnAutoItStart

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

    Func main()
    Local Const $S_APPTITLE = "NVIDIA nTune GPU-FanSpeed v1.0.3"
    Local Const $S_WINTITLE = "NVIDIA Systemsteuerung"
    Local Const $I_SLEEP = 2500
    Local $i_perc = 100

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

    If Not $cmdline[0] Then _MsgBoxOnExit(262208, "Syntax for " & $S_APPTITLE, _
    @ScriptName & " [<fan speed>]" & @CR & @CR & _
    "<fan speed> -- Specifies the target speed of the GPU fan in percent.", 0, 0, 1)

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

    If Not StringIsDigit($cmdline[1]) Or Not _IsPercent($cmdline[1]) Then _MsgBoxOnExit(48, $S_WINTITLE, "WARNING: <fan speed> must be an integer between 0 and 100!", 0, 0, 2)
    $i_perc = $cmdline[1]

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

    If Not WinExists($S_WINTITLE) Then
    If Not Run(@ProgramFilesDir & "\NVIDIA nTune Performance Application\Win64\nvCplUI.exe", "", @SW_MINIMIZE) Then _MsgBoxOnExit(48, $S_APPTITLE, "Warning: There is possibly no NVIDIA driver installed on this system!", 0, 0, 5)
    Else
    WinActivate($S_WINTITLE)
    EndIf

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

    If Not WinWait($S_WINTITLE, "", $I_SLEEP) Then _MsgBoxOnExit(16, $S_APPTITLE, "Error: The NVIDIA software may have an unsupported language version!", 0, 0, 4)
    WinSetTrans($S_WINTITLE, "", 0)

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

    Do
    Sleep(50)
    Until BitAND(WinGetState($S_WINTITLE), 2)
    Sleep($I_SLEEP)

    For $i = 1 To 99
    If ControlGetText($S_WINTITLE, "", "[CLASS:TaskLink32; INSTANCE:" & $i & "]") = "GPU-Einstellungen ändern" Then
    ControlClick($S_WINTITLE, "", "[CLASS:TaskLink32; INSTANCE:" & $i & "]")
    _nTuneGPUSetFanSpeed($i_perc)
    WinClose($S_WINTITLE)
    If WinExists("Änderungen übernehmen") Then ControlClick("Änderungen übernehmen", "", 6)
    Exit
    EndIf
    Next
    _MsgBoxOnExit(16, $S_APPTITLE, "Error: Could not determine the correct TaskLink!", 0, 0, 3)
    EndFunc ;==>main

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

    Func _nTuneGPUSetFanSpeed(Const $I_SPEED)
    Local Const $S_WINTITLE = "NVIDIA Systemsteuerung"
    Local Const $S_WINTEXT = "GPU-Lüftereinstellungen"
    Local $i_ctrlid = 393

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

    If ControlCommand($S_WINTITLE, $S_WINTEXT, $i_ctrlid, "IsChecked") Then $i_ctrlid += 1
    ControlClick($S_WINTITLE, $S_WINTEXT, $i_ctrlid)

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

    If $i_ctrlid = 394 Then
    _GUICtrlSlider_SetPos(ControlGetHandle($S_WINTITLE, "", 365), $I_SPEED)
    ControlSend($S_WINTITLE, $S_WINTEXT, 365, "{UP}{DOWN}")
    ControlSend($S_WINTITLE, $S_WINTEXT, 1021, "!b")
    EndIf

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

    Return 1
    EndFunc ;==>_nTuneGPUSetFanSpeed

    [/autoit]


    Wäre schön, wenn jemand, der die englische Version von NVIDIA nTune nutzt, mir die entsprechenden WinTitles und WinTexts schicken könnte, damit das Tool auch dort funktioniert! Im Anhang befindet sich die kompilierte EXE in der Version 1.0.3!

    UPDATE:
    v1.0.3:
    - Update auf AutoIt Version 3.2.12.1.
    - Auffindung des korrekten TaskLinks nun zuverlässig.
    - Code-Optimierungen.

    3 Mal editiert, zuletzt von teh_hahn (30. Juni 2008 um 18:23)