systemvariable ändern



  • hallo
    ich würde gern eine System/uservariable setzen/ändern und dies auch gleich allen laufenden und zukünftigen Prozessen mitteilen.
    Das setzen der Variable mach ich per Registry des ist kein Problem.
    Das alle Prozesse diese Änderung mitbekommen hab ich so gefunden:

    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);
    

    aber leider funktioniert des nicht ich müsste trotzdem erst einen Reboot mache, was ich auf keinen Fall möchte.

    Vielen Dank Gruß KY



  • Was meinst du mit "funktioniert nicht"? Gibt es einen Syntax-Fehler? Kommt die Nachricht nicht an? Wird sie ignoriert?

    PS: In der MSDN steht zu WM_SETTINGCHANGED:

    MSDN schrieb:

    pszMetrics
    Value of lParam. Pointer to a string that indicates the area containing the system parameter that was changed. For example, this string can be the name of a registry key or the name of a section in the WIN.INI file.
    This parameter is not particularly useful in determining which system parameter changed. For example, when the string is a registry name, it typically indicates only the leaf node in the registry, not the whole path. In addition, some applications send this message with lParam set to NULL. In general, when you receive this message, you should check and reload any system parameter settings that are used by your application.

    (oder auf Deutsch - du solltest dich nicht auf den Wert verlassen, der als lParam gesendet wird)



  • also mit funktioniert nicht meinte ich, dass es keine reaktion der anderen Programme gibt.
    Weißt du wie ich es besser/richtig machen kann?
    Gruß KY



  • Was für eine Reaktion erwartest du denn? Sollen die anderen Programme einen Freudentanz auf dem Monitor aufführen, weil du so gnädig warst, ihnen eine Nachricht zukommen zu lassen 😃

    WM_SETTINGCHANGED ist eine ganz normale Fensternachricht - und jedem Programm steht es frei, ob es diese Nachricht entgegennimmt (und wenn ja, was es damit anfängt).



  • ich setzte (versuche) eine eigene Path Variable zu ändern die das Ziel einer Verknüpfung im Explorer (SendTo) ändert.
    Deshalb sollten die Einstellungen gleich übernommen werden. (vom Explorer)
    aber wie?

    Gruß KY



  • ky_fr34k schrieb:

    ich setzte (versuche) eine eigene Path Variable zu ändern die das Ziel einer Verknüpfung im Explorer (SendTo) ändert.
    Deshalb sollten die Einstellungen gleich übernommen werden. (vom Explorer)
    aber wie?

    Gruß KY

    dazu muss aber mindestens der Explorer neu gestartet werden.... also kill den einfach und starte ihn neu (ich denke mal, dass das möglich sein sollte)



  • http://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c10849/
    schau dir mal des tool an, der kann des ohne irgendwas neuzustarten 🙂
    ich bin anscheinend zu doof des richtig zu machen
    Gruß KY



  • ky_fr34k schrieb:

    http://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c10849/
    schau dir mal des tool an, der kann des ohne irgendwas neuzustarten 🙂
    ich bin anscheinend zu doof des richtig zu machen
    Gruß KY

    das Programm ändert doch auch nur die Systemvariablen... soweit bist du ja auch schon... aber wenn ein Programm nicht regelmäßig die Systemvariablen neu einliest (was in der Regel keinen Sinn macht), dann bekommt es erst nach einem neustart eine Änderung mit



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • der unterschied ist halt, dass wenn ich setenv benutze und sofort danach im explorer senden an klicke, wird es an die neue position gesendet!
    bei mir leider nicht.

    Gruß KY



  • Dann zieh dir doch den Source von "SetEnv" und schau, was du anderes machst.



  • Die betroffenen Programme müssen ihre Umgebungsvariablen nach einer Änderung auch selbständig aktualisieren. Das machen aber die wenigsten. Die Aktualisierung kannst Du nicht erzwingen.


Anmelden zum Antworten