mirror of
https://github.com/reactos/reactos.git
synced 2025-06-26 16:00:12 +00:00
[RAPPS] cmdline enhancement (#3087)
* [RAPPS] now command-line option supports begin with both / and - * [RAPPS] Add help command with /? * [RAPPS] add /find command * [RAPPS] add /info option * [RAPPS] add copyright and contact e-mail
This commit is contained in:
parent
997650d424
commit
7a11c65561
35 changed files with 612 additions and 90 deletions
|
@ -4,6 +4,7 @@ set_cpp(WITH_RUNTIME)
|
|||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/atl)
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/cryptlib)
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
|
||||
include_directories(include)
|
||||
|
||||
list(APPEND SOURCE
|
||||
|
@ -42,8 +43,8 @@ add_definitions(
|
|||
file(GLOB_RECURSE rapps_rc_deps res/*.*)
|
||||
add_rc_deps(rapps.rc ${rapps_rc_deps})
|
||||
add_executable(rapps ${SOURCE} rapps.rc)
|
||||
set_module_type(rapps win32gui UNICODE)
|
||||
target_link_libraries(rapps uuid wine)
|
||||
set_module_type(rapps win32cui UNICODE)
|
||||
target_link_libraries(rapps conutils ${PSEH_LIB} uuid wine)
|
||||
add_importlibs(rapps advapi32 comctl32 gdi32 wininet user32 shell32 shlwapi ole32 setupapi gdiplus msvcrt kernel32 ntdll)
|
||||
add_pch(rapps include/rapps.h SOURCE)
|
||||
add_dependencies(rapps rappsmsg)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "misc.h"
|
||||
#include "gui.h"
|
||||
#include "appview.h"
|
||||
#include "winmain.h"
|
||||
#include <shlobj_undoc.h>
|
||||
#include <shlguid_undoc.h>
|
||||
|
||||
|
@ -51,7 +52,7 @@ HTREEITEM CSideTreeView::AddItem(HTREEITEM hParent, ATL::CStringW &Text, INT Ima
|
|||
HTREEITEM CSideTreeView::AddCategory(HTREEITEM hRootItem, UINT TextIndex, UINT IconIndex)
|
||||
{
|
||||
ATL::CStringW szText;
|
||||
INT Index;
|
||||
INT Index = 0;
|
||||
HICON hIcon;
|
||||
|
||||
hIcon = (HICON)LoadImageW(hInst,
|
||||
|
@ -613,14 +614,6 @@ VOID CMainWindow::OnCommand(WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
}
|
||||
|
||||
BOOL CMainWindow::SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
|
||||
{
|
||||
if (!*szNeedle)
|
||||
return TRUE;
|
||||
/* TODO: Improve pattern search beyond a simple case-insensitive substring search. */
|
||||
return StrStrIW(szHaystack, szNeedle) != NULL;
|
||||
}
|
||||
|
||||
BOOL CALLBACK CMainWindow::EnumInstalledAppProc(CInstalledApplicationInfo *Info)
|
||||
{
|
||||
if (!SearchPatternMatch(Info->szDisplayName.GetString(), szSearchPattern))
|
||||
|
@ -723,7 +716,7 @@ ATL::CWndClassInfo &CMainWindow::GetWndClassInfo()
|
|||
LoadCursorW(NULL, IDC_ARROW),
|
||||
(HBRUSH)(COLOR_BTNFACE + 1),
|
||||
MAKEINTRESOURCEW(IDR_MAINMENU),
|
||||
L"RAppsWnd",
|
||||
szWindowClass,
|
||||
NULL
|
||||
},
|
||||
NULL, NULL, IDC_ARROW, TRUE, 0, _T("")
|
||||
|
@ -861,7 +854,7 @@ void CMainWindow::HandleTabOrder(int direction)
|
|||
|
||||
|
||||
|
||||
VOID ShowMainWindow(INT nShowCmd)
|
||||
VOID MainWindowLoop(INT nShowCmd)
|
||||
{
|
||||
HACCEL KeyBrd;
|
||||
MSG Msg;
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
VOID CreateSettingsDlg(HWND hwnd);
|
||||
|
||||
//Main window
|
||||
VOID ShowMainWindow(INT nShowCmd);
|
||||
VOID MainWindowLoop(INT nShowCmd);
|
||||
|
||||
// Download dialogs
|
||||
VOID DownloadApplicationsDB(LPCWSTR lpUrl, BOOL IsOfficial);
|
||||
|
|
|
@ -98,8 +98,6 @@ private:
|
|||
|
||||
VOID OnCommand(WPARAM wParam, LPARAM lParam);
|
||||
|
||||
static BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle);
|
||||
|
||||
BOOL CALLBACK EnumInstalledAppProc(CInstalledApplicationInfo *Info);
|
||||
|
||||
BOOL CALLBACK EnumAvailableAppProc(CAvailableApplicationInfo *Info, BOOL bInitialCheckState);
|
||||
|
@ -134,4 +132,4 @@ public:
|
|||
};
|
||||
|
||||
|
||||
VOID ShowMainWindow(INT nShowCmd);
|
||||
VOID MainWindowLoop(INT nShowCmd);
|
||||
|
|
|
@ -56,3 +56,5 @@ BOOL IsSystem64Bit();
|
|||
INT GetSystemColorDepth();
|
||||
|
||||
void UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime);
|
||||
|
||||
BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle);
|
||||
|
|
|
@ -218,6 +218,16 @@
|
|||
#define IDS_DL_DIALOG_DB_DOWNLOAD_DISP 951
|
||||
#define IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP 952
|
||||
|
||||
/* Command-line related strings */
|
||||
#define IDS_CMD_USAGE 953
|
||||
#define IDS_CMD_NEED_PACKAGE_NAME 954
|
||||
#define IDS_CMD_NEED_FILE_NAME 955
|
||||
#define IDS_CMD_NEED_PARAMS 956
|
||||
#define IDS_CMD_INVALID_OPTION 957
|
||||
#define IDS_CMD_FIND_RESULT_FOR 958
|
||||
#define IDS_CMD_PACKAGE_NOT_FOUND 959
|
||||
#define IDS_CMD_PACKAGE_INFO 960
|
||||
|
||||
/* Accelerators */
|
||||
#define HOTKEYS 715
|
||||
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#define CMD_KEY_INSTALL L"/INSTALL"
|
||||
#define CMD_KEY_SETUP L"/SETUP"
|
||||
#define CMD_KEY_INSTALL L"INSTALL"
|
||||
#define CMD_KEY_SETUP L"SETUP"
|
||||
#define CMD_KEY_FIND L"FIND"
|
||||
#define CMD_KEY_INFO L"INFO"
|
||||
#define CMD_KEY_HELP L"?"
|
||||
|
||||
// return TRUE if the SETUP key was valid
|
||||
BOOL UseCmdParameters(LPWSTR lpCmdLine);
|
||||
const WCHAR UsageString[] = L"RAPPS [/" CMD_KEY_HELP "] [/" CMD_KEY_INSTALL " packagename] [/" CMD_KEY_SETUP " filename]";
|
||||
|
||||
BOOL ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow);
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
#include <windef.h>
|
||||
#include <wininet.h>
|
||||
|
||||
extern LPCWSTR szWindowClass;
|
||||
|
||||
//TODO: Separate main and settings related definitions
|
||||
struct SETTINGS_INFO
|
||||
{
|
||||
|
|
|
@ -255,3 +255,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -256,3 +256,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Datenbank-Aktualisierung…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -254,3 +254,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Actualizando listado…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Actualizando listado… (Origen no oficial)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -259,3 +259,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Andmebaasi uuendamine…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Mise à jour de la base de données…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Mise à jour de la base de données… (Non officielle)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -257,3 +257,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "מעדכן את מסד הנתונים..."
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Memperbarui database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Aggiornamento Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "データベースを更新中..."
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -259,3 +259,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Aktualizowanie bazy programów…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -253,3 +253,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -253,3 +253,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Actualizar base de dados…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "A actualizar Base de dados… (Fonte não oficial)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -260,3 +260,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Actualizare baza de date…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -251,3 +251,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Обновление базы данных…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -256,3 +256,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -255,3 +255,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -258,3 +258,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Updating Database…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -253,3 +253,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Veri Tabanı güncelleniyor…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -259,3 +259,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "Оновлення списку програм…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "Updating Database… (Unofficial source)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -254,3 +254,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "正在更新数据库…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "正在更新数据库… (非官方源)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -253,3 +253,15 @@ BEGIN
|
|||
IDS_DL_DIALOG_DB_DOWNLOAD_DISP "更新資料庫…"
|
||||
IDS_DL_DIALOG_DB_UNOFFICIAL_DOWNLOAD_DISP "正在更新資料庫… (非官方源)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_CMD_USAGE "Usage: "
|
||||
IDS_CMD_NEED_PACKAGE_NAME "Error: option %1 expects one or more package name.\n"
|
||||
IDS_CMD_NEED_FILE_NAME "Error: option %1 expects a file name.\n"
|
||||
IDS_CMD_NEED_PARAMS "Error: option %1 expects one or more parameters.\n"
|
||||
IDS_CMD_INVALID_OPTION "Error: Unknown or invalid command line option specified.\n"
|
||||
IDS_CMD_FIND_RESULT_FOR "Find result for %1:\n"
|
||||
IDS_CMD_PACKAGE_NOT_FOUND "Failed to find package %1.\n"
|
||||
IDS_CMD_PACKAGE_INFO "Information about package %1:\n"
|
||||
END
|
||||
|
|
|
@ -522,3 +522,11 @@ void UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime)
|
|||
pFileTime->dwLowDateTime = (DWORD)ll;
|
||||
pFileTime->dwHighDateTime = ll >> 32;
|
||||
}
|
||||
|
||||
BOOL SearchPatternMatch(LPCWSTR szHaystack, LPCWSTR szNeedle)
|
||||
{
|
||||
if (!*szNeedle)
|
||||
return TRUE;
|
||||
/* TODO: Improve pattern search beyond a simple case-insensitive substring search. */
|
||||
return StrStrIW(szHaystack, szNeedle) != NULL;
|
||||
}
|
||||
|
|
|
@ -3,59 +3,53 @@
|
|||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Functions to parse command-line flags and process them
|
||||
* COPYRIGHT: Copyright 2017 Alexander Shaposhnikov (sanchaez@reactos.org)
|
||||
* Copyright 2020 He Yang (1160386205@qq.com)
|
||||
*/
|
||||
#include "rapps.h"
|
||||
|
||||
#include "unattended.h"
|
||||
|
||||
#include "winmain.h"
|
||||
|
||||
#include <setupapi.h>
|
||||
|
||||
#define MIN_ARGS 3
|
||||
#include <conutils.h>
|
||||
|
||||
BOOL UseCmdParameters(LPWSTR lpCmdLine)
|
||||
BOOL MatchCmdOption(LPWSTR argvOption, LPCWSTR szOptToMacth)
|
||||
{
|
||||
INT argc;
|
||||
LPWSTR* argv = CommandLineToArgvW(lpCmdLine, &argc);
|
||||
WCHAR FirstCharList[] = { L'-', L'/' };
|
||||
|
||||
if (!argv || argc < MIN_ARGS)
|
||||
for (UINT i = 0; i < _countof(FirstCharList); i++)
|
||||
{
|
||||
if (argvOption[0] == FirstCharList[i])
|
||||
{
|
||||
if (StrCmpIW(argvOption + 1, szOptToMacth) == 0)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL HandleInstallCommand(LPWSTR szCommand, int argcLeft, LPWSTR * argvLeft)
|
||||
{
|
||||
if (argcLeft == 0)
|
||||
{
|
||||
ConResMsgPrintf(StdOut, NULL, IDS_CMD_NEED_PACKAGE_NAME, szCommand);
|
||||
return FALSE;
|
||||
}
|
||||
FreeConsole();
|
||||
|
||||
ATL::CSimpleArray<ATL::CStringW> PkgNameList;
|
||||
if (!StrCmpIW(argv[1], CMD_KEY_INSTALL))
|
||||
{
|
||||
for (INT i = 2; i < argc; ++i)
|
||||
{
|
||||
PkgNameList.Add(argv[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (!StrCmpIW(argv[1], CMD_KEY_SETUP))
|
||||
{
|
||||
HINF InfHandle = SetupOpenInfFileW(argv[2], NULL, INF_STYLE_WIN4, NULL);
|
||||
if (InfHandle == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
INFCONTEXT Context;
|
||||
if (SetupFindFirstLineW(InfHandle, L"RAPPS", L"Install", &Context))
|
||||
{
|
||||
WCHAR szPkgName[MAX_PATH];
|
||||
do
|
||||
{
|
||||
if (SetupGetStringFieldW(&Context, 1, szPkgName, _countof(szPkgName), NULL))
|
||||
{
|
||||
PkgNameList.Add(szPkgName);
|
||||
}
|
||||
} while (SetupFindNextLine(&Context, &Context));
|
||||
}
|
||||
SetupCloseInfFile(InfHandle);
|
||||
}
|
||||
else
|
||||
for (int i = 0; i < argcLeft; i++)
|
||||
{
|
||||
return FALSE;
|
||||
PkgNameList.Add(argvLeft[i]);
|
||||
}
|
||||
|
||||
CAvailableApps apps;
|
||||
|
@ -68,6 +62,244 @@ BOOL UseCmdParameters(LPWSTR lpCmdLine)
|
|||
DownloadListOfApplications(arrAppInfo, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL HandleSetupCommand(LPWSTR szCommand, int argcLeft, LPWSTR * argvLeft)
|
||||
{
|
||||
if (argcLeft != 1)
|
||||
{
|
||||
ConResMsgPrintf(StdOut, NULL, IDS_CMD_NEED_FILE_NAME, szCommand);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ATL::CSimpleArray<ATL::CStringW> PkgNameList;
|
||||
HINF InfHandle = SetupOpenInfFileW(argvLeft[0], NULL, INF_STYLE_WIN4, NULL);
|
||||
if (InfHandle == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
INFCONTEXT Context;
|
||||
if (SetupFindFirstLineW(InfHandle, L"RAPPS", L"Install", &Context))
|
||||
{
|
||||
WCHAR szPkgName[MAX_PATH];
|
||||
do
|
||||
{
|
||||
if (SetupGetStringFieldW(&Context, 1, szPkgName, _countof(szPkgName), NULL))
|
||||
{
|
||||
PkgNameList.Add(szPkgName);
|
||||
}
|
||||
} while (SetupFindNextLine(&Context, &Context));
|
||||
}
|
||||
SetupCloseInfFile(InfHandle);
|
||||
|
||||
CAvailableApps apps;
|
||||
apps.UpdateAppsDB();
|
||||
apps.Enum(ENUM_ALL_AVAILABLE, NULL, NULL);
|
||||
|
||||
ATL::CSimpleArray<CAvailableApplicationInfo> arrAppInfo = apps.FindAppsByPkgNameList(PkgNameList);
|
||||
if (arrAppInfo.GetSize() > 0)
|
||||
{
|
||||
DownloadListOfApplications(arrAppInfo, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL CALLBACK CmdFindAppEnum(CAvailableApplicationInfo *Info, BOOL bInitialCheckState, PVOID param)
|
||||
{
|
||||
LPCWSTR lpszSearch = (LPCWSTR)param;
|
||||
if (!SearchPatternMatch(Info->m_szName.GetString(), lpszSearch) &&
|
||||
!SearchPatternMatch(Info->m_szDesc.GetString(), lpszSearch))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ConPrintf(StdOut, (LPWSTR)L"%s (%s)\n", (LPCWSTR)(Info->m_szName), (LPCWSTR)(Info->m_szPkgName));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL HandleFindCommand(LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
|
||||
{
|
||||
if (argcLeft < 1)
|
||||
{
|
||||
ConResMsgPrintf(StdOut, NULL, IDS_CMD_NEED_PARAMS, szCommand);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CAvailableApps apps;
|
||||
apps.UpdateAppsDB();
|
||||
|
||||
for (int i = 0; i < argcLeft; i++)
|
||||
{
|
||||
ConResMsgPrintf(StdOut, NULL, IDS_CMD_FIND_RESULT_FOR, argvLeft[i]);
|
||||
apps.Enum(ENUM_ALL_AVAILABLE, CmdFindAppEnum, argvLeft[i]);
|
||||
ConPrintf(StdOut, (LPWSTR)L"\n");
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL HandleInfoCommand(LPWSTR szCommand, int argcLeft, LPWSTR *argvLeft)
|
||||
{
|
||||
if (argcLeft < 1)
|
||||
{
|
||||
ConResMsgPrintf(StdOut, NULL, IDS_CMD_NEED_PARAMS, szCommand);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CAvailableApps apps;
|
||||
apps.UpdateAppsDB();
|
||||
apps.Enum(ENUM_ALL_AVAILABLE, NULL, NULL);
|
||||
|
||||
for (int i = 0; i < argcLeft; i++)
|
||||
{
|
||||
CAvailableApplicationInfo *AppInfo = apps.FindAppByPkgName(argvLeft[i]);
|
||||
if (!AppInfo)
|
||||
{
|
||||
ConResMsgPrintf(StdOut, NULL, IDS_CMD_PACKAGE_NOT_FOUND, argvLeft[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
ConResMsgPrintf(StdOut, NULL, IDS_CMD_PACKAGE_INFO, argvLeft[i]);
|
||||
// TODO: code about extracting information from CAvailableApplicationInfo (in appview.cpp, class CAppRichEdit)
|
||||
// is in a mess. It should be refactored, and should not placed in class CAppRichEdit.
|
||||
// and the code here should reused that code after refactor.
|
||||
|
||||
ConPuts(StdOut, (LPWSTR)(LPCWSTR)AppInfo->m_szName);
|
||||
|
||||
if (AppInfo->m_szVersion)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_AINFO_VERSION);
|
||||
ConPuts(StdOut, (LPWSTR)(LPCWSTR)AppInfo->m_szVersion);
|
||||
}
|
||||
|
||||
if (AppInfo->m_szLicense)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_AINFO_LICENSE);
|
||||
ConPuts(StdOut, (LPWSTR)(LPCWSTR)AppInfo->m_szLicense);
|
||||
}
|
||||
|
||||
if (AppInfo->m_szSize)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_AINFO_SIZE);
|
||||
ConPuts(StdOut, (LPWSTR)(LPCWSTR)AppInfo->m_szSize);
|
||||
}
|
||||
|
||||
if (AppInfo->m_szUrlSite)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_AINFO_URLSITE);
|
||||
ConPuts(StdOut, (LPWSTR)(LPCWSTR)AppInfo->m_szUrlSite);
|
||||
}
|
||||
|
||||
if (AppInfo->m_szDesc)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_AINFO_DESCRIPTION);
|
||||
ConPuts(StdOut, (LPWSTR)(LPCWSTR)AppInfo->m_szDesc);
|
||||
}
|
||||
|
||||
if (AppInfo->m_szUrlDownload)
|
||||
{
|
||||
ConResPrintf(StdOut, IDS_AINFO_URLDOWNLOAD);
|
||||
ConPuts(StdOut, (LPWSTR)(LPCWSTR)AppInfo->m_szUrlDownload);
|
||||
}
|
||||
|
||||
ConPrintf(StdOut, (LPWSTR)L"\n");
|
||||
}
|
||||
ConPrintf(StdOut, (LPWSTR)L"\n");
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL HandleHelpCommand(LPWSTR szCommand, int argcLeft, LPWSTR * argvLeft)
|
||||
{
|
||||
if (argcLeft != 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ConPrintf(StdOut, (LPWSTR)L"\n");
|
||||
ConResPuts(StdOut, IDS_APPTITLE);
|
||||
ConPrintf(StdOut, (LPWSTR)L"\n\n");
|
||||
|
||||
ConResPuts(StdOut, IDS_CMD_USAGE);
|
||||
ConPrintf(StdOut, (LPWSTR)L"%ls\n", UsageString);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
|
||||
{
|
||||
INT argc;
|
||||
LPWSTR *argv = CommandLineToArgvW(lpCmdLine, &argc);
|
||||
|
||||
if (!argv)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (argc == 1) // RAPPS is launched without options
|
||||
{
|
||||
// Close the console, and open MainWindow
|
||||
FreeConsole();
|
||||
|
||||
|
||||
// Check for if rapps MainWindow is already launched in another process
|
||||
HANDLE hMutex;
|
||||
|
||||
hMutex = CreateMutexW(NULL, FALSE, szWindowClass);
|
||||
if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS))
|
||||
{
|
||||
/* If already started, it is found its window */
|
||||
HWND hWindow = FindWindowW(szWindowClass, NULL);
|
||||
|
||||
/* Activate window */
|
||||
ShowWindow(hWindow, SW_SHOWNORMAL);
|
||||
SetForegroundWindow(hWindow);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (SettingsInfo.bUpdateAtStart || bIsFirstLaunch)
|
||||
CAvailableApps::ForceUpdateAppsDB();
|
||||
|
||||
MainWindowLoop(nCmdShow);
|
||||
|
||||
if (hMutex)
|
||||
CloseHandle(hMutex);
|
||||
}
|
||||
else if (MatchCmdOption(argv[1], CMD_KEY_INSTALL))
|
||||
{
|
||||
return HandleInstallCommand(argv[1], argc - 2, argv + 2);
|
||||
}
|
||||
else if (MatchCmdOption(argv[1], CMD_KEY_SETUP))
|
||||
{
|
||||
return HandleSetupCommand(argv[1], argc - 2, argv + 2);
|
||||
}
|
||||
else if (MatchCmdOption(argv[1], CMD_KEY_FIND))
|
||||
{
|
||||
return HandleFindCommand(argv[1], argc - 2, argv + 2);
|
||||
}
|
||||
else if (MatchCmdOption(argv[1], CMD_KEY_INFO))
|
||||
{
|
||||
return HandleInfoCommand(argv[1], argc - 2, argv + 2);
|
||||
}
|
||||
else if (MatchCmdOption(argv[1], CMD_KEY_HELP))
|
||||
{
|
||||
return HandleHelpCommand(argv[1], argc - 2, argv + 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
// unrecognized/invalid options
|
||||
ConResPuts(StdOut, IDS_CMD_INVALID_OPTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -14,6 +14,10 @@
|
|||
|
||||
#include <gdiplus.h>
|
||||
|
||||
#include <conutils.h>
|
||||
|
||||
LPCWSTR szWindowClass = L"ROSAPPMGR";
|
||||
|
||||
HWND hMainWnd;
|
||||
HINSTANCE hInst;
|
||||
SETTINGS_INFO SettingsInfo;
|
||||
|
@ -139,13 +143,13 @@ VOID SaveSettings(HWND hwnd)
|
|||
}
|
||||
}
|
||||
|
||||
INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, INT nShowCmd)
|
||||
int wmain(int argc, wchar_t *argv[])
|
||||
{
|
||||
LPCWSTR szWindowClass = L"ROSAPPMGR";
|
||||
HANDLE hMutex;
|
||||
BOOL bIsFirstLaunch;
|
||||
ConInitStdStreams(); // Initialize the Console Standard Streams
|
||||
|
||||
InitializeAtlModule(hInstance, TRUE);
|
||||
BOOL bIsFirstLaunch;
|
||||
|
||||
InitializeAtlModule(GetModuleHandle(NULL), TRUE);
|
||||
InitializeGDIPlus(TRUE);
|
||||
|
||||
if (GetUserDefaultUILanguage() == MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT))
|
||||
|
@ -153,19 +157,8 @@ INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
|
|||
SetProcessDefaultLayout(LAYOUT_RTL);
|
||||
}
|
||||
|
||||
hInst = hInstance;
|
||||
hInst = GetModuleHandle(NULL);
|
||||
|
||||
hMutex = CreateMutexW(NULL, FALSE, szWindowClass);
|
||||
if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS))
|
||||
{
|
||||
/* If already started, it is found its window */
|
||||
HWND hWindow = FindWindowW(szWindowClass, NULL);
|
||||
|
||||
/* Activate window */
|
||||
ShowWindow(hWindow, SW_SHOWNORMAL);
|
||||
SetForegroundWindow(hWindow);
|
||||
return 1;
|
||||
}
|
||||
bIsFirstLaunch = !LoadSettings();
|
||||
if (bIsFirstLaunch)
|
||||
{
|
||||
|
@ -175,20 +168,11 @@ INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
|
|||
InitLogs();
|
||||
InitCommonControls();
|
||||
|
||||
// skip window creation if there were some keys
|
||||
if (!UseCmdParameters(GetCommandLineW()))
|
||||
{
|
||||
if (SettingsInfo.bUpdateAtStart || bIsFirstLaunch)
|
||||
CAvailableApps::ForceUpdateAppsDB();
|
||||
|
||||
ShowMainWindow(nShowCmd);
|
||||
}
|
||||
|
||||
if (hMutex)
|
||||
CloseHandle(hMutex);
|
||||
|
||||
// parse cmd-line and perform the corresponding operation
|
||||
BOOL bSuccess = ParseCmdAndExecute(GetCommandLineW(), bIsFirstLaunch, SW_SHOWNORMAL);
|
||||
|
||||
InitializeGDIPlus(FALSE);
|
||||
InitializeAtlModule(hInstance, FALSE);
|
||||
InitializeAtlModule(GetModuleHandle(NULL), FALSE);
|
||||
|
||||
return 0;
|
||||
return bSuccess ? 0 : 1;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue