WM_SETTINGCHANGE

  • Moin zusammen,

    ich habe mal wieder ein kleines Problem.

    Es werden Registryänderungen gemacht, die normalerweise erst nach einem Neustart/Ab&Anmelden greifen.

    WM_SETTINGCHANGE soll dies aber sofort wirksam machen. Ich habe damit jedoch noch nie gearbeitet.

    Könnt ihr mir sagen, wie ich WM_SETTINGCHANGE per autoit sende?

    Ich habe nach vielen Suchen aktuell zwei Varianten gefunden:

    AutoIt
    $hWnd = WinGetHandle("[ACTIVE]")
    _SendMessage ($hWnd, $WM_SETTINGCHANGE)
    AutoIt
    dllCall("user32.dll", "int", "SendMessage", "long", $WM_SETTINGCHANGE)

    Kann mir jemand sagen, ob eine davon tut was sie soll?

    Einmal editiert, zuletzt von Moombas (11. Dezember 2020 um 13:53)

  • Wenn ich es also richtig sehe, was deine Links besagen (die ich nicht alle wirklich weiß, wie ich sie umsetzen soll) wäre ich bei folgender Lösung:

    Code
    $hWnd = WinGetHandle("[ACTIVE]")
    _WinAPI_SendMessageTimeout($hWnd, $WM_SETTINGCHANGE)

    Correct?

  • Einträge, damit ein jpg bzw. jpeg File mit einem anderen Programm geöffnet wird (als Middleware), um ein Problem in Windows 7 zu umgehen.

    Habe alle 3 Varianten nun getestet, ohne Erfolg.

    Brauche weiterhin einen Neustart/Neuanmeldung.

    Edit: Evtl. liegt hier noch ein anderes Problem vor. Ich muss noch mal schauen. Jetzt will er das trotz Registryänderungen nicht mehr nehmen -.-

    4 Mal editiert, zuletzt von Moombas (14. Dezember 2020 um 13:30)

  • Welche Problem in Windows 7?

    Als temporäre Notlösung könntest du die explorer.exe neu starten... ich schau morgen mal, ob ich dafür eine Lösung finde... wenn ja, melde ich mich wieder.

    ProcessClose('explorer.exe')

    Run('explorer.exe')

  • Da dies Systeme betrifft, die im laufenden Betrieb umgestellt werden, werde ich da eher den Neustart als "Lösung" wählen, als den Explorer neu zu starten, da dies sichtbar für den Anwender wäre.

    Jedoch aktuell macht mir die Registry noch ein wenig Sorgen/Probleme. Ich muss mal weiter testen.

  • Habe die Registryeinträge, die ich brauche oben nochmal angepasst. Sind ein paar weniger geworden

    Ja, weniger, aber für Helfende nicht mehr nutzbar... du solltest die Variablen vorab deklarieren bzw. kommentieren - wichtig, damit es funktioniert, wäre hier vor allem $cache und $SID.

    Zu dem Thema habe ich nicht wirklich brauchbare Ergebnisse finden können und somit schwindet auch mein Interesse, mich weiter damit auseinanderzusetzen.

    Hier ein Link, der zumindest in den ersten Sekunden vielversprechend aussah: https://www.angryadmin.co.uk/?tag=wm_settingchange

    Wie kommt der auf den Wert 5000?

    Meinem jetzigen Verständnis nach, sollte der Funktionsaufruf etwa so aussehen:

    AutoIt
    #include <APISysConstants.au3>  ; $HWND_BROADCAST, $SMTO_ABORTIFHUNG
    #include <WindowsConstants.au3> ; $WM_SETTINGCHANGE
    #include <WinAPISysWin.au3>     ; _WinAPI_SendMessageTimeout
    
    ;~ Syntax: _WinAPI_SendMessageTimeout ( $hWnd, $iMsg [, $wParam = 0 [, $lParam = 0 [, $iTimeout = 1000 [, $iFlags = 0]]]] )
    
    Local $hWnd = $HWND_BROADCAST, $iMsg = $WM_SETTINGCHANGE, $wParam = 0, $lParam = 'Environment', $iTimeout = 1000, $iFlags = $SMTO_ABORTIFHUNG
    _WinAPI_SendMessageTimeout($hWnd, $iMsg, $wParam, $lParam, $iTimeout, $iFlags)
  • Danke schon mal für die Hilfe Bitnugger.

    Das funktioniert und ich wäre da selber nicht drauf gekommen.

    $cache ist nur eine interne Prüfung ob alles einwandfrei durchgelaufen ist. (Ich erwarte am Ende einen bestimmten Wert der passen muss)

    Sorry mir ging es hierbei nur darum dir die Registryeinträge zu zeigen.

    Ich hätte natürlich überall das komplette Konstrukt weg kürzen können.

  • Das funktioniert und ich wäre da selber nicht drauf gekommen.

    Dann habe ich ja mal sehr gut geraten... wenn es funktioniert, wieso setzt du den Thread dann nicht auf gelöst?

    Hier noch ein Schnipsel für dich:

  • Danke dafür, jedoch wird im Script mehr als nur Registry geschrieben ;) Und die Lösung mit dem $cache kann ich flexibel anwenden.

    Und das mit dem "Erledigt" ist unter gegangen, hole ich jetzt nach^^