Dllcall geht nur teilweise

  • Hallo,

    ich habe ein Windows 8 Tablet an der Wand hängen, das permanent läuft. Ein Server wertet einen Bewegungsmelder aus, der bei Zutreffen ein Programm mit Parametern ausführen soll.
    Ich möchte quasi bei Bewegung im Raum eine Diashow anzeigen lassen. Diese ist über den Screensaver gelöst.
    Folgendes: Ich kann den Bildschirmschoner aktivieren, ich kann den Monitor abschalten, all das klappt. Nur anschalten lässt er sich nicht. Könnte jemand mit Erfahrung mal drübersehen?
    Laut MSDN geht das wie folgt: https://msdn.microsoft.com/en-us/library/…0(v=vs.85).aspx

    Spoiler anzeigen
    Code: Einstellungen.ini
    [Netzwerk]
    IP-Adresse=192.168.132.100
    IP-Port=1989


    Spoiler anzeigen
    AutoIt: constants.au3
    Global Const $listen_IP			= IniRead("einstellungen.ini", "Netzwerk", "IP-Adresse", "127.0.0.1")
    Global Const $listen_PORT		= IniRead("einstellungen.ini", "Netzwerk", "IP-Adresse", "1989")
    Global Const $CMD_SCREENSAVER	= "cmd_bildschirmschoner"
    Global Const $CMD_MONITOR_AN	= "cmd_monitor_an"
    Global Const $CMD_MONITOR_AUS	= "cmd_monitor_aus"
    ;~ Global Const $CMD_MOUSE_MOVE	= "cmd_mouse_move"


    Spoiler anzeigen


    Spoiler anzeigen


    Arbeitet jemand mit DLLs & Autoit?

    Einmal editiert, zuletzt von loady2 (17. Februar 2016 um 13:10)

  • Probier doch mal mit der DefWindowProc Function:

    AutoIt
    ; POWER ON
    DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", WinGetHandle('[CLASS:Progman]'), "uint", 0x0112, "wparam", 0xF170, "lparam", -1)
    
    
    ; SCHLAF MODUS
    DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", WinGetHandle('[CLASS:Progman]'), "uint", 0x0112, "wparam", 0xF170, "lparam", 1)
    
    
    ; POWER OFF
    DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", WinGetHandle('[CLASS:Progman]'), "uint", 0x0112, "wparam", 0xF170, "lparam", 2)


    Edit:

    Ist ein bisschen buggy das Ganze. Mal gehts, mal gehts nicht.

    AutoIt
    DllCall("user32.dll", "lresult", "DefWindowProc", "hwnd", _WinAPI_GetDesktopWindow(), "uint", 0x0112, "wparam", 0xF170, "lparam", -1)


    Was aber bei mir zu 100% funktioniert hat, ist ein MouseClick oder MouseMove um den Monitor zurück zu holen (Hardware seitig)

    2 Mal editiert, zuletzt von kaesereibe (17. Februar 2016 um 14:08)

  • Hi,

    auch an anderer Hardware verhält es sich so ... komisch

    ich habe die DefWindowProc-Funktion gestest, leider geht das auch nicht.
    Auch ein MouseMove(1,1) und ein Send("^") lassen den Monitor nicht angehen.
    Nur ein echter Mausstubser lässt den Bildschirm erwachen.... ich bin überfragt

  • Hallo, ich habe ein ähnliches Problem und bin erst gerade auf AutoIT gestossen. Ich möchte ein kleines Script schreiben, das auf einen bestimmten Port (TCP) hört und bei einem bestimmten Signalwort (z.B. ScreensaverOFF) den Screensaver deaktiviert. Ich habe zur Lösung schon etliches an Research betrieben und zumindest herausgefunden, daß man den Prozess xxxxxx.scr beenden muss, um den aktuell laufenden Screensaver zu beenden. Hat jemand einen Vorschlag?

  • Naja. Der geht doch aus, sobald die Maus bewegt wird. Warum also schwer machen? Einfach die Maus bewegen.

    AutoIt
    Func _interruptScreenSaver()
        $arMPos=MouseGetPos()
        ;Maus bewegen um 10 Pixel nach unten rechts
        MouseMove($arMPos[0]+10,$arMPos[1]+10,1)
        ;Falls die Maus unten rechts war konnte sie nicht bewegt werden, bewegen wir sie nach oben links
        MouseMove($arMPos[0]-10,$arMPos[1]-10,1)
        ;Maus zurücksetzen
        MouseMove($arMPos[0],$arMPos[1],1)
    EndFunc

    Was TCP angeht: Sieh dir mal in der Hilfe die Beispiele zu TCPAccept, TCPSend, TCPConnect,... an, dort sind komplette Server und Client Scripte zu finden. Wenn du da mehr wissen willst, mach doch bitte einen eigenen Thread auf. Der hier hat damit ja nicht wirklich was zu tun.

  • Mausverschiebung kann nur das Einschalten des Screensavers verhindern, schaltet ihn dann aber nicht mehr ab, wie oben schon erwähnt. Ich habe einen neuen Thread eröffnet...