Logitech LED - Dll Call

  • Hey zusammen,

    ich versuche gerade die von Logitech freigebende DLL anzusteuern. Leider bekomme ich immer als Rückgabewert "0".

    Ich muss zugeben ich habe mich vorher noch nie mit DLL´s auseinander gesetzt aber irgendwann fängt man halt doch mal an.

    Ich hätte nun erwartet das ein True zurück kommt, denn die Gaming Software von Logitech läuft und die Tastatur ist eingesteckt.

    Zitat : Logitech SDK Dokument

    Spoiler anzeigen

    LogiLedInit

    The LogiLedInit() function makes sure there isn’t already another instance running and then makes

    necessary initializations. It saves the current lighting for all connected and supported devices.

    This function will also stop any effect currently going on the connected devices.

    bool LogiLedInit();

    Return value

    If the function succeeds, it returns true. Otherwise false.

    If it returns false, means that the connection with Logitech Gaming Software is broken, make sure that it

    is running.


    Example

    LogiLedInit();

    LogiLedSetTargetDevice(LOGI_DEVICETYPE_RGB | LOGI_DEVICETYPE_MONOCHROME);

    //From now on the calls to LED SDK will only affect RGB and MONOCHROME devices, PER_KEY

    devices such as G910 will ignore this calls

    LogiLedSetLighting(100,0,0);

    LogiLedSetTargetDevice(LOGI_DEVICETYPE_PERKEY_RGB);

    //Future calls will only affect per-key rgb devices such as G910.

    LogiLedSetLightingForKeyWithKeyName(keyboardNames::ARROW_DOWN, 100, 0, 0);

    LogiLedFlashLighting(50, 50, 50, 0, 300);

    LogiLedSetTargetDevice(LOGI_DEVICETYPE_ALL);

    //From now on we’ll affect all the connected devices

    LogiLedSetLighting(50, 0, 0);

    LogiLedShutDown();


    Autoitcode

    LogitechLed.rar

  • Hi :)

    1. In deiner Dokumentation steht bool LogiLedInit(), deswegen darfst du in deinem Funktionsaufruf auch keinen Integer ("int") verwenden, sondern musst "BOOL" benutzen.

    2. Der Aufruf von DLLCall gibt ein Array zurück -> Das heißt du, wenn du in der MessageBox den Rückgabewert haben willst, musst du DLLCall()[0] verwenden, also so zum Beispiel:

    AutoIt
    $aCall = DllCall($DLLOpen,"bool","LogiLedInit")
    MsgBox(0, "", $aCall[0])

    3. Da "bool" auch ein Integer ist und somit false als und true als 1 gehandhabt wird, wirst du niemals ein true oder false zurückbekommen.

    4. Teste mal, ob der DLLCall überhaupt erfolgreich ist.

    AutoIt
    $hDLL = DllOpen(@ScriptDir & "\LogitechLed.dll")
    If @error Then
        MsgBox(16, "", "DLL kann nicht geladen werden! Programm wird beendet!")
        Exit
    EndIf
    $aReturn = DllCall($hDLL, "bool", "LogiLedInit")
    If @error Then MsgBox(0, "", "Methode konnte nicht aufgerufen werden!")
    DllClose($hDLL)
    Exit

    Lg NO1 :)

  • Hey NO1,

    vielen dank für deine Hilfestellung. Das mit Bool da hätte ich echt mal selber drauf kommen können. :(
    Leider funktioniert der DLLCall nicht. Habe ihn eins zu eins übernommen.

    Kann man da jetzt überhaupt noch weiter nach einer Ursache gucken?
    Ich mein die Dokumentation sagt ja es soll so funktionieren.

  • Kein Problem :)

    Ja bei mir hat der DLLCall auch nicht funktioniert, deswegen wollt ich den Punkt 4 wissen...

    Und für DLLs gibts ein hilfreiches Tool names DLL Export Viewer.zip, mit dem du alle in der DLL vorhandenen Funktionen anschauen kannst ;)... ich hängs mal an

  • Wenn du mit 64-Bit Programmen oder Dlls hantieren möchtest, dann musst du AutoIt das auch sagen...

    AutoIt
    #AutoIt3Wrapper_UseX64=y
    
    Local $hDLL = DllOpen(@ScriptDir & "\LogitechLed.dll")
    If @error Then Exit MsgBox(16, @ScriptName, "LogitechLed.dll kann nicht geladen werden - das Script wird beendet!")
    Local $aReturn = DllCall($hDLL, "bool", "LogiLedInit")
    If @error Then MsgBox(0, "", "Methode konnte nicht aufgerufen werden!")
    DllClose($hDLL)
    Exit
  • Hey Bitnugger vielen Dank für den Hinweis. Werde ich nachher mal testen.

    Wenn du mit 64-Bit Programmen oder Dlls hantieren möchtest, dann musst du AutoIt das auch sagen...

    AutoIt
    #AutoIt3Wrapper_UseX64=y
    
    Local $hDLL = DllOpen(@ScriptDir & "\LogitechLed.dll")
    If @error Then Exit MsgBox(16, @ScriptName, "LogitechLed.dll kann nicht geladen werden - das Script wird beendet!")
    Local $aReturn = DllCall($hDLL, "bool", "LogiLedInit")
    If @error Then MsgBox(0, "", "Methode konnte nicht aufgerufen werden!")
    DllClose($hDLL)
    Exit

    Hey das Tool ist ja super, Danke. Gleich in meine Tool Library

    aufgenommen. :thumbup:

    Kein Problem :)

    Ja bei mir hat der DLLCall auch nicht funktioniert, deswegen wollt ich den Punkt 4 wissen...

    Und für DLLs gibts ein hilfreiches Tool names DLL Export Viewer.zip, mit dem du alle in der DLL vorhandenen Funktionen anschauen kannst ;)... ich hängs mal an

  • Hallo nochmal,

    ich habe nun ein bisschen rum probiert. Soweit funktionierten die Einzelnen Funktionen. Leider bricht er aber immer nach dem ersten setzen der Farbe oder Effekts das ganze Script ab oder Überspringt den Rest.
    Was genau passiert weis ich leider nicht. Kann mir da jemand weiterhelfen?

    So ist es im Fehler Fall:

    _Logiledinit("C:\Program Files\Logitech Gaming Software\SDK\LED\x86\LogitechLed.dll")

    _LogiLedSaveCurrentLighting()

    _LogiLedSetLighting()

    ### Bis hier hin gehts aber danach leider nicht mehr ###

    _LogiLedSetLightingForKeyWithKeyName()

    _LogiLedRestoreLighting()

    _LogiLedShutDown()

    Liegt das an Autoit oder einfach an der DLL?