mirror of
https://github.com/reactos/reactos.git
synced 2025-06-01 07:28:19 +00:00
[MSCONFIG_NEW]
- Associate a temporary VS project (will be removed later on); change the name of the target for now... - Allow only one instance of MSConfig running on the system (we use a semaphore, compatible with MS' msconfig, so that if you try to run ROS msconfig on windows, you cannot run also windows' msconfig, and vice versa). - Introduce some utility functions (for strings and other stuff), will be used later on. CORE-9333 svn path=/trunk/; revision=69024
This commit is contained in:
parent
83400d8fc7
commit
c1228347b5
35 changed files with 818 additions and 49 deletions
|
@ -1,4 +1,6 @@
|
|||
|
||||
PROJECT(msconfig_new)
|
||||
|
||||
list(APPEND SOURCE
|
||||
toolspage.c
|
||||
srvpage.c
|
||||
|
@ -7,11 +9,13 @@ list(APPEND SOURCE
|
|||
freeldrpage.c
|
||||
generalpage.c
|
||||
msconfig.c
|
||||
stringutils.c
|
||||
utils.c
|
||||
precomp.h)
|
||||
|
||||
add_rc_deps(msconfig.rc ${CMAKE_CURRENT_SOURCE_DIR}/res/msconfig.ico)
|
||||
add_executable(msconfig ${SOURCE} msconfig.rc)
|
||||
set_module_type(msconfig win32gui UNICODE)
|
||||
add_importlibs(msconfig user32 advapi32 version comctl32 shell32 shlwapi msvcrt kernel32)
|
||||
add_pch(msconfig precomp.h SOURCE)
|
||||
add_cd_file(TARGET msconfig DESTINATION reactos/system32 FOR all)
|
||||
add_executable(msconfig_new ${SOURCE} msconfig.rc)
|
||||
set_module_type(msconfig_new win32gui UNICODE)
|
||||
add_importlibs(msconfig_new user32 advapi32 version comctl32 shell32 shlwapi msvcrt kernel32)
|
||||
add_pch(msconfig_new precomp.h SOURCE)
|
||||
add_cd_file(TARGET msconfig_new DESTINATION reactos/system32 FOR all)
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Приложение за настройка на системата"
|
||||
IDS_MSCONFIG "Приложение за настройка на системата"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Общи"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Programa de configuracio de sistema"
|
||||
IDS_MSCONFIG "Programa de configuracio de sistema"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "General"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -129,7 +129,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Nástroj pro konfiguraci systému"
|
||||
IDS_MSCONFIG "Nástroj pro konfiguraci systému"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Obecné"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Systemkonfiguration"
|
||||
IDS_MSCONFIG "Systemkonfiguration"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Allgemein"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Πρόγραμμα παραμετροποίησης συστήματος"
|
||||
IDS_MSCONFIG "Πρόγραμμα παραμετροποίησης συστήματος"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Γενικά"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "System configuration program"
|
||||
IDS_MSCONFIG "System configuration program"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "General"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -126,7 +126,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Utilidad de configuración del sistema"
|
||||
IDS_MSCONFIG "Utilidad de configuración del sistema"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "General"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Utilitaire de configuration système"
|
||||
IDS_MSCONFIG "Utilitaire de configuration système"
|
||||
IDS_MSCONFIG_2 "Configuration du système"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Général"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "כלי שירות לקביעת תצורת המערכת"
|
||||
IDS_MSCONFIG "כלי שירות לקביעת תצורת המערכת"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "כללי"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Rendszerkonfiguráciüs segédprogram"
|
||||
IDS_MSCONFIG "Rendszerkonfiguráciüs segédprogram"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Általános"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Program konfigurasi sistem"
|
||||
IDS_MSCONFIG "Program konfigurasi sistem"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Umum"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Utilità di configurazione del sistema"
|
||||
IDS_MSCONFIG "Utilità di configurazione del sistema"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Generale"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "System 설정 프로그램"
|
||||
IDS_MSCONFIG "System 설정 프로그램"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "일반"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Hulpprogramma voor systeemconfiguratie"
|
||||
IDS_MSCONFIG "Hulpprogramma voor systeemconfiguratie"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Algemeen"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -123,7 +123,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Systemkonfigurasjon"
|
||||
IDS_MSCONFIG "Systemkonfigurasjon"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Generelt"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -131,7 +131,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Program konfiguracji systemu"
|
||||
IDS_MSCONFIG "Program konfiguracji systemu"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Ogólne"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Programa de configuração do sistema"
|
||||
IDS_MSCONFIG "Programa de configuração do sistema"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Geral"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Configuratorul de sistem"
|
||||
IDS_MSCONFIG "Configuratorul de sistem"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Generale"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Настройка системы"
|
||||
IDS_MSCONFIG "Настройка системы"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Общие"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -127,7 +127,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Program na konfiguráciu systému"
|
||||
IDS_MSCONFIG "Program na konfiguráciu systému"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Všeobecné"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -127,7 +127,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Programi i konfigurimit te sistemit"
|
||||
IDS_MSCONFIG "Programi i konfigurimit te sistemit"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "General"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -130,7 +130,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Systemkonfiguration"
|
||||
IDS_MSCONFIG "Systemkonfiguration"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Generellt"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "โปรแกรมโครงแบบระบบ"
|
||||
IDS_MSCONFIG "โปรแกรมโครงแบบระบบ"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "ทั่วไป"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Dizge Yapılandırma İzlencesi"
|
||||
IDS_MSCONFIG "Dizge Yapılandırma İzlencesi"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Umûmî"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -131,7 +131,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "Програма налаштування системи"
|
||||
IDS_MSCONFIG "Програма налаштування системи"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "Загальні"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "系统配置实用程序"
|
||||
IDS_MSCONFIG "系统配置实用程序"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "一般"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -125,7 +125,12 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_MSCONFIG "系統設定"
|
||||
IDS_MSCONFIG "系統設定"
|
||||
IDS_MSCONFIG_2 "System Configuration"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_TAB_GENERAL "一般"
|
||||
IDS_TAB_SYSTEM "SYSTEM.INI"
|
||||
IDS_TAB_FREELDR "FREELDR.INI"
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "toolspage.h"
|
||||
#include "srvpage.h"
|
||||
|
@ -16,9 +17,24 @@
|
|||
#include "systempage.h"
|
||||
#include "generalpage.h"
|
||||
|
||||
HINSTANCE hInst = 0;
|
||||
/* Allow only for a single instance of MSConfig */
|
||||
#ifdef _MSC_VER
|
||||
#pragma data_seg("MSConfigInstance")
|
||||
HWND hSingleWnd = NULL;
|
||||
#pragma data_seg()
|
||||
#pragma comment(linker, "/SECTION:MSConfigInstance,RWS")
|
||||
#else
|
||||
HWND hSingleWnd __attribute__((section ("MSConfigInstance"), shared)) = NULL;
|
||||
#endif
|
||||
|
||||
/* Defaults for ReactOS */
|
||||
BOOL bIsWindows = FALSE;
|
||||
BOOL bIsOSVersionLessThanVista = TRUE;
|
||||
|
||||
HINSTANCE hInst = NULL;
|
||||
LPWSTR szAppName = NULL;
|
||||
HWND hMainWnd; /* Main Window */
|
||||
|
||||
HWND hTabWnd; /* Tab Control Window */
|
||||
UINT uXIcon = 0, uYIcon = 0; /* Icon sizes */
|
||||
HICON hDialogIcon = NULL;
|
||||
|
@ -32,7 +48,7 @@ void MsConfig_OnTabWndSelChange(void);
|
|||
//
|
||||
|
||||
//
|
||||
// Copied from uxtheme.h
|
||||
// Copied from uxtheme.h
|
||||
// If you have this new header, then delete these and
|
||||
// #include <uxtheme.h> instead!
|
||||
//
|
||||
|
@ -45,7 +61,7 @@ void MsConfig_OnTabWndSelChange(void);
|
|||
typedef HRESULT (WINAPI * ETDTProc) (HWND, DWORD);
|
||||
|
||||
//
|
||||
// Try to call EnableThemeDialogTexture, if uxtheme.dll is present
|
||||
// Try to call EnableThemeDialogTexture, if uxtheme.dll is present
|
||||
//
|
||||
BOOL EnableDialogTheme(HWND hwnd)
|
||||
{
|
||||
|
@ -300,26 +316,95 @@ MsConfigWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
BOOL Initialize(HINSTANCE hInstance)
|
||||
{
|
||||
BOOL Success = TRUE;
|
||||
LPWSTR lpszVistaAppName = NULL;
|
||||
HANDLE hSemaphore;
|
||||
INITCOMMONCONTROLSEX InitControls;
|
||||
|
||||
/* Initialize our global version flags */
|
||||
bIsWindows = TRUE; /* IsWindowsOS(); */ // TODO: Commented for testing purposes...
|
||||
bIsOSVersionLessThanVista = TRUE; /* IsOSVersionLessThanVista(); */ // TODO: Commented for testing purposes...
|
||||
|
||||
/* Initialize global strings */
|
||||
szAppName = LoadResourceString(hInstance, IDS_MSCONFIG);
|
||||
if (!bIsOSVersionLessThanVista)
|
||||
lpszVistaAppName = LoadResourceString(hInstance, IDS_MSCONFIG_2);
|
||||
|
||||
/* We use a semaphore in order to have a single-instance application */
|
||||
hSemaphore = CreateSemaphoreW(NULL, 0, 1, L"MSConfigRunning");
|
||||
if (!hSemaphore || GetLastError() == ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
CloseHandle(hSemaphore);
|
||||
|
||||
/*
|
||||
* A semaphore with the same name already exist. It should have been
|
||||
* created by another instance of MSConfig. Try to find its window
|
||||
* and bring it to front.
|
||||
*/
|
||||
if ( (hSingleWnd && IsWindow(hSingleWnd)) ||
|
||||
( (hSingleWnd = FindWindowW(L"#32770", szAppName)) != NULL ) ||
|
||||
(!bIsOSVersionLessThanVista ? ( (hSingleWnd = FindWindowW(L"#32770", lpszVistaAppName)) != NULL ) : FALSE) )
|
||||
{
|
||||
/* Found it. Show the window. */
|
||||
ShowWindow(hSingleWnd, SW_SHOWNORMAL);
|
||||
SetForegroundWindow(hSingleWnd);
|
||||
}
|
||||
|
||||
/* Quit this instance of MSConfig */
|
||||
Success = FALSE;
|
||||
}
|
||||
if (!bIsOSVersionLessThanVista) MemFree(lpszVistaAppName);
|
||||
|
||||
/* Quit now if we failed */
|
||||
if (!Success)
|
||||
{
|
||||
MemFree(szAppName);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Initialize the common controls */
|
||||
InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
||||
InitControls.dwICC = ICC_LISTVIEW_CLASSES | ICC_TREEVIEW_CLASSES | ICC_UPDOWN_CLASS /* | ICC_PROGRESS_CLASS | ICC_HOTKEY_CLASS*/;
|
||||
InitCommonControlsEx(&InitControls);
|
||||
|
||||
hInst = hInstance;
|
||||
|
||||
return Success;
|
||||
}
|
||||
|
||||
VOID Cleanup(VOID)
|
||||
{
|
||||
MemFree(szAppName);
|
||||
|
||||
// // Close the sentry semaphore.
|
||||
// CloseHandle(hSemaphore);
|
||||
}
|
||||
|
||||
int APIENTRY _tWinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPTSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
|
||||
INITCOMMONCONTROLSEX InitControls;
|
||||
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||
UNREFERENCED_PARAMETER(nCmdShow);
|
||||
|
||||
InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
||||
InitControls.dwICC = ICC_TAB_CLASSES | ICC_LISTVIEW_CLASSES;
|
||||
InitCommonControlsEx(&InitControls);
|
||||
/*
|
||||
* Initialize this instance of MSConfig. Quit if we have
|
||||
* another instance already running.
|
||||
*/
|
||||
if (!Initialize(hInstance))
|
||||
return -1;
|
||||
|
||||
hInst = hInstance;
|
||||
|
||||
DialogBox(hInst, (LPCTSTR)IDD_MSCONFIG_DIALOG, NULL, MsConfigWndProc);
|
||||
|
||||
// hInst = hInstance;
|
||||
|
||||
DialogBox(hInst, (LPCTSTR)IDD_MSCONFIG_DIALOG, NULL, MsConfigWndProc);
|
||||
|
||||
/* Finish cleanup and return */
|
||||
Cleanup();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
#ifndef _MSCONFIG_PCH_
|
||||
#define _MSCONFIG_PCH_
|
||||
|
||||
// NOTE: It is completely idiotic to need those defines defined
|
||||
// for having the *_s string functions. In the MS CRT they are
|
||||
// directly available without further tricks.
|
||||
#define MINGW_HAS_SECURE_API 1
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h> // FIXME: Should be normally useless in a proper CRT...
|
||||
#include <tchar.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define _INC_WINDOWS
|
||||
#define COM_NO_WINDOWS_H
|
||||
|
@ -10,9 +19,11 @@
|
|||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winnls.h>
|
||||
#include <winreg.h>
|
||||
#include <tchar.h>
|
||||
#include <stdio.h>
|
||||
#include <winuser.h>
|
||||
#include <winver.h>
|
||||
|
||||
#include <shlobj.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
|
|
|
@ -111,6 +111,7 @@
|
|||
#define IDS_SERVICES_YES 2202
|
||||
#define IDS_SERVICES_UNKNOWN 2203
|
||||
|
||||
#define IDS_MSCONFIG 3000
|
||||
#define IDS_MSCONFIG 3000
|
||||
#define IDS_MSCONFIG_2 3001
|
||||
|
||||
#define IDI_APPICON 3001
|
||||
#define IDI_APPICON 3010
|
||||
|
|
238
reactos/base/applications/msconfig_new/stringutils.c
Normal file
238
reactos/base/applications/msconfig_new/stringutils.c
Normal file
|
@ -0,0 +1,238 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Applications
|
||||
* LICENSE: LGPL - See COPYING in the top level directory
|
||||
* FILE: base/applications/msconfig/stringutils.c
|
||||
* PURPOSE: ANSI & UNICODE String Utility Functions
|
||||
* COPYRIGHT: Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
#include "utils.h"
|
||||
#include "stringutils.h"
|
||||
|
||||
//
|
||||
// String formatting
|
||||
//
|
||||
LPTSTR FormatStringV(LPCTSTR str, va_list args)
|
||||
{
|
||||
LPTSTR lpszString = NULL;
|
||||
|
||||
if (str)
|
||||
{
|
||||
size_t strLenPlusNull = _vsctprintf(str, args) + 1;
|
||||
lpszString = (LPTSTR)MemAlloc(0, strLenPlusNull * sizeof(TCHAR));
|
||||
if (lpszString)
|
||||
StringCchVPrintf(lpszString, strLenPlusNull, str, args);
|
||||
}
|
||||
|
||||
return lpszString;
|
||||
}
|
||||
|
||||
LPTSTR FormatString(LPCTSTR str, ...)
|
||||
{
|
||||
LPTSTR lpszString;
|
||||
va_list args;
|
||||
|
||||
va_start(args, str);
|
||||
lpszString = FormatStringV(str, args);
|
||||
va_end(args);
|
||||
|
||||
return lpszString;
|
||||
}
|
||||
|
||||
//
|
||||
// String handling (ANSI <-> Unicode UTF16)
|
||||
//
|
||||
LPSTR UnicodeToAnsi(LPCWSTR strW)
|
||||
{
|
||||
LPSTR strA = NULL;
|
||||
|
||||
if (strW)
|
||||
{
|
||||
int iNeededChars = WideCharToMultiByte(CP_ACP,
|
||||
WC_COMPOSITECHECK /* | WC_NO_BEST_FIT_CHARS */,
|
||||
strW, -1, NULL, 0, NULL, NULL);
|
||||
|
||||
strA = (LPSTR)MemAlloc(0, iNeededChars * sizeof(CHAR));
|
||||
if (strA)
|
||||
{
|
||||
WideCharToMultiByte(CP_ACP,
|
||||
WC_COMPOSITECHECK /* | WC_NO_BEST_FIT_CHARS */,
|
||||
strW, -1, strA, iNeededChars, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return strA;
|
||||
}
|
||||
|
||||
LPWSTR AnsiToUnicode(LPCSTR strA)
|
||||
{
|
||||
LPWSTR strW = NULL;
|
||||
|
||||
if (strA)
|
||||
{
|
||||
int iNeededChars = MultiByteToWideChar(CP_ACP,
|
||||
MB_PRECOMPOSED,
|
||||
strA, -1, NULL, 0);
|
||||
|
||||
strW = (LPWSTR)MemAlloc(0, iNeededChars * sizeof(WCHAR));
|
||||
if (strW)
|
||||
{
|
||||
MultiByteToWideChar(CP_ACP,
|
||||
MB_PRECOMPOSED,
|
||||
strA, -1, strW, iNeededChars);
|
||||
}
|
||||
}
|
||||
|
||||
return strW;
|
||||
}
|
||||
|
||||
LPSTR DuplicateStringA(LPCSTR str)
|
||||
{
|
||||
LPSTR dupStr = NULL;
|
||||
|
||||
if (str)
|
||||
{
|
||||
size_t strSizePlusNull = strlen(str) + 1;
|
||||
|
||||
dupStr = (LPSTR)MemAlloc(0, strSizePlusNull * sizeof(CHAR));
|
||||
if (dupStr)
|
||||
StringCchCopyA(dupStr, strSizePlusNull, str);
|
||||
}
|
||||
|
||||
return dupStr;
|
||||
}
|
||||
|
||||
LPWSTR DuplicateStringW(LPCWSTR str)
|
||||
{
|
||||
LPWSTR dupStr = NULL;
|
||||
|
||||
if (str)
|
||||
{
|
||||
size_t strSizePlusNull = wcslen(str) + 1;
|
||||
|
||||
dupStr = (LPWSTR)MemAlloc(0, strSizePlusNull * sizeof(WCHAR));
|
||||
if (dupStr)
|
||||
StringCchCopyW(dupStr, strSizePlusNull, str);
|
||||
}
|
||||
|
||||
return dupStr;
|
||||
}
|
||||
|
||||
LPSTR DuplicateStringAEx(LPCSTR str, size_t numOfChars)
|
||||
{
|
||||
LPSTR dupStr = NULL;
|
||||
|
||||
if (str)
|
||||
{
|
||||
size_t strSize = min(strlen(str), numOfChars);
|
||||
|
||||
dupStr = (LPSTR)MemAlloc(0, (strSize + 1) * sizeof(CHAR));
|
||||
if (dupStr)
|
||||
{
|
||||
StringCchCopyNA(dupStr, strSize + 1, str, strSize);
|
||||
dupStr[strSize] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
return dupStr;
|
||||
}
|
||||
|
||||
LPWSTR DuplicateStringWEx(LPCWSTR str, size_t numOfChars)
|
||||
{
|
||||
LPWSTR dupStr = NULL;
|
||||
|
||||
if (str)
|
||||
{
|
||||
size_t strSize = min(wcslen(str), numOfChars);
|
||||
|
||||
dupStr = (LPWSTR)MemAlloc(0, (strSize + 1) * sizeof(WCHAR));
|
||||
if (dupStr)
|
||||
{
|
||||
StringCchCopyNW(dupStr, strSize + 1, str, strSize);
|
||||
dupStr[strSize] = L'\0';
|
||||
}
|
||||
}
|
||||
|
||||
return dupStr;
|
||||
}
|
||||
|
||||
//
|
||||
// String search functions
|
||||
//
|
||||
/***
|
||||
*wchar_t *wcsstr(string1, string2) - search for string2 in string1
|
||||
* (wide strings)
|
||||
*
|
||||
*Purpose:
|
||||
* finds the first occurrence of string2 in string1 (wide strings)
|
||||
*
|
||||
*Entry:
|
||||
* wchar_t *string1 - string to search in
|
||||
* wchar_t *string2 - string to search for
|
||||
*
|
||||
*Exit:
|
||||
* returns a pointer to the first occurrence of string2 in
|
||||
* string1, or NULL if string2 does not occur in string1
|
||||
*
|
||||
*Uses:
|
||||
*
|
||||
*Exceptions:
|
||||
*
|
||||
*******************************************************************************/
|
||||
LPTSTR FindSubStrI(LPCTSTR str, LPCTSTR strSearch)
|
||||
{
|
||||
LPTSTR cp = (LPTSTR)str;
|
||||
LPTSTR s1, s2;
|
||||
|
||||
if (!*strSearch)
|
||||
return (LPTSTR)str;
|
||||
|
||||
while (*cp)
|
||||
{
|
||||
s1 = cp;
|
||||
s2 = (LPTSTR)strSearch;
|
||||
|
||||
while (*s1 && *s2 && (_totupper(*s1) == _totupper(*s2)))
|
||||
++s1, ++s2;
|
||||
|
||||
if (!*s2)
|
||||
return cp;
|
||||
|
||||
++cp;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* AppendPathSeparator
|
||||
*
|
||||
* Append a backslash ('\') to a path if one doesn't exist.
|
||||
*
|
||||
* PARAMS
|
||||
* lpszPath [I/O] The path to append a backslash to.
|
||||
*
|
||||
* RETURNS
|
||||
* Success: The position of the last backslash in the path.
|
||||
* Failure: NULL, if lpszPath is NULL or the path is too large.
|
||||
*/
|
||||
LPTSTR AppendPathSeparator(LPTSTR lpszPath)
|
||||
{
|
||||
size_t iLen = 0;
|
||||
|
||||
if (!lpszPath || (iLen = _tcslen(lpszPath)) >= MAX_PATH)
|
||||
return NULL;
|
||||
|
||||
if (iLen >= 1)
|
||||
{
|
||||
lpszPath += iLen - 1;
|
||||
if (*lpszPath++ != _T('\\'))
|
||||
{
|
||||
*lpszPath++ = _T('\\');
|
||||
*lpszPath = _T('\0');
|
||||
}
|
||||
}
|
||||
|
||||
return lpszPath;
|
||||
}
|
63
reactos/base/applications/msconfig_new/stringutils.h
Normal file
63
reactos/base/applications/msconfig_new/stringutils.h
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Applications
|
||||
* LICENSE: LGPL - See COPYING in the top level directory
|
||||
* FILE: base/applications/msconfig/stringutils.h
|
||||
* PURPOSE: ANSI & UNICODE String Utility Functions
|
||||
* COPYRIGHT: Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
|
||||
*/
|
||||
|
||||
#ifndef __STRINGUTILS_H__
|
||||
#define __STRINGUTILS_H__
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//
|
||||
// String formatting
|
||||
//
|
||||
LPTSTR FormatStringV(LPCTSTR str, va_list args);
|
||||
LPTSTR FormatString(LPCTSTR str, ...);
|
||||
|
||||
//
|
||||
// String handling (ANSI <-> Unicode UTF16)
|
||||
//
|
||||
LPSTR UnicodeToAnsi(LPCWSTR strW);
|
||||
LPWSTR AnsiToUnicode(LPCSTR strA);
|
||||
LPSTR DuplicateStringA(LPCSTR str);
|
||||
LPWSTR DuplicateStringW(LPCWSTR str);
|
||||
LPSTR DuplicateStringAEx(LPCSTR str, size_t numOfChars);
|
||||
LPWSTR DuplicateStringWEx(LPCWSTR str, size_t numOfChars);
|
||||
|
||||
//
|
||||
// Conversion macros ANSI <-> Unicode
|
||||
//
|
||||
#ifdef UNICODE
|
||||
#define NewAnsiString(x) UnicodeToAnsi(x)
|
||||
#define NewPortableString(x) AnsiToUnicode(x)
|
||||
#define DuplicateString(x) DuplicateStringW(x)
|
||||
#define DuplicateStringEx(x, y) DuplicateStringWEx((x), (y))
|
||||
#else
|
||||
#define NewAnsiString(x) DuplicateStringA(x)
|
||||
#define NewPortableString(x) DuplicateString(x)
|
||||
#define DuplicateString(x) DuplicateStringA(x)
|
||||
#define DuplicateStringEx(x, y) DuplicateStringAEx((x), (y))
|
||||
#endif
|
||||
|
||||
//
|
||||
// String search functions
|
||||
//
|
||||
#define FindSubStr(str, strSearch) _tcsstr((str), (strSearch))
|
||||
LPTSTR FindSubStrI(LPCTSTR str, LPCTSTR strSearch);
|
||||
|
||||
LPTSTR AppendPathSeparator(LPTSTR lpszPath);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // __STRINGUTILS_H__
|
||||
|
||||
/* EOF */
|
177
reactos/base/applications/msconfig_new/utils.c
Normal file
177
reactos/base/applications/msconfig_new/utils.c
Normal file
|
@ -0,0 +1,177 @@
|
|||
#include "precomp.h"
|
||||
#include "utils.h"
|
||||
#include "stringutils.h"
|
||||
|
||||
// HANDLE g_hHeap = GetProcessHeap();
|
||||
#define g_hHeap GetProcessHeap()
|
||||
|
||||
#if 0
|
||||
VOID
|
||||
MemInit(IN HANDLE Heap)
|
||||
{
|
||||
/* Save the heap handle */
|
||||
g_hHeap = Heap;
|
||||
}
|
||||
#endif
|
||||
|
||||
BOOL
|
||||
MemFree(IN PVOID lpMem)
|
||||
{
|
||||
/* Free memory back into the heap */
|
||||
return HeapFree(g_hHeap, 0, lpMem);
|
||||
}
|
||||
|
||||
PVOID
|
||||
MemAlloc(IN DWORD dwFlags,
|
||||
IN DWORD dwBytes)
|
||||
{
|
||||
/* Allocate memory from the heap */
|
||||
return HeapAlloc(g_hHeap, dwFlags, dwBytes);
|
||||
}
|
||||
|
||||
LPWSTR
|
||||
FormatDateTime(IN LPSYSTEMTIME pDateTime)
|
||||
{
|
||||
LPWSTR lpszDateTime = NULL;
|
||||
|
||||
if (pDateTime)
|
||||
{
|
||||
int iDateBufSize = 0, iTimeBufSize = 0;
|
||||
|
||||
iDateBufSize = GetDateFormatW(LOCALE_USER_DEFAULT,
|
||||
/* Only for Windows 7 : DATE_AUTOLAYOUT | */ DATE_SHORTDATE,
|
||||
pDateTime,
|
||||
NULL,
|
||||
NULL,
|
||||
0);
|
||||
iTimeBufSize = GetTimeFormatW(LOCALE_USER_DEFAULT,
|
||||
0,
|
||||
pDateTime,
|
||||
NULL,
|
||||
NULL,
|
||||
0);
|
||||
|
||||
if ( (iDateBufSize > 0) && (iTimeBufSize > 0) )
|
||||
{
|
||||
lpszDateTime = (LPWSTR)MemAlloc(0, (iDateBufSize + iTimeBufSize) * sizeof(TCHAR));
|
||||
|
||||
GetDateFormatW(LOCALE_USER_DEFAULT,
|
||||
/* Only for Windows 7 : DATE_AUTOLAYOUT | */ DATE_SHORTDATE,
|
||||
pDateTime,
|
||||
NULL,
|
||||
lpszDateTime,
|
||||
iDateBufSize);
|
||||
if (iDateBufSize > 0) lpszDateTime[iDateBufSize-1] = L' ';
|
||||
GetTimeFormatW(LOCALE_USER_DEFAULT,
|
||||
0,
|
||||
pDateTime,
|
||||
NULL,
|
||||
lpszDateTime + iDateBufSize,
|
||||
iTimeBufSize);
|
||||
}
|
||||
}
|
||||
|
||||
return lpszDateTime;
|
||||
}
|
||||
|
||||
VOID
|
||||
FreeDateTime(IN LPWSTR lpszDateTime)
|
||||
{
|
||||
if (lpszDateTime)
|
||||
MemFree(lpszDateTime);
|
||||
}
|
||||
|
||||
LPWSTR
|
||||
LoadResourceStringEx(IN HINSTANCE hInstance,
|
||||
IN UINT uID,
|
||||
OUT size_t* pSize OPTIONAL)
|
||||
{
|
||||
LPWSTR lpszDestBuf = NULL, lpszResourceString = NULL;
|
||||
size_t iStrSize = 0;
|
||||
|
||||
// When passing a zero-length buffer size, LoadString(...) returns a
|
||||
// read-only pointer buffer to the program's resource string.
|
||||
iStrSize = LoadString(hInstance, uID, (LPTSTR)&lpszResourceString, 0);
|
||||
|
||||
if ( lpszResourceString && ( (lpszDestBuf = (LPWSTR)MemAlloc(0, (iStrSize + 1) * sizeof(WCHAR))) != NULL ) )
|
||||
{
|
||||
_tcsncpy(lpszDestBuf, lpszResourceString, iStrSize);
|
||||
lpszDestBuf[iStrSize] = L'\0'; // NULL-terminate the string
|
||||
|
||||
if (pSize)
|
||||
*pSize = iStrSize + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pSize)
|
||||
*pSize = 0;
|
||||
}
|
||||
|
||||
return lpszDestBuf;
|
||||
}
|
||||
|
||||
LPWSTR
|
||||
LoadConditionalResourceStringEx(IN HINSTANCE hInstance,
|
||||
IN BOOL bCondition,
|
||||
IN UINT uIDifTrue,
|
||||
IN UINT uIDifFalse,
|
||||
IN size_t* pSize OPTIONAL)
|
||||
{
|
||||
return LoadResourceStringEx(hInstance,
|
||||
(bCondition ? uIDifTrue : uIDifFalse),
|
||||
pSize);
|
||||
}
|
||||
|
||||
LPWSTR
|
||||
GetExecutableVendor(IN LPCWSTR lpszFilename)
|
||||
{
|
||||
LPWSTR lpszVendor = NULL;
|
||||
DWORD dwHandle = 0;
|
||||
DWORD dwLen;
|
||||
|
||||
LPVOID lpData;
|
||||
|
||||
LPVOID pvData = NULL;
|
||||
UINT BufLen = 0;
|
||||
WORD wCodePage = 0, wLangID = 0;
|
||||
LPTSTR lpszStrFileInfo = NULL;
|
||||
|
||||
LPWSTR lpszData = NULL;
|
||||
|
||||
if (lpszFilename == NULL) return NULL;
|
||||
|
||||
dwLen = GetFileVersionInfoSizeW(lpszFilename, &dwHandle);
|
||||
if (dwLen == 0) return NULL;
|
||||
|
||||
lpData = MemAlloc(0, dwLen);
|
||||
if (!lpData) return NULL;
|
||||
|
||||
GetFileVersionInfoW(lpszFilename, dwHandle, dwLen, lpData);
|
||||
|
||||
if (VerQueryValueW(lpData, L"\\VarFileInfo\\Translation", &pvData, &BufLen))
|
||||
{
|
||||
wCodePage = LOWORD(*(DWORD*)pvData);
|
||||
wLangID = HIWORD(*(DWORD*)pvData);
|
||||
|
||||
lpszStrFileInfo = FormatString(L"StringFileInfo\\%04X%04X\\CompanyName",
|
||||
wCodePage,
|
||||
wLangID);
|
||||
}
|
||||
|
||||
VerQueryValueW(lpData, lpszStrFileInfo, (LPVOID*)&lpszData, &BufLen);
|
||||
if (lpszData)
|
||||
{
|
||||
lpszVendor = (LPWSTR)MemAlloc(0, BufLen * sizeof(WCHAR));
|
||||
if (lpszVendor)
|
||||
wcscpy(lpszVendor, lpszData);
|
||||
}
|
||||
else
|
||||
{
|
||||
lpszVendor = NULL;
|
||||
}
|
||||
|
||||
MemFree(lpszStrFileInfo);
|
||||
MemFree(lpData);
|
||||
|
||||
return lpszVendor;
|
||||
}
|
55
reactos/base/applications/msconfig_new/utils.h
Normal file
55
reactos/base/applications/msconfig_new/utils.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
#ifndef __UTILS_H__
|
||||
#define __UTILS_H__
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
VOID
|
||||
MemInit(IN HANDLE Heap);
|
||||
#endif
|
||||
|
||||
BOOL
|
||||
MemFree(IN PVOID lpMem);
|
||||
|
||||
PVOID
|
||||
MemAlloc(IN DWORD dwFlags,
|
||||
IN DWORD dwBytes);
|
||||
|
||||
LPWSTR
|
||||
FormatDateTime(IN LPSYSTEMTIME pDateTime);
|
||||
|
||||
VOID
|
||||
FreeDateTime(IN LPWSTR lpszDateTime);
|
||||
|
||||
LPWSTR
|
||||
LoadResourceStringEx(IN HINSTANCE hInstance,
|
||||
IN UINT uID,
|
||||
OUT size_t* pSize OPTIONAL);
|
||||
|
||||
LPWSTR
|
||||
LoadConditionalResourceStringEx(IN HINSTANCE hInstance,
|
||||
IN BOOL bCondition,
|
||||
IN UINT uIDifTrue,
|
||||
IN UINT uIDifFalse,
|
||||
IN size_t* pSize OPTIONAL);
|
||||
|
||||
#define LoadResourceString(hInst, uID) \
|
||||
LoadResourceStringEx((hInst), (uID), NULL)
|
||||
|
||||
#define LoadConditionalResourceString(hInst, bCond, uIDifT, uIDifF) \
|
||||
LoadConditionalResourceStringEx((hInst), (bCond), (uIDifT), (uIDifF), NULL)
|
||||
|
||||
LPWSTR
|
||||
GetExecutableVendor(IN LPCWSTR lpszFilename);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // __UTILS_H__
|
||||
|
||||
/* EOF */
|
Loading…
Reference in a new issue