1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. be_cracked

Beiträge von be_cracked

  • NVAPI.dll - Grafikspeicher/-auslastung auslesen

    • be_cracked
    • 11. Mai 2014 um 21:57

    Ok habe jetzt nochmal mir die Finger wund gegoogelt und bin dabei als einzig hilfreiches über folgende Funktion gestolpert.

    Code
    #include <Array.au3>
    Dim $gpuHwnds[1], $disHwnds[1], $PhyGpuDisHwnds[1]
    Dim $DLL = DllOpen('nvapi.dll')
    
    
    $N = NvAPI_Initialize()
    NvAPI_EnumPhysicalGPUs()
    NvAPI_EnumNvidiaDisplayHandle()
    NvAPI_GetPhysicalGPUsFromDisplay($disHwnds[1])
    
    
    NvAPI_GPU_GetThermalSettings($disHwnds[1])
    Exit NvAPI_GPU_GetMemoryInfo($disHwnds[1])
    
    
    For $i = 0 To 10
        $Usage = NvAPI_GPU_GetUsages($gpuHwnds[1])
        ConsoleWrite('Usage ' & $Usage & @CRLF)
        Sleep(1000)
    Next
    DllClose($DLL)
    
    
    Func NvAPI_QueryInterface($nInterface)
        $result = DllCall($DLL, "ptr:cdecl", 'nvapi_QueryInterface', 'int', $nInterface)
        If @error Then Return SetError(2,@error,0)
        If $result[0] = 0 Then Return SetError(3,0,0)
        Return $result[0]
    EndFunc
    
    
    Func NvAPI_Initialize()
        Static Local $pInitialize = 0
        If $pInitialize = 0 Then
            $pInitialize = NvAPI_QueryInterface(0x0150E828)
            If $pInitialize = 0 Then Return SetError(@error,@extended,0)
        EndIf
        $result = DllCallAddress("int:cdecl", $pInitialize)
        If @error Then Return SetError(2,@error,False)
        Return $result[0]
    EndFunc
    
    
    Func NvAPI_EnumPhysicalGPUs()
        Static Local $pEnumPhysGPUs = 0
        If $pEnumPhysGPUs = 0 Then
            $pEnumPhysGPUs = NvAPI_QueryInterface(0xE5AC921F)
            If $pEnumPhysGPUs = 0 Then Return SetError(@error, @extended, 0)
        EndIf
        $stGPUHandles = DllStructCreate("INT_PTR gpuHandles[64];")
        $result = DllCallAddress("int:cdecl", $pEnumPhysGPUs, 'ptr', DllStructGetPtr($stGPUHandles), 'int*', 0)
        If @error Then Return SetError(2,@error,0)
        If $result[0] Then Return SetError(3,0,0)
    
    
    
    
        $gpuHwnds[0] = $result[2]
        For $i = 1 To $gpuHwnds[0]
            _ArrayAdd($gpuHwnds, DllStructGetData($stGPUHandles, 1, $i))
        Next
        Return
    EndFunc
    
    
    Func NvAPI_GPU_GetUsages($vGPUHandle)
        Static Local $pGetUsages = 0
        If $pGetUsages = 0 Then
            $pGetUsages = NvAPI_QueryInterface(0x189A1FDF)
            If $pGetUsages = 0 Then Return SetError(@error, @extended, 0)
        EndIf
        $stGPUUsages = DllStructCreate("uint gpuUsages[34];")
        DLLStructSetData($stGPUUsages, 1, BitOR(34 * 4, 0x10000), 1)
    
    
        $result = DllCallAddress("int:cdecl", $pGetUsages, 'ptr', $vGPUHandle, 'ptr', DllStructGetPtr($stGPUUsages))
        If @error Then Return SetError(2,@error,0)
        If $result[0] Then Return SetError(3, 0, 0)
        Return DllStructGetData($stGPUUsages, 1, 4)  ; 4 is equivalent to c's array[3]
    EndFunc
    
    
    Func NvAPI_EnumNvidiaDisplayHandle()
        Static Local $pEnumDisHwnd = 0
        If $pEnumDisHwnd = 0 Then
            $pEnumDisHwnd = NvAPI_QueryInterface(0x9ABDD40D)
            If $pEnumDisHwnd = 0 Then Return SetError(@error, @extended, 0)
        EndIf
        $stDisHandles = DllStructCreate("PTR dispHandle;")
    
    
        $i = 0
        While 1
            $result = DllCallAddress("int:cdecl", $pEnumDisHwnd, 'int', $i, 'ptr', DllStructGetPtr($stDisHandles))
            If @error Then Return SetError(2,@error,0)
            If $result[0] And $i = 0 Then Return SetError(3,0,0)
    
    
            If $result[0] Then ExitLoop
            _ArrayAdd($disHwnds, DllStructGetData($stDisHandles, 1))
            $disHwnds[0] = $i + 1
            $i += 1
        WEnd
    EndFunc
    
    
    Func NvAPI_GetPhysicalGPUsFromDisplay($vdisHandle)
        Static Local $pPhysGPUsDisp = 0
        If $pPhysGPUsDisp = 0 Then
            $pPhysGPUsDisp = NvAPI_QueryInterface(0x34EF9506)
            If $pPhysGPUsDisp = 0 Then Return SetError(@error, @extended, 0)
        EndIf
        $stGPUHandles = DllStructCreate("INT_PTR PgpuHandles[64];") ; was ptr only
        $result = DllCallAddress("int:cdecl", $pPhysGPUsDisp, 'ptr', $vdisHandle, 'ptr', DllStructGetPtr($stGPUHandles), 'int*', 0)
    
    
        If @error Then Return SetError(2,@error,0)
        If $result[0] Then Return SetError(3,0,0)
    
    
        $PhyGpuDisHwnds[0] = $result[3]
        For $i = 1 To $PhyGpuDisHwnds[0]
            _ArrayAdd($PhyGpuDisHwnds, DllStructGetData($stGPUHandles, 1, $i))
        Next
    EndFunc
    
    
    ;===================;===================;===================;===================;===================;===================;===================
    
    
    Func NvAPI_GPU_GetMemoryInfo($vdisHandle)
        Static Local $pMemInfo = 0
        If $pMemInfo = 0 Then
            $pMemInfo = NvAPI_QueryInterface(0x774AA982)
            If $pMemInfo = 0 Then Return SetError(@error, @extended, 0)
        EndIf
        $NvMemoryInfo = DllStructCreate("uint values[5];")
        ;DLLStructSetData($NvMemoryInfo, 1, 0x20000, 1)
        $result = DllCallAddress("int:cdecl", $pMemInfo, 'ptr', $vdisHandle, 'ptr', DllStructGetPtr($NvMemoryInfo))
    _ArrayDisplay($result, 'Memory')
    
    
        If @error Then Return SetError(2,@error,0)
        If $result[0] Then Return SetError(3,0,0)
        Return $result
    EndFunc
    
    
    Func NvAPI_GPU_GetThermalSettings($vGPUHandle)
        Static Local $pThermalInfo = 0
        If $pThermalInfo = 0 Then
            $pThermalInfo = NvAPI_QueryInterface(0xE3640A56)
            If $pThermalInfo = 0 Then Return SetError(@error, @extended, 0)
        EndIf
    
        $NvSensorStruct = 'uint Controller;uint DefaultMinTemp;uint DefaultMaxTemp;uint CurrentTemp;uint Target;'
        $NvSensor = DllStructCreate($NvSensorStruct)
        ;DllStructSetData($NvSensor, 'Controller', 1)
        ;DllStructSetData($NvSensor, 'Target', 1)
        $NvGPUThermalSettings = DllStructCreate('uint Version;uint Count[3];ptr ' & DllStructGetPtr($NvSensor)) ;STRUCT' & $NvSensorStruct & 'ENDSTRUCT;');& DllStructCreate($$NvSensorStruct))
    
    
        $result = DllCallAddress("int:cdecl", $pThermalInfo, 'ptr', $vGPUHandle, 'int', 0, 'ptr', DllStructGetPtr($NvGPUThermalSettings))
    _ArrayDisplay($result, 'Thermal')
    
    
        If @error Then Return SetError(2,@error,0)
        If $result[0] Then Return SetError(3,0,0)
        Return $result
    EndFunc
    Alles anzeigen


    von folgender Adresse http://www.autoitscript.com/forum/topic/152858-cc-to-autoit/
    mein Problem ist das selbe wie es in der quelle beschrieben wird, dass es mir bei den Funktionen NvAPI_GPU_GetMemoryInfo, sowie NvAPI_GPU_GetThermalSettings nur den Wert -9 zurückgibt.
    interessanterweise funktioniert die Funktion NvAPI_GPU_GetUsages einwandfrei.
    Da ich wirklich keine Ahnung von DLLs habe, bitte ich einfach nochmal ob mir irgendjemand damit helfen kann und mir den Fehler im Code nennen kann.

  • NVAPI.dll - Grafikspeicher/-auslastung auslesen

    • be_cracked
    • 11. Mai 2014 um 15:03

    Also hat irgendjemand einen Vorschlag wie ich das ganze in AutoIt einbetten kann?
    Mir gehen wirklich die Ideen aus.

  • NVAPI.dll - Grafikspeicher/-auslastung auslesen

    • be_cracked
    • 7. Mai 2014 um 17:54

    In Google habe ich das ganze logischerweise schon eingegeben...
    Nur hilft mir die Seite nicht wirklich dabei weiter das ganze in AutoIt zu implementieren.

  • NVAPI.dll - Grafikspeicher/-auslastung auslesen

    • be_cracked
    • 4. Mai 2014 um 12:56

    Hallo,

    ich möchte den gesamten Grafikspeicher, sowie die Auslastung von Selbigen über die NVAPI.dll auslesen.
    Nun habe ich bereits die Funktion für die Auslastung der GPU von der NVAPI (NvAPI_GPU_GetUsages) am laufen und da ist alles super.

    Nur bin ich mir a) nicht sicher welche Funktion der NVAPI.dll mir meine gewünschten Werte auslesen und habe b) bei den Funktionen mit denen ich rumprobiert habe (z.B. NvAPI_GPU_GetMemoryInfo) noch keinen Erfolg gehabt.

    Beim googlen habe ich diesen C#-Code gefunden, steige aber auch da noch nicht ganz durch:

    Spoiler anzeigen

    NvMemoryInfo memoryInfo = new NvMemoryInfo();
    memoryInfo.Version = NVAPI.GPU_MEMORY_INFO_VER;
    memoryInfo.Values = new uint[NVAPI.MAX_MEMORY_VALUES_PER_GPU];
    if (NVAPI.NvAPI_GPU_GetMemoryInfo != null && displayHandle.HasValue &&
    NVAPI.NvAPI_GPU_GetMemoryInfo(displayHandle.Value, ref memoryInfo) ==
    NvStatus.OK) {
    uint totalMemory = memoryInfo.Values[0];
    uint freeMemory = memoryInfo.Values[4];
    float usedMemory = Math.Max(totalMemory - freeMemory, 0);
    memoryLoad.Value = 100f * usedMemory / totalMemory;
    ActivateSensor(memoryLoad);

    Quelle: http://open-hardware-monitor.googlecode.com/svn/trunk/Hard…ia/NvidiaGPU.cs


    Würde mich über Anregungen und Tipps freuen, da ich so langsam mit meinem Latein am Ende bin.

    MfG,

    be_cracked

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™