mirror of
https://github.com/reactos/reactos.git
synced 2025-05-17 16:27:00 +00:00
[RAPPS]
- remove the custom parser, add caching, accelerators and lazy loading support and more (patch by Ismael Ferreras Morezuelas) - modifications by me: - don't rely on an undocumented behavior when calling GetPrivateProfileStringW and check the return value instead (should get fixed in kernel32 too) - modify the packaging scripts so the resulting CAB file contains UTF16 encoded files and remove the re-encoding hack from the patch (this is backwards compatible as the previous parser implementation was UTF16 aware) CORE-9060 svn path=/trunk/; revision=66814
This commit is contained in:
parent
631b0ae9a1
commit
c7046c39bc
31 changed files with 508 additions and 1044 deletions
|
@ -7,7 +7,6 @@ list(APPEND SOURCE
|
||||||
listview.c
|
listview.c
|
||||||
loaddlg.c
|
loaddlg.c
|
||||||
misc.c
|
misc.c
|
||||||
parser.c
|
|
||||||
richedit.c
|
richedit.c
|
||||||
settingsdlg.c
|
settingsdlg.c
|
||||||
splitter.c
|
splitter.c
|
||||||
|
|
|
@ -1 +1,10 @@
|
||||||
..\..\..\output-MinGW-i386\host-tools\tools\cabman\cabman.exe -M mszip -S rappmgr.cab rapps\*.txt
|
@echo off
|
||||||
|
|
||||||
|
mkdir rapps\utf16
|
||||||
|
|
||||||
|
for %%f in (rapps\*.txt) do (
|
||||||
|
..\..\..\output-MinGW-i386\host-tools\tools\utf16le.exe "rapps\%%~nf.txt" "rapps\utf16\%%~nf.txt"
|
||||||
|
)
|
||||||
|
|
||||||
|
..\..\..\output-MinGW-i386\host-tools\tools\cabman\cabman.exe -M mszip -S rappmgr.cab rapps\utf16\*.txt
|
||||||
|
rmdir /s /q rapps\utf16
|
||||||
|
|
|
@ -1 +1,9 @@
|
||||||
../../../output-MinGW-i386/host-tools/tools/cabman/cabman -M mszip -S rappmgr.cab rapps/*.txt
|
#/bin/sh
|
||||||
|
cd rapps
|
||||||
|
mkdir utf16
|
||||||
|
for i in $(find -type f); do
|
||||||
|
../../../../output-MinGW-i386/host-tools/tools/utf16le.exe $i utf16/$i
|
||||||
|
done
|
||||||
|
cd ..
|
||||||
|
../../../output-MinGW-i386/host-tools/tools/cabman/cabman -M mszip -S rappmgr.cab rapps/utf16/*.txt
|
||||||
|
rm -r rapps/uft16
|
|
@ -4,10 +4,31 @@
|
||||||
* FILE: base/applications/rapps/available.c
|
* FILE: base/applications/rapps/available.c
|
||||||
* PURPOSE: Functions for working with availabled applications
|
* PURPOSE: Functions for working with availabled applications
|
||||||
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <ndk/rtlfuncs.h>
|
||||||
#include "rapps.h"
|
#include "rapps.h"
|
||||||
|
|
||||||
|
#define ADD_TEXT(a, b, c, d) \
|
||||||
|
if (b[0] != '\0') \
|
||||||
|
{ \
|
||||||
|
LoadStringW(hInst, a, szText, _countof(szText)); \
|
||||||
|
InsertRichEditText(szText, c); \
|
||||||
|
InsertRichEditText(b, d); \
|
||||||
|
} \
|
||||||
|
|
||||||
|
#define GET_STRING1(a, b) \
|
||||||
|
if (!ParserGetString(a, b, MAX_PATH, FindFileData.cFileName)) \
|
||||||
|
continue;
|
||||||
|
|
||||||
|
#define GET_STRING2(a, b) \
|
||||||
|
if (!ParserGetString(a, b, MAX_PATH, FindFileData.cFileName)) \
|
||||||
|
b[0] = '\0';
|
||||||
|
|
||||||
|
LIST_ENTRY CachedEntriesHead = {0};
|
||||||
|
PLIST_ENTRY pCachedEntry = NULL;
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
ShowAvailableAppInfo(INT Index)
|
ShowAvailableAppInfo(INT Index)
|
||||||
{
|
{
|
||||||
|
@ -20,14 +41,6 @@ ShowAvailableAppInfo(INT Index)
|
||||||
|
|
||||||
InsertRichEditText(L"\n", 0);
|
InsertRichEditText(L"\n", 0);
|
||||||
|
|
||||||
#define ADD_TEXT(a, b, c, d) \
|
|
||||||
if (b[0] != '\0') \
|
|
||||||
{ \
|
|
||||||
LoadStringW(hInst, a, szText, sizeof(szText) / sizeof(WCHAR)); \
|
|
||||||
InsertRichEditText(szText, c); \
|
|
||||||
InsertRichEditText(b, d); \
|
|
||||||
} \
|
|
||||||
|
|
||||||
ADD_TEXT(IDS_AINFO_VERSION, Info->szVersion, CFE_BOLD, 0);
|
ADD_TEXT(IDS_AINFO_VERSION, Info->szVersion, CFE_BOLD, 0);
|
||||||
ADD_TEXT(IDS_AINFO_LICENSE, Info->szLicense, CFE_BOLD, 0);
|
ADD_TEXT(IDS_AINFO_LICENSE, Info->szLicense, CFE_BOLD, 0);
|
||||||
ADD_TEXT(IDS_AINFO_SIZE, Info->szSize, CFE_BOLD, 0);
|
ADD_TEXT(IDS_AINFO_SIZE, Info->szSize, CFE_BOLD, 0);
|
||||||
|
@ -49,7 +62,7 @@ DeleteCurrentAppsDB(VOID)
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
BOOL result = TRUE;
|
BOOL result = TRUE;
|
||||||
|
|
||||||
if (!GetStorageDirectory(szPath, sizeof(szPath) / sizeof(szPath[0])))
|
if (!GetStorageDirectory(szPath, _countof(szPath)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hr = StringCbPrintfW(szCabPath, sizeof(szCabPath),
|
hr = StringCbPrintfW(szCabPath, sizeof(szCabPath),
|
||||||
|
@ -61,6 +74,7 @@ DeleteCurrentAppsDB(VOID)
|
||||||
result = result && DeleteFileW(szCabPath);
|
result = result && DeleteFileW(szCabPath);
|
||||||
|
|
||||||
hr = StringCbCatW(szPath, sizeof(szPath), L"\\rapps\\");
|
hr = StringCbCatW(szPath, sizeof(szPath), L"\\rapps\\");
|
||||||
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -71,6 +85,7 @@ DeleteCurrentAppsDB(VOID)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hFind = FindFirstFileW(szSearchPath, &FindFileData);
|
hFind = FindFirstFileW(szSearchPath, &FindFileData);
|
||||||
|
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
@ -82,6 +97,7 @@ DeleteCurrentAppsDB(VOID)
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
continue;
|
continue;
|
||||||
result = result && DeleteFileW(szTmp);
|
result = result && DeleteFileW(szTmp);
|
||||||
|
|
||||||
} while (FindNextFileW(hFind, &FindFileData) != 0);
|
} while (FindNextFileW(hFind, &FindFileData) != 0);
|
||||||
|
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
|
@ -102,7 +118,7 @@ UpdateAppsDB(VOID)
|
||||||
|
|
||||||
DownloadApplicationsDB(APPLICATION_DATABASE_URL);
|
DownloadApplicationsDB(APPLICATION_DATABASE_URL);
|
||||||
|
|
||||||
if (!GetStorageDirectory(szPath, sizeof(szPath) / sizeof(szPath[0])))
|
if (!GetStorageDirectory(szPath, _countof(szPath)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (FAILED(StringCbPrintfW(szCabPath, sizeof(szCabPath),
|
if (FAILED(StringCbPrintfW(szCabPath, sizeof(szCabPath),
|
||||||
|
@ -132,13 +148,18 @@ EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc)
|
||||||
WIN32_FIND_DATAW FindFileData;
|
WIN32_FIND_DATAW FindFileData;
|
||||||
WCHAR szPath[MAX_PATH];
|
WCHAR szPath[MAX_PATH];
|
||||||
WCHAR szAppsPath[MAX_PATH];
|
WCHAR szAppsPath[MAX_PATH];
|
||||||
WCHAR szSectionLocale[MAX_PATH] = L"Section.";
|
|
||||||
WCHAR szCabPath[MAX_PATH];
|
WCHAR szCabPath[MAX_PATH];
|
||||||
WCHAR szLocale[4 + 1];
|
PAPPLICATION_INFO Info;
|
||||||
APPLICATION_INFO Info;
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
if (!GetStorageDirectory(szPath, sizeof(szPath) / sizeof(szPath[0])))
|
/* initialize the cached list if hasn't been yet */
|
||||||
|
if (pCachedEntry == NULL)
|
||||||
|
{
|
||||||
|
InitializeListHead(&CachedEntriesHead);
|
||||||
|
pCachedEntry = &CachedEntriesHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!GetStorageDirectory(szPath, _countof(szPath)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hr = StringCbPrintfW(szCabPath, sizeof(szCabPath),
|
hr = StringCbPrintfW(szCabPath, sizeof(szCabPath),
|
||||||
|
@ -148,9 +169,12 @@ EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hr = StringCbCatW(szPath, sizeof(szPath), L"\\rapps\\");
|
hr = StringCbCatW(szPath, sizeof(szPath), L"\\rapps\\");
|
||||||
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hr = StringCbCopyW(szAppsPath, sizeof(szAppsPath), szPath);
|
hr = StringCbCopyW(szAppsPath, sizeof(szAppsPath), szPath);
|
||||||
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -161,10 +185,12 @@ EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc)
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = StringCbCatW(szPath, sizeof(szPath), L"*.txt");
|
hr = StringCbCatW(szPath, sizeof(szPath), L"*.txt");
|
||||||
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hFind = FindFirstFileW(szPath, &FindFileData);
|
hFind = FindFirstFileW(szPath, &FindFileData);
|
||||||
|
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
if (GetFileAttributesW(szCabPath) == INVALID_FILE_ATTRIBUTES)
|
if (GetFileAttributesW(szCabPath) == INVALID_FILE_ATTRIBUTES)
|
||||||
|
@ -172,58 +198,81 @@ EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc)
|
||||||
|
|
||||||
ExtractFilesFromCab(szCabPath, szAppsPath);
|
ExtractFilesFromCab(szCabPath, szAppsPath);
|
||||||
hFind = FindFirstFileW(szPath, &FindFileData);
|
hFind = FindFirstFileW(szPath, &FindFileData);
|
||||||
|
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GetLocaleInfoW(GetUserDefaultLCID(), LOCALE_ILANGUAGE,
|
|
||||||
szLocale, sizeof(szLocale) / sizeof(WCHAR)))
|
|
||||||
{
|
|
||||||
FindClose(hFind);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = StringCbCatW(szSectionLocale, sizeof(szSectionLocale), szLocale);
|
|
||||||
if (FAILED(hr))
|
|
||||||
{
|
|
||||||
FindClose(hFind);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define GET_STRING1(a, b) \
|
|
||||||
if (!ParserGetString(szSectionLocale, a, b, MAX_PATH, FindFileData.cFileName)) \
|
|
||||||
if (!ParserGetString(L"Section", a, b, MAX_PATH, FindFileData.cFileName)) \
|
|
||||||
continue;
|
|
||||||
|
|
||||||
#define GET_STRING2(a, b) \
|
|
||||||
if (!ParserGetString(szSectionLocale, a, b, MAX_PATH, FindFileData.cFileName)) \
|
|
||||||
if (!ParserGetString(L"Section", a, b, MAX_PATH, FindFileData.cFileName)) \
|
|
||||||
b[0] = '\0';
|
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Info.Category = ParserGetInt(szSectionLocale, L"Category", FindFileData.cFileName);
|
/* loop for all the cached entries */
|
||||||
if (Info.Category == -1)
|
for (pCachedEntry = CachedEntriesHead.Flink; pCachedEntry != &CachedEntriesHead; pCachedEntry = pCachedEntry->Flink)
|
||||||
{
|
{
|
||||||
Info.Category = ParserGetInt(L"Section", L"Category", FindFileData.cFileName);
|
Info = CONTAINING_RECORD(pCachedEntry, APPLICATION_INFO, List);
|
||||||
if (Info.Category == -1)
|
|
||||||
continue;
|
/* do we already have this entry in cache? */
|
||||||
|
if(_wcsicmp(FindFileData.cFileName, Info->cFileName) == 0)
|
||||||
|
{
|
||||||
|
/* is it current enough, or the file has been modified since our last time here? */
|
||||||
|
if (CompareFileTime(&FindFileData.ftLastWriteTime, &Info->ftCacheStamp) == 1)
|
||||||
|
{
|
||||||
|
/* recreate our cache, this is the slow path */
|
||||||
|
RemoveEntryList(&Info->List);
|
||||||
|
HeapFree(GetProcessHeap(), 0, Info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* speedy path, compare directly, we already have the data */
|
||||||
|
goto skip_if_cached;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EnumType != Info.Category && EnumType != ENUM_ALL_AVAILABLE) continue;
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GET_STRING1(L"Name", Info.szName);
|
/* create a new entry */
|
||||||
GET_STRING1(L"URLDownload", Info.szUrlDownload);
|
Info = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(APPLICATION_INFO));
|
||||||
|
|
||||||
GET_STRING2(L"RegName", Info.szRegName);
|
if(!Info)
|
||||||
GET_STRING2(L"Version", Info.szVersion);
|
break;
|
||||||
GET_STRING2(L"License", Info.szLicense);
|
|
||||||
GET_STRING2(L"Description", Info.szDesc);
|
Info->Category = ParserGetInt(L"Category", FindFileData.cFileName);
|
||||||
GET_STRING2(L"Size", Info.szSize);
|
|
||||||
GET_STRING2(L"URLSite", Info.szUrlSite);
|
/* copy the cache-related fields for the next time */
|
||||||
GET_STRING2(L"CDPath", Info.szCDPath);
|
RtlCopyMemory(&Info->cFileName, &FindFileData.cFileName, MAX_PATH);
|
||||||
|
RtlCopyMemory(&Info->ftCacheStamp, &FindFileData.ftLastWriteTime, sizeof(FILETIME));
|
||||||
|
|
||||||
|
/* add our cached entry to the cached list */
|
||||||
|
InsertTailList(&CachedEntriesHead, &Info->List);
|
||||||
|
|
||||||
|
skip_if_cached:
|
||||||
|
|
||||||
|
if (Info->Category == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (EnumType != Info->Category && EnumType != ENUM_ALL_AVAILABLE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* if our cache hit was only partial, we need to parse
|
||||||
|
and lazily fill the rest of fields only when needed */
|
||||||
|
|
||||||
|
if (Info->szUrlDownload[0] == 0)
|
||||||
|
{
|
||||||
|
GET_STRING1(L"Name", Info->szName);
|
||||||
|
GET_STRING1(L"URLDownload", Info->szUrlDownload);
|
||||||
|
|
||||||
|
GET_STRING2(L"RegName", Info->szRegName);
|
||||||
|
GET_STRING2(L"Version", Info->szVersion);
|
||||||
|
GET_STRING2(L"License", Info->szLicense);
|
||||||
|
GET_STRING2(L"Description", Info->szDesc);
|
||||||
|
GET_STRING2(L"Size", Info->szSize);
|
||||||
|
GET_STRING2(L"URLSite", Info->szUrlSite);
|
||||||
|
GET_STRING2(L"CDPath", Info->szCDPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lpEnumProc(Info))
|
||||||
|
break;
|
||||||
|
|
||||||
if (!lpEnumProc(&Info)) break;
|
|
||||||
} while (FindNextFileW(hFind, &FindFileData) != 0);
|
} while (FindNextFileW(hFind, &FindFileData) != 0);
|
||||||
|
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
|
|
|
@ -14,19 +14,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Приложения"
|
POPUP "&Приложения"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Слагане", ID_INSTALL
|
MENUITEM "&Слагане\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Махане", ID_UNINSTALL
|
MENUITEM "&Махане\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Промяна", ID_MODIFY
|
MENUITEM "&Промяна", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Пре&махване от регистъра", ID_REGREMOVE
|
MENUITEM "Пре&махване от регистъра", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "О&пресняване", ID_REFRESH
|
MENUITEM "О&пресняване\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Помощ"
|
POPUP "Помощ"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Помощ", ID_HELP, GRAYED
|
MENUITEM "Помощ\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "За", ID_ABOUT
|
MENUITEM "За", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -44,15 +44,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Слагане", ID_INSTALL
|
MENUITEM "&Слагане\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Махане", ID_UNINSTALL
|
MENUITEM "&Махане\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Промяна", ID_MODIFY
|
MENUITEM "&Промяна", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Пре&махване от регистъра", ID_REGREMOVE
|
MENUITEM "Пре&махване от регистъра", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "О&пресняване", ID_REFRESH
|
MENUITEM "О&пресняване\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -15,19 +15,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programy"
|
POPUP "&Programy"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalovat", ID_INSTALL
|
MENUITEM "&Instalovat\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Odinstalovat", ID_UNINSTALL
|
MENUITEM "&Odinstalovat\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Změnit", ID_MODIFY
|
MENUITEM "&Změnit", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Odstranit z ®istru", ID_REGREMOVE
|
MENUITEM "Odstranit z ®istru", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Ob&novit", ID_REFRESH
|
MENUITEM "Ob&novit\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Aktualizovat databázi", ID_RESETDB
|
MENUITEM "&Aktualizovat databázi\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Nápověda"
|
POPUP "Nápověda"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Nápověda", ID_HELP, GRAYED
|
MENUITEM "Nápověda\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "O programu...", ID_ABOUT
|
MENUITEM "O programu...", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -45,15 +45,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalovat", ID_INSTALL
|
MENUITEM "&Instalovat\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Odinstalovat", ID_UNINSTALL
|
MENUITEM "&Odinstalovat\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Změnit", ID_MODIFY
|
MENUITEM "&Změnit", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Odstranit z ®istru", ID_REGREMOVE
|
MENUITEM "Odstranit z ®istru", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Ob&novit", ID_REFRESH
|
MENUITEM "Ob&novit\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Aktualizovat databázi", ID_RESETDB
|
MENUITEM "&Aktualizovat databázi\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programme"
|
POPUP "&Programme"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installieren", ID_INSTALL
|
MENUITEM "&Installieren\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Deinstallieren", ID_UNINSTALL
|
MENUITEM "&Deinstallieren\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Ändern", ID_MODIFY
|
MENUITEM "&Ändern", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Aus &Registry entfernen", ID_REGREMOVE
|
MENUITEM "Aus &Registry entfernen", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Aktualisieren", ID_REFRESH
|
MENUITEM "&Aktualisieren\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Da&tenbank aktualisieren", ID_RESETDB
|
MENUITEM "Da&tenbank aktualisieren\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Hilfe"
|
POPUP "Hilfe"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Hilfe", ID_HELP, GRAYED
|
MENUITEM "Hilfe\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Über", ID_ABOUT
|
MENUITEM "Über", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -40,15 +40,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installieren", ID_INSTALL
|
MENUITEM "&Installieren\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Deinstallieren", ID_UNINSTALL
|
MENUITEM "&Deinstallieren\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Ändern", ID_MODIFY
|
MENUITEM "&Ändern", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Aus &Registry entfernen", ID_REGREMOVE
|
MENUITEM "Aus &Registry entfernen", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Aktualisieren", ID_REFRESH
|
MENUITEM "&Aktualisieren\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Da&tenbank aktualisieren", ID_RESETDB
|
MENUITEM "Da&tenbank aktualisieren\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programs"
|
POPUP "&Programs"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Install", ID_INSTALL
|
MENUITEM "&Install\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Uninstall", ID_UNINSTALL
|
MENUITEM "&Uninstall\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modify", ID_MODIFY
|
MENUITEM "&Modify", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Refresh", ID_REFRESH
|
MENUITEM "&Refresh\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Help"
|
POPUP "Help"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Help", ID_HELP, GRAYED
|
MENUITEM "Help\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "About", ID_ABOUT
|
MENUITEM "About", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -40,15 +40,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Install", ID_INSTALL
|
MENUITEM "&Install\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Uninstall", ID_UNINSTALL
|
MENUITEM "&Uninstall\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modify", ID_MODIFY
|
MENUITEM "&Modify", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Refresh", ID_REFRESH
|
MENUITEM "&Refresh\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -13,19 +13,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programas"
|
POPUP "&Programas"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalar", ID_INSTALL
|
MENUITEM "&Instalar\tCtrl+Intro", ID_INSTALL
|
||||||
MENUITEM "&Desinstalar", ID_UNINSTALL
|
MENUITEM "&Desinstalar\tCtrl+Supr", ID_UNINSTALL
|
||||||
MENUITEM "&Modificar", ID_MODIFY
|
MENUITEM "&Modificar", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Eliminar del Registro", ID_REGREMOVE
|
MENUITEM "&Eliminar del Registro", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Recargar", ID_REFRESH
|
MENUITEM "&Recargar\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Actualizar el listado desde Internet", ID_RESETDB
|
MENUITEM "&Actualizar el listado desde Internet\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Ayuda"
|
POPUP "Ayuda"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Ayuda", ID_HELP, GRAYED
|
MENUITEM "Ayuda\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Acerca de", ID_ABOUT
|
MENUITEM "Acerca de", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -43,19 +43,19 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalar", ID_INSTALL
|
MENUITEM "&Instalar\tCtrl+Intro", ID_INSTALL
|
||||||
MENUITEM "&Desinstalar", ID_UNINSTALL
|
MENUITEM "&Desinstalar\tCtrl+Supr", ID_UNINSTALL
|
||||||
MENUITEM "&Modificar", ID_MODIFY
|
MENUITEM "&Modificar", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Eliminar del Registro", ID_REGREMOVE
|
MENUITEM "&Eliminar del Registro", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Recargar", ID_REFRESH
|
MENUITEM "&Recargar\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Actualizar listado desde Internet", ID_RESETDB
|
MENUITEM "&Actualizar listado desde Internet\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 215
|
IDD_SETTINGS_DIALOG DIALOGEX 0, 0, 250, 200
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Ajustes"
|
CAPTION "Ajustes"
|
||||||
FONT 8, "MS Shell Dlg"
|
FONT 8, "MS Shell Dlg"
|
||||||
|
@ -69,16 +69,16 @@ BEGIN
|
||||||
EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP | ES_AUTOHSCROLL
|
EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP | ES_AUTOHSCROLL
|
||||||
PUSHBUTTON "&Seleccionar", IDC_CHOOSE, 187, 85, 50, 14
|
PUSHBUTTON "&Seleccionar", IDC_CHOOSE, 187, 85, 50, 14
|
||||||
AUTOCHECKBOX "&Borrar el instalador del programa tras su instalación", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
|
AUTOCHECKBOX "&Borrar el instalador del programa tras su instalación", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
|
||||||
GROUPBOX "Proxy", -1, 4, 116, 240, 76
|
GROUPBOX "Proxy", -1, 4, 116, 240, 61
|
||||||
CONTROL "System proxy settings", IDC_PROXY_DEFAULT, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 130, 210, 10
|
CONTROL "Utilizar el proxy del sistema", IDC_PROXY_DEFAULT, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 15, 128, 218, 10
|
||||||
CONTROL "Direct (No proxy)", IDC_NO_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 145, 210, 10
|
CONTROL "Conexión directa (sin nada)", IDC_NO_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 141, 218, 10
|
||||||
CONTROL "Proxy", IDC_USE_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 160, 74, 10
|
CONTROL "Proxy:", IDC_USE_PROXY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 15, 154, 35, 10
|
||||||
EDITTEXT IDC_PROXY_SERVER, 90, 160, 147, 12, ES_AUTOHSCROLL | WS_DISABLED
|
EDITTEXT IDC_PROXY_SERVER, 51, 153, 70, 14, ES_AUTOHSCROLL
|
||||||
LTEXT "No proxy for", -1, 27, 175, 64, 10
|
LTEXT "Sin proxy para:", -1, 125, 154, 50, 8, SS_RIGHT
|
||||||
EDITTEXT IDC_NO_PROXY_FOR, 90, 175, 147, 12, ES_AUTOHSCROLL | WS_DISABLED
|
EDITTEXT IDC_NO_PROXY_FOR, 177, 153, 61, 14, ES_AUTOHSCROLL
|
||||||
PUSHBUTTON "Por defecto", IDC_DEFAULT_SETTINGS, 8, 195, 60, 14
|
PUSHBUTTON "Por defecto", IDC_DEFAULT_SETTINGS, 8, 180, 60, 14
|
||||||
PUSHBUTTON "Aceptar", IDOK, 116, 195, 60, 14
|
PUSHBUTTON "Aceptar", IDOK, 116, 180, 60, 14
|
||||||
PUSHBUTTON "Cancelar", IDCANCEL, 181, 195, 60, 14
|
PUSHBUTTON "Cancelar", IDCANCEL, 181, 180, 60, 14
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_INSTALL_DIALOG DIALOGEX 0, 0, 216, 97
|
IDD_INSTALL_DIALOG DIALOGEX 0, 0, 216, 97
|
||||||
|
|
|
@ -10,19 +10,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programmes"
|
POPUP "&Programmes"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installer", ID_INSTALL
|
MENUITEM "&Installer\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Désinstaller", ID_UNINSTALL
|
MENUITEM "&Désinstaller\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifier", ID_MODIFY
|
MENUITEM "&Modifier", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Supprimer du registre", ID_REGREMOVE
|
MENUITEM "&Supprimer du registre", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Rafraîchir", ID_REFRESH
|
MENUITEM "&Rafraîchir\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Me&ttre à jour la base", ID_RESETDB
|
MENUITEM "Me&ttre à jour la base\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Aide"
|
POPUP "Aide"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Aide", ID_HELP, GRAYED
|
MENUITEM "Aide\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "À propos", ID_ABOUT
|
MENUITEM "À propos", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -40,15 +40,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installer", ID_INSTALL
|
MENUITEM "&Installer\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Désinstaller", ID_UNINSTALL
|
MENUITEM "&Désinstaller\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifier", ID_MODIFY
|
MENUITEM "&Modifier", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Supprimer du registre", ID_REGREMOVE
|
MENUITEM "&Supprimer du registre", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Rafraîchir", ID_REFRESH
|
MENUITEM "&Rafraîchir\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Me&ttre à jour la base", ID_RESETDB
|
MENUITEM "Me&ttre à jour la base\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -12,19 +12,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&תכניות"
|
POPUP "&תכניות"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "התקנה", ID_INSTALL
|
MENUITEM "התקנה\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "הסרה", ID_UNINSTALL
|
MENUITEM "הסרה\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "שינוי", ID_MODIFY
|
MENUITEM "שינוי", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "הסרה מהרשום", ID_REGREMOVE
|
MENUITEM "הסרה מהרשום", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "רענון", ID_REFRESH
|
MENUITEM "רענון\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "עזרה"
|
POPUP "עזרה"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "עזרה", ID_HELP, GRAYED
|
MENUITEM "עזרה\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "אודות", ID_ABOUT
|
MENUITEM "אודות", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -42,15 +42,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "התקנה", ID_INSTALL
|
MENUITEM "התקנה\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "הסרה", ID_UNINSTALL
|
MENUITEM "הסרה\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "שינוי", ID_MODIFY
|
MENUITEM "שינוי", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "הסרה מהרשום", ID_REGREMOVE
|
MENUITEM "הסרה מהרשום", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "רענן", ID_REFRESH
|
MENUITEM "רענן\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programmi"
|
POPUP "&Programmi"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installa", ID_INSTALL
|
MENUITEM "&Installa\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Disinstalla", ID_UNINSTALL
|
MENUITEM "&Disinstalla\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifica", ID_MODIFY
|
MENUITEM "&Modifica", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Remuovi da Registry", ID_REGREMOVE
|
MENUITEM "&Remuovi da Registry", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Aggiorna", ID_REFRESH
|
MENUITEM "&Aggiorna\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "?"
|
POPUP "?"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Guida", ID_HELP, GRAYED
|
MENUITEM "Guida\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Informazioni", ID_ABOUT
|
MENUITEM "Informazioni", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -40,15 +40,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installa", ID_INSTALL
|
MENUITEM "&Installa\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Disinstalla", ID_UNINSTALL
|
MENUITEM "&Disinstalla\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifica", ID_MODIFY
|
MENUITEM "&Modifica", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Rimuovi da Registry", ID_REGREMOVE
|
MENUITEM "&Rimuovi da Registry", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Aggiorna", ID_REFRESH
|
MENUITEM "&Aggiorna\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "プログラム(&P)"
|
POPUP "プログラム(&P)"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "インストール(&I)", ID_INSTALL
|
MENUITEM "インストール(&I)\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "アンインストール(&U)", ID_UNINSTALL
|
MENUITEM "アンインストール(&U)\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "変更(&M)", ID_MODIFY
|
MENUITEM "変更(&M)", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "レジストリから削除(&R)", ID_REGREMOVE
|
MENUITEM "レジストリから削除(&R)\tF5", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "更新(&R)", ID_REFRESH
|
MENUITEM "更新(&R)", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "アップデート データベース(&T)", ID_RESETDB
|
MENUITEM "アップデート データベース(&T)\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "ヘルプ"
|
POPUP "ヘルプ"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "ヘルプ", ID_HELP, GRAYED
|
MENUITEM "ヘルプ\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "バージョン情報", ID_ABOUT
|
MENUITEM "バージョン情報", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -40,15 +40,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "インストール(&I)", ID_INSTALL
|
MENUITEM "インストール(&I)\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "アンインストール(&U)", ID_UNINSTALL
|
MENUITEM "アンインストール(&U)\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "変更(&M)", ID_MODIFY
|
MENUITEM "変更(&M)", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "レジストリから削除(&R)", ID_REGREMOVE
|
MENUITEM "レジストリから削除(&R)\tF5", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "更新(&R)", ID_REFRESH
|
MENUITEM "更新(&R)", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "アップデート データベース(&T)", ID_RESETDB
|
MENUITEM "アップデート データベース(&T)\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programmer"
|
POPUP "&Programmer"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installere", ID_INSTALL
|
MENUITEM "&Installere\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Avinstallere", ID_UNINSTALL
|
MENUITEM "&Avinstallere\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Endre", ID_MODIFY
|
MENUITEM "&Endre", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Oppdatere", ID_REFRESH
|
MENUITEM "&Oppdatere\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Hjelp"
|
POPUP "Hjelp"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Hjelp", ID_HELP, GRAYED
|
MENUITEM "Hjelp\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Om", ID_ABOUT
|
MENUITEM "Om", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -40,15 +40,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installere", ID_INSTALL
|
MENUITEM "&Installere\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Avinstallere", ID_UNINSTALL
|
MENUITEM "&Avinstallere\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Endre", ID_MODIFY
|
MENUITEM "&Endre", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
MENUITEM "&Remove from Registry", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Oppdater", ID_REFRESH
|
MENUITEM "&Oppdater\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -18,19 +18,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programy"
|
POPUP "&Programy"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instaluj", ID_INSTALL
|
MENUITEM "&Instaluj\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Odinstaluj", ID_UNINSTALL
|
MENUITEM "&Odinstaluj\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modyfikuj", ID_MODIFY
|
MENUITEM "&Modyfikuj", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Usuń z rejestru", ID_REGREMOVE
|
MENUITEM "&Usuń z rejestru", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "O&dśwież", ID_REFRESH
|
MENUITEM "O&dśwież\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Ak&tualizuj bazę programów", ID_RESETDB
|
MENUITEM "Ak&tualizuj bazę programów\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Pomoc"
|
POPUP "Pomoc"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Pomoc", ID_HELP, GRAYED
|
MENUITEM "Pomoc\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "O programie", ID_ABOUT
|
MENUITEM "O programie", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -48,15 +48,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instaluj", ID_INSTALL
|
MENUITEM "&Instaluj\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Odinstaluj", ID_UNINSTALL
|
MENUITEM "&Odinstaluj\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modyfikuj", ID_MODIFY
|
MENUITEM "&Modyfikuj", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Usuń z rejestru", ID_REGREMOVE
|
MENUITEM "&Usuń z rejestru", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Odśwież", ID_REFRESH
|
MENUITEM "&Odśwież\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Ak&tualizuj bazę programów", ID_RESETDB
|
MENUITEM "Ak&tualizuj bazę programów\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -12,19 +12,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programas"
|
POPUP "&Programas"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "I&nstalar", ID_INSTALL
|
MENUITEM "I&nstalar\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Desinstalar", ID_UNINSTALL
|
MENUITEM "&Desinstalar\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modificar", ID_MODIFY
|
MENUITEM "&Modificar", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Remover do Registro", ID_REGREMOVE
|
MENUITEM "&Remover do Registro", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "A&tualizar", ID_REFRESH
|
MENUITEM "A&tualizar\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Aj&uda"
|
POPUP "Aj&uda"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Aj&uda", ID_HELP, GRAYED
|
MENUITEM "Aj&uda\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "&Sobre", ID_ABOUT
|
MENUITEM "&Sobre", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -42,15 +42,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalar", ID_INSTALL
|
MENUITEM "&Instalar\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Desinstalar", ID_UNINSTALL
|
MENUITEM "&Desinstalar\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modificar", ID_MODIFY
|
MENUITEM "&Modificar", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Remover do Registro", ID_REGREMOVE
|
MENUITEM "&Remover do Registro", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Atualizar", ID_REFRESH
|
MENUITEM "&Atualizar\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -16,19 +16,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programe"
|
POPUP "&Programe"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalează", ID_INSTALL
|
MENUITEM "&Instalează\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Dezinstalează", ID_UNINSTALL
|
MENUITEM "&Dezinstalează\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifică", ID_MODIFY
|
MENUITEM "&Modifică", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Elimină din registru", ID_REGREMOVE
|
MENUITEM "&Elimină din registru", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Împ&rospătează", ID_REFRESH
|
MENUITEM "Împ&rospătează\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Actualizează baza de date", ID_RESETDB
|
MENUITEM "&Actualizează baza de date\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Aj&utor"
|
POPUP "Aj&utor"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Manual…", ID_HELP, GRAYED
|
MENUITEM "&Manual…\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "&Despre…", ID_ABOUT
|
MENUITEM "&Despre…", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -46,15 +46,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalează", ID_INSTALL
|
MENUITEM "&Instalează\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Dezinstalează", ID_UNINSTALL
|
MENUITEM "&Dezinstalează\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifică", ID_MODIFY
|
MENUITEM "&Modifică", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Elimină din registru", ID_REGREMOVE
|
MENUITEM "&Elimină din registru", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Împ&rospătează", ID_REFRESH
|
MENUITEM "Împ&rospătează\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Actualizează baza de date", ID_RESETDB
|
MENUITEM "&Actualizează baza de date\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Программы"
|
POPUP "&Программы"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "У&становить", ID_INSTALL
|
MENUITEM "У&становить\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Удалить", ID_UNINSTALL
|
MENUITEM "&Удалить\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Изменить", ID_MODIFY
|
MENUITEM "&Изменить", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "У&далить из реестра", ID_REGREMOVE
|
MENUITEM "У&далить из реестра", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Обновить", ID_REFRESH
|
MENUITEM "&Обновить\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Обновить &базу данных", ID_RESETDB
|
MENUITEM "Обновить &базу данных\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Справка"
|
POPUP "Справка"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Содержание", ID_HELP, GRAYED
|
MENUITEM "Содержание\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "О программе", ID_ABOUT
|
MENUITEM "О программе", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -40,15 +40,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Установить", ID_INSTALL
|
MENUITEM "&Установить\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Удалить", ID_UNINSTALL
|
MENUITEM "&Удалить\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Изменить", ID_MODIFY
|
MENUITEM "&Изменить", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "У&далить из реестра", ID_REGREMOVE
|
MENUITEM "У&далить из реестра", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Обновить", ID_REFRESH
|
MENUITEM "&Обновить\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Обновить &базу данных", ID_RESETDB
|
MENUITEM "Обновить &базу данных\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -15,19 +15,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programy"
|
POPUP "&Programy"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Inštalovať", ID_INSTALL
|
MENUITEM "&Inštalovať\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "O&dinštalovať", ID_UNINSTALL
|
MENUITEM "O&dinštalovať\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Zmeniť", ID_MODIFY
|
MENUITEM "&Zmeniť", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Odst&rániť z Registrov", ID_REGREMOVE
|
MENUITEM "Odst&rániť z Registrov", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Obnoviť", ID_REFRESH
|
MENUITEM "&Obnoviť\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Pomocník"
|
POPUP "Pomocník"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Pomocník", ID_HELP, GRAYED
|
MENUITEM "Pomocník\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Čo je ...", ID_ABOUT
|
MENUITEM "Čo je ...", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -45,15 +45,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Inštalovať", ID_INSTALL
|
MENUITEM "&Inštalovať\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "O&dinštalovať", ID_UNINSTALL
|
MENUITEM "O&dinštalovať\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Zmeniť", ID_MODIFY
|
MENUITEM "&Zmeniť", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Odst&rániť z Registrov", ID_REGREMOVE
|
MENUITEM "Odst&rániť z Registrov", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Obnoviť", ID_REFRESH
|
MENUITEM "&Obnoviť\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -14,19 +14,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Programe"
|
POPUP "&Programe"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalo", ID_INSTALL
|
MENUITEM "&Instalo\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Uninstall", ID_UNINSTALL
|
MENUITEM "&Uninstall\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifiko", ID_MODIFY
|
MENUITEM "&Modifiko", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Hiq nga Regjistri", ID_REGREMOVE
|
MENUITEM "Hiq nga Regjistri", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Rifresko", ID_REFRESH
|
MENUITEM "&Rifresko\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Ndihmë"
|
POPUP "Ndihmë"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Ndihmë", ID_HELP, GRAYED
|
MENUITEM "Ndihmë\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Rreth", ID_ABOUT
|
MENUITEM "Rreth", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -44,15 +44,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Instalo", ID_INSTALL
|
MENUITEM "&Instalo\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Uninstall", ID_UNINSTALL
|
MENUITEM "&Uninstall\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Modifiko", ID_MODIFY
|
MENUITEM "&Modifiko", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Hiq nga Regjistri", ID_REGREMOVE
|
MENUITEM "Hiq nga Regjistri", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Rifresko", ID_REFRESH
|
MENUITEM "&Rifresko\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -17,19 +17,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Program"
|
POPUP "&Program"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installera", ID_INSTALL
|
MENUITEM "&Installera\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Avinstallera", ID_UNINSTALL
|
MENUITEM "&Avinstallera\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Ändra", ID_MODIFY
|
MENUITEM "&Ändra", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Ta bort från Registret", ID_REGREMOVE
|
MENUITEM "&Ta bort från Registret", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Uppdatera", ID_REFRESH
|
MENUITEM "&Uppdatera\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "Hjälp"
|
POPUP "Hjälp"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Hjälp", ID_HELP, GRAYED
|
MENUITEM "Hjälp\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Om...", ID_ABOUT
|
MENUITEM "Om...", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -47,15 +47,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Installera", ID_INSTALL
|
MENUITEM "&Installera\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "&Avinstallera", ID_UNINSTALL
|
MENUITEM "&Avinstallera\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Ändra", ID_MODIFY
|
MENUITEM "&Ändra", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Ta bort från Registret", ID_REGREMOVE
|
MENUITEM "&Ta bort från Registret", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Uppdatera", ID_REFRESH
|
MENUITEM "&Uppdatera\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -12,19 +12,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "Y&azılım"
|
POPUP "Y&azılım"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Kur", ID_INSTALL
|
MENUITEM "&Kur\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "K&aldır", ID_UNINSTALL
|
MENUITEM "K&aldır\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Değiştir", ID_MODIFY
|
MENUITEM "&Değiştir", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Girişi Değer Defteri'nden Kaldır", ID_REGREMOVE
|
MENUITEM "&Girişi Değer Defteri'nden Kaldır", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Yenile", ID_REFRESH
|
MENUITEM "&Yenile\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Ya&zılım Veri Tabanını Yenile", ID_RESETDB
|
MENUITEM "Ya&zılım Veri Tabanını Yenile\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "&Yardım"
|
POPUP "&Yardım"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Yardım", ID_HELP, GRAYED
|
MENUITEM "&Yardım\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "&Üzerine...", ID_ABOUT
|
MENUITEM "&Üzerine...", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -42,15 +42,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Kur", ID_INSTALL
|
MENUITEM "&Kur\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "K&aldır", ID_UNINSTALL
|
MENUITEM "K&aldır\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Değiştir", ID_MODIFY
|
MENUITEM "&Değiştir", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Girişi Değer Defteri'nden Kaldır", ID_REGREMOVE
|
MENUITEM "&Girişi Değer Defteri'nden Kaldır", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Yenile", ID_REFRESH
|
MENUITEM "&Yenile\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Ya&zılım Veri Tabanını Yenile", ID_RESETDB
|
MENUITEM "Ya&zılım Veri Tabanını Yenile\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -18,19 +18,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "&Програми"
|
POPUP "&Програми"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Встановити", ID_INSTALL
|
MENUITEM "&Встановити\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "Вид&алити", ID_UNINSTALL
|
MENUITEM "Вид&алити\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Змінити", ID_MODIFY
|
MENUITEM "&Змінити", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Вида&лити з реєстру", ID_REGREMOVE
|
MENUITEM "Вида&лити з реєстру", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Оновити", ID_REFRESH
|
MENUITEM "&Оновити\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "&Довідка"
|
POPUP "&Довідка"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "Дов&ідка", ID_HELP, GRAYED
|
MENUITEM "Дов&ідка\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "Про про&граму...", ID_ABOUT
|
MENUITEM "Про про&граму...", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -48,15 +48,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "&Встановити", ID_INSTALL
|
MENUITEM "&Встановити\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "В&идалити", ID_UNINSTALL
|
MENUITEM "В&идалити\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "&Змінити", ID_MODIFY
|
MENUITEM "&Змінити", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Вид&алити з реєстру", ID_REGREMOVE
|
MENUITEM "Вид&алити з реєстру", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Оновити", ID_REFRESH
|
MENUITEM "&Оновити\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Update Da&tabase", ID_RESETDB
|
MENUITEM "Update Da&tabase\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -12,19 +12,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "程序(&P)"
|
POPUP "程序(&P)"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "安装(&I)", ID_INSTALL
|
MENUITEM "安装(&I)\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "卸载(&U)", ID_UNINSTALL
|
MENUITEM "卸载(&U)\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "修改(&M)", ID_MODIFY
|
MENUITEM "修改(&M)", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "从注册表删除(&E)", ID_REGREMOVE
|
MENUITEM "从注册表删除(&E)", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "刷新(&R)", ID_REFRESH
|
MENUITEM "刷新(&R)\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "更新数据库(&A)", ID_RESETDB
|
MENUITEM "更新数据库(&A)\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "帮助"
|
POPUP "帮助"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "帮助内容", ID_HELP, GRAYED
|
MENUITEM "帮助内容\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "关于", ID_ABOUT
|
MENUITEM "关于", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -42,15 +42,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "安装(&I)", ID_INSTALL
|
MENUITEM "安装(&I)\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "卸载(&U)", ID_UNINSTALL
|
MENUITEM "卸载(&U)\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "修改(&M)", ID_MODIFY
|
MENUITEM "修改(&M)", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "从注册表删除(&E)", ID_REGREMOVE
|
MENUITEM "从注册表删除(&E)", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "刷新(&R)", ID_REFRESH
|
MENUITEM "刷新(&R)\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "更新数据库(&A)", ID_RESETDB
|
MENUITEM "更新数据库(&A)\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -12,19 +12,19 @@ BEGIN
|
||||||
END
|
END
|
||||||
POPUP "程式(&P)"
|
POPUP "程式(&P)"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "安裝(&I)", ID_INSTALL
|
MENUITEM "安裝(&I)\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "解除安裝(&U)", ID_UNINSTALL
|
MENUITEM "解除安裝(&U)\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "修改(&M)", ID_MODIFY
|
MENUITEM "修改(&M)", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "從登錄檔刪除(&E)", ID_REGREMOVE
|
MENUITEM "從登錄檔刪除(&E)", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "重新整理(&R)", ID_REFRESH
|
MENUITEM "重新整理(&R)\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "更新資料庫(&A)", ID_RESETDB
|
MENUITEM "更新資料庫(&A)\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
POPUP "幫助"
|
POPUP "幫助"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "幫助內容", ID_HELP, GRAYED
|
MENUITEM "幫助內容\tF1", ID_HELP, GRAYED
|
||||||
MENUITEM "關於", ID_ABOUT
|
MENUITEM "關於", ID_ABOUT
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -42,15 +42,15 @@ IDR_APPLICATIONMENU MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "popup"
|
POPUP "popup"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "安裝(&I)", ID_INSTALL
|
MENUITEM "安裝(&I)\tCtrl+Enter", ID_INSTALL
|
||||||
MENUITEM "解除安裝(&U)", ID_UNINSTALL
|
MENUITEM "解除安裝(&U)\tCtrl+Del", ID_UNINSTALL
|
||||||
MENUITEM "修改(&M)", ID_MODIFY
|
MENUITEM "修改(&M)", ID_MODIFY
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "從登錄檔刪除(&E)", ID_REGREMOVE
|
MENUITEM "從登錄檔刪除(&E)", ID_REGREMOVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "重新整理(&R)", ID_REFRESH
|
MENUITEM "重新整理(&R)\tF5", ID_REFRESH
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "更新資料庫(&A)", ID_RESETDB
|
MENUITEM "更新資料庫(&A)\tCtrl+F5", ID_RESETDB
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,10 @@
|
||||||
* FILE: base/applications/rapps/misc.c
|
* FILE: base/applications/rapps/misc.c
|
||||||
* PURPOSE: Misc functions
|
* PURPOSE: Misc functions
|
||||||
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <ndk/rtlfuncs.h>
|
||||||
#include "rapps.h"
|
#include "rapps.h"
|
||||||
|
|
||||||
/* SESSION Operation */
|
/* SESSION Operation */
|
||||||
|
@ -13,6 +15,9 @@
|
||||||
#define EXTRACT_EXTRACTFILES 0x00000002
|
#define EXTRACT_EXTRACTFILES 0x00000002
|
||||||
|
|
||||||
static HANDLE hLog = NULL;
|
static HANDLE hLog = NULL;
|
||||||
|
WCHAR szCachedINISectionLocale[MAX_PATH] = L"Section.";
|
||||||
|
WCHAR szCachedINISectionLocaleNeutral[MAX_PATH] = {0};
|
||||||
|
BYTE bCachedSectionStatus = FALSE;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -168,6 +173,7 @@ ShowPopupMenu(HWND hwnd, UINT MenuID, UINT DefaultItem)
|
||||||
mii.cbSize = sizeof(mii);
|
mii.cbSize = sizeof(mii);
|
||||||
mii.fMask = MIIM_STATE;
|
mii.fMask = MIIM_STATE;
|
||||||
GetMenuItemInfo(hPopupMenu, DefaultItem, FALSE, &mii);
|
GetMenuItemInfo(hPopupMenu, DefaultItem, FALSE, &mii);
|
||||||
|
|
||||||
if (!(mii.fState & MFS_GRAYED))
|
if (!(mii.fState & MFS_GRAYED))
|
||||||
SetMenuDefaultItem(hPopupMenu, DefaultItem, FALSE);
|
SetMenuDefaultItem(hPopupMenu, DefaultItem, FALSE);
|
||||||
|
|
||||||
|
@ -392,3 +398,117 @@ WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg)
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LPWSTR GetINIFullPath(LPCWSTR lpFileName)
|
||||||
|
{
|
||||||
|
WCHAR szDir[MAX_PATH];
|
||||||
|
static WCHAR szBuffer[MAX_PATH];
|
||||||
|
|
||||||
|
GetStorageDirectory(szDir, _countof(szDir));
|
||||||
|
StringCbPrintfW(szBuffer, sizeof(szBuffer), L"%ls\\rapps\\%ls", szDir, lpFileName);
|
||||||
|
|
||||||
|
return szBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UINT ParserGetString(LPCWSTR lpKeyName, LPWSTR lpReturnedString, UINT nSize, LPCWSTR lpFileName)
|
||||||
|
{
|
||||||
|
PWSTR lpFullFileName = GetINIFullPath(lpFileName);
|
||||||
|
LPSTR lpRequiredBuf = HeapAlloc(GetProcessHeap(), 0, nSize);
|
||||||
|
DWORD dwResult;
|
||||||
|
|
||||||
|
if (!lpRequiredBuf)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* we don't have cached section strings for the current system language, create them */
|
||||||
|
if(bCachedSectionStatus == FALSE)
|
||||||
|
{
|
||||||
|
WCHAR szLocale[4 + 1];
|
||||||
|
DWORD len;
|
||||||
|
|
||||||
|
/* find out what is the current system lang code (e.g. "0a") and append it to SectionLocale */
|
||||||
|
GetLocaleInfoW(GetUserDefaultLCID(), LOCALE_ILANGUAGE,
|
||||||
|
szLocale, _countof(szLocale));
|
||||||
|
|
||||||
|
StringCbCatW(szCachedINISectionLocale, sizeof(szCachedINISectionLocale), szLocale);
|
||||||
|
|
||||||
|
/* copy the locale-dependent string into the buffer of the future neutral one */
|
||||||
|
StringCbCopyW(szCachedINISectionLocaleNeutral,
|
||||||
|
sizeof(szCachedINISectionLocale),
|
||||||
|
szCachedINISectionLocale);
|
||||||
|
|
||||||
|
/* turn "Section.0c0a" into "Section.0a", keeping just the neutral lang part */
|
||||||
|
len = wcslen(szCachedINISectionLocale);
|
||||||
|
|
||||||
|
memmove((szCachedINISectionLocaleNeutral + len) - 4,
|
||||||
|
(szCachedINISectionLocaleNeutral + len) - 2,
|
||||||
|
(2 * sizeof(WCHAR)) + sizeof(UNICODE_NULL));
|
||||||
|
|
||||||
|
/* finally, mark us as cache-friendly for the next time */
|
||||||
|
bCachedSectionStatus = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1st - find localized strings (e.g. "Section.0c0a") */
|
||||||
|
dwResult = GetPrivateProfileStringW(szCachedINISectionLocale,
|
||||||
|
lpKeyName,
|
||||||
|
NULL,
|
||||||
|
lpReturnedString,
|
||||||
|
nSize,
|
||||||
|
lpFullFileName);
|
||||||
|
|
||||||
|
if (dwResult != 0)
|
||||||
|
goto skip;
|
||||||
|
|
||||||
|
/* 2nd - if they weren't present check for neutral sub-langs/ generic translations (e.g. "Section.0a") */
|
||||||
|
dwResult = GetPrivateProfileStringW(szCachedINISectionLocaleNeutral,
|
||||||
|
lpKeyName,
|
||||||
|
NULL,
|
||||||
|
lpReturnedString,
|
||||||
|
nSize,
|
||||||
|
lpFullFileName);
|
||||||
|
|
||||||
|
if (dwResult != 0)
|
||||||
|
goto skip;
|
||||||
|
|
||||||
|
/* 3rd - if they weren't present fallback to standard english strings (just "Section") */
|
||||||
|
dwResult = GetPrivateProfileStringW(L"Section",
|
||||||
|
lpKeyName,
|
||||||
|
NULL,
|
||||||
|
lpReturnedString,
|
||||||
|
nSize,
|
||||||
|
lpFullFileName);
|
||||||
|
|
||||||
|
if (dwResult == 0)
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, lpRequiredBuf);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
skip:
|
||||||
|
|
||||||
|
/* get rid of the dynamically allocated ANSI buffer */
|
||||||
|
HeapFree(GetProcessHeap(), 0, lpRequiredBuf);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT ParserGetInt(LPCWSTR lpKeyName, LPCWSTR lpFileName)
|
||||||
|
{
|
||||||
|
WCHAR Buffer[30];
|
||||||
|
UNICODE_STRING BufferW;
|
||||||
|
ULONG Result;
|
||||||
|
|
||||||
|
/* grab the text version of our entry */
|
||||||
|
if (!ParserGetString(lpKeyName, Buffer, _countof(Buffer), lpFileName))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!Buffer[0])
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* convert it to an actual integer */
|
||||||
|
RtlInitUnicodeString(&BufferW, Buffer);
|
||||||
|
RtlUnicodeStringToInteger(&BufferW, 0, &Result);
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
|
@ -1,750 +0,0 @@
|
||||||
/*
|
|
||||||
* PROJECT: ReactOS Applications Manager
|
|
||||||
* LICENSE: GPL - See COPYING in the top level directory
|
|
||||||
* FILE: base/applications/rapps/parser.c
|
|
||||||
* PURPOSE: Parser functions
|
|
||||||
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "rapps.h"
|
|
||||||
|
|
||||||
typedef LONG NTSTATUS;
|
|
||||||
|
|
||||||
typedef struct _UNICODE_STRING {
|
|
||||||
USHORT Length;
|
|
||||||
USHORT MaximumLength;
|
|
||||||
PWSTR Buffer;
|
|
||||||
} UNICODE_STRING, *PUNICODE_STRING;
|
|
||||||
|
|
||||||
void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
|
|
||||||
NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING*,ULONG,ULONG*);
|
|
||||||
BOOLEAN WINAPI RtlIsTextUnicode(LPCVOID,INT,INT*);
|
|
||||||
|
|
||||||
static const char bom_utf8[] = {0xEF,0xBB,0xBF};
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
ENCODING_UTF8 = 1,
|
|
||||||
ENCODING_UTF16LE,
|
|
||||||
ENCODING_UTF16BE
|
|
||||||
} ENCODING;
|
|
||||||
|
|
||||||
typedef struct tagSECTIONKEY
|
|
||||||
{
|
|
||||||
WCHAR *value;
|
|
||||||
struct tagSECTIONKEY *next;
|
|
||||||
WCHAR name[1];
|
|
||||||
} SECTIONKEY;
|
|
||||||
|
|
||||||
typedef struct tagSECTION
|
|
||||||
{
|
|
||||||
struct tagSECTIONKEY *key;
|
|
||||||
struct tagSECTION *next;
|
|
||||||
WCHAR name[1];
|
|
||||||
} SECTION;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
BOOL changed;
|
|
||||||
SECTION *section;
|
|
||||||
WCHAR *filename;
|
|
||||||
ENCODING encoding;
|
|
||||||
} ITEMS;
|
|
||||||
|
|
||||||
|
|
||||||
#define N_CACHED_ITEMS 10
|
|
||||||
static ITEMS *ItemsArray[N_CACHED_ITEMS] = {NULL};
|
|
||||||
#define CurProfile (ItemsArray[0])
|
|
||||||
#define IS_ENTRY_COMMENT(str) ((str)[0] == ';')
|
|
||||||
#define ParserIsSpace(c) (iswspace(c) || c == 0x1a)
|
|
||||||
|
|
||||||
|
|
||||||
static
|
|
||||||
WCHAR*
|
|
||||||
memchrW(const WCHAR *ptr, WCHAR ch, size_t n)
|
|
||||||
{
|
|
||||||
const WCHAR *end;
|
|
||||||
for (end = ptr + n; ptr < end; ptr++)
|
|
||||||
if (*ptr == ch)
|
|
||||||
return (WCHAR *)(ULONG_PTR)ptr;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
WCHAR
|
|
||||||
*memrchrW(const WCHAR *ptr, WCHAR ch, size_t n)
|
|
||||||
{
|
|
||||||
const WCHAR *end;
|
|
||||||
WCHAR *ret = NULL;
|
|
||||||
for (end = ptr + n; ptr < end; ptr++)
|
|
||||||
if (*ptr == ch)
|
|
||||||
ret = (WCHAR *)(ULONG_PTR)ptr;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
ParserCopyEntry(LPWSTR buffer, LPCWSTR value, int len, BOOL strip_quote)
|
|
||||||
{
|
|
||||||
WCHAR quote = '\0';
|
|
||||||
|
|
||||||
if (!buffer) return;
|
|
||||||
|
|
||||||
if (strip_quote && ((*value == '\'') || (*value == '\"')))
|
|
||||||
{
|
|
||||||
if (value[1] && (value[wcslen(value)-1] == *value))
|
|
||||||
quote = *value++;
|
|
||||||
}
|
|
||||||
|
|
||||||
lstrcpynW(buffer, value, len);
|
|
||||||
if (quote && (len >= (int)wcslen(value))) buffer[wcslen(buffer)-1] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
ParserByteSwapShortBuffer(WCHAR * buffer, int len)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
USHORT * shortbuffer = buffer;
|
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
shortbuffer[i] = (shortbuffer[i] >> 8) | (shortbuffer[i] << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
ParserWriteMarker(HANDLE hFile, ENCODING encoding)
|
|
||||||
{
|
|
||||||
DWORD dwBytesWritten;
|
|
||||||
WCHAR bom;
|
|
||||||
|
|
||||||
switch (encoding)
|
|
||||||
{
|
|
||||||
case ENCODING_UTF8:
|
|
||||||
WriteFile(hFile, bom_utf8, sizeof(bom_utf8), &dwBytesWritten, NULL);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENCODING_UTF16LE:
|
|
||||||
bom = 0xFEFF;
|
|
||||||
WriteFile(hFile, &bom, sizeof(bom), &dwBytesWritten, NULL);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENCODING_UTF16BE:
|
|
||||||
bom = 0xFFFE;
|
|
||||||
WriteFile(hFile, &bom, sizeof(bom), &dwBytesWritten, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
ParserWriteLine(HANDLE hFile, WCHAR * szLine, int len, ENCODING encoding)
|
|
||||||
{
|
|
||||||
char * write_buffer;
|
|
||||||
int write_buffer_len;
|
|
||||||
DWORD dwBytesWritten;
|
|
||||||
|
|
||||||
switch (encoding)
|
|
||||||
{
|
|
||||||
case ENCODING_UTF8:
|
|
||||||
write_buffer_len = WideCharToMultiByte(CP_UTF8, 0, szLine, len, NULL, 0, NULL, NULL);
|
|
||||||
write_buffer = HeapAlloc(GetProcessHeap(), 0, write_buffer_len);
|
|
||||||
if (!write_buffer) return;
|
|
||||||
len = WideCharToMultiByte(CP_UTF8, 0, szLine, len, write_buffer, write_buffer_len, NULL, NULL);
|
|
||||||
WriteFile(hFile, write_buffer, len, &dwBytesWritten, NULL);
|
|
||||||
HeapFree(GetProcessHeap(), 0, write_buffer);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENCODING_UTF16LE:
|
|
||||||
WriteFile(hFile, szLine, len * sizeof(WCHAR), &dwBytesWritten, NULL);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENCODING_UTF16BE:
|
|
||||||
ParserByteSwapShortBuffer(szLine, len);
|
|
||||||
WriteFile(hFile, szLine, len * sizeof(WCHAR), &dwBytesWritten, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
ParserSave(HANDLE hFile, const SECTION *section, ENCODING encoding)
|
|
||||||
{
|
|
||||||
SECTIONKEY *key;
|
|
||||||
WCHAR *buffer, *p;
|
|
||||||
|
|
||||||
ParserWriteMarker(hFile, encoding);
|
|
||||||
|
|
||||||
for ( ; section; section = section->next)
|
|
||||||
{
|
|
||||||
size_t len = 0;
|
|
||||||
size_t remaining;
|
|
||||||
|
|
||||||
if (section->name[0]) len += wcslen(section->name) + 4;
|
|
||||||
|
|
||||||
for (key = section->key; key; key = key->next)
|
|
||||||
{
|
|
||||||
len += wcslen(key->name) + 2;
|
|
||||||
if (key->value) len += wcslen(key->value) + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
||||||
if (!buffer) return;
|
|
||||||
|
|
||||||
p = buffer;
|
|
||||||
remaining = len;
|
|
||||||
if (section->name[0])
|
|
||||||
{
|
|
||||||
StringCchPrintfExW(p, remaining, &p, &remaining, 0,
|
|
||||||
L"[%ls]\r\n",
|
|
||||||
section->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (key = section->key; key; key = key->next)
|
|
||||||
{
|
|
||||||
if (key->value)
|
|
||||||
{
|
|
||||||
StringCchPrintfExW(p, remaining, &p, &remaining, 0,
|
|
||||||
L"%ls=%ls\r\n",
|
|
||||||
key->name, key->value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
StringCchPrintfExW(p, remaining, &p, &remaining, 0,
|
|
||||||
L"%ls\r\n",
|
|
||||||
key->name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ParserWriteLine(hFile, buffer, len, encoding);
|
|
||||||
HeapFree(GetProcessHeap(), 0, buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
ParserFree(SECTION *section)
|
|
||||||
{
|
|
||||||
SECTION *next_section;
|
|
||||||
SECTIONKEY *key, *next_key;
|
|
||||||
|
|
||||||
for ( ; section; section = next_section)
|
|
||||||
{
|
|
||||||
for (key = section->key; key; key = next_key)
|
|
||||||
{
|
|
||||||
next_key = key->next;
|
|
||||||
HeapFree(GetProcessHeap(), 0, key->value);
|
|
||||||
HeapFree(GetProcessHeap(), 0, key);
|
|
||||||
}
|
|
||||||
next_section = section->next;
|
|
||||||
HeapFree(GetProcessHeap(), 0, section);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
ENCODING
|
|
||||||
ParserDetectTextEncoding(const void * buffer, int * len)
|
|
||||||
{
|
|
||||||
INT flags = IS_TEXT_UNICODE_SIGNATURE |
|
|
||||||
IS_TEXT_UNICODE_REVERSE_SIGNATURE |
|
|
||||||
IS_TEXT_UNICODE_ODD_LENGTH;
|
|
||||||
|
|
||||||
if (*len >= sizeof(bom_utf8) && !memcmp(buffer, bom_utf8, sizeof(bom_utf8)))
|
|
||||||
{
|
|
||||||
*len = sizeof(bom_utf8);
|
|
||||||
return ENCODING_UTF8;
|
|
||||||
}
|
|
||||||
|
|
||||||
RtlIsTextUnicode((void *)buffer, *len, &flags);
|
|
||||||
|
|
||||||
if (flags & IS_TEXT_UNICODE_SIGNATURE)
|
|
||||||
{
|
|
||||||
*len = sizeof(WCHAR);
|
|
||||||
return ENCODING_UTF16LE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags & IS_TEXT_UNICODE_REVERSE_SIGNATURE)
|
|
||||||
{
|
|
||||||
*len = sizeof(WCHAR);
|
|
||||||
return ENCODING_UTF16BE;
|
|
||||||
}
|
|
||||||
|
|
||||||
*len = 0;
|
|
||||||
|
|
||||||
return ENCODING_UTF8;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
SECTION
|
|
||||||
*ParserLoad(HANDLE hFile, ENCODING * pEncoding)
|
|
||||||
{
|
|
||||||
void *buffer_base, *pBuffer;
|
|
||||||
WCHAR * szFile;
|
|
||||||
const WCHAR *szLineStart, *szLineEnd;
|
|
||||||
const WCHAR *szValueStart, *szEnd, *next_line;
|
|
||||||
int line = 0, len;
|
|
||||||
SECTION *section, *first_section;
|
|
||||||
SECTION **next_section;
|
|
||||||
SECTIONKEY *key, *prev_key, **next_key;
|
|
||||||
DWORD dwFileSize;
|
|
||||||
|
|
||||||
dwFileSize = GetFileSize(hFile, NULL);
|
|
||||||
if (dwFileSize == INVALID_FILE_SIZE || dwFileSize == 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
buffer_base = HeapAlloc(GetProcessHeap(), 0 , dwFileSize);
|
|
||||||
if (!buffer_base)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (!ReadFile(hFile, buffer_base, dwFileSize, &dwFileSize, NULL))
|
|
||||||
{
|
|
||||||
HeapFree(GetProcessHeap(), 0, buffer_base);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
len = dwFileSize;
|
|
||||||
*pEncoding = ParserDetectTextEncoding(buffer_base, &len);
|
|
||||||
|
|
||||||
pBuffer = (char *)buffer_base + len;
|
|
||||||
dwFileSize -= len;
|
|
||||||
|
|
||||||
switch (*pEncoding)
|
|
||||||
{
|
|
||||||
case ENCODING_UTF8:
|
|
||||||
len = MultiByteToWideChar(CP_UTF8, 0, pBuffer, dwFileSize, NULL, 0);
|
|
||||||
szFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
|
||||||
if (!szFile)
|
|
||||||
{
|
|
||||||
HeapFree(GetProcessHeap(), 0, buffer_base);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
MultiByteToWideChar(CP_UTF8, 0, pBuffer, dwFileSize, szFile, len);
|
|
||||||
szEnd = szFile + len;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENCODING_UTF16LE:
|
|
||||||
szFile = pBuffer;
|
|
||||||
szEnd = (WCHAR *)((char *)pBuffer + dwFileSize);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ENCODING_UTF16BE:
|
|
||||||
szFile = pBuffer;
|
|
||||||
szEnd = (WCHAR *)((char *)pBuffer + dwFileSize);
|
|
||||||
ParserByteSwapShortBuffer(szFile, dwFileSize / sizeof(WCHAR));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
HeapFree(GetProcessHeap(), 0, buffer_base);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
first_section = HeapAlloc(GetProcessHeap(), 0, sizeof(*section));
|
|
||||||
if (first_section == NULL)
|
|
||||||
{
|
|
||||||
if (szFile != pBuffer)
|
|
||||||
HeapFree(GetProcessHeap(), 0, szFile);
|
|
||||||
HeapFree(GetProcessHeap(), 0, buffer_base);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
first_section->name[0] = 0;
|
|
||||||
first_section->key = NULL;
|
|
||||||
first_section->next = NULL;
|
|
||||||
next_section = &first_section->next;
|
|
||||||
next_key = &first_section->key;
|
|
||||||
prev_key = NULL;
|
|
||||||
next_line = szFile;
|
|
||||||
|
|
||||||
while (next_line < szEnd)
|
|
||||||
{
|
|
||||||
szLineStart = next_line;
|
|
||||||
next_line = memchrW(szLineStart, '\n', szEnd - szLineStart);
|
|
||||||
if (!next_line) next_line = memchrW(szLineStart, '\r', szEnd - szLineStart);
|
|
||||||
if (!next_line) next_line = szEnd;
|
|
||||||
else next_line++;
|
|
||||||
szLineEnd = next_line;
|
|
||||||
|
|
||||||
line++;
|
|
||||||
|
|
||||||
while (szLineStart < szLineEnd && ParserIsSpace(*szLineStart)) szLineStart++;
|
|
||||||
while ((szLineEnd > szLineStart) && ParserIsSpace(szLineEnd[-1])) szLineEnd--;
|
|
||||||
|
|
||||||
if (szLineStart >= szLineEnd)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (*szLineStart == '[')
|
|
||||||
{
|
|
||||||
const WCHAR * szSectionEnd;
|
|
||||||
if ((szSectionEnd = memrchrW(szLineStart, ']', szLineEnd - szLineStart)))
|
|
||||||
{
|
|
||||||
szLineStart++;
|
|
||||||
len = (int)(szSectionEnd - szLineStart);
|
|
||||||
if (!(section = HeapAlloc(GetProcessHeap(), 0, sizeof(*section) + len * sizeof(WCHAR))))
|
|
||||||
break;
|
|
||||||
memcpy(section->name, szLineStart, len * sizeof(WCHAR));
|
|
||||||
section->name[len] = '\0';
|
|
||||||
section->key = NULL;
|
|
||||||
section->next = NULL;
|
|
||||||
*next_section = section;
|
|
||||||
next_section = §ion->next;
|
|
||||||
next_key = §ion->key;
|
|
||||||
prev_key = NULL;
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
len = szLineEnd - szLineStart;
|
|
||||||
if ((szValueStart = memchrW(szLineStart, '=', szLineEnd - szLineStart)) != NULL)
|
|
||||||
{
|
|
||||||
const WCHAR *szNameEnd = szValueStart;
|
|
||||||
while ((szNameEnd > szLineStart) && ParserIsSpace(szNameEnd[-1])) szNameEnd--;
|
|
||||||
len = szNameEnd - szLineStart;
|
|
||||||
szValueStart++;
|
|
||||||
while (szValueStart < szLineEnd && ParserIsSpace(*szValueStart)) szValueStart++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len || !prev_key || *prev_key->name)
|
|
||||||
{
|
|
||||||
if (!(key = HeapAlloc(GetProcessHeap(), 0, sizeof(*key) + len * sizeof(WCHAR)))) break;
|
|
||||||
memcpy(key->name, szLineStart, len * sizeof(WCHAR));
|
|
||||||
key->name[len] = '\0';
|
|
||||||
if (szValueStart)
|
|
||||||
{
|
|
||||||
len = (int)(szLineEnd - szValueStart);
|
|
||||||
key->value = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
|
|
||||||
memcpy(key->value, szValueStart, len * sizeof(WCHAR));
|
|
||||||
key->value[len] = '\0';
|
|
||||||
}
|
|
||||||
else key->value = NULL;
|
|
||||||
|
|
||||||
key->next = NULL;
|
|
||||||
*next_key = key;
|
|
||||||
next_key = &key->next;
|
|
||||||
prev_key = key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (szFile != pBuffer)
|
|
||||||
HeapFree(GetProcessHeap(), 0, szFile);
|
|
||||||
HeapFree(GetProcessHeap(), 0, buffer_base);
|
|
||||||
|
|
||||||
return first_section;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
SECTIONKEY
|
|
||||||
*ParserFind(SECTION **section, LPCWSTR section_name, LPCWSTR key_name, BOOL create, BOOL create_always)
|
|
||||||
{
|
|
||||||
LPCWSTR p;
|
|
||||||
DWORD cch;
|
|
||||||
int seclen, keylen;
|
|
||||||
|
|
||||||
while (ParserIsSpace(*section_name)) section_name++;
|
|
||||||
if (*section_name)
|
|
||||||
p = section_name + wcslen(section_name) - 1;
|
|
||||||
else
|
|
||||||
p = section_name;
|
|
||||||
|
|
||||||
while ((p > section_name) && ParserIsSpace(*p)) p--;
|
|
||||||
seclen = p - section_name + 1;
|
|
||||||
|
|
||||||
while (ParserIsSpace(*key_name)) key_name++;
|
|
||||||
if (*key_name)
|
|
||||||
p = key_name + wcslen(key_name) - 1;
|
|
||||||
else
|
|
||||||
p = key_name;
|
|
||||||
|
|
||||||
while ((p > key_name) && ParserIsSpace(*p)) p--;
|
|
||||||
keylen = p - key_name + 1;
|
|
||||||
|
|
||||||
while (*section)
|
|
||||||
{
|
|
||||||
if (((*section)->name[0])
|
|
||||||
&& (!(_wcsnicmp((*section)->name, section_name, seclen)))
|
|
||||||
&& (((*section)->name)[seclen] == '\0'))
|
|
||||||
{
|
|
||||||
SECTIONKEY **key = &(*section)->key;
|
|
||||||
|
|
||||||
while (*key)
|
|
||||||
{
|
|
||||||
if(!create_always)
|
|
||||||
{
|
|
||||||
if ((!(_wcsnicmp((*key)->name, key_name, keylen)))
|
|
||||||
&& (((*key)->name)[keylen] == '\0'))
|
|
||||||
return *key;
|
|
||||||
}
|
|
||||||
key = &(*key)->next;
|
|
||||||
}
|
|
||||||
if (!create)
|
|
||||||
return NULL;
|
|
||||||
cch = wcslen(key_name) + 1;
|
|
||||||
if (!(*key = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(SECTIONKEY, name) + cch * sizeof(WCHAR))))
|
|
||||||
return NULL;
|
|
||||||
StringCchCopyW((*key)->name, cch, key_name);
|
|
||||||
(*key)->value = NULL;
|
|
||||||
(*key)->next = NULL;
|
|
||||||
return *key;
|
|
||||||
}
|
|
||||||
section = &(*section)->next;
|
|
||||||
}
|
|
||||||
if (!create) return NULL;
|
|
||||||
cch = wcslen(section_name) + 1;
|
|
||||||
*section = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(SECTION, name) + cch * sizeof(WCHAR));
|
|
||||||
if (*section == NULL) return NULL;
|
|
||||||
StringCchCopyW((*section)->name, cch, section_name);
|
|
||||||
(*section)->next = NULL;
|
|
||||||
cch = wcslen(key_name) + 1;
|
|
||||||
if (!((*section)->key = HeapAlloc(GetProcessHeap(), 0,
|
|
||||||
FIELD_OFFSET(SECTIONKEY, name) + cch * sizeof(WCHAR))))
|
|
||||||
{
|
|
||||||
HeapFree(GetProcessHeap(), 0, *section);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
StringCchCopyW((*section)->key->name, cch, key_name);
|
|
||||||
(*section)->key->value = NULL;
|
|
||||||
(*section)->key->next = NULL;
|
|
||||||
return (*section)->key;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
BOOL
|
|
||||||
ParserFlushFile(void)
|
|
||||||
{
|
|
||||||
HANDLE hFile = NULL;
|
|
||||||
|
|
||||||
if (!CurProfile) return FALSE;
|
|
||||||
|
|
||||||
if (!CurProfile->changed) return TRUE;
|
|
||||||
|
|
||||||
hFile = CreateFileW(CurProfile->filename, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
|
||||||
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
|
|
||||||
if (hFile == INVALID_HANDLE_VALUE) return FALSE;
|
|
||||||
|
|
||||||
ParserSave(hFile, CurProfile->section, CurProfile->encoding);
|
|
||||||
|
|
||||||
CloseHandle(hFile);
|
|
||||||
CurProfile->changed = FALSE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
ParserReleaseFile(void)
|
|
||||||
{
|
|
||||||
ParserFlushFile();
|
|
||||||
ParserFree(CurProfile->section);
|
|
||||||
HeapFree(GetProcessHeap(), 0, CurProfile->filename);
|
|
||||||
CurProfile->changed = FALSE;
|
|
||||||
CurProfile->section = NULL;
|
|
||||||
CurProfile->filename = NULL;
|
|
||||||
CurProfile->encoding = ENCODING_UTF8;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
BOOL
|
|
||||||
ParserOpen(LPCWSTR filename, BOOL write_access)
|
|
||||||
{
|
|
||||||
WCHAR szDir[MAX_PATH];
|
|
||||||
WCHAR buffer[MAX_PATH];
|
|
||||||
DWORD cch;
|
|
||||||
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|
||||||
int i, j;
|
|
||||||
ITEMS *tempProfile;
|
|
||||||
|
|
||||||
if (!CurProfile)
|
|
||||||
for (i = 0; i < N_CACHED_ITEMS; i++)
|
|
||||||
{
|
|
||||||
ItemsArray[i] = HeapAlloc(GetProcessHeap(), 0, sizeof(ITEMS));
|
|
||||||
if (ItemsArray[i] == NULL) break;
|
|
||||||
ItemsArray[i]->changed = FALSE;
|
|
||||||
ItemsArray[i]->section = NULL;
|
|
||||||
ItemsArray[i]->filename = NULL;
|
|
||||||
ItemsArray[i]->encoding = ENCODING_UTF8;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!GetStorageDirectory(szDir, sizeof(szDir) / sizeof(szDir[0])))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (FAILED(StringCbPrintfW(buffer, sizeof(buffer),
|
|
||||||
L"%ls\\rapps\\%ls",
|
|
||||||
szDir, filename)))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
hFile = CreateFileW(buffer, GENERIC_READ | (write_access ? GENERIC_WRITE : 0),
|
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
|
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
||||||
|
|
||||||
if ((hFile == INVALID_HANDLE_VALUE) && (GetLastError() != ERROR_FILE_NOT_FOUND))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < N_CACHED_ITEMS; i++)
|
|
||||||
{
|
|
||||||
if ((ItemsArray[i]->filename && !wcscmp(buffer, ItemsArray[i]->filename)))
|
|
||||||
{
|
|
||||||
if (i)
|
|
||||||
{
|
|
||||||
ParserFlushFile();
|
|
||||||
tempProfile = ItemsArray[i];
|
|
||||||
for (j = i; j > 0; j--)
|
|
||||||
ItemsArray[j] = ItemsArray[j - 1];
|
|
||||||
CurProfile = tempProfile;
|
|
||||||
}
|
|
||||||
if (hFile != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
CloseHandle(hFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ParserFlushFile();
|
|
||||||
|
|
||||||
if (i == N_CACHED_ITEMS)
|
|
||||||
{
|
|
||||||
tempProfile = ItemsArray[N_CACHED_ITEMS - 1];
|
|
||||||
for (i = N_CACHED_ITEMS - 1; i > 0; i--)
|
|
||||||
ItemsArray[i] = ItemsArray[i - 1];
|
|
||||||
CurProfile = tempProfile;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CurProfile->filename) ParserReleaseFile();
|
|
||||||
|
|
||||||
cch = wcslen(buffer) + 1;
|
|
||||||
CurProfile->filename = HeapAlloc(GetProcessHeap(), 0, cch * sizeof(WCHAR));
|
|
||||||
if (CurProfile->filename == NULL)
|
|
||||||
{
|
|
||||||
if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
StringCchCopyW(CurProfile->filename, cch, buffer);
|
|
||||||
|
|
||||||
if (hFile != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
CurProfile->section = ParserLoad(hFile, &CurProfile->encoding);
|
|
||||||
CloseHandle(hFile);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
INT
|
|
||||||
ParserGetSection(SECTION *section, LPCWSTR section_name, LPWSTR buffer, UINT len, BOOL return_values)
|
|
||||||
{
|
|
||||||
SECTIONKEY *key;
|
|
||||||
|
|
||||||
if (!buffer)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
while (section)
|
|
||||||
{
|
|
||||||
if (section->name[0] && !_wcsicmp(section->name, section_name))
|
|
||||||
{
|
|
||||||
UINT oldlen = len;
|
|
||||||
for (key = section->key; key; key = key->next)
|
|
||||||
{
|
|
||||||
if (len <= 2) break;
|
|
||||||
if (!*key->name) continue; /* Skip empty lines */
|
|
||||||
if (IS_ENTRY_COMMENT(key->name)) continue; /* Skip comments */
|
|
||||||
if (!return_values && !key->value) continue; /* Skip lines w.o. '=' */
|
|
||||||
|
|
||||||
ParserCopyEntry(buffer, key->name, len - 1, 0);
|
|
||||||
len -= wcslen(buffer) + 1;
|
|
||||||
buffer += wcslen(buffer) + 1;
|
|
||||||
|
|
||||||
if (len < 2) break;
|
|
||||||
if (return_values && key->value)
|
|
||||||
{
|
|
||||||
buffer[-1] = '=';
|
|
||||||
ParserCopyEntry(buffer, key->value, len - 1, 0);
|
|
||||||
len -= wcslen(buffer) + 1;
|
|
||||||
buffer += wcslen(buffer) + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*buffer = '\0';
|
|
||||||
if (len <= 1)
|
|
||||||
{
|
|
||||||
buffer[-1] = '\0';
|
|
||||||
return oldlen - 2;
|
|
||||||
}
|
|
||||||
return oldlen - len;
|
|
||||||
}
|
|
||||||
section = section->next;
|
|
||||||
}
|
|
||||||
buffer[0] = buffer[1] = '\0';
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
INT
|
|
||||||
ParserInternalGetString(LPCWSTR section, LPCWSTR key_name, LPWSTR buffer, UINT len)
|
|
||||||
{
|
|
||||||
SECTIONKEY *key = NULL;
|
|
||||||
static const WCHAR empty_strW[] = { 0 };
|
|
||||||
|
|
||||||
if (!buffer || !len) return 0;
|
|
||||||
|
|
||||||
if (key_name)
|
|
||||||
{
|
|
||||||
if (!key_name[0])
|
|
||||||
{
|
|
||||||
ParserCopyEntry(buffer, empty_strW, len, TRUE);
|
|
||||||
return wcslen(buffer);
|
|
||||||
}
|
|
||||||
key = ParserFind(&CurProfile->section, section, key_name, FALSE, FALSE);
|
|
||||||
ParserCopyEntry(buffer, (key && key->value) ? key->value : empty_strW,
|
|
||||||
len, TRUE);
|
|
||||||
return wcslen(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (section && section[0])
|
|
||||||
{
|
|
||||||
INT ret = ParserGetSection(CurProfile->section, section, buffer, len, FALSE);
|
|
||||||
if (!buffer[0])
|
|
||||||
{
|
|
||||||
ParserCopyEntry(buffer, empty_strW, len, TRUE);
|
|
||||||
ret = wcslen(buffer);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer[0] = '\0';
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
INT
|
|
||||||
ParserGetString(LPCWSTR Section, LPCWSTR ValueName, LPWSTR Buffer, UINT Len, LPCWSTR FileName)
|
|
||||||
{
|
|
||||||
if (Section == NULL) return 0;
|
|
||||||
|
|
||||||
if (ParserOpen(FileName, FALSE))
|
|
||||||
return ParserInternalGetString(Section, ValueName, Buffer, Len);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
UINT
|
|
||||||
ParserGetInt(LPCWSTR Section, LPCWSTR ValueName, LPCWSTR FileName)
|
|
||||||
{
|
|
||||||
WCHAR Buffer[30];
|
|
||||||
UNICODE_STRING BufferW;
|
|
||||||
ULONG Result;
|
|
||||||
|
|
||||||
if (!ParserGetString(Section,
|
|
||||||
ValueName,
|
|
||||||
Buffer,
|
|
||||||
sizeof(Buffer) / sizeof(WCHAR),
|
|
||||||
FileName))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (!Buffer[0]) return -1;
|
|
||||||
|
|
||||||
RtlInitUnicodeString(&BufferW, Buffer);
|
|
||||||
RtlUnicodeStringToInteger(&BufferW, 0, &Result);
|
|
||||||
return Result;
|
|
||||||
}
|
|
|
@ -81,6 +81,14 @@ typedef struct
|
||||||
WCHAR szUrlDownload[MAX_PATH];
|
WCHAR szUrlDownload[MAX_PATH];
|
||||||
WCHAR szCDPath[MAX_PATH];
|
WCHAR szCDPath[MAX_PATH];
|
||||||
|
|
||||||
|
/* caching mechanism related entries */
|
||||||
|
WCHAR cFileName[MAX_PATH];
|
||||||
|
FILETIME ftCacheStamp;
|
||||||
|
LIST_ENTRY List;
|
||||||
|
|
||||||
|
/* optional integrity checks */
|
||||||
|
BYTE MD5Checksum[16];
|
||||||
|
|
||||||
} APPLICATION_INFO, *PAPPLICATION_INFO;
|
} APPLICATION_INFO, *PAPPLICATION_INFO;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -166,9 +174,8 @@ VOID InitLogs(VOID);
|
||||||
VOID FreeLogs(VOID);
|
VOID FreeLogs(VOID);
|
||||||
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg);
|
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg);
|
||||||
|
|
||||||
/* parser.c */
|
UINT ParserGetString(LPCWSTR lpKeyName, LPWSTR lpReturnedString, UINT nSize, LPCWSTR lpFileName);
|
||||||
INT ParserGetString(LPCWSTR section, LPCWSTR entry, LPWSTR buffer, UINT len, LPCWSTR filename);
|
UINT ParserGetInt(LPCWSTR lpKeyName, LPCWSTR lpFileName);
|
||||||
UINT ParserGetInt(LPCWSTR section, LPCWSTR entry, LPCWSTR filename);
|
|
||||||
|
|
||||||
/* richedit.c */
|
/* richedit.c */
|
||||||
extern HWND hRichEdit;
|
extern HWND hRichEdit;
|
||||||
|
|
|
@ -39,6 +39,16 @@ IDI_CAT_SCIENCE ICON "res/cats/science.ico"
|
||||||
IDI_CAT_TOOLS ICON "res/cats/tools.ico"
|
IDI_CAT_TOOLS ICON "res/cats/tools.ico"
|
||||||
IDI_CAT_VIDEO ICON "res/cats/video.ico"
|
IDI_CAT_VIDEO ICON "res/cats/video.ico"
|
||||||
|
|
||||||
|
/* Accelerators -- key bindings */
|
||||||
|
HOTKEYS ACCELERATORS
|
||||||
|
{
|
||||||
|
VK_F1, ID_HELP, VIRTKEY
|
||||||
|
VK_F5, ID_REFRESH, VIRTKEY
|
||||||
|
VK_F5, ID_RESETDB, CONTROL, VIRTKEY
|
||||||
|
VK_DELETE, ID_UNINSTALL, CONTROL, VIRTKEY
|
||||||
|
VK_RETURN, ID_INSTALL, CONTROL, VIRTKEY
|
||||||
|
}
|
||||||
|
|
||||||
#include <reactos/manifest_exe.rc>
|
#include <reactos/manifest_exe.rc>
|
||||||
|
|
||||||
#include <rappsmsg.rc>
|
#include <rappsmsg.rc>
|
||||||
|
|
|
@ -152,6 +152,9 @@
|
||||||
#define IDS_CAT_TOOLS 713
|
#define IDS_CAT_TOOLS 713
|
||||||
#define IDS_CAT_VIDEO 714
|
#define IDS_CAT_VIDEO 714
|
||||||
|
|
||||||
|
/* Accelerators */
|
||||||
|
#define HOTKEYS 715
|
||||||
|
|
||||||
/* Other */
|
/* Other */
|
||||||
#ifndef IDC_STATIC
|
#ifndef IDC_STATIC
|
||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
* FILE: base/applications/rapps/winmain.c
|
* FILE: base/applications/rapps/winmain.c
|
||||||
* PURPOSE: Main program
|
* PURPOSE: Main program
|
||||||
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||||
|
* Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rapps.h"
|
|
||||||
|
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
|
#include "rapps.h"
|
||||||
|
|
||||||
#define SEARCH_TIMER_ID 'SR'
|
#define SEARCH_TIMER_ID 'SR'
|
||||||
|
|
||||||
|
@ -138,6 +138,7 @@ EnumInstalledAppProc(INT ItemIndex, LPWSTR lpName, PINSTALLED_INFO Info)
|
||||||
/* Get version info */
|
/* Get version info */
|
||||||
GetApplicationString(ItemInfo->hSubKey, L"DisplayVersion", szText);
|
GetApplicationString(ItemInfo->hSubKey, L"DisplayVersion", szText);
|
||||||
ListView_SetItemText(hListView, Index, 1, szText);
|
ListView_SetItemText(hListView, Index, 1, szText);
|
||||||
|
|
||||||
/* Get comments */
|
/* Get comments */
|
||||||
GetApplicationString(ItemInfo->hSubKey, L"Comments", szText);
|
GetApplicationString(ItemInfo->hSubKey, L"Comments", szText);
|
||||||
ListView_SetItemText(hListView, Index, 2, szText);
|
ListView_SetItemText(hListView, Index, 2, szText);
|
||||||
|
@ -164,7 +165,6 @@ BOOL
|
||||||
CALLBACK
|
CALLBACK
|
||||||
EnumAvailableAppProc(PAPPLICATION_INFO Info)
|
EnumAvailableAppProc(PAPPLICATION_INFO Info)
|
||||||
{
|
{
|
||||||
PAPPLICATION_INFO ItemInfo;
|
|
||||||
INT Index;
|
INT Index;
|
||||||
|
|
||||||
if (!SearchPatternMatch(Info->szName, szSearchPattern) &&
|
if (!SearchPatternMatch(Info->szName, szSearchPattern) &&
|
||||||
|
@ -179,12 +179,8 @@ EnumAvailableAppProc(PAPPLICATION_INFO Info)
|
||||||
*/
|
*/
|
||||||
if (!*Info->szRegName || (!IsInstalledApplication(Info->szRegName, FALSE) && !IsInstalledApplication(Info->szRegName, TRUE)))
|
if (!*Info->szRegName || (!IsInstalledApplication(Info->szRegName, FALSE) && !IsInstalledApplication(Info->szRegName, TRUE)))
|
||||||
{
|
{
|
||||||
ItemInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(APPLICATION_INFO));
|
Index = ListViewAddItem(Info->Category, 0, Info->szName, (LPARAM)Info);
|
||||||
if (!ItemInfo) return FALSE;
|
|
||||||
|
|
||||||
RtlCopyMemory(ItemInfo, Info, sizeof(APPLICATION_INFO));
|
|
||||||
|
|
||||||
Index = ListViewAddItem(Info->Category, 0, Info->szName, (LPARAM)ItemInfo);
|
|
||||||
ListView_SetItemText(hListView, Index, 1, Info->szVersion);
|
ListView_SetItemText(hListView, Index, 1, Info->szVersion);
|
||||||
ListView_SetItemText(hListView, Index, 2, Info->szDesc);
|
ListView_SetItemText(hListView, Index, 2, Info->szDesc);
|
||||||
}
|
}
|
||||||
|
@ -245,13 +241,17 @@ UpdateApplicationsList(INT EnumType)
|
||||||
|
|
||||||
SelectedEnumType = EnumType;
|
SelectedEnumType = EnumType;
|
||||||
|
|
||||||
LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, sizeof(szBuffer2) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, _countof(szBuffer2));
|
||||||
StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
|
StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
|
||||||
szBuffer2,
|
szBuffer2,
|
||||||
ListView_GetItemCount(hListView));
|
ListView_GetItemCount(hListView));
|
||||||
SetStatusBarText(szBuffer1);
|
SetStatusBarText(szBuffer1);
|
||||||
|
|
||||||
SetWelcomeText();
|
SetWelcomeText();
|
||||||
|
|
||||||
|
/* set automatic column width for program names if the list is not empty */
|
||||||
|
if (ListView_GetItemCount(hListView) > 0)
|
||||||
|
ListView_SetColumnWidth(hListView, 0, LVSCW_AUTOSIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -260,13 +260,13 @@ InitApplicationsList(VOID)
|
||||||
WCHAR szText[MAX_STR_LEN];
|
WCHAR szText[MAX_STR_LEN];
|
||||||
|
|
||||||
/* Add columns to ListView */
|
/* Add columns to ListView */
|
||||||
LoadStringW(hInst, IDS_APP_NAME, szText, sizeof(szText) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_APP_NAME, szText, _countof(szText));
|
||||||
ListViewAddColumn(0, szText, 200, LVCFMT_LEFT);
|
ListViewAddColumn(0, szText, 200, LVCFMT_LEFT);
|
||||||
|
|
||||||
LoadStringW(hInst, IDS_APP_INST_VERSION, szText, sizeof(szText) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_APP_INST_VERSION, szText, _countof(szText));
|
||||||
ListViewAddColumn(1, szText, 90, LVCFMT_RIGHT);
|
ListViewAddColumn(1, szText, 90, LVCFMT_RIGHT);
|
||||||
|
|
||||||
LoadStringW(hInst, IDS_APP_DESCRIPTION, szText, sizeof(szText) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_APP_DESCRIPTION, szText, _countof(szText));
|
||||||
ListViewAddColumn(3, szText, 250, LVCFMT_LEFT);
|
ListViewAddColumn(3, szText, 250, LVCFMT_LEFT);
|
||||||
|
|
||||||
UpdateApplicationsList(ENUM_ALL_COMPONENTS);
|
UpdateApplicationsList(ENUM_ALL_COMPONENTS);
|
||||||
|
@ -289,7 +289,7 @@ AddCategory(HTREEITEM hRootItem, UINT TextIndex, UINT IconIndex)
|
||||||
Index = ImageList_AddIcon(hImageTreeView, hIcon);
|
Index = ImageList_AddIcon(hImageTreeView, hIcon);
|
||||||
DestroyIcon(hIcon);
|
DestroyIcon(hIcon);
|
||||||
|
|
||||||
LoadStringW(hInst, TextIndex, szText, sizeof(szText) / sizeof(TCHAR));
|
LoadStringW(hInst, TextIndex, szText, _countof(szText));
|
||||||
|
|
||||||
return TreeViewAddItem(hRootItem, szText, Index, Index, TextIndex);
|
return TreeViewAddItem(hRootItem, szText, Index, Index, TextIndex);
|
||||||
}
|
}
|
||||||
|
@ -352,7 +352,7 @@ InitControls(HWND hwnd)
|
||||||
|
|
||||||
InitCategoriesList();
|
InitCategoriesList();
|
||||||
|
|
||||||
LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, sizeof(szBuffer2) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_APPS_COUNT, szBuffer2, _countof(szBuffer2));
|
||||||
StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
|
StringCbPrintfW(szBuffer1, sizeof(szBuffer1),
|
||||||
szBuffer2,
|
szBuffer2,
|
||||||
ListView_GetItemCount(hListView));
|
ListView_GetItemCount(hListView));
|
||||||
|
@ -385,7 +385,7 @@ MainWndOnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
WCHAR szWndText[MAX_STR_LEN];
|
WCHAR szWndText[MAX_STR_LEN];
|
||||||
|
|
||||||
LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf));
|
||||||
GetWindowTextW(hSearchBar, szWndText, MAX_STR_LEN);
|
GetWindowTextW(hSearchBar, szWndText, MAX_STR_LEN);
|
||||||
if (wcscmp(szBuf, szWndText) == 0)
|
if (wcscmp(szBuf, szWndText) == 0)
|
||||||
{
|
{
|
||||||
|
@ -400,7 +400,7 @@ MainWndOnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
GetWindowTextW(hSearchBar, szBuf, MAX_STR_LEN);
|
GetWindowTextW(hSearchBar, szBuf, MAX_STR_LEN);
|
||||||
if (wcslen(szBuf) < 1)
|
if (wcslen(szBuf) < 1)
|
||||||
{
|
{
|
||||||
LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf));
|
||||||
SearchEnabled = FALSE;
|
SearchEnabled = FALSE;
|
||||||
SetWindowTextW(hSearchBar, szBuf);
|
SetWindowTextW(hSearchBar, szBuf);
|
||||||
}
|
}
|
||||||
|
@ -417,7 +417,7 @@ MainWndOnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, sizeof(szBuf) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_SEARCH_TEXT, szBuf, _countof(szBuf));
|
||||||
GetWindowTextW(hSearchBar, szWndText, MAX_STR_LEN);
|
GetWindowTextW(hSearchBar, szWndText, MAX_STR_LEN);
|
||||||
if (wcscmp(szBuf, szWndText) != 0)
|
if (wcscmp(szBuf, szWndText) != 0)
|
||||||
{
|
{
|
||||||
|
@ -607,12 +607,12 @@ BOOL IsSelectedNodeInstalled(void)
|
||||||
LRESULT CALLBACK
|
LRESULT CALLBACK
|
||||||
MainWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
MainWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (Msg)
|
switch (Msg)
|
||||||
{
|
{
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
if (!InitControls(hwnd))
|
if (!InitControls(hwnd))
|
||||||
PostMessage(hwnd, WM_CLOSE, 0, 0);
|
PostMessage(hwnd, WM_CLOSE, 0, 0);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
|
@ -801,7 +801,8 @@ MainWindowProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1)
|
if (data->hwndFrom == hListView && ((LPNMLISTVIEW)lParam)->iItem != -1)
|
||||||
{
|
{
|
||||||
SendMessage(hwnd, WM_COMMAND, ID_INSTALL, 0); //Won't do anything if the program is already installed
|
/* this won't do anything if the program is already installed */
|
||||||
|
SendMessage(hwnd, WM_COMMAND, ID_INSTALL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -902,6 +903,7 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nSh
|
||||||
WCHAR szWindowClass[] = L"ROSAPPMGR";
|
WCHAR szWindowClass[] = L"ROSAPPMGR";
|
||||||
WCHAR szWindowName[MAX_STR_LEN];
|
WCHAR szWindowName[MAX_STR_LEN];
|
||||||
HANDLE hMutex = NULL;
|
HANDLE hMutex = NULL;
|
||||||
|
HACCEL KeyBrd;
|
||||||
MSG Msg;
|
MSG Msg;
|
||||||
|
|
||||||
switch (GetUserDefaultUILanguage())
|
switch (GetUserDefaultUILanguage())
|
||||||
|
@ -949,7 +951,7 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nSh
|
||||||
|
|
||||||
if (RegisterClassExW(&WndClass) == (ATOM)0) goto Exit;
|
if (RegisterClassExW(&WndClass) == (ATOM)0) goto Exit;
|
||||||
|
|
||||||
LoadStringW(hInst, IDS_APPTITLE, szWindowName, sizeof(szWindowName) / sizeof(WCHAR));
|
LoadStringW(hInst, IDS_APPTITLE, szWindowName, _countof(szWindowName));
|
||||||
|
|
||||||
hMainWnd = CreateWindowExW(WS_EX_WINDOWEDGE,
|
hMainWnd = CreateWindowExW(WS_EX_WINDOWEDGE,
|
||||||
szWindowClass,
|
szWindowClass,
|
||||||
|
@ -973,15 +975,22 @@ wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nSh
|
||||||
if (SettingsInfo.bUpdateAtStart)
|
if (SettingsInfo.bUpdateAtStart)
|
||||||
UpdateAppsDB();
|
UpdateAppsDB();
|
||||||
|
|
||||||
|
/* Load the menu hotkeys */
|
||||||
|
KeyBrd = LoadAccelerators(NULL, MAKEINTRESOURCE(HOTKEYS));
|
||||||
|
|
||||||
/* Message Loop */
|
/* Message Loop */
|
||||||
while (GetMessage(&Msg, NULL, 0, 0))
|
while (GetMessage(&Msg, NULL, 0, 0))
|
||||||
|
{
|
||||||
|
if (!TranslateAccelerator(hMainWnd, KeyBrd, &Msg))
|
||||||
{
|
{
|
||||||
TranslateMessage(&Msg);
|
TranslateMessage(&Msg);
|
||||||
DispatchMessage(&Msg);
|
DispatchMessage(&Msg);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Exit:
|
Exit:
|
||||||
if (hMutex) CloseHandle(hMutex);
|
if (hMutex)
|
||||||
|
CloseHandle(hMutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue