git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@136 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
130 lines
4.7 KiB
Plaintext
130 lines
4.7 KiB
Plaintext
MODULE UsbUtils;
|
|
IMPORT SYSTEM, WinApi, Strings, ComTools, Log := StdLog;
|
|
|
|
CONST
|
|
HK_LM_JRE_Key = "SOFTWARE\javaSoft\Java Runtime Environment";
|
|
HK_LM_JRE_CurrentVersion_value = "CurrentVersion";
|
|
HK_LM_JRE_JavaHome_value = "JavaHome";
|
|
HK_LM_PATH_Key = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
|
|
HK_CU_PATH_Key = "Environment";
|
|
PATH_value = "PATH";
|
|
|
|
PROCEDURE RegLMQuery* (IN subKey, valueName: ARRAY OF SHORTCHAR;
|
|
OUT qValue: ARRAY OF SHORTCHAR): BOOLEAN;
|
|
VAR
|
|
res, length: INTEGER; hKey: WinApi.HKEY;
|
|
BEGIN
|
|
qValue := "";
|
|
res := WinApi.RegOpenKeyEx(WinApi.HKEY_LOCAL_MACHINE,
|
|
subKey, 0, WinApi.KEY_QUERY_VALUE, hKey);
|
|
IF res # WinApi.ERROR_SUCCESS THEN
|
|
RETURN FALSE
|
|
ELSE
|
|
length := LEN(qValue);
|
|
res := WinApi.RegQueryValueEx(hKey, valueName, NIL, NIL, qValue[0], length);
|
|
IF res # WinApi.ERROR_SUCCESS THEN
|
|
RETURN FALSE
|
|
END
|
|
END;
|
|
res := WinApi.RegCloseKey(hKey);
|
|
RETURN TRUE;
|
|
END RegLMQuery;
|
|
|
|
PROCEDURE RegCUQuery* (IN subKey, valueName: ARRAY OF SHORTCHAR;
|
|
OUT qValue: ARRAY OF SHORTCHAR): BOOLEAN;
|
|
VAR
|
|
res, length: INTEGER; hKey: WinApi.HKEY;
|
|
BEGIN
|
|
qValue := "";
|
|
res := WinApi.RegOpenKeyEx(WinApi.HKEY_CURRENT_USER,
|
|
subKey, 0, WinApi.KEY_QUERY_VALUE, hKey);
|
|
IF res # WinApi.ERROR_SUCCESS THEN
|
|
RETURN FALSE
|
|
ELSE
|
|
length := LEN(qValue);
|
|
res := WinApi.RegQueryValueEx(hKey, valueName, NIL, NIL, qValue[0], length);
|
|
IF res # WinApi.ERROR_SUCCESS THEN
|
|
RETURN FALSE
|
|
END
|
|
END;
|
|
res := WinApi.RegCloseKey(hKey);
|
|
RETURN TRUE;
|
|
END RegCUQuery;
|
|
|
|
PROCEDURE RegCUCreateKeyAndSetValue* (IN subKey, valueName: ARRAY OF SHORTCHAR;
|
|
newValue: ARRAY OF SHORTCHAR): BOOLEAN;
|
|
VAR
|
|
res, length, lpdwDisposition: INTEGER; hKey: WinApi.HKEY;
|
|
BEGIN
|
|
res := WinApi.RegCreateKeyEx(WinApi.HKEY_CURRENT_USER, subKey, 0, NIL,
|
|
WinApi.REG_OPTION_NON_VOLATILE, WinApi.KEY_ALL_ACCESS, NIL, hKey, lpdwDisposition);
|
|
IF res # WinApi.ERROR_SUCCESS THEN
|
|
RETURN FALSE
|
|
END;
|
|
res := WinApi.RegSetValueEx(hKey, valueName, 0, WinApi.REG_SZ,
|
|
newValue[0], LEN(newValue$));
|
|
IF res # WinApi.ERROR_SUCCESS THEN
|
|
RETURN FALSE
|
|
END;
|
|
res := WinApi.RegCloseKey(hKey);
|
|
RETURN TRUE
|
|
END RegCUCreateKeyAndSetValue;
|
|
|
|
PROCEDURE CheckAndSetPath*;
|
|
CONST
|
|
PATH_Pattern = "\bin\client";
|
|
|
|
SMTO_ABORTIFHUNG = {1} (* 2 in C *);
|
|
HWND_BROADCAST = 0FFFFH;
|
|
|
|
VAR
|
|
jreHome, regValue, tmpRegValue: ARRAY 2048 OF SHORTCHAR;
|
|
pos, result: INTEGER; noUserPathValue, success, found: BOOLEAN;
|
|
environment: WinApi.PtrSTR;
|
|
BEGIN
|
|
(* get jre home path *)
|
|
IF ~RegLMQuery(HK_LM_JRE_Key, HK_LM_JRE_CurrentVersion_value, tmpRegValue) (* e.g. "1.5" *) THEN
|
|
Log.String("UsbUtils: Error getting " + HK_LM_JRE_Key + "! Is Java installed?"); Log.Ln; RETURN
|
|
END;
|
|
IF ~RegLMQuery(HK_LM_JRE_Key + "\" + tmpRegValue, HK_LM_JRE_JavaHome_value, jreHome) THEN
|
|
Log.String("UsbUtils: Error getting " + HK_LM_JRE_Key + "\" + tmpRegValue + "! Is Java installed?"); Log.Ln; RETURN
|
|
END;
|
|
(* look for %javahome%\bin\client on system and user path*)
|
|
regValue := jreHome + PATH_Pattern;
|
|
found := RegLMQuery(HK_LM_PATH_Key, "Path", tmpRegValue);
|
|
Strings.Find(LONG(tmpRegValue), LONG(regValue), 0, pos);
|
|
found := pos >= 0;
|
|
IF found THEN
|
|
Log.String("the PATH system variable " + regValue + " is already set"); Log.Ln;
|
|
RETURN
|
|
END;
|
|
tmpRegValue := "";
|
|
noUserPathValue := ~RegCUQuery(HK_CU_PATH_Key, PATH_value, tmpRegValue);
|
|
Strings.Find(LONG(tmpRegValue), PATH_Pattern, 0, pos);
|
|
found := pos >= 0;
|
|
IF ~found THEN (* insert registry key into user PATH variable *)
|
|
IF tmpRegValue = "" THEN
|
|
tmpRegValue := regValue;
|
|
ELSE
|
|
tmpRegValue := tmpRegValue + ";" + regValue
|
|
END;
|
|
IF RegCUCreateKeyAndSetValue(HK_CU_PATH_Key, PATH_value, tmpRegValue) THEN
|
|
IF noUserPathValue THEN (* create user PATH value first *)
|
|
Log.String("user value PATH created"); Log.Ln;
|
|
END;
|
|
Log.String(regValue + " added to user PATH"); Log.Ln;
|
|
ELSE
|
|
Log.String("UsbUtils: Error on CreateKey with value " + tmpRegValue); Log.Ln;
|
|
END;
|
|
(* Notify windows about Environment Change (if this is not done, the changes will only take effect after reboot) *)
|
|
Log.String("Updating Environment - this may take some seconds..."); Log.Ln;
|
|
environment := ComTools.NewSString("Environment");
|
|
result := WinApi.SendMessageTimeout(HWND_BROADCAST, WinApi.WM_SETTINGCHANGE, 0,
|
|
SYSTEM.VAL(INTEGER, environment), SMTO_ABORTIFHUNG, 2000, result);
|
|
Log.String("Please restart Blackbox"); Log.Ln;
|
|
ELSE
|
|
Log.String("the PATH user variable " + regValue + " is already set"); Log.Ln;
|
|
END
|
|
END CheckAndSetPath;
|
|
|
|
END UsbUtils. |