Hallo Leute,
heute möchte ich auch mal eine Frage (oder Problemchen) in die Runde stellen
Ich schreibe an einem Programm, welches auch Einträge in die Windows-Registry macht.
Dies erledige ich mit der Library jRegistryKey.
Nun muss ich auch die Environment-Variable %Path% erweitern, was auch problemlos
erledigt wird, zumindest kann ich den neuen Wert per Regedit ansehen.
Leider werden die Anpassungen erst nach einem Neustart in die Systemumgebung übernommen,
ich benötige diese aber eigentlich bereits nach dem Einfügen in die Registry... ;-(
Soweit ich bis jetzt herausgefunden habe, scheint es notwendig zu sein über die Windows-API
ein WM_SETTINGCHANGE-"Event" auszulösen...
Ich habe auch eine Umsetzung für Java (JNA) gefunden klick aber leider bekomme ich es nicht
zum Laufen, da ich mich nicht wirklich mit der Windows-API oder JNI/JNA auskenne.
Hat vielleicht jemand Erfahrungen oder sogar eine Lösung um so ein WM_SETTINGCHANGE auszuführen?!
...oder bin ich vielleicht sogar völlig auf dem Holzweg?!
...ich bin für jeden Hinweis dankbar
Einen kleinen Beispiel-Code zu meinem Problemchen habe ich übrigens auch noch
heute möchte ich auch mal eine Frage (oder Problemchen) in die Runde stellen
Ich schreibe an einem Programm, welches auch Einträge in die Windows-Registry macht.
Dies erledige ich mit der Library jRegistryKey.
Nun muss ich auch die Environment-Variable %Path% erweitern, was auch problemlos
erledigt wird, zumindest kann ich den neuen Wert per Regedit ansehen.
Leider werden die Anpassungen erst nach einem Neustart in die Systemumgebung übernommen,
ich benötige diese aber eigentlich bereits nach dem Einfügen in die Registry... ;-(
Soweit ich bis jetzt herausgefunden habe, scheint es notwendig zu sein über die Windows-API
ein WM_SETTINGCHANGE-"Event" auszulösen...
Ich habe auch eine Umsetzung für Java (JNA) gefunden klick aber leider bekomme ich es nicht
zum Laufen, da ich mich nicht wirklich mit der Windows-API oder JNI/JNA auskenne.
Hat vielleicht jemand Erfahrungen oder sogar eine Lösung um so ein WM_SETTINGCHANGE auszuführen?!
...oder bin ich vielleicht sogar völlig auf dem Holzweg?!
...ich bin für jeden Hinweis dankbar
Einen kleinen Beispiel-Code zu meinem Problemchen habe ich übrigens auch noch
Java:
import java.util.ArrayList;
import java.util.Iterator;
import ca.beq.util.win32.registry.RegistryKey;
import ca.beq.util.win32.registry.RegistryValue;
import ca.beq.util.win32.registry.RootKey;
import ca.beq.util.win32.registry.ValueType;
public class EnvironmentRegistryTest
{
public static void main(String[] args)
{
String envVar = "Path";
String addToEnvVar = "test01";
String envNow = new W32RegistryUsage().getEnvironmentRegistryKeys(envVar);
System.out.println(envNow);
new W32RegistryUsage().writeEnvironmentRegistryKey(envVar, addToEnvVar + ";" + envNow);
System.out.println(new W32RegistryUsage().getEnvironmentRegistryKeys("Path") );
}
static class W32RegistryUsage
{
private String dll = "c:\\TEMP\\jRegistryKey.dll";
private String regenv = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
boolean writeEnvironmentRegistryKey(String regkey, String regvalue)
{
RegistryKey.initialize(dll);
RegistryKey key;
RegistryValue keyVal;
ArrayList<String> list = new ArrayList<String>();
key = new RegistryKey(RootKey.HKEY_LOCAL_MACHINE, regenv);
if(key.exists())
{
if(key.hasValues())
{
Iterator i = key.values();
while(i.hasNext())
{
keyVal = (RegistryValue)i.next();
if( keyVal.getName().toString().trim().equals(regkey) )
{
keyVal.setData(regvalue);
key.setValue(keyVal);
return true;
}
}
//wenn ich hier bin scheint der Schluessel nicht zu existieren
RegistryValue val = new RegistryValue(regkey, ValueType.REG_EXPAND_SZ, regvalue);
key.setValue(val);
return true;
}
}
return false;
}
String getEnvironmentRegistryKeys(String regkey)
{
RegistryKey.initialize(dll);
RegistryKey key;
RegistryValue keyVal;
String regvalue = null;
key = new RegistryKey(RootKey.HKEY_LOCAL_MACHINE, regenv);
if(key.exists())
{
if(key.hasValues())
{
Iterator i = key.values();
while(i.hasNext())
{
keyVal = (RegistryValue)i.next();
if(keyVal.getName().toUpperCase().trim().equals(regkey.toUpperCase()))
{
regvalue = keyVal.getStringValue();
}
}
}
}
return regvalue;
}
}
}