mirror of
https://github.com/reactos/reactos.git
synced 2024-07-06 04:35:07 +00:00
[CMAKE]
- Sync with trunk head (r50270) - This also reverts r49298. svn path=/branches/cmake-bringup/; revision=50271
This commit is contained in:
commit
6c0c23cb53
|
@ -185,7 +185,7 @@ macro(rpcproxy TARGET)
|
|||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_DLLDATA_ARG}${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c ${IDLS}
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_DLLDATA_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c ${IDLS}
|
||||
DEPENDS ${IDLS})
|
||||
set_source_files_properties(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_proxy.dlldata.c
|
||||
|
@ -198,7 +198,7 @@ macro(idl_files)
|
|||
get_filename_component(FILE ${_in_FILE} NAME_WE)
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${IDL_SERVER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} -h -H ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${IDL_SERVER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
|
||||
DEPENDS ${_in_file})
|
||||
set_source_files_properties(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_s.c
|
||||
|
@ -208,7 +208,7 @@ macro(idl_files)
|
|||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_HEADER_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${IDL_CLIENT_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} -h -H ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${IDL_CLIENT_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}.idl
|
||||
DEPENDS ${_in_file})
|
||||
set_source_files_properties(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.h ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_c.c
|
||||
|
@ -237,7 +237,7 @@ macro(add_idl_interface IDL_FILE)
|
|||
get_filename_component(FILE ${IDL_FILE} NAME_WE)
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} -u -U ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c ${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE}
|
||||
COMMAND ${IDL_COMPILER} ${result_incs} ${result_defs} ${IDL_FLAGS} ${IDL_INTERFACE_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c ${CMAKE_CURRENT_SOURCE_DIR}/${IDL_FILE}
|
||||
DEPENDS ${IDL_FILE})
|
||||
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${FILE}_i.c PROPERTIES GENERATED TRUE)
|
||||
endmacro()
|
||||
|
|
|
@ -6,6 +6,7 @@ add_subdirectory(cmdutils)
|
|||
add_subdirectory(control)
|
||||
add_subdirectory(dxdiag)
|
||||
add_subdirectory(extrac32)
|
||||
add_subdirectory(findstr)
|
||||
add_subdirectory(fontview)
|
||||
add_subdirectory(games)
|
||||
add_subdirectory(hh)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//<2F>והמגתנרום
|
||||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
// Dialog
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* FILE: base/applications/calc/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* UPDATED: 2009-01-25
|
||||
* UPDATED: 2010-05-30
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
@ -644,7 +644,7 @@ STRINGTABLE DISCARDABLE
|
|||
BEGIN
|
||||
IDS_TIME_DAYS "Dny"
|
||||
IDS_TIME_HOURS "Hodiny"
|
||||
IDS_TIME_NANOSECONDS "Nanoseconds"
|
||||
IDS_TIME_NANOSECONDS "Nanosekundy"
|
||||
IDS_TIME_MICROSECONDS "Mikrosekundy"
|
||||
IDS_TIME_MILLISECONDS "Milisekundy"
|
||||
IDS_TIME_MINUTES "Minuty"
|
||||
|
|
|
@ -351,7 +351,7 @@ static void evalStack(calc_number_t *number)
|
|||
} else {
|
||||
push(op);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(ip.node.operation != RPN_OPERATOR_EQUAL && ip.node.operation != RPN_OPERATOR_PERCENT)
|
||||
|
@ -380,6 +380,7 @@ int exec_infix2postfix(calc_number_t *number, unsigned int func)
|
|||
tmp.node.number = *number;
|
||||
tmp.node.base = calc.base;
|
||||
tmp.node.operation = func;
|
||||
tmp.next = NULL;
|
||||
|
||||
push(&tmp);
|
||||
|
||||
|
@ -446,7 +447,7 @@ void flush_postfix()
|
|||
while (!is_stack_empty())
|
||||
pop();
|
||||
/* clear prev and last typed operators */
|
||||
calc.prev_operator =
|
||||
calc.prev_operator =
|
||||
calc.last_operator = 0;
|
||||
}
|
||||
|
||||
|
|
40
base/applications/cmdutils/reg/Bg.rc
Normal file
40
base/applications/cmdutils/reg/Bg.rc
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* REG.EXE - Wine-compatible reg program.
|
||||
* Bulgarian language support
|
||||
*
|
||||
* Copyright 2008 Andrew Riedi
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "reg.h"
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_USAGE, "Синтаксисът на командата е:\n\nREG [ ADD | DELETE | QUERY ]\nREG команда /?\n"
|
||||
STRING_ADD_USAGE, "REG ADD ключ_име [/v стойност_име | /ve] [/t вид] [/s разделител] [/d данни] [/f]\n"
|
||||
STRING_DELETE_USAGE, "REG DELETE ключ_име [/v стойност_име | /ve | /va] [/f]\n"
|
||||
STRING_QUERY_USAGE, "REG QUERY ключ_име [/v стойност_име | /ve] [/s]\n"
|
||||
STRING_SUCCESS, "Десйствието е приключено успешно\n"
|
||||
STRING_INVALID_KEY, "Грешка: Недопустимо име за ключ\n"
|
||||
STRING_INVALID_CMDLINE, "Грешка: Неправилни параметри на командия ред\n"
|
||||
STRING_NO_REMOTE, "Грешка: Неуспешно добавяне на ключове в отдалечената машина\n"
|
||||
STRING_CANNOT_FIND, "Грешка: Уредбата не откри указания регистърен ключ или стойност\n"
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
#include "Pl.rc"
|
||||
|
||||
/* UTF-8 */
|
||||
#include "Bg.rc"
|
||||
#include "Da.rc"
|
||||
#include "De.rc"
|
||||
#include "Es.rc"
|
||||
|
|
|
@ -34,7 +34,7 @@ STRINGTABLE
|
|||
STRING_SIMCOPY, "%d file saranno copiati\n"
|
||||
STRING_COPY, "%d file copiato/i\n"
|
||||
STRING_QISDIR, "'%s' è il nome di un file o una cartella\n\
|
||||
nell'obiettivo?\n\
|
||||
nella destinazione?\n\
|
||||
(F - File, C - Cartella)\n"
|
||||
STRING_SRCPROMPT,"%s? (Sì|No)\n"
|
||||
STRING_OVERWRITE,"Sovrascrivere %s? (Sì|No|Tutti)\n"
|
||||
|
|
|
@ -56,7 +56,7 @@ XCOPY 원본 [대상] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
|
|||
\n\
|
||||
Where:\n\
|
||||
\n\
|
||||
[/I] 만약 대상이 존재하지 않는 경우 디렉토리로 가정하고 두개나 더 많은 파일을 \n\
|
||||
[/I] 만약 대상이 존재하지 않는 경우 디렉토리로 가정하고 두개나 더 많은 파일을\n\
|
||||
\t복사\n\
|
||||
[/S] 디렉토리하고 하위 디렉토리 복사\n\
|
||||
[/E] 빈 디렉토리를 포함해서 디렉토리와 하위 디렉토리 복사\n\
|
||||
|
|
141
base/applications/cmdutils/xcopy/Sr.rc
Normal file
141
base/applications/cmdutils/xcopy/Sr.rc
Normal file
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* XCOPY - Wine-compatible xcopy program
|
||||
* Serbian language support
|
||||
*
|
||||
* Copyright (C) 2007 J. Edmeades
|
||||
* Copyright 2010 Đorđe Vasiljević
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "xcopy.h"
|
||||
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_INVPARMS, "Неисправан број параметара. Користите xcopy /? за помоћ\n"
|
||||
STRING_INVPARM, "Неисправан параметар „%s“. Користите xcopy /? за помоћ\n"
|
||||
STRING_PAUSE, "Притисните <enter> да започнете умножавање\n"
|
||||
STRING_SIMCOPY, "%d датотека/е ће бити уможено\n"
|
||||
STRING_COPY, "%d датотека/е је умножено\n"
|
||||
STRING_QISDIR, "Да ли је „%s“ назив датотеке или фасцикла\n\
|
||||
на одредишту?\n\
|
||||
(Д - датотека, Ф - фасцикла)\n"
|
||||
STRING_SRCPROMPT,"%s? (Да|Не)\n"
|
||||
STRING_OVERWRITE,"Заменити %s? (Да|Не|Све)\n"
|
||||
STRING_COPYFAIL, "Умножавање „%s“ у „%s“ није успело са r/c %d\n"
|
||||
STRING_OPENFAIL, "Отварање „%s“ датотеке није успело\n"
|
||||
STRING_READFAIL, "Читање „%s“ датотеке није успело\n"
|
||||
STRING_YES_CHAR, "Д"
|
||||
STRING_NO_CHAR, "Н"
|
||||
STRING_ALL_CHAR, "С"
|
||||
STRING_FILE_CHAR,"Д"
|
||||
STRING_DIR_CHAR, "Ф"
|
||||
|
||||
STRING_HELP,
|
||||
"XCOPY — умножава изворне датотеке или гране фасцикли у одредиште\n\
|
||||
\n\
|
||||
Синтакса:\n\
|
||||
XCOPY извор [dest] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
|
||||
\t [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
|
||||
\n\
|
||||
Где:\n\
|
||||
\n\
|
||||
[/I] Претпостави фасциклу када одредиште не постоји и када се умножавају две или\n\
|
||||
\tвише датотека\n\
|
||||
[/S] Умножи фасцикле и потфасцикле\n\
|
||||
[/E] Умножи фасцикле и потфасцикле заједно с празним\n\
|
||||
[/Q] Не приказуј називе током умножавања.\n\
|
||||
[/F] Прикажи цео извор и одредиште током умножавања\n\
|
||||
[/L] Опонашај радњу приказујући називе који ће бити умножени\n\
|
||||
[/W] Питај пре почињања умножавања\n\
|
||||
[/T] Прави празну структуру фасцикле, али не умножава датотеке\n\
|
||||
[/Y] Потисни упит при замењивању датотека\n\
|
||||
[/-Y] Омогући упит при замењивању датотека\n\
|
||||
[/P] Питај за сваку изворну датотеку пре умножавања\n\
|
||||
[/N] Умножи користећи кратке називе\n\
|
||||
[/U] Умножи само оне датотеке које постоје у одредишту\n\
|
||||
[/R] Замени све датотеке које се само читају\n\
|
||||
[/H] Укључи сакривене и системске датотеке у умножавање\n\
|
||||
[/C] Настави иако дође до грешке у умножавању\n\
|
||||
[/A] Умножи само архивиране датотеке\n\
|
||||
[/M] Умножи само архивиране датотеке и уклони\n\
|
||||
\tособине архиве\n\
|
||||
[/D | /D:m-d-y] Умножи нове или измењене датотеке након одређеног датума.\n\
|
||||
\t\tАко датум није унесен, умножи само ако је одредиште старије\n\
|
||||
\t\tод извора\n\n"
|
||||
|
||||
}
|
||||
|
||||
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_INVPARMS, "Neispravan broj parametara. Koristite xcopy /? za pomoć\n"
|
||||
STRING_INVPARM, "Neispravan parametar „%s“. Koristite xcopy /? za pomoć\n"
|
||||
STRING_PAUSE, "Pritisnite <enter> da započnete umnožavanje\n"
|
||||
STRING_SIMCOPY, "%d datoteka/e će biti umoženo\n"
|
||||
STRING_COPY, "%d datoteka/e je umnoženo\n"
|
||||
STRING_QISDIR, "Da li je „%s“ naziv datoteke ili fascikla\n\
|
||||
na odredištu?\n\
|
||||
(D - datoteka, F - fascikla)\n"
|
||||
STRING_SRCPROMPT,"%s? (Da|Ne)\n"
|
||||
STRING_OVERWRITE,"Zameniti %s? (Da|Ne|Sve)\n"
|
||||
STRING_COPYFAIL, "Umnožavanje „%s“ u „%s“ nije uspelo sa r/c %d\n"
|
||||
STRING_OPENFAIL, "Otvaranje „%s“ datoteke nije uspelo\n"
|
||||
STRING_READFAIL, "Čitanje „%s“ datoteke nije uspelo\n"
|
||||
STRING_YES_CHAR, "D"
|
||||
STRING_NO_CHAR, "N"
|
||||
STRING_ALL_CHAR, "S"
|
||||
STRING_FILE_CHAR,"D"
|
||||
STRING_DIR_CHAR, "F"
|
||||
|
||||
STRING_HELP,
|
||||
"XCOPY — umnožava izvorne datoteke ili grane fascikli u odredište\n\
|
||||
\n\
|
||||
Sintaksa:\n\
|
||||
XCOPY izvor [dest] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
|
||||
\t [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
|
||||
\n\
|
||||
Gde:\n\
|
||||
\n\
|
||||
[/I] Pretpostavi fasciklu kada odredište ne postoji i kada se umnožavaju dve ili\n\
|
||||
\tviše datoteka\n\
|
||||
[/S] Umnoži fascikle i potfascikle\n\
|
||||
[/E] Umnoži fascikle i potfascikle zajedno s praznim\n\
|
||||
[/Q] Ne prikazuj nazive tokom umnožavanja.\n\
|
||||
[/F] Prikaži ceo izvor i odredište tokom umnožavanja\n\
|
||||
[/L] Oponašaj radnju prikazujući nazive koji će biti umnoženi\n\
|
||||
[/W] Pitaj pre počinjanja umnožavanja\n\
|
||||
[/T] Pravi praznu strukturu fascikle, ali ne umnožava datoteke\n\
|
||||
[/Y] Potisni upit pri zamenjivanju datoteka\n\
|
||||
[/-Y] Omogući upit pri zamenjivanju datoteka\n\
|
||||
[/P] Pitaj za svaku izvornu datoteku pre umnožavanja\n\
|
||||
[/N] Umnoži koristeći kratke nazive\n\
|
||||
[/U] Umnoži samo one datoteke koje postoje u odredištu\n\
|
||||
[/R] Zameni sve datoteke koje se samo čitaju\n\
|
||||
[/H] Uključi sakrivene i sistemske datoteke u umnožavanje\n\
|
||||
[/C] Nastavi iako dođe do greške u umnožavanju\n\
|
||||
[/A] Umnoži samo arhivirane datoteke\n\
|
||||
[/M] Umnoži samo arhivirane datoteke i ukloni\n\
|
||||
\tosobine arhive\n\
|
||||
[/D | /D:m-d-y] Umnoži nove ili izmenjene datoteke nakon određenog datuma.\n\
|
||||
\t\tAko datum nije unesen, umnoži samo ako je odredište starije\n\
|
||||
\t\tod izvora\n\n"
|
||||
|
||||
}
|
|
@ -43,5 +43,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||
#include "Ro.rc"
|
||||
#include "Ru.rc"
|
||||
#include "Si.rc"
|
||||
#include "Sr.rc"
|
||||
#include "Sv.rc"
|
||||
#include "Uk.rc"
|
||||
|
|
|
@ -49,6 +49,8 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(xcopy);
|
||||
|
||||
/* Prototypes */
|
||||
static int XCOPY_ParseCommandLine(WCHAR *suppliedsource,
|
||||
WCHAR *supplieddestination, DWORD *flags);
|
||||
static int XCOPY_ProcessSourceParm(WCHAR *suppliedsource, WCHAR *stem,
|
||||
WCHAR *spec, DWORD flags);
|
||||
static int XCOPY_ProcessDestParm(WCHAR *supplieddestination, WCHAR *stem,
|
||||
|
@ -108,17 +110,6 @@ int wmain (int argc, WCHAR *argvW[])
|
|||
const WCHAR PROMPTSTR1[] = {'/', 'Y', 0};
|
||||
const WCHAR PROMPTSTR2[] = {'/', 'y', 0};
|
||||
const WCHAR COPYCMD[] = {'C', 'O', 'P', 'Y', 'C', 'M', 'D', 0};
|
||||
const WCHAR EXCLUDE[] = {'E', 'X', 'C', 'L', 'U', 'D', 'E', ':', 0};
|
||||
|
||||
/*
|
||||
* Parse the command line
|
||||
*/
|
||||
|
||||
/* Confirm at least one parameter */
|
||||
if (argc < 2) {
|
||||
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARMS));
|
||||
return RC_INITERROR;
|
||||
}
|
||||
|
||||
/* Preinitialize flags based on COPYCMD */
|
||||
if (GetEnvironmentVariableW(COPYCMD, copyCmd, MAXSTRING)) {
|
||||
|
@ -135,126 +126,17 @@ int wmain (int argc, WCHAR *argvW[])
|
|||
lose */
|
||||
flags |= OPT_COPYHIDSYS;
|
||||
|
||||
/* Skip first arg, which is the program name */
|
||||
argvW++;
|
||||
|
||||
while (argc > 1)
|
||||
{
|
||||
argc--;
|
||||
WINE_TRACE("Processing Arg: '%s'\n", wine_dbgstr_w(*argvW));
|
||||
|
||||
/* First non-switch parameter is source, second is destination */
|
||||
if (*argvW[0] != '/') {
|
||||
if (suppliedsource[0] == 0x00) {
|
||||
lstrcpyW(suppliedsource, *argvW);
|
||||
} else if (supplieddestination[0] == 0x00) {
|
||||
lstrcpyW(supplieddestination, *argvW);
|
||||
} else {
|
||||
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARMS));
|
||||
return RC_INITERROR;
|
||||
}
|
||||
} else {
|
||||
/* Process all the switch options
|
||||
Note: Windows docs say /P prompts when dest is created
|
||||
but tests show it is done for each src file
|
||||
regardless of the destination */
|
||||
switch (toupper(argvW[0][1])) {
|
||||
case 'I': flags |= OPT_ASSUMEDIR; break;
|
||||
case 'S': flags |= OPT_RECURSIVE; break;
|
||||
case 'Q': flags |= OPT_QUIET; break;
|
||||
case 'F': flags |= OPT_FULL; break;
|
||||
case 'L': flags |= OPT_SIMULATE; break;
|
||||
case 'W': flags |= OPT_PAUSE; break;
|
||||
case 'T': flags |= OPT_NOCOPY | OPT_RECURSIVE; break;
|
||||
case 'Y': flags |= OPT_NOPROMPT; break;
|
||||
case 'N': flags |= OPT_SHORTNAME; break;
|
||||
case 'U': flags |= OPT_MUSTEXIST; break;
|
||||
case 'R': flags |= OPT_REPLACEREAD; break;
|
||||
case 'H': flags |= OPT_COPYHIDSYS; break;
|
||||
case 'C': flags |= OPT_IGNOREERRORS; break;
|
||||
case 'P': flags |= OPT_SRCPROMPT; break;
|
||||
case 'A': flags |= OPT_ARCHIVEONLY; break;
|
||||
case 'M': flags |= OPT_ARCHIVEONLY |
|
||||
OPT_REMOVEARCH; break;
|
||||
|
||||
/* E can be /E or /EXCLUDE */
|
||||
case 'E': if (CompareStringW(LOCALE_USER_DEFAULT,
|
||||
NORM_IGNORECASE | SORT_STRINGSORT,
|
||||
&argvW[0][1], 8,
|
||||
EXCLUDE, -1) == 2) {
|
||||
if (XCOPY_ProcessExcludeList(&argvW[0][9])) {
|
||||
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
|
||||
return RC_INITERROR;
|
||||
} else flags |= OPT_EXCLUDELIST;
|
||||
} else flags |= OPT_EMPTYDIR | OPT_RECURSIVE;
|
||||
break;
|
||||
|
||||
/* D can be /D or /D: */
|
||||
case 'D': if ((argvW[0][2])==':' && isdigit(argvW[0][3])) {
|
||||
SYSTEMTIME st;
|
||||
WCHAR *pos = &argvW[0][3];
|
||||
BOOL isError = FALSE;
|
||||
memset(&st, 0x00, sizeof(st));
|
||||
|
||||
/* Parse the arg : Month */
|
||||
st.wMonth = _wtol(pos);
|
||||
while (*pos && isdigit(*pos)) pos++;
|
||||
if (*pos++ != '-') isError = TRUE;
|
||||
|
||||
/* Parse the arg : Day */
|
||||
if (!isError) {
|
||||
st.wDay = _wtol(pos);
|
||||
while (*pos && isdigit(*pos)) pos++;
|
||||
if (*pos++ != '-') isError = TRUE;
|
||||
}
|
||||
|
||||
/* Parse the arg : Day */
|
||||
if (!isError) {
|
||||
st.wYear = _wtol(pos);
|
||||
if (st.wYear < 100) st.wYear+=2000;
|
||||
}
|
||||
|
||||
if (!isError && SystemTimeToFileTime(&st, &dateRange)) {
|
||||
SYSTEMTIME st;
|
||||
WCHAR datestring[32], timestring[32];
|
||||
|
||||
flags |= OPT_DATERANGE;
|
||||
|
||||
/* Debug info: */
|
||||
FileTimeToSystemTime (&dateRange, &st);
|
||||
GetDateFormatW(0, DATE_SHORTDATE, &st, NULL, datestring,
|
||||
sizeof(datestring)/sizeof(WCHAR));
|
||||
GetTimeFormatW(0, TIME_NOSECONDS, &st,
|
||||
NULL, timestring, sizeof(timestring)/sizeof(WCHAR));
|
||||
|
||||
WINE_TRACE("Date being used is: %s %s\n",
|
||||
wine_dbgstr_w(datestring), wine_dbgstr_w(timestring));
|
||||
} else {
|
||||
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
|
||||
return RC_INITERROR;
|
||||
}
|
||||
} else {
|
||||
flags |= OPT_DATENEWER;
|
||||
}
|
||||
break;
|
||||
|
||||
case '-': if (toupper(argvW[0][2])=='Y')
|
||||
flags &= ~OPT_NOPROMPT; break;
|
||||
case '?': XCOPY_wprintf(XCOPY_LoadMessage(STRING_HELP));
|
||||
return RC_OK;
|
||||
default:
|
||||
WINE_TRACE("Unhandled parameter '%s'\n", wine_dbgstr_w(*argvW));
|
||||
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARM), *argvW);
|
||||
return RC_INITERROR;
|
||||
}
|
||||
}
|
||||
argvW++;
|
||||
/*
|
||||
* Parse the command line
|
||||
*/
|
||||
if ((rc = XCOPY_ParseCommandLine(suppliedsource, supplieddestination,
|
||||
&flags)) != RC_OK) {
|
||||
if (rc == RC_HELP)
|
||||
return RC_OK;
|
||||
else
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Default the destination if not supplied */
|
||||
if (supplieddestination[0] == 0x00)
|
||||
lstrcpyW(supplieddestination, wchr_dot);
|
||||
|
||||
/* Trace out the supplied information */
|
||||
WINE_TRACE("Supplied parameters:\n");
|
||||
WINE_TRACE("Source : '%s'\n", wine_dbgstr_w(suppliedsource));
|
||||
|
@ -310,6 +192,211 @@ int wmain (int argc, WCHAR *argvW[])
|
|||
|
||||
}
|
||||
|
||||
/* =========================================================================
|
||||
XCOPY_ParseCommandLine - Parses the command line
|
||||
========================================================================= */
|
||||
static BOOL is_whitespace(WCHAR c)
|
||||
{
|
||||
return c == ' ' || c == '\t';
|
||||
}
|
||||
|
||||
static WCHAR *skip_whitespace(WCHAR *p)
|
||||
{
|
||||
for (; *p && is_whitespace(*p); p++);
|
||||
return p;
|
||||
}
|
||||
|
||||
/* Windows XCOPY uses a simplified command line parsing algorithm
|
||||
that lacks the escaped-quote logic of build_argv(), because
|
||||
literal double quotes are illegal in any of its arguments.
|
||||
Example: 'XCOPY "c:\DIR A" "c:DIR B\"' is OK. */
|
||||
static int find_end_of_word(const WCHAR *word, WCHAR **end)
|
||||
{
|
||||
BOOL in_quotes = 0;
|
||||
const WCHAR *ptr = word;
|
||||
for (;;) {
|
||||
for (; *ptr != '\0' && *ptr != '"' &&
|
||||
(in_quotes || !is_whitespace(*ptr)); ptr++);
|
||||
if (*ptr == '"') {
|
||||
in_quotes = !in_quotes;
|
||||
ptr++;
|
||||
}
|
||||
/* Odd number of double quotes is illegal for XCOPY */
|
||||
if (in_quotes && *ptr == '\0')
|
||||
return RC_INITERROR;
|
||||
if (*ptr == '\0' || (!in_quotes && is_whitespace(*ptr)))
|
||||
break;
|
||||
}
|
||||
*end = (WCHAR*)ptr;
|
||||
return RC_OK;
|
||||
}
|
||||
|
||||
/* Remove all double quotes from a word */
|
||||
static void strip_quotes(WCHAR *word, WCHAR **end)
|
||||
{
|
||||
WCHAR *rp, *wp;
|
||||
for (rp = word, wp = word; *rp != '\0'; rp++) {
|
||||
if (*rp == '"')
|
||||
continue;
|
||||
if (wp < rp)
|
||||
*wp = *rp;
|
||||
wp++;
|
||||
}
|
||||
*wp = '\0';
|
||||
*end = wp;
|
||||
}
|
||||
|
||||
static int XCOPY_ParseCommandLine(WCHAR *suppliedsource,
|
||||
WCHAR *supplieddestination, DWORD *pflags)
|
||||
{
|
||||
const WCHAR EXCLUDE[] = {'E', 'X', 'C', 'L', 'U', 'D', 'E', ':', 0};
|
||||
DWORD flags = *pflags;
|
||||
WCHAR *cmdline, *word, *end, *next;
|
||||
int rc = RC_INITERROR;
|
||||
|
||||
cmdline = _wcsdup(GetCommandLineW());
|
||||
if (cmdline == NULL)
|
||||
return rc;
|
||||
|
||||
/* Skip first arg, which is the program name */
|
||||
if ((rc = find_end_of_word(cmdline, &word)) != RC_OK)
|
||||
goto out;
|
||||
word = skip_whitespace(word);
|
||||
|
||||
while (*word)
|
||||
{
|
||||
WCHAR first;
|
||||
if ((rc = find_end_of_word(word, &end)) != RC_OK)
|
||||
goto out;
|
||||
|
||||
next = skip_whitespace(end);
|
||||
first = word[0];
|
||||
*end = '\0';
|
||||
strip_quotes(word, &end);
|
||||
WINE_TRACE("Processing Arg: '%s'\n", wine_dbgstr_w(word));
|
||||
|
||||
/* First non-switch parameter is source, second is destination */
|
||||
if (first != '/') {
|
||||
if (suppliedsource[0] == 0x00) {
|
||||
lstrcpyW(suppliedsource, word);
|
||||
} else if (supplieddestination[0] == 0x00) {
|
||||
lstrcpyW(supplieddestination, word);
|
||||
} else {
|
||||
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARMS));
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
/* Process all the switch options
|
||||
Note: Windows docs say /P prompts when dest is created
|
||||
but tests show it is done for each src file
|
||||
regardless of the destination */
|
||||
switch (toupper(word[1])) {
|
||||
case 'I': flags |= OPT_ASSUMEDIR; break;
|
||||
case 'S': flags |= OPT_RECURSIVE; break;
|
||||
case 'Q': flags |= OPT_QUIET; break;
|
||||
case 'F': flags |= OPT_FULL; break;
|
||||
case 'L': flags |= OPT_SIMULATE; break;
|
||||
case 'W': flags |= OPT_PAUSE; break;
|
||||
case 'T': flags |= OPT_NOCOPY | OPT_RECURSIVE; break;
|
||||
case 'Y': flags |= OPT_NOPROMPT; break;
|
||||
case 'N': flags |= OPT_SHORTNAME; break;
|
||||
case 'U': flags |= OPT_MUSTEXIST; break;
|
||||
case 'R': flags |= OPT_REPLACEREAD; break;
|
||||
case 'H': flags |= OPT_COPYHIDSYS; break;
|
||||
case 'C': flags |= OPT_IGNOREERRORS; break;
|
||||
case 'P': flags |= OPT_SRCPROMPT; break;
|
||||
case 'A': flags |= OPT_ARCHIVEONLY; break;
|
||||
case 'M': flags |= OPT_ARCHIVEONLY |
|
||||
OPT_REMOVEARCH; break;
|
||||
|
||||
/* E can be /E or /EXCLUDE */
|
||||
case 'E': if (CompareStringW(LOCALE_USER_DEFAULT,
|
||||
NORM_IGNORECASE | SORT_STRINGSORT,
|
||||
&word[1], 8,
|
||||
EXCLUDE, -1) == 2) {
|
||||
if (XCOPY_ProcessExcludeList(&word[9])) {
|
||||
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
|
||||
goto out;
|
||||
} else flags |= OPT_EXCLUDELIST;
|
||||
} else flags |= OPT_EMPTYDIR | OPT_RECURSIVE;
|
||||
break;
|
||||
|
||||
/* D can be /D or /D: */
|
||||
case 'D': if (word[2]==':' && isdigit(word[3])) {
|
||||
SYSTEMTIME st;
|
||||
WCHAR *pos = &word[3];
|
||||
BOOL isError = FALSE;
|
||||
memset(&st, 0x00, sizeof(st));
|
||||
|
||||
/* Parse the arg : Month */
|
||||
st.wMonth = _wtol(pos);
|
||||
while (*pos && isdigit(*pos)) pos++;
|
||||
if (*pos++ != '-') isError = TRUE;
|
||||
|
||||
/* Parse the arg : Day */
|
||||
if (!isError) {
|
||||
st.wDay = _wtol(pos);
|
||||
while (*pos && isdigit(*pos)) pos++;
|
||||
if (*pos++ != '-') isError = TRUE;
|
||||
}
|
||||
|
||||
/* Parse the arg : Day */
|
||||
if (!isError) {
|
||||
st.wYear = _wtol(pos);
|
||||
while (*pos && isdigit(*pos)) pos++;
|
||||
if (st.wYear < 100) st.wYear+=2000;
|
||||
}
|
||||
|
||||
if (!isError && SystemTimeToFileTime(&st, &dateRange)) {
|
||||
SYSTEMTIME st;
|
||||
WCHAR datestring[32], timestring[32];
|
||||
|
||||
flags |= OPT_DATERANGE;
|
||||
|
||||
/* Debug info: */
|
||||
FileTimeToSystemTime (&dateRange, &st);
|
||||
GetDateFormatW(0, DATE_SHORTDATE, &st, NULL, datestring,
|
||||
sizeof(datestring)/sizeof(WCHAR));
|
||||
GetTimeFormatW(0, TIME_NOSECONDS, &st,
|
||||
NULL, timestring, sizeof(timestring)/sizeof(WCHAR));
|
||||
|
||||
WINE_TRACE("Date being used is: %s %s\n",
|
||||
wine_dbgstr_w(datestring), wine_dbgstr_w(timestring));
|
||||
} else {
|
||||
XCOPY_FailMessage(ERROR_INVALID_PARAMETER);
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
flags |= OPT_DATENEWER;
|
||||
}
|
||||
break;
|
||||
|
||||
case '-': if (toupper(word[2])=='Y')
|
||||
flags &= ~OPT_NOPROMPT; break;
|
||||
case '?': XCOPY_wprintf(XCOPY_LoadMessage(STRING_HELP));
|
||||
rc = RC_HELP;
|
||||
goto out;
|
||||
default:
|
||||
WINE_TRACE("Unhandled parameter '%s'\n", wine_dbgstr_w(word));
|
||||
XCOPY_wprintf(XCOPY_LoadMessage(STRING_INVPARM), word);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
word = next;
|
||||
}
|
||||
|
||||
/* Default the destination if not supplied */
|
||||
if (supplieddestination[0] == 0x00)
|
||||
lstrcpyW(supplieddestination, wchr_dot);
|
||||
|
||||
*pflags = flags;
|
||||
rc = RC_OK;
|
||||
|
||||
out:
|
||||
free(cmdline);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
/* =========================================================================
|
||||
XCOPY_ProcessSourceParm - Takes the supplied source parameter, and
|
||||
|
@ -432,8 +519,10 @@ static int XCOPY_ProcessDestParm(WCHAR *supplieddestination, WCHAR *stem, WCHAR
|
|||
if (attribs == INVALID_FILE_ATTRIBUTES) {
|
||||
|
||||
/* If /I supplied and wildcard copy, assume directory */
|
||||
if (flags & OPT_ASSUMEDIR &&
|
||||
(wcschr(srcspec, '?') || wcschr(srcspec, '*'))) {
|
||||
/* Also if destination ends with backslash */
|
||||
if ((flags & OPT_ASSUMEDIR &&
|
||||
(wcschr(srcspec, '?') || wcschr(srcspec, '*'))) ||
|
||||
(supplieddestination[lstrlenW(supplieddestination)-1] == '\\')) {
|
||||
|
||||
isDir = TRUE;
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#define RC_CTRLC 2
|
||||
#define RC_INITERROR 4
|
||||
#define RC_WRITEERROR 5
|
||||
#define RC_HELP 6
|
||||
|
||||
#define OPT_ASSUMEDIR 0x00000001
|
||||
#define OPT_RECURSIVE 0x00000002
|
||||
|
|
11
base/applications/findstr/CMakeLists.txt
Normal file
11
base/applications/findstr/CMakeLists.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
|
||||
add_definitions(-D_DLL -D__USE_CRTIMP)
|
||||
|
||||
add_executable(findstr
|
||||
findstr.c
|
||||
findstr.rc
|
||||
rsrc.rc)
|
||||
|
||||
set_module_type(findstr win32cui)
|
||||
add_importlibs(findstr user32 msvcrt kernel32)
|
||||
add_cab_target(findstr 1)
|
295
base/applications/findstr/findstr.c
Normal file
295
base/applications/findstr/findstr.c
Normal file
|
@ -0,0 +1,295 @@
|
|||
/* findstr.c */
|
||||
|
||||
/* Copyright (C) 1994-2002, Jim Hall <jhall@freedos.org> */
|
||||
|
||||
/* Adapted for ReactOS -Edited for Findstr.exe K'Williams */
|
||||
|
||||
/*
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
|
||||
/* This program locates a string in a text file and prints those lines
|
||||
* that contain the string. Multiple files are clearly separated.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include <io.h>
|
||||
#include <dos.h>
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
|
||||
/* Symbol definition */
|
||||
#define MAX_STR 1024
|
||||
|
||||
|
||||
/* This function prints out all lines containing a substring. There are some
|
||||
* conditions that may be passed to the function.
|
||||
*
|
||||
* RETURN: If the string was found at least once, returns 1.
|
||||
* If the string was not found at all, returns 0.
|
||||
*/
|
||||
int
|
||||
find_str (char *sz, FILE *p, int invert_search,
|
||||
int count_lines, int number_output, int ignore_case, int at_start, int literal_search,
|
||||
int at_end, int reg_express, int exact_match, int sub_dirs, int only_fname)
|
||||
{
|
||||
int i, length;
|
||||
long line_number = 0, total_lines = 0;
|
||||
char *c, temp_str[MAX_STR], this_line[MAX_STR];
|
||||
|
||||
/* Convert to upper if needed */
|
||||
if (ignore_case)
|
||||
{
|
||||
length = strlen (sz);
|
||||
for (i = 0; i < length; i++)
|
||||
sz[i] = toupper (sz[i]);
|
||||
}
|
||||
|
||||
/* Scan the file until EOF */
|
||||
while (fgets (temp_str, MAX_STR, p) != NULL)
|
||||
{
|
||||
/* Remove the trailing newline */
|
||||
length = strlen (temp_str);
|
||||
if (temp_str[length-1] == '\n')
|
||||
{
|
||||
temp_str[length-1] = '\0';
|
||||
}
|
||||
|
||||
/* Increment number of lines */
|
||||
line_number++;
|
||||
strcpy (this_line, temp_str);
|
||||
|
||||
/* Convert to upper if needed */
|
||||
if (ignore_case)
|
||||
{
|
||||
for (i = 0; i < length; i++)
|
||||
{
|
||||
temp_str[i] = toupper (temp_str[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Locate the substring */
|
||||
|
||||
/* strstr() returns a pointer to the first occurrence in the
|
||||
string of the substring */
|
||||
c = strstr (temp_str, sz);
|
||||
|
||||
if ( ((invert_search) ? (c == NULL) : (c != NULL)) )
|
||||
{
|
||||
if (!count_lines)
|
||||
{
|
||||
if (number_output)
|
||||
printf ("%ld:", line_number);
|
||||
|
||||
/* Print the line of text */
|
||||
puts (this_line);
|
||||
}
|
||||
|
||||
total_lines++;
|
||||
} /* long if */
|
||||
} /* while fgets */
|
||||
|
||||
if (count_lines)
|
||||
{
|
||||
/* Just show num. lines that contain the string */
|
||||
printf ("%ld\n", total_lines);
|
||||
}
|
||||
|
||||
|
||||
/* RETURN: If the string was found at least once, returns 1.
|
||||
* If the string was not found at all, returns 0.
|
||||
*/
|
||||
return (total_lines > 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
/* Show usage */
|
||||
void
|
||||
usage (void)
|
||||
{
|
||||
TCHAR lpUsage[4096];
|
||||
|
||||
LoadString( GetModuleHandle(NULL), IDS_USAGE, (LPTSTR)lpUsage, 4096);
|
||||
CharToOem(lpUsage, lpUsage);
|
||||
printf( lpUsage );
|
||||
}
|
||||
|
||||
|
||||
/* Main program */
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
char *opt, *needle = NULL;
|
||||
int ret = 0;
|
||||
TCHAR lpMessage[4096];
|
||||
|
||||
int invert_search = 0; /* flag to invert the search */
|
||||
int count_lines = 0; /* flag to whether/not count lines */
|
||||
int number_output = 0; /* flag to print line numbers */
|
||||
int ignore_case = 0; /* flag to be case insensitive */
|
||||
int at_start = 0; /* flag to Match if at the beginning of a line. */
|
||||
int at_end = 0; /* flag to Match if at the beginning of a line. */
|
||||
int reg_express = 0; /* flag to use/not use regular expressions */
|
||||
int exact_match = 0; /* flag to be exact match */
|
||||
int sub_dirs= 0; /* this and all subdirectories */
|
||||
int only_fname= 0; /* print only the name of the file*/
|
||||
int literal_search=0;
|
||||
|
||||
FILE *pfile; /* file pointer */
|
||||
int hfind; /* search handle */
|
||||
struct _finddata_t finddata; /* _findfirst, filenext block */
|
||||
|
||||
/* Scan the command line */
|
||||
while ((--argc) && (needle == NULL))
|
||||
{
|
||||
if (*(opt = *++argv) == '/')
|
||||
{
|
||||
switch (opt[1])
|
||||
{
|
||||
case 'b':
|
||||
case 'B': /* Matches pattern if at the beginning of a line */
|
||||
at_start = 1;
|
||||
break;
|
||||
|
||||
//case 'c':
|
||||
//case 'C': /* Literal? */
|
||||
// literal_search = 1;
|
||||
// break;
|
||||
|
||||
case 'e':
|
||||
case 'E': /* matches pattern if at end of line */
|
||||
at_end = 1;
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
case 'I': /* Ignore */
|
||||
ignore_case = 1;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
case 'M': /* only filename */
|
||||
only_fname = 1;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
case 'N': /* Number */
|
||||
number_output = 1;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
case 'R': /* search strings as regular expressions */
|
||||
reg_express = 1;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
case 'S': /* search files in child directory too*/
|
||||
sub_dirs = 1;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
case 'V': /* Not with */
|
||||
invert_search = 1;
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
case 'X': /* exact match */
|
||||
exact_match = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage ();
|
||||
exit (2); /* syntax error .. return error 2 */
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get the string */
|
||||
if (needle == NULL)
|
||||
{
|
||||
/* Assign the string to find */
|
||||
needle = *argv;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for search string */
|
||||
if (needle == NULL)
|
||||
{
|
||||
/* No string? */
|
||||
usage ();
|
||||
exit (1);
|
||||
}
|
||||
|
||||
/* Scan the files for the string */
|
||||
if (argc == 0)
|
||||
{
|
||||
ret = find_str (needle, stdin, invert_search, count_lines,
|
||||
number_output, ignore_case, at_start, literal_search, at_end, reg_express, exact_match,
|
||||
sub_dirs, only_fname);
|
||||
}
|
||||
|
||||
while (--argc >= 0)
|
||||
{
|
||||
hfind = _findfirst (*++argv, &finddata);
|
||||
if (hfind < 0)
|
||||
{
|
||||
/* We were not able to find a file. Display a message and
|
||||
set the exit status. */
|
||||
LoadString( GetModuleHandle(NULL), IDS_NO_SUCH_FILE, (LPTSTR)lpMessage, 4096);
|
||||
CharToOem(lpMessage, lpMessage);
|
||||
fprintf (stderr, lpMessage, *argv);//
|
||||
}
|
||||
else
|
||||
{
|
||||
/* repeat find next file to match the filemask */
|
||||
do
|
||||
{
|
||||
/* We have found a file, so try to open it */
|
||||
if ((pfile = fopen (finddata.name, "r")) != NULL)
|
||||
{
|
||||
printf ("---------------- %s\n", finddata.name);
|
||||
ret = find_str (needle, pfile, invert_search, count_lines,
|
||||
number_output, ignore_case, at_start, literal_search, at_end, reg_express, exact_match,
|
||||
sub_dirs, only_fname);
|
||||
fclose (pfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadString(GetModuleHandle(NULL), IDS_CANNOT_OPEN, (LPTSTR)lpMessage, 4096);
|
||||
CharToOem(lpMessage, lpMessage);
|
||||
fprintf (stderr, lpMessage,
|
||||
finddata.name);
|
||||
}
|
||||
}
|
||||
while (_findnext(hfind, &finddata) > 0);
|
||||
}
|
||||
_findclose(hfind);
|
||||
} /* for each argv */
|
||||
|
||||
/* RETURN: If the string was found at least once, returns 0.
|
||||
* If the string was not found at all, returns 1.
|
||||
* (Note that find_str.c returns the exact opposite values.)
|
||||
*/
|
||||
exit ( (ret ? 0 : 1) );
|
||||
}
|
||||
|
||||
|
8
base/applications/findstr/findstr.rbuild
Normal file
8
base/applications/findstr/findstr.rbuild
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module SYSTEM "../../../../tools/rbuild/project.dtd">
|
||||
<module name="findstr" type="win32cui" installbase="system32" installname="findstr.exe">
|
||||
<library>user32</library>
|
||||
<file>findstr.c</file>
|
||||
<file>findstr.rc</file>
|
||||
<file>rsrc.rc</file>
|
||||
</module>
|
6
base/applications/findstr/findstr.rc
Normal file
6
base/applications/findstr/findstr.rc
Normal file
|
@ -0,0 +1,6 @@
|
|||
#define REACTOS_STR_FILE_DESCRIPTION "W32 findstr command\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "findstr\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "findstr.exe\0"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
#include "rsrc.rc"
|
17
base/applications/findstr/lang/bg-BG.rc
Normal file
17
base/applications/findstr/lang/bg-BG.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Извежда всички редове във файла, които съдържат указания низ..\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"низ\" [ файл... ]\n\
|
||||
/C Брои колко реда съдържат низа\n\
|
||||
/I Пренебрегва ГлАвНОсТта\n\
|
||||
/N Брой показани редове, като се започва от 1\n\
|
||||
/V Извеждане на редовете, НЕсъдържащи низа."
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Няма такъв файл\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Отварянето на файла е невъзможно\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/ca-ES.rc
Normal file
17
base/applications/findstr/lang/ca-ES.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_CATALAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Mostra totes les linies que continguin una determinada cadena de caràcters.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"Cadena de caràcters\" [ file... ]\n\
|
||||
/C Conta el numero de linies que contenen la cadena de caràcters\n\
|
||||
/I Ignora majúscules i minúscules\n\
|
||||
/N Numero de linies mostrades, començant per la primera\n\
|
||||
/V Mostra les linies que no contenen la cadena de caràcters"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: No he trobat el fitxer\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: No puc obrir el fitxer\n"
|
||||
|
||||
END
|
23
base/applications/findstr/lang/cs-CZ.rc
Normal file
23
base/applications/findstr/lang/cs-CZ.rc
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* FILE: applications/cmdutils/find/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* THANKS TO: Mario Kacmar aka Kario (kario@szm.sk)
|
||||
* UPDATED: 2008-02-29
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Zobrazí všechny øádky souboru obsahující hledaný øetìzec.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"øetìzec\" [ soubor... ]\n\
|
||||
/C Zobrazí poèet øádkù obsahující øetìzec.\n\
|
||||
/I Ignoruje velikost písmen.\n\
|
||||
/N Èísluje zobrazené øádky, zaèíná od 1.\n\
|
||||
/V Zobrazí všechny øádky, které NEobsahují zadaný øetìžec."
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: Soubor %s nebyl nalezen.\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: Soubor %s nelze otevøít!\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/de-DE.rc
Normal file
17
base/applications/findstr/lang/de-DE.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "Sucht in einer Datei nach einer Zeichenfolge.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\
|
||||
/C Zeigt nur die Anzahl der die Zeichenfolge enthaltenen Zeilen an.\n\
|
||||
/I Ignoriert Groß-/Kleinbuchstaben bei der Suche.\n\
|
||||
/N Zeigt die Zeilen mit ihren Zeilennummern an.\n\
|
||||
/V Zeigt alle Zeilen an, die die Zeichenfolge NICHT enhalten."
|
||||
|
||||
IDS_NO_SUCH_FILE, "Datei %s nicht gefunden\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "Datei %s kann nicht geöffnet werden.\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/el-GR.rc
Normal file
17
base/applications/findstr/lang/el-GR.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Εκτυπώνει όλες τις γραμμές ενός αρχείου που περιέχουν ένα αλφαριθμητικό.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"αλφαριθμητικό\" [ αρχείο... ]\n\
|
||||
/C Μέτρηση γραμμών που περιέχουν το αλφαριθμητικό\n\
|
||||
/I Αγνόηση κεφαλαίων\n\
|
||||
/N Εμφάνιση αριθμών στις εμφανιζόμενες γραμμές, ξεκινώντας από το 1\n\
|
||||
/V Εκτύπωση γραμμών που δεν περιέχουν το αλφαριθμητικό"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Δεν υπάρχει αυτό το αρχείο\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Δεν ήταν δυνατό το άνοιγμα του αρχείου\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/en-US.rc
Normal file
17
base/applications/findstr/lang/en-US.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FINDSTR: Prints all lines of a file that contain a string.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\
|
||||
/C Count the number of lines that contain string\n\
|
||||
/I Ignore case\n\
|
||||
/N Number the displayed lines, starting at 1\n\
|
||||
/V Print lines that do not contain the string"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FINDSTR: %s: No such file\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FINDSTR: %s: Cannot open file\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/es-ES.rc
Normal file
17
base/applications/findstr/lang/es-ES.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Imprime todas las líneas de un fichero que contiene una cadena.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"cadena\" [ fichero... ]\n\
|
||||
/C Cuenta el número de líneas que contienen la cadena de caracteres\n\
|
||||
/I Ignora mayúsculas y minúsculas\n\
|
||||
/N Numero de líneas a mostrar en pantalla, a partir de la primera\n\
|
||||
/V Muestra las líneas que no contienen la cadena de caracteres."
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: No se encontró el fichero\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: No se pudo abrir el fichero\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/fr-FR.rc
Normal file
17
base/applications/findstr/lang/fr-FR.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Affiche toutes les lignes d'un fichier qui contiennent un morceau de texte.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"texte\" [ fichier... ]\n\
|
||||
/C Compte le nombre de lignes qui contiennent le texte\n\
|
||||
/I Insensible à la casse\n\
|
||||
/N Numérote les lignes affichées en commençant à 1\n\
|
||||
/V Affiche les lignes qui ne contiennent pas le texte"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s : fichier inexistant\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s : impossible d'ouvrir le fichier\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/it-IT.rc
Normal file
17
base/applications/findstr/lang/it-IT.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Visualizza le linee di un file che contengono un stringa.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"stringa\" [ file... ]\n\
|
||||
/C Conta il numero di linee che contengono la stringa\n\
|
||||
/I Ignora maiuscole/minuscole\n\
|
||||
/N Numera le linee visualizzate a partire da 1\n\
|
||||
/V Visualizza le linee che non contengono la stringa"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: File non trovato\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Impossibile aprire il file\n"
|
||||
|
||||
END
|
26
base/applications/findstr/lang/lt-LT.rc
Normal file
26
base/applications/findstr/lang/lt-LT.rc
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* PROJECT: ReactOS find command
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: base/applications/cmdutils/find/lang/lt-LT.rc
|
||||
* PURPOSE: Lithuanian Language File
|
||||
* TRANSLATOR: Vytis "CMan" Girdþijauskas (cman@cman.us)
|
||||
* DATE: 2007-09-23
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Spausdina visas bylos eilutes, kuriose yra ieðkomas tekstas.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"tekstas\" [ byla... ]\n\
|
||||
/C Skaièiuoti eilutes, kuriose yra ieðkomas tekstas\n\
|
||||
/I Ignoruoti raidþiø dydá\n\
|
||||
/N Numeruoti vaizduojamas eilutes, pradedant nuo 1\n\
|
||||
/V Spausdinti eilutes, kuriose nëra ieðkomo teksto"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Tokios bylos nëra\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Nepavyko atverti bylos\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/no-NO.rc
Normal file
17
base/applications/findstr/lang/no-NO.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FINN: Skriv alle linjene for filen som inneholder en streng.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"streng\" [ fil... ]\n\
|
||||
/C Teller nummer av linjer som inneholder strenger\n\
|
||||
/I Ignorere sak\n\
|
||||
/N Nummer viste linjer, start med 1\n\
|
||||
/V Skriv linjer som ikke inneholder en streng"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FINN: %s: Ingen filer\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FINN: %s: Kan ikke åpne filen\n"
|
||||
|
||||
END
|
24
base/applications/findstr/lang/pl-PL.rc
Normal file
24
base/applications/findstr/lang/pl-PL.rc
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* translated by Caemyr - Olaf Siejka (Dec,2007)
|
||||
* Use ReactOS forum PM or IRC to contact me
|
||||
* http://www.reactos.org
|
||||
* IRC: irc.freenode.net #reactos-pl
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Wyświetla wszystkie linie danego pliku, zawierające szukany ciąg znaków.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"ciąg znaków\" [ plik... ]\n\
|
||||
/C Oblicza w ilu liniach pojawił się szukany ciąg znaków\n\
|
||||
/I Ignoruje wielkość liter\n\
|
||||
/N Numeruje wyświetlane linie, zaczynając od 1\n\
|
||||
/V Wyświetla te linie które nie zawierają szukanego ciągu znaków"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Plik nie został znaleziony\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Nie można otworzyć pliku\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/pt-BR.rc
Normal file
17
base/applications/findstr/lang/pt-BR.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Localiza uma seqüência de texto em um ou mais arquivos.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"seqüência\" [ arquivo... ]\n\
|
||||
/C Exibe apenas o número de linhas que contêm a seqüência.\n\
|
||||
/I Ignora maiúsculas/minúsculas ao localizar uma seqüência.\n\
|
||||
/N Exibe o número de cada linha, iniciando no 1.\n\
|
||||
/V Exibe todas as linhas que NÃO contêm a seqüência especificada."
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Arquivo não encontrado\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Não foi possível abrir o arquivo\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/ru-RU.rc
Normal file
17
base/applications/findstr/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Поиск текстовой строки в одном или нескольких файлах.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"строка\" [ файл... ]\n\
|
||||
/C Вывод только общего числа строк, содержащих заданную строку.\n\
|
||||
/I Поиск без учета регистра символов.\n\
|
||||
/N Вывод номеров отображаемых строк (начиная с 1).\n\
|
||||
/V Вывод всех строк, НЕ содержащих заданную строку."
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Файл не существует.\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Невозможно открыть файл.\n"
|
||||
|
||||
END
|
21
base/applications/findstr/lang/sk-SK.rc
Normal file
21
base/applications/findstr/lang/sk-SK.rc
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* TRANSLATOR: M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk)
|
||||
* DATE OF TR: 12-02-2008
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Zobraz¡ vçetky riadky s£boru obsahuj£ce h–adanì reœazec.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"reœazec\" [ s£bor... ]\n\
|
||||
/C Zobraz¡ poŸet riadkov, ktor‚ obsahuj£ reœazec.\n\
|
||||
/I Ignoruje ve–kosœ p¡smen.\n\
|
||||
/N ¬¡sluje zobrazen‚ riadky, zaŸ¡na od 1.\n\
|
||||
/V Zobraz¡ vçetky riadky, ktor‚ neobsahuj£ h–adanì reœazec."
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: S£bor %s sa nenaçiel.\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: S£bor %s sa ned otvoriœ.\n"
|
||||
|
||||
END
|
17
base/applications/findstr/lang/sv-SE.rc
Normal file
17
base/applications/findstr/lang/sv-SE.rc
Normal file
|
@ -0,0 +1,17 @@
|
|||
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Skriver ut alla rader i en fil som innehåller en sträng.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"sträng\" [ fil... ]\n\
|
||||
/C Räkna nummren av linjer som innehåller en strängen\n\
|
||||
/I Ignorera skiftläge\n\
|
||||
/N Antal visade rader, börjar på 1\n\
|
||||
/V Skriver ut rader som inte innehåller strängen"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Ingen sorts fil\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Kan inte öppna filen\n"
|
||||
|
||||
END
|
25
base/applications/findstr/lang/uk-UA.rc
Normal file
25
base/applications/findstr/lang/uk-UA.rc
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* PROJECT: Find
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: base/applications/cmdutils/find/lang/uk-UA.rc
|
||||
* PURPOSE: Ukraianian Language File for find
|
||||
* TRANSLATOR: Artem Reznikov
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
|
||||
IDS_USAGE, "FIND: Âèâåäåííÿ âñ³õ ðÿäê³â ôàéëó, ÿê³ ì³ñòÿòü ðÿäîê.\n\n\
|
||||
FIND [ /C ] [ /I ] [ /N ] [ /V ] \"ðÿäîê\" [ ôàéë... ]\n\
|
||||
/C Ïîðàõóâàòè ê³ëüê³ñòü ðÿäê³â, ÿê³ ì³ñòÿòü ðÿäîê\n\
|
||||
/I Íå âðàõîâóâàòè ðåã³ñòð ñèìâîë³â\n\
|
||||
/N Íóìåðóâàòè ðÿäêè, ÿê³ â³äîáðàæàþòüñÿ (ïî÷èíàþ÷è ç 1)\n\
|
||||
/V Âèâåäåííÿ ðÿäê³â, ÿê³ íå ì³ñòÿòü çàäàíèé ðÿäîê"
|
||||
|
||||
IDS_NO_SUCH_FILE, "FIND: %s: Ôàéë íå ³ñíóº\n"
|
||||
|
||||
IDS_CANNOT_OPEN, "FIND: %s: Íåìîæëèâî â³äêðèòè ôàéë\n"
|
||||
|
||||
END
|
3
base/applications/findstr/resource.h
Normal file
3
base/applications/findstr/resource.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
#define IDS_USAGE 1000
|
||||
#define IDS_NO_SUCH_FILE 1001
|
||||
#define IDS_CANNOT_OPEN 1002
|
20
base/applications/findstr/rsrc.rc
Normal file
20
base/applications/findstr/rsrc.rc
Normal file
|
@ -0,0 +1,20 @@
|
|||
#include <windows.h>
|
||||
#include "resource.h"
|
||||
|
||||
#include "lang/bg-BG.rc"
|
||||
#include "lang/ca-ES.rc"
|
||||
#include "lang/cs-CZ.rc"
|
||||
#include "lang/de-DE.rc"
|
||||
#include "lang/el-GR.rc"
|
||||
#include "lang/en-US.rc"
|
||||
#include "lang/es-ES.rc"
|
||||
#include "lang/fr-FR.rc"
|
||||
#include "lang/it-IT.rc"
|
||||
#include "lang/lt-LT.rc"
|
||||
#include "lang/no-NO.rc"
|
||||
#include "lang/pl-PL.rc"
|
||||
#include "lang/pt-BR.rc"
|
||||
#include "lang/ru-RU.rc"
|
||||
#include "lang/sk-SK.rc"
|
||||
#include "lang/sv-SE.rc"
|
||||
#include "lang/uk-UA.rc"
|
94
base/applications/games/winmine/lang/bg-BG.rc
Normal file
94
base/applications/games/winmine/lang/bg-BG.rc
Normal file
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* WineMine
|
||||
* Bulgarian Language Support
|
||||
*
|
||||
* Copyright 2000 Joshua Thielen
|
||||
* Copyright 2003 Marcelo Duarte
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE BEGIN
|
||||
IDS_APPNAME, "Ìèíè÷êè"
|
||||
IDS_NOBODY, "Íèêîé"
|
||||
IDS_ABOUT, "Copyright 2000 Joshua Thielen"
|
||||
END
|
||||
|
||||
MENU_WINEMINE MENU
|
||||
BEGIN
|
||||
POPUP "Íà&ñòðîéêè" BEGIN
|
||||
MENUITEM "&Íîâ\tF2", IDM_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Ñëàãàíå íà &ïèòàíêà", IDM_MARKQ
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Íà&÷èíàåù", IDM_BEGINNER
|
||||
MENUITEM "&Íàïðåäíàë", IDM_ADVANCED
|
||||
MENUITEM "&Âåù", IDM_EXPERT
|
||||
MENUITEM "&Íàãàæäàíå...", IDM_CUSTOM
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Èç&õîä\tAlt+X", IDM_EXIT
|
||||
END
|
||||
POPUP "&Ñâåäåíèÿ" BEGIN
|
||||
MENUITEM "Íàé-&áúðçè...", IDM_TIMES
|
||||
MENUITEM "&Çà", IDM_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
DLG_TIMES DIALOGEX 0, 0, 160, 80
|
||||
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT
|
||||
CAPTION "Íàé-áúðçè"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
GROUPBOX "Íàé-áúðçè", -1, 10, 10, 140, 45
|
||||
LTEXT "Íà÷èíàåù", -1, 20, 20, 40, 8
|
||||
LTEXT "Ðàçøèðåíè", -1, 20, 30, 40, 8
|
||||
LTEXT "Ðàçáèðà÷", -1, 20, 40, 40, 8
|
||||
LTEXT "999", IDC_TIME1, 70, 20, 15, 8
|
||||
LTEXT "999", IDC_TIME2, 70, 30, 15, 8
|
||||
LTEXT "999", IDC_TIME3, 70, 40, 15, 8
|
||||
LTEXT "", IDC_NAME1, 90, 20, 55, 8
|
||||
LTEXT "", IDC_NAME2, 90, 30, 55, 8
|
||||
LTEXT "", IDC_NAME3, 90, 40, 55, 8
|
||||
DEFPUSHBUTTON "Äîáðå", IDOK, 55, 60, 50, 15
|
||||
END
|
||||
|
||||
DLG_CONGRATS DIALOGEX 0, 0, 160, 60
|
||||
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT
|
||||
CAPTION "Ïîçäðàâëåíèÿ!"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Âúâåäåòå èìåòî ñè", -1, 10, 10, 150, 10
|
||||
EDITTEXT IDC_EDITNAME, 25, 20, 110, 12
|
||||
DEFPUSHBUTTON "Äîáðå", IDOK, 60, 40, 40, 15
|
||||
END
|
||||
|
||||
DLG_CUSTOM DIALOGEX 0, 0, 100, 110
|
||||
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT
|
||||
CAPTION "Íàãîäåíà èãðà"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Ðåäîâå", -1, 5, 5, 30, 10
|
||||
LTEXT "Ñòúëáîâå", -1, 5, 35, 30, 10
|
||||
LTEXT "Ìèíè", -1, 5, 65, 30, 10
|
||||
EDITTEXT IDC_EDITROWS, 5, 15, 20, 12, ES_NUMBER
|
||||
EDITTEXT IDC_EDITCOLS, 5, 45, 20, 12, ES_NUMBER
|
||||
EDITTEXT IDC_EDITMINES, 5, 75, 20, 12, ES_NUMBER
|
||||
DEFPUSHBUTTON "Äîáðå", IDOK, 50, 30, 50, 15
|
||||
PUSHBUTTON "Îòêàç", IDCANCEL, 50, 50, 50, 15
|
||||
END
|
|
@ -42,6 +42,7 @@ LEDS BITMAP rc/leds.bmp
|
|||
MINES BITMAP rc/mines.bmp
|
||||
|
||||
/* include localised resources */
|
||||
#include "lang/bg-BG.rc"
|
||||
#include "lang/cs-CZ.rc"
|
||||
#include "lang/da-DK.rc"
|
||||
#include "lang/en-US.rc"
|
||||
|
|
|
@ -16,13 +16,13 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#define WINE_OLESELFREGISTER
|
||||
#define WINE_FILEDESCRIPTION_STR "Wine core exe"
|
||||
#define WINE_FILEDESCRIPTION_STR "Wine Internet Explorer"
|
||||
#define WINE_FILENAME_STR "iexplore.exe"
|
||||
#define WINE_FILEVERSION 6,0,2900,2180
|
||||
#define WINE_FILEVERSION_STR "6.0.2900.2180"
|
||||
#define WINE_PRODUCTVERSION 6,0,2900,2180
|
||||
#define WINE_PRODUCTVERSION_STR "6.0.2900.2180"
|
||||
#define WINE_EXTRAVALUES VALUE "OLESelfRegister",""
|
||||
|
||||
#include "wine/wine_common_ver.rc"
|
||||
|
||||
|
|
|
@ -91,13 +91,13 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COLUMNTYPE "Type"
|
||||
IDS_COLUMNDATE "Date"
|
||||
IDS_COLUMNTIME "Time"
|
||||
IDS_COLUMNSOURCE "Source"
|
||||
IDS_COLUMNCATEGORY "Category"
|
||||
IDS_COLUMNEVENT "Event"
|
||||
IDS_COLUMNUSER "User"
|
||||
IDS_COLUMNCOMPUTER "Computer"
|
||||
IDS_COLUMNEVENTDATA "Event Data"
|
||||
IDS_COLUMNTYPE "Âèä"
|
||||
IDS_COLUMNDATE "Äàòà"
|
||||
IDS_COLUMNTIME "Âðåìå"
|
||||
IDS_COLUMNSOURCE "Èçòî÷íèê"
|
||||
IDS_COLUMNCATEGORY "Ðàçðÿä"
|
||||
IDS_COLUMNEVENT "Ñúáèòèå"
|
||||
IDS_COLUMNUSER "Ïîòðåáèòåë"
|
||||
IDS_COLUMNCOMPUTER "Êîìïþòúð"
|
||||
IDS_COLUMNEVENTDATA "Äàííè çà ñúáèòèåòî"
|
||||
END
|
||||
|
|
|
@ -4,7 +4,7 @@ IDR_MAINMENU MENU
|
|||
BEGIN
|
||||
POPUP "&Ôàéë"
|
||||
BEGIN
|
||||
MENUITEM "Èçíîñ...", ID_EXPORT
|
||||
MENUITEM "Èçíàñÿíå...", ID_EXPORT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Èç&õîä", ID_EXIT
|
||||
END
|
||||
|
@ -194,8 +194,8 @@ STRINGTABLE DISCARDABLE
|
|||
BEGIN
|
||||
/* IDS_NUM_SERVICES "Num Services: %d" */
|
||||
IDS_NUM_SERVICES "Áðîé óñëóãè: %d"
|
||||
IDS_STOP_DEPENDS "When %s stops, these other services will also stop"
|
||||
IDS_NO_DEPENDS "<No Dependencies>"
|
||||
IDS_STOP_DEPENDS "Ïðè ñïèðàíåòî íà %s, ùå ñïðàò è ñëåäíèòå óñëóãè"
|
||||
IDS_NO_DEPENDS "<Áåç çàâèñèìîñòè>"
|
||||
IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
|
||||
END
|
||||
|
||||
|
@ -226,7 +226,8 @@ END
|
|||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_HELP_OPTIONS "CREATE OPTIONS:\r\nNOTE: The option name includes the equal sign.\r\n type= <own|share|interact|kernel|filesys|rec>\r\n (default = own)\r\n start= <boot|system|auto|demand|disabled>\r\n (default = demand) \r\n error= <normal|severe|critical|ignore>\r\n (default = normal)\r\n group= <LoadOrderGroup>\r\n tag= <yes|no>\r\n depend= <Dependencies(separated by / (forward slash))>\r\n obj= <AccountName|ObjectName>\r\n (default = LocalSystem)\r\n password= <password>\r\n"
|
||||
/*IDS_HELP_OPTIONS "CREATE OPTIONS:\r\nNOTE: The option name includes the equal sign.\r\n type= <own|share|interact|kernel|filesys|rec>\r\n (default = own)\r\n start= <boot|system|auto|demand|disabled>\r\n (default = demand) \r\n error= <normal|severe|critical|ignore>\r\n (default = normal)\r\n group= <LoadOrderGroup>\r\n tag= <yes|no>\r\n depend= <Dependencies(separated by / (forward slash))>\r\n obj= <AccountName|ObjectName>\r\n (default = LocalSystem)\r\n password= <password>\r\n" */
|
||||
IDS_HELP_OPTIONS "ÑÚÇÄÀÂÀÍÅ ÍÀ ÂÚÇÌÎÆÍÎÑÒ:\r\nÁÅËÅÆÊÀ: Èìåòî íà âúçìîæíîñòòà âêëþ÷âà çíàêà çà ðàâåíñòâî.\r\n type= <own|share|interact|kernel|filesys|rec>\r\n (ïîäðàçáèðàíî = own)\r\n start= <boot|system|auto|demand|disabled>\r\n (ïîäðàçáèðàíî = demand) \r\n error= <normal|severe|critical|ignore>\r\n (ïîäðàçáèðàíî = normal)\r\n group= <LoadOrderGroup>\r\n tag= <yes|no>\r\n depend= <Dependencies(separated by / (forward slash))>\r\n obj= <AccountName|ObjectName>\r\n (ïîäðàçáèðàíî = LocalSystem)\r\n password= <password>\r\n"
|
||||
END
|
||||
|
||||
/* Hints */
|
||||
|
@ -239,7 +240,7 @@ BEGIN
|
|||
IDS_HINT_CONNECT " Óïðàâëåíèå íà ðàçëè÷åí êîìïþòúð."
|
||||
IDS_HINT_START " Ïóñêàíå íà èçáðàíàòà óñëóãà."
|
||||
IDS_HINT_STOP " Ñïèðàíå íà èçáðàíàòà óñëóãà."
|
||||
IDS_HINT_PAUSE " Çàäúðæàíå (pause) íà èçáðàíàòà óñëóãà."
|
||||
IDS_HINT_PAUSE " Çàäúðæàíå íà èçáðàíàòà óñëóãà."
|
||||
IDS_HINT_RESUME " Ïðîäúëæàâàíå íà èíáðàíàòà óñëóãà."
|
||||
IDS_HINT_RESTART " Ñïèðàíå è ïóñêàíå íà èçáðàíàòà óñëóãà"
|
||||
IDS_HINT_REFRESH " Îïðåñíÿâàíå íà ñïèñúêà ñ óñëóãèòå."
|
||||
|
@ -255,7 +256,7 @@ BEGIN
|
|||
IDS_HINT_CUST " Íàãàæäàíå íà èçãëåäà."
|
||||
|
||||
IDS_HINT_HELP " Ïîêàçâà ïîìîùåí ïðîçîðåö."
|
||||
IDS_HINT_ABOUT " Çà óïðàâèòåëÿ íà óñòðéñòâàòà íà ÐåàêòÎÑ."
|
||||
IDS_HINT_ABOUT " Çà óïðàâèòåëÿ íà óñòðîéñòâàòà íà ÐåàêòÎÑ."
|
||||
|
||||
IDS_HINT_SYS_RESTORE " Âúçñòàíîâÿâà ïðîçîðåöà äî îáè÷àéíèÿ ìó ðàìåð."
|
||||
IDS_HINT_SYS_MOVE " Ïðåìåñòâà ïðîçîðåöà."
|
||||
|
|
|
@ -791,7 +791,7 @@ int main( int argc, char* argv[] )
|
|||
RtlZeroMemory( State.DefaultServer, 256 );
|
||||
RtlZeroMemory( State.DefaultServerAddress, 16 );
|
||||
|
||||
strncpy( State.root, DEFAULT_ROOT, strlen( DEFAULT_ROOT ) );
|
||||
memcpy( State.root, DEFAULT_ROOT, sizeof(DEFAULT_ROOT) );
|
||||
|
||||
/* We don't know how long of a buffer it will want to return. So we'll
|
||||
pass an empty one now and let it fail only once, instead of guessing. */
|
||||
|
|
198
base/applications/rapps/lang/cs-CZ.rc
Normal file
198
base/applications/rapps/lang/cs-CZ.rc
Normal file
|
@ -0,0 +1,198 @@
|
|||
/* FILE: applications/rapps/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* UPDATED: 2010-12-12
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
|
||||
|
||||
IDR_MAINMENU MENU
|
||||
BEGIN
|
||||
POPUP "&Soubor"
|
||||
BEGIN
|
||||
MENUITEM "&Nastavení", ID_SETTINGS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Konec", ID_EXIT
|
||||
END
|
||||
POPUP "&Programy"
|
||||
BEGIN
|
||||
MENUITEM "&Instalovat", ID_INSTALL
|
||||
MENUITEM "&Odinstalovat",ID_UNINSTALL
|
||||
MENUITEM "&Zmìnit", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Odstranit z ®istru", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Obnovit", ID_REFRESH
|
||||
END
|
||||
POPUP "Nápovìda"
|
||||
BEGIN
|
||||
MENUITEM "Nápovìda", ID_HELP, GRAYED
|
||||
MENUITEM "O programu...", ID_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
IDR_LINKMENU MENU
|
||||
BEGIN
|
||||
POPUP "popup"
|
||||
BEGIN
|
||||
MENUITEM "&Otevøít odkaz v prohlížeèi", ID_OPEN_LINK
|
||||
MENUITEM "&Kopírovat odkaz do schránky", ID_COPY_LINK
|
||||
END
|
||||
END
|
||||
|
||||
IDR_APPLICATIONMENU MENU
|
||||
BEGIN
|
||||
POPUP "popup"
|
||||
BEGIN
|
||||
MENUITEM "&Instalovat", ID_INSTALL
|
||||
MENUITEM "&Odinstalovat", ID_UNINSTALL
|
||||
MENUITEM "&Zmìnit", ID_MODIFY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Odebrat z ®istru", ID_REGREMOVE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Obnovit", ID_REFRESH
|
||||
END
|
||||
END
|
||||
|
||||
IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Nastavení"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
GROUPBOX "Obecné", -1, 4, 2, 240, 61
|
||||
AUTOCHECKBOX "&Uložit pozici okna", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12
|
||||
AUTOCHECKBOX "&Aktualizovat seznam dostupných programù pøi startu programu", IDC_UPDATE_AVLIST, 15, 29, 219, 12
|
||||
AUTOCHECKBOX "Ukládat &záznam instalací a odstranìní programù", IDC_LOG_ENABLED, 15, 46, 219, 12
|
||||
|
||||
GROUPBOX "Stahování", -1, 4, 65, 240, 51
|
||||
LTEXT "Složka se staženými soubory:", -1, 16, 75, 100, 9
|
||||
EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP
|
||||
PUSHBUTTON "&Procházet...", IDC_CHOOSE, 187, 85, 50, 14
|
||||
AUTOCHECKBOX "&Smazat instalátor programu po dokonèení instalace", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
|
||||
|
||||
PUSHBUTTON "Výchozí", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14
|
||||
PUSHBUTTON "OK", IDOK, 116, 124, 60, 14
|
||||
PUSHBUTTON "Storno", IDCANCEL, 181, 124, 60, 14
|
||||
END
|
||||
|
||||
IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97
|
||||
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Instalace programu"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35
|
||||
|
||||
AUTORADIOBUTTON "&Instalovat z média (CD nebo DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP
|
||||
AUTORADIOBUTTON "&Stáhnout a instalovat", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP
|
||||
|
||||
PUSHBUTTON "OK", IDOK, 86, 78, 60, 14
|
||||
PUSHBUTTON "Storno", IDCANCEL, 150, 78, 60, 14
|
||||
END
|
||||
|
||||
IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
|
||||
STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE
|
||||
CAPTION "Stahování..."
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
CONTROL "Progress1", IDC_DOWNLOAD_PROGRESS, "msctls_progress32", WS_BORDER | PBS_SMOOTH, 10, 10, 200, 12
|
||||
LTEXT "", IDC_DOWNLOAD_STATUS, 10, 30, 200, 10, SS_CENTER
|
||||
PUSHBUTTON "Storno", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP
|
||||
END
|
||||
|
||||
IDD_ABOUT_DIALOG DIALOGEX 22, 16, 190, 66
|
||||
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
|
||||
CAPTION "O programu"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "ReactOS Manažer aplikací\nCopyright (C) 2009\nby Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39
|
||||
PUSHBUTTON "Zavøít", IDOK, 133, 46, 50, 14
|
||||
ICON IDI_MAIN, IDC_STATIC, 10, 10, 7, 30
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_TOOLTIP_INSTALL "Instalovat"
|
||||
IDS_TOOLTIP_UNINSTALL "Odinstalovat"
|
||||
IDS_TOOLTIP_MODIFY "Zmìnit"
|
||||
IDS_TOOLTIP_SETTINGS "Nastavení"
|
||||
IDS_TOOLTIP_REFRESH "Obnovit"
|
||||
IDS_TOOLTIP_EXIT "Konec"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_APP_NAME "Název"
|
||||
IDS_APP_INST_VERSION "Verze"
|
||||
IDS_APP_DESCRIPTION "Popis"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_INFO_VERSION "\nVerze: "
|
||||
IDS_INFO_DESCRIPTION "\nPopis: "
|
||||
IDS_INFO_PUBLISHER "\nVydavatel: "
|
||||
IDS_INFO_HELPLINK "\nInternetová pomoc: "
|
||||
IDS_INFO_HELPPHONE "\nTelefonní pomoc: "
|
||||
IDS_INFO_README "\nReadme: "
|
||||
IDS_INFO_REGOWNER "\nRegistrovaný vlastník: "
|
||||
IDS_INFO_PRODUCTID "\nID produktu: "
|
||||
IDS_INFO_CONTACT "\nKontakt: "
|
||||
IDS_INFO_UPDATEINFO "\nInformace o aktualizacích: "
|
||||
IDS_INFO_INFOABOUT "\nInformace o: "
|
||||
IDS_INFO_COMMENTS "\nKomentáøe: "
|
||||
IDS_INFO_INSTLOCATION "\nUmístìní instalace: "
|
||||
IDS_INFO_INSTALLSRC "\nZdroj instalace: "
|
||||
IDS_INFO_UNINSTALLSTR "\nOdinstalaèní øetìzec: "
|
||||
IDS_INFO_MODIFYPATH "\nCesta úpravy: "
|
||||
IDS_INFO_INSTALLDATE "\nDatum instalace: "
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_AINFO_VERSION "\nVerze: "
|
||||
IDS_AINFO_DESCRIPTION "\nPopis: "
|
||||
IDS_AINFO_SIZE "\nVelikost: "
|
||||
IDS_AINFO_URLSITE "\nDomovská stránka: "
|
||||
IDS_AINFO_LICENCE "\nLicence: "
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_CAT_AUDIO "Audio"
|
||||
IDS_CAT_DEVEL "Vývoj"
|
||||
IDS_CAT_DRIVERS "Ovladaèe"
|
||||
IDS_CAT_EDU "Škola hrou"
|
||||
IDS_CAT_ENGINEER "Strojírenství"
|
||||
IDS_CAT_FINANCE "Finance"
|
||||
IDS_CAT_GAMES "Hry a zábava"
|
||||
IDS_CAT_GRAPHICS "Grafika"
|
||||
IDS_CAT_INTERNET "Internet a sítì"
|
||||
IDS_CAT_LIBS "Knihovny"
|
||||
IDS_CAT_OFFICE "Kanceláø"
|
||||
IDS_CAT_OTHER "Jiné"
|
||||
IDS_CAT_SCIENCE "Vìda"
|
||||
IDS_CAT_TOOLS "Nástroje"
|
||||
IDS_CAT_VIDEO "Video"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_APPTITLE "ReactOS Manažer aplikací"
|
||||
IDS_SEARCH_TEXT "Hledat..."
|
||||
IDS_INSTALL "Instalovat"
|
||||
IDS_UNINSTALL "Odinstalovat"
|
||||
IDS_MODIFY "Zmìnit"
|
||||
IDS_APPS_COUNT "Poèet aplikací: %d"
|
||||
IDS_WELCOME_TITLE "Vítejte v ReactOS Manažeru aplikací!\n\n"
|
||||
IDS_WELCOME_TEXT "Na levé stranì zvolte kategorii, pak vpravo zvolte aplikaci, která bude nainstalována nebo odinstalována.\nWebová stránka ReactOS: "
|
||||
IDS_WELCOME_URL "http://www.reactos.org"
|
||||
IDS_INSTALLED "Nainstalováno"
|
||||
IDS_AVAILABLEFORINST "Dostupné k instalaci"
|
||||
IDS_UPDATES "Aktualizace"
|
||||
IDS_APPLICATIONS "Aplikace"
|
||||
IDS_CHOOSE_FOLDER_TEXT "Zvolte složku, do které se budou ukládat stažené soubory:"
|
||||
IDS_CHOOSE_FOLDER_ERROR "Zvolená složka neexistuje. Vytvoøit?"
|
||||
IDS_USER_NOT_ADMIN "Ke spuštìní ""ReactOS Manažera aplikací"" je tøeba být administrátor!"
|
||||
IDS_APP_REG_REMOVE "Urèitì odstranit data instalovaného programu z registru?"
|
||||
IDS_INFORMATION "Informace"
|
||||
IDS_UNABLE_TO_REMOVE "Nepodaøilo se odstranit data programu z registru!"
|
||||
END
|
|
@ -11,6 +11,12 @@ URLSite = Unknown
|
|||
URLDownload = http://svn.reactos.org/packages/ac97_vbox.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Name = Ovladač AC97 pro VirtualBox
|
||||
Licence = Neznámá
|
||||
Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte.
|
||||
URLSite = Neznámá
|
||||
|
||||
[Section.0407]
|
||||
Name = AC97 Treiber für VirtualBox
|
||||
Licence = Unbekannt
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = Fox Audio Player
|
||||
Version = 0.7.2
|
||||
Version = 0.8.3
|
||||
Licence = GPL
|
||||
Description = Simple and lightweight audio player.
|
||||
Size = 1.84MB
|
||||
Size = 1.85MB
|
||||
Category = 1
|
||||
URLSite = http://foxaudioplayer.sourceforge.net/
|
||||
URLDownload = http://svn.reactos.org/packages/fap-0.7.2-win32-bin.exe
|
||||
URLDownload = http://svn.reactos.org/packages/fap-0.8.3-win32-bin.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -11,6 +11,12 @@ URLSite = http://www.mozilla.com/en-US/
|
|||
URLDownload = http://svn.reactos.org/packages/Firefox%20Setup%202.0.0.20.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů.
|
||||
Size = 5.5M
|
||||
URLSite = http://www.mozilla-europe.org/cs/
|
||||
URLDownload = http://194.71.11.70/pub/www/clients/mozilla.org/firefox/releases/2.0.0.20/win32/cs/Firefox%20Setup%202.0.0.20.exe
|
||||
|
||||
[Section.0407]
|
||||
Description = Der populärste und einer der besten freien Webbrowser.
|
||||
|
||||
|
|
|
@ -11,6 +11,12 @@ URLSite = http://www.mozilla.com/en-US/
|
|||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/en-US/Firefox%20Setup%203.0.19.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů.
|
||||
Size = 7.0M
|
||||
URLSite = http://www.mozilla-europe.org/cs/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/cs/Firefox%20Setup%203.0.19.exe
|
||||
|
||||
[Section.0407]
|
||||
Description = Der populärste und einer der besten freien Webbrowser.
|
||||
Size = 7.0M
|
||||
|
|
|
@ -2,47 +2,47 @@
|
|||
|
||||
[Section]
|
||||
Name = Mozilla Firefox 3.6
|
||||
Version = 3.6.12
|
||||
Version = 3.6.13
|
||||
Licence = MPL/GPL/LGPL
|
||||
Description = The most popular and one of the best free Web Browsers out there.
|
||||
Size = 8.1M
|
||||
Category = 5
|
||||
URLSite = http://www.mozilla.com/en-US/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/en-US/Firefox%20Setup%203.6.12.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/en-US/Firefox%20Setup%203.6.13.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
Description = Der populärste und einer der besten freien Webbrowser.
|
||||
Size = 8.0M
|
||||
URLSite = http://www.mozilla-europe.org/de/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/de/Firefox%20Setup%203.6.12.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/de/Firefox%20Setup%203.6.13.exe
|
||||
|
||||
[Section.040a]
|
||||
Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
|
||||
Size = 8.0M
|
||||
URLSite = http://www.mozilla-europe.org/es/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/es-ES/Firefox%20Setup%203.6.12.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/es-ES/Firefox%20Setup%203.6.13.exe
|
||||
|
||||
[Section.0414]
|
||||
Description = Mest populære og best også gratis nettleserene der ute.
|
||||
Size = 8.0M
|
||||
URLSite = http://www.mozilla-europe.org/no/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/nb-NO/Firefox%20Setup%203.6.12.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/nb-NO/Firefox%20Setup%203.6.13.exe
|
||||
|
||||
[Section.0415]
|
||||
Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
|
||||
Size = 8.8M
|
||||
URLSite = http://www.mozilla-europe.org/pl/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/pl/Firefox%20Setup%203.6.12.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/pl/Firefox%20Setup%203.6.13.exe
|
||||
|
||||
[Section.0419]
|
||||
Description = Один из самых популярных и лучших бесплатных браузеров.
|
||||
Size = 8.4M
|
||||
URLSite = http://www.mozilla-europe.org/ru/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/ru/Firefox%20Setup%203.6.12.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/ru/Firefox%20Setup%203.6.13.exe
|
||||
|
||||
[Section.0422]
|
||||
Description = Найпопулярніший та один з кращих безплатних веб-браузерів.
|
||||
Size = 8.4M
|
||||
URLSite = http://www.mozilla-europe.org/uk/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.12/win32/uk/Firefox%20Setup%203.6.12.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/uk/Firefox%20Setup%203.6.13.exe
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = IrfanView
|
||||
Version = 4.27
|
||||
Version = 4.28
|
||||
Licence = Freeware (for personal use)
|
||||
Description = Viewer for all kinds of graphics/audio files/video files.
|
||||
Size = 1.3MB
|
||||
Category = 3
|
||||
URLSite = http://www.irfanview.com/
|
||||
URLDownload = http://irfanview.tuwien.ac.at/iview427_setup.exe
|
||||
URLDownload = http://irfanview.tuwien.ac.at/iview428_setup.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = IrfanView Plugins
|
||||
Version = 4.27
|
||||
Version = 4.28
|
||||
Licence = Freeware (for personal use)
|
||||
Description = Additional Plugins for supporting more file types.
|
||||
Size = 7.8MB
|
||||
Category = 3
|
||||
URLSite = http://www.irfanview.com/
|
||||
URLDownload = http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_427_setup.exe
|
||||
URLDownload = http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_428_setup.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = LibreOffice
|
||||
Version = 3.3.0 Beta 3
|
||||
Version = 3.3.0 RC2
|
||||
Licence = LGPL
|
||||
Description = Former called OpenOffice. Open Source Office Suite.
|
||||
Size = 300.0MB
|
||||
Size = 206.0MB
|
||||
Category = 6
|
||||
URLSite = http://www.documentfoundation.org/
|
||||
URLDownload = http://download.documentfoundation.org/libreoffice/testing/3.3.0-beta3/win/x86/LibO_3.3.0_Win_x86_install_multi.exe
|
||||
URLDownload = http://download.documentfoundation.org/libreoffice/testing/3.3.0-rc2/win/x86/LibO_3.3.0rc2_Win_x86_install_multi.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = Miranda IM
|
||||
Version = 0.9.11
|
||||
Version = 0.9.13
|
||||
Licence = GPL
|
||||
Description = Open source multiprotocol instant messaging application - May not work completely.
|
||||
Size = 3.0MB
|
||||
Category = 5
|
||||
URLSite = http://www.miranda-im.org/
|
||||
URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.11-unicode.exe
|
||||
URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.13-unicode.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = mIRC
|
||||
Version = 7.15
|
||||
Version = 7.17
|
||||
Licence = Shareware
|
||||
Description = The most popular client for the Internet Relay Chat (IRC).
|
||||
Size = 2.0M
|
||||
Category = 5
|
||||
URLSite = http://www.mirc.com/
|
||||
URLDownload = http://download.mirc.com/mirc715.exe
|
||||
URLDownload = http://download.mirc.com/mirc717.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -11,6 +11,9 @@ URLSite = http://offbyone.com/
|
|||
URLDownload = http://offbyone.com/offbyone/images/OffByOneSetup.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Off-By-One-Browser je velmi malý a rychlý webový prohlížeč s plnou podporou HTML 3.2.
|
||||
|
||||
[Section.0407]
|
||||
Description = Der Off-By-One-Browser ist ein sehr kleiner und schneller Webbrowser mit voller HTML 3.2 Unterstützung.
|
||||
|
||||
|
|
|
@ -2,15 +2,18 @@
|
|||
|
||||
[Section]
|
||||
Name = Opera
|
||||
Version = 10.63
|
||||
Version = 11.00
|
||||
Licence = Freeware
|
||||
Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client.
|
||||
Size = 12.7M
|
||||
Size = 8.9M
|
||||
Category = 5
|
||||
URLSite = http://www.opera.com/
|
||||
URLDownload = http://get4.opera.com/pub/opera/win/1063/int/Opera_1063_int_Setup.exe
|
||||
URLDownload = http://get4.opera.com/pub/opera/win/1100/int/Opera_1100_int_Setup.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Populární prohlížeč Opera s mnoha pokročilými vlastnostmi, včetně vestavené podpory pro e-mail a BitTorrent.
|
||||
|
||||
[Section.0407]
|
||||
Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenschaften, enthält einen Mail und BitTorrent Client.
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@ URLSite = http://reactos.org/wiki/Build_Environment
|
|||
URLDownload = http://ovh.dl.sourceforge.net/project/reactos/RosBE-Windows/i386/1.5.1/RosBE-1.5.1.1.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Dovoluje zkompilovat zdrojový kód systému ReactOS. Pro další detaily viz. ReactOS wiki.
|
||||
|
||||
[Section.0407]
|
||||
Description = Erlaubt es Ihnen den ReactOS Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@ URLSite = http://reactos.org/wiki/Build_Environment/
|
|||
URLDownload = http://dreimer.bplaced.net/rosbe/RosBE64-1.4b.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Dovoluje zkompilovat zdrojový kód systému ReactOS AMD64. Pro další detaily viz. ReactOS wiki.
|
||||
|
||||
[Section.0407]
|
||||
Description = Erlaubt es Ihnen den ReactOS AMD64 Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.
|
||||
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = SciTE
|
||||
Version = 2.22
|
||||
Version = 2.23
|
||||
Licence = Freeware
|
||||
Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs.
|
||||
Size = 0.6M
|
||||
Category = 7
|
||||
URLSite = http://www.scintilla.org/
|
||||
URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.22/Sc222.exe
|
||||
URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.23/Sc223.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = ScummVM
|
||||
Version = 1.2.0
|
||||
Version = 1.2.1
|
||||
Licence = GPL
|
||||
Description = Sam and Max, Day of the Tentacle, etc on ReactOS.
|
||||
Size = 3.5MB
|
||||
Size = 4.0MB
|
||||
Category = 4
|
||||
URLSite = http://scummvm.org/
|
||||
URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.2.0/scummvm-1.2.0-win32.exe
|
||||
URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.2.1/scummvm-1.2.1-win32.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
|
|
|
@ -11,6 +11,9 @@ URLSite = http://www.libsdl.org/projects/SDL_mixer/
|
|||
URLDownload = http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11-win32.zip
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Nutný pro spuštění některých open source her. K rozbalení je nutný 7-zip nebo podobný nástroj.
|
||||
|
||||
[Section.0407]
|
||||
Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauchen 7-Zip oder einen ähnlichen Entpacker um es zu entpacken.
|
||||
|
||||
|
|
|
@ -2,31 +2,31 @@
|
|||
|
||||
[Section]
|
||||
Name = Mozilla SeaMonkey
|
||||
Version = 2.0.10
|
||||
Version = 2.0.11
|
||||
Licence = MPL/GPL/LGPL
|
||||
Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.
|
||||
Size = 10.1MB
|
||||
Category = 5
|
||||
URLSite = http://www.seamonkey-project.org/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/en-US/SeaMonkey%20Setup%202.0.10.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/en-US/SeaMonkey%20Setup%202.0.11.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen.
|
||||
Size = 10.0MB
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/de/SeaMonkey%20Setup%202.0.10.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/de/SeaMonkey%20Setup%202.0.11.exe
|
||||
|
||||
[Section.040a]
|
||||
Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás.
|
||||
Size = 10.0MB
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/es-ES/SeaMonkey%20Setup%202.0.10.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/es-ES/SeaMonkey%20Setup%202.0.11.exe
|
||||
|
||||
[Section.0415]
|
||||
Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz.
|
||||
Size = 10.8MB
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/pl/SeaMonkey%20Setup%202.0.10.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/pl/SeaMonkey%20Setup%202.0.11.exe
|
||||
|
||||
[Section.0419]
|
||||
Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор.
|
||||
Size = 10.4MB
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.10/win32/ru/SeaMonkey%20Setup%202.0.10.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/ru/SeaMonkey%20Setup%202.0.11.exe
|
||||
|
|
|
@ -2,41 +2,41 @@
|
|||
|
||||
[Section]
|
||||
Name = Mozilla Thunderbird
|
||||
Version = 3.1.6
|
||||
Version = 3.1.7
|
||||
Licence = MPL/GPL/LGPL
|
||||
Description = The most popular and one of the best free Mail Clients out there.
|
||||
Size = 9.0M
|
||||
Category = 5
|
||||
URLSite = http://www.mozilla-europe.org/en/products/thunderbird/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/en-US/Thunderbird%20Setup%203.1.6.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/en-US/Thunderbird%20Setup%203.1.7.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0407]
|
||||
Description = Der populärste und einer der besten freien Mail-Clients.
|
||||
Size = 8.8M
|
||||
URLSite = http://www.mozilla-europe.org/de/products/thunderbird/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/de/Thunderbird%20Setup%203.1.6.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/de/Thunderbird%20Setup%203.1.7.exe
|
||||
|
||||
[Section.040a]
|
||||
Description = El más popular y uno de los mejores clientes mail que hay.
|
||||
Size = 8.8M
|
||||
URLSite = http://www.mozilla-europe.org/es/products/thunderbird/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/es-ES/Thunderbird%20Setup%203.1.6.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/es-ES/Thunderbird%20Setup%203.1.7.exe
|
||||
|
||||
[Section.0415]
|
||||
Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty.
|
||||
Size = 9.7M
|
||||
URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/pl/Thunderbird%20Setup%203.1.6.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/pl/Thunderbird%20Setup%203.1.7.exe
|
||||
|
||||
[Section.0419]
|
||||
Description = Один из самых популярных и лучших бесплатных почтовых клиентов.
|
||||
Size = 9.2M
|
||||
URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/ru/Thunderbird%20Setup%203.1.6.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/ru/Thunderbird%20Setup%203.1.7.exe
|
||||
|
||||
[Section.0422]
|
||||
Description = Найпопулярніший та один з кращих поштових клієнтів.
|
||||
Size = 9.2M
|
||||
URLSite = http://www.mozillamessaging.com/uk/thunderbird/
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.6/win32/uk/Thunderbird%20Setup%203.1.6.exe
|
||||
URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/uk/Thunderbird%20Setup%203.1.7.exe
|
||||
|
|
|
@ -2,15 +2,18 @@
|
|||
|
||||
[Section]
|
||||
Name = TuxPaint
|
||||
Version = 0.9.21
|
||||
Version = 0.9.21b
|
||||
Licence = GPL
|
||||
Description = An Open Source bitmap graphics editor geared towards young children.
|
||||
Size = 10MB
|
||||
Size = 11MB
|
||||
Category = 3
|
||||
URLSite = http://tuxpaint.org/
|
||||
URLDownload = http://ovh.dl.sourceforge.net/project/tuxpaint/tuxpaint/0.9.21/tuxpaint-0.9.21-win32-installer.exe
|
||||
URLDownload = http://ovh.dl.sourceforge.net/project/tuxpaint/tuxpaint/0.9.21b/tuxpaint-0.9.21b-win32-installer.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.0405]
|
||||
Description = Open source bitmapový editor určený dětem.
|
||||
|
||||
[Section.0407]
|
||||
Description = Ein Open Source Bitmap Zeichenprogramm für kleine Kinder.
|
||||
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
[Section]
|
||||
Name = UltraVNC
|
||||
Version = 1.0.9.1
|
||||
Version = 1.0.9.5
|
||||
Licence = GPL
|
||||
Description = Open-source VNC client/server.
|
||||
Size = 2.0MB
|
||||
Size = 2.1MB
|
||||
Category = 5
|
||||
URLSite = http://www.uvnc.com/
|
||||
URLDownload = http://support1.uvnc.com/download/109/UltraVNC_1.0.9.1_Setup.exe
|
||||
URLDownload = http://support1.uvnc.com/download/1095/UltraVNC_1.0.9.5_Setup.exe
|
||||
CDPath = none
|
||||
|
||||
[Section.040a]
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "lang/bg-BG.rc"
|
||||
#include "lang/cs-CZ.rc"
|
||||
#include "lang/de-DE.rc"
|
||||
#include "lang/en-US.rc"
|
||||
#include "lang/es-ES.rc"
|
||||
|
|
|
@ -49,12 +49,12 @@ static void draw_splitbar(HWND hWnd, int x)
|
|||
|
||||
if(!SizingPattern)
|
||||
{
|
||||
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
|
||||
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
|
||||
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
|
||||
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
|
||||
}
|
||||
if(!SizingBrush)
|
||||
{
|
||||
SizingBrush = CreatePatternBrush(SizingPattern);
|
||||
SizingBrush = CreatePatternBrush(SizingPattern);
|
||||
}
|
||||
GetClientRect(hWnd, &rt);
|
||||
rt.left = x - SPLIT_WIDTH/2;
|
||||
|
@ -72,7 +72,8 @@ static void ResizeWnd(ChildWnd* pChildWnd, int cx, int cy)
|
|||
const int tHeight = 18;
|
||||
SetRect(&rt, 0, 0, cx, cy);
|
||||
cy = 0;
|
||||
if (hStatusBar != NULL) {
|
||||
if (hStatusBar != NULL)
|
||||
{
|
||||
GetWindowRect(hStatusBar, &rs);
|
||||
cy = rs.bottom - rs.top;
|
||||
}
|
||||
|
@ -132,7 +133,8 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
UNREFERENCED_PARAMETER(message);
|
||||
|
||||
switch (wID) {
|
||||
switch (wID)
|
||||
{
|
||||
/* Parse the menu selections: */
|
||||
case ID_REGISTRY_EXIT:
|
||||
DestroyWindow(hWnd);
|
||||
|
@ -156,15 +158,15 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
if (keyPath == 0 || *keyPath == 0)
|
||||
{
|
||||
MessageBeep(MB_ICONHAND);
|
||||
} else
|
||||
if (DeleteKey(hWnd, hRootKey, keyPath))
|
||||
DeleteNode(g_pChildWnd->hTreeWnd, 0);
|
||||
MessageBeep(MB_ICONHAND);
|
||||
}
|
||||
else if (DeleteKey(hWnd, hRootKey, keyPath))
|
||||
DeleteNode(g_pChildWnd->hTreeWnd, 0);
|
||||
break;
|
||||
case ID_TREE_EXPORT:
|
||||
case ID_TREE_EXPORT:
|
||||
ExportRegistryFile(pChildWnd->hTreeWnd);
|
||||
break;
|
||||
case ID_EDIT_FIND:
|
||||
case ID_EDIT_FIND:
|
||||
FindDialog(hWnd);
|
||||
break;
|
||||
case ID_EDIT_COPYKEYNAME:
|
||||
|
@ -186,13 +188,13 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
break;
|
||||
default:
|
||||
if ((wID >= ID_TREE_SUGGESTION_MIN) && (wID <= ID_TREE_SUGGESTION_MAX))
|
||||
{
|
||||
{
|
||||
s = Suggestions;
|
||||
while(wID > ID_TREE_SUGGESTION_MIN)
|
||||
{
|
||||
if (*s)
|
||||
s += _tcslen(s) + 1;
|
||||
wID--;
|
||||
wID--;
|
||||
}
|
||||
SelectNode(pChildWnd->hTreeWnd, s);
|
||||
break;
|
||||
|
@ -210,95 +212,95 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
#define MIN(a,b) ((a < b) ? (a) : (b))
|
||||
|
||||
static void SuggestKeys(HKEY hRootKey, LPCTSTR pszKeyPath, LPTSTR pszSuggestions,
|
||||
size_t iSuggestionsLength)
|
||||
size_t iSuggestionsLength)
|
||||
{
|
||||
TCHAR szBuffer[256];
|
||||
TCHAR szLastFound[256];
|
||||
size_t i;
|
||||
HKEY hOtherKey, hSubKey;
|
||||
BOOL bFound;
|
||||
TCHAR szBuffer[256];
|
||||
TCHAR szLastFound[256];
|
||||
size_t i;
|
||||
HKEY hOtherKey, hSubKey;
|
||||
BOOL bFound;
|
||||
|
||||
memset(pszSuggestions, 0, iSuggestionsLength * sizeof(*pszSuggestions));
|
||||
iSuggestionsLength--;
|
||||
memset(pszSuggestions, 0, iSuggestionsLength * sizeof(*pszSuggestions));
|
||||
iSuggestionsLength--;
|
||||
|
||||
/* Are we a root key in HKEY_CLASSES_ROOT? */
|
||||
if ((hRootKey == HKEY_CLASSES_ROOT) && pszKeyPath[0] && !_tcschr(pszKeyPath, TEXT('\\')))
|
||||
{
|
||||
do
|
||||
{
|
||||
bFound = FALSE;
|
||||
/* Are we a root key in HKEY_CLASSES_ROOT? */
|
||||
if ((hRootKey == HKEY_CLASSES_ROOT) && pszKeyPath[0] && !_tcschr(pszKeyPath, TEXT('\\')))
|
||||
{
|
||||
do
|
||||
{
|
||||
bFound = FALSE;
|
||||
|
||||
/* Check default key */
|
||||
if (QueryStringValue(hRootKey, pszKeyPath, NULL,
|
||||
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
||||
{
|
||||
/* Sanity check this key; it cannot be empty, nor can it be a
|
||||
* loop back */
|
||||
if ((szBuffer[0] != '\0') && _tcsicmp(szBuffer, pszKeyPath))
|
||||
{
|
||||
if (RegOpenKey(hRootKey, szBuffer, &hOtherKey) == ERROR_SUCCESS)
|
||||
{
|
||||
lstrcpyn(pszSuggestions, TEXT("HKCR\\"), (int) iSuggestionsLength);
|
||||
i = _tcslen(pszSuggestions);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
/* Check default key */
|
||||
if (QueryStringValue(hRootKey, pszKeyPath, NULL,
|
||||
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
||||
{
|
||||
/* Sanity check this key; it cannot be empty, nor can it be a
|
||||
* loop back */
|
||||
if ((szBuffer[0] != '\0') && _tcsicmp(szBuffer, pszKeyPath))
|
||||
{
|
||||
if (RegOpenKey(hRootKey, szBuffer, &hOtherKey) == ERROR_SUCCESS)
|
||||
{
|
||||
lstrcpyn(pszSuggestions, TEXT("HKCR\\"), (int) iSuggestionsLength);
|
||||
i = _tcslen(pszSuggestions);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
|
||||
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
|
||||
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
RegCloseKey(hOtherKey);
|
||||
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
|
||||
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
RegCloseKey(hOtherKey);
|
||||
|
||||
bFound = TRUE;
|
||||
_tcscpy(szLastFound, szBuffer);
|
||||
pszKeyPath = szLastFound;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while(bFound && (iSuggestionsLength > 0));
|
||||
bFound = TRUE;
|
||||
_tcscpy(szLastFound, szBuffer);
|
||||
pszKeyPath = szLastFound;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while(bFound && (iSuggestionsLength > 0));
|
||||
|
||||
/* Check CLSID key */
|
||||
if (RegOpenKey(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
|
||||
{
|
||||
if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer,
|
||||
COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
||||
{
|
||||
lstrcpyn(pszSuggestions, TEXT("HKCR\\CLSID\\"), (int) iSuggestionsLength);
|
||||
i = _tcslen(pszSuggestions);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
/* Check CLSID key */
|
||||
if (RegOpenKey(hRootKey, pszKeyPath, &hSubKey) == ERROR_SUCCESS)
|
||||
{
|
||||
if (QueryStringValue(hSubKey, TEXT("CLSID"), NULL, szBuffer,
|
||||
COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
||||
{
|
||||
lstrcpyn(pszSuggestions, TEXT("HKCR\\CLSID\\"), (int) iSuggestionsLength);
|
||||
i = _tcslen(pszSuggestions);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
|
||||
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
|
||||
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
}
|
||||
RegCloseKey(hSubKey);
|
||||
}
|
||||
}
|
||||
lstrcpyn(pszSuggestions, szBuffer, (int) iSuggestionsLength);
|
||||
i = MIN(_tcslen(pszSuggestions) + 1, iSuggestionsLength);
|
||||
pszSuggestions += i;
|
||||
iSuggestionsLength -= i;
|
||||
}
|
||||
RegCloseKey(hSubKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
WNDPROC oldwndproc;
|
||||
static TCHAR s_szNode[256];
|
||||
static TCHAR s_szNode[256];
|
||||
oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWL_USERDATA);
|
||||
|
||||
switch (uMsg)
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_KEYUP:
|
||||
if (wParam == VK_RETURN)
|
||||
{
|
||||
GetWindowText(hwnd, s_szNode, sizeof(s_szNode) / sizeof(s_szNode[0]));
|
||||
SelectNode(g_pChildWnd->hTreeWnd, s_szNode);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam);
|
||||
case WM_KEYUP:
|
||||
if (wParam == VK_RETURN)
|
||||
{
|
||||
GetWindowText(hwnd, s_szNode, sizeof(s_szNode) / sizeof(s_szNode[0]));
|
||||
SelectNode(g_pChildWnd->hTreeWnd, s_szNode);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -317,10 +319,11 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
BOOL Result;
|
||||
ChildWnd* pChildWnd = g_pChildWnd;
|
||||
|
||||
switch (message) {
|
||||
switch (message)
|
||||
{
|
||||
case WM_CREATE:
|
||||
{
|
||||
WNDPROC oldproc;
|
||||
WNDPROC oldproc;
|
||||
HFONT hFont;
|
||||
TCHAR buffer[MAX_PATH];
|
||||
/* load "My Computer" string */
|
||||
|
@ -333,12 +336,12 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
pChildWnd->nSplitPos = 250;
|
||||
pChildWnd->hWnd = hWnd;
|
||||
pChildWnd->hAddressBarWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Edit"), NULL, WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
hWnd, (HMENU)0, hInst, 0);
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
hWnd, (HMENU)0, hInst, 0);
|
||||
pChildWnd->hAddressBtnWnd = CreateWindowEx(WS_EX_CLIENTEDGE, _T("Button"), _T("»"), WS_CHILD | WS_VISIBLE | WS_CHILDWINDOW | WS_TABSTOP | BS_DEFPUSHBUTTON,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
hWnd, (HMENU)0, hInst, 0);
|
||||
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
hWnd, (HMENU)0, hInst, 0);
|
||||
pChildWnd->hTreeWnd = CreateTreeView(hWnd, pChildWnd->szPath, (HMENU) TREE_WINDOW);
|
||||
pChildWnd->hListWnd = CreateListView(hWnd, (HMENU) LIST_WINDOW/*, pChildWnd->szPath*/);
|
||||
SetFocus(pChildWnd->hTreeWnd);
|
||||
|
||||
|
@ -355,17 +358,19 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
(WPARAM)hFont,
|
||||
0);
|
||||
}
|
||||
/* Subclass the AddressBar */
|
||||
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
|
||||
/* Subclass the AddressBar */
|
||||
oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC);
|
||||
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc);
|
||||
SetWindowLongPtr(pChildWnd->hAddressBarWnd, GWL_WNDPROC, (DWORD_PTR)AddressBarProc);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
case WM_COMMAND:
|
||||
if(HIWORD(wParam) == BN_CLICKED){
|
||||
if(HIWORD(wParam) == BN_CLICKED)
|
||||
{
|
||||
PostMessage(pChildWnd->hAddressBarWnd, WM_KEYUP, VK_RETURN, 0);
|
||||
}
|
||||
else if (!_CmdWndProc(hWnd, message, wParam, lParam)) {
|
||||
else if (!_CmdWndProc(hWnd, message, wParam, lParam))
|
||||
{
|
||||
goto def;
|
||||
}
|
||||
break;
|
||||
|
@ -373,39 +378,44 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
OnPaint(hWnd);
|
||||
return 0;
|
||||
case WM_SETCURSOR:
|
||||
if (LOWORD(lParam) == HTCLIENT) {
|
||||
if (LOWORD(lParam) == HTCLIENT)
|
||||
{
|
||||
POINT pt;
|
||||
GetCursorPos(&pt);
|
||||
ScreenToClient(hWnd, &pt);
|
||||
if (pt.x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && pt.x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) {
|
||||
if (pt.x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && pt.x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1)
|
||||
{
|
||||
SetCursor(LoadCursor(0, IDC_SIZEWE));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
goto def;
|
||||
case WM_DESTROY:
|
||||
DestroyTreeView();
|
||||
DestroyListView(pChildWnd->hListWnd);
|
||||
DestroyMainMenu();
|
||||
DestroyTreeView();
|
||||
DestroyListView(pChildWnd->hListWnd);
|
||||
DestroyMainMenu();
|
||||
HeapFree(GetProcessHeap(), 0, pChildWnd);
|
||||
pChildWnd = NULL;
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
case WM_LBUTTONDOWN: {
|
||||
RECT rt;
|
||||
int x = (short)LOWORD(lParam);
|
||||
GetClientRect(hWnd, &rt);
|
||||
if (x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1) {
|
||||
last_split = pChildWnd->nSplitPos;
|
||||
draw_splitbar(hWnd, last_split);
|
||||
SetCapture(hWnd);
|
||||
}
|
||||
break;
|
||||
case WM_LBUTTONDOWN:
|
||||
{
|
||||
RECT rt;
|
||||
int x = (short)LOWORD(lParam);
|
||||
GetClientRect(hWnd, &rt);
|
||||
if (x>=pChildWnd->nSplitPos-SPLIT_WIDTH/2 && x<pChildWnd->nSplitPos+SPLIT_WIDTH/2+1)
|
||||
{
|
||||
last_split = pChildWnd->nSplitPos;
|
||||
draw_splitbar(hWnd, last_split);
|
||||
SetCapture(hWnd);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_LBUTTONUP:
|
||||
case WM_RBUTTONDOWN:
|
||||
if (GetCapture() == hWnd) {
|
||||
if (GetCapture() == hWnd)
|
||||
{
|
||||
finish_splitbar(hWnd, LOWORD(lParam));
|
||||
}
|
||||
break;
|
||||
|
@ -417,7 +427,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
|
||||
case WM_KEYDOWN:
|
||||
if (wParam == VK_ESCAPE)
|
||||
if (GetCapture() == hWnd) {
|
||||
if (GetCapture() == hWnd)
|
||||
{
|
||||
RECT rt;
|
||||
draw_splitbar(hWnd, last_split);
|
||||
GetClientRect(hWnd, &rt);
|
||||
|
@ -429,42 +440,44 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
break;
|
||||
|
||||
case WM_MOUSEMOVE:
|
||||
if (GetCapture() == hWnd) {
|
||||
if (GetCapture() == hWnd)
|
||||
{
|
||||
HDC hdc;
|
||||
RECT rt;
|
||||
HGDIOBJ OldObj;
|
||||
int x = LOWORD(lParam);
|
||||
if(!SizingPattern)
|
||||
{
|
||||
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
|
||||
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
|
||||
const DWORD Pattern[4] = {0x5555AAAA, 0x5555AAAA, 0x5555AAAA, 0x5555AAAA};
|
||||
SizingPattern = CreateBitmap(8, 8, 1, 1, Pattern);
|
||||
}
|
||||
if(!SizingBrush)
|
||||
{
|
||||
SizingBrush = CreatePatternBrush(SizingPattern);
|
||||
SizingBrush = CreatePatternBrush(SizingPattern);
|
||||
}
|
||||
|
||||
GetClientRect(hWnd, &rt);
|
||||
x = (SHORT) min(max(x, SPLIT_MIN), rt.right - SPLIT_MIN);
|
||||
if(last_split != x)
|
||||
{
|
||||
rt.left = last_split-SPLIT_WIDTH/2;
|
||||
rt.right = last_split+SPLIT_WIDTH/2+1;
|
||||
hdc = GetDC(hWnd);
|
||||
OldObj = SelectObject(hdc, SizingBrush);
|
||||
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
|
||||
last_split = x;
|
||||
rt.left = x-SPLIT_WIDTH/2;
|
||||
rt.right = x+SPLIT_WIDTH/2+1;
|
||||
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
|
||||
SelectObject(hdc, OldObj);
|
||||
ReleaseDC(hWnd, hdc);
|
||||
rt.left = last_split-SPLIT_WIDTH/2;
|
||||
rt.right = last_split+SPLIT_WIDTH/2+1;
|
||||
hdc = GetDC(hWnd);
|
||||
OldObj = SelectObject(hdc, SizingBrush);
|
||||
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
|
||||
last_split = x;
|
||||
rt.left = x-SPLIT_WIDTH/2;
|
||||
rt.right = x+SPLIT_WIDTH/2+1;
|
||||
PatBlt(hdc, rt.left, rt.top, rt.right - rt.left, rt.bottom - rt.top, PATINVERT);
|
||||
SelectObject(hdc, OldObj);
|
||||
ReleaseDC(hWnd, hdc);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_SETFOCUS:
|
||||
if (pChildWnd != NULL) {
|
||||
if (pChildWnd != NULL)
|
||||
{
|
||||
SetFocus(pChildWnd->nFocusPanel? pChildWnd->hListWnd: pChildWnd->hTreeWnd);
|
||||
}
|
||||
break;
|
||||
|
@ -473,283 +486,292 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
break;
|
||||
|
||||
case WM_NOTIFY:
|
||||
if ((int)wParam == TREE_WINDOW) {
|
||||
switch (((LPNMHDR)lParam)->code) {
|
||||
if ((int)wParam == TREE_WINDOW)
|
||||
{
|
||||
switch (((LPNMHDR)lParam)->code)
|
||||
{
|
||||
case TVN_ITEMEXPANDING:
|
||||
return !OnTreeExpanding(pChildWnd->hTreeWnd, (NMTREEVIEW*)lParam);
|
||||
case TVN_SELCHANGED: {
|
||||
LPCTSTR keyPath, rootName;
|
||||
LPTSTR fullPath;
|
||||
HKEY hRootKey;
|
||||
case TVN_SELCHANGED:
|
||||
{
|
||||
LPCTSTR keyPath, rootName;
|
||||
LPTSTR fullPath;
|
||||
HKEY hRootKey;
|
||||
|
||||
keyPath = GetItemPath(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, &hRootKey);
|
||||
if (keyPath) {
|
||||
RefreshListView(pChildWnd->hListWnd, hRootKey, keyPath);
|
||||
rootName = get_root_key_name(hRootKey);
|
||||
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
|
||||
if (fullPath) {
|
||||
/* set (correct) the address bar text */
|
||||
if(keyPath[0] != '\0')
|
||||
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
|
||||
else
|
||||
fullPath = _tcscpy(fullPath, rootName);
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
|
||||
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
|
||||
HeapFree(GetProcessHeap(), 0, fullPath);
|
||||
/* disable hive manipulation items temporarily (enable only if necessary) */
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||
/* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
|
||||
if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
|
||||
_tcsicmp(rootName, TEXT("HKEY_USERS"))))
|
||||
keyPath = GetItemPath(pChildWnd->hTreeWnd, ((NMTREEVIEW*)lParam)->itemNew.hItem, &hRootKey);
|
||||
if (keyPath)
|
||||
{
|
||||
// enable the unload menu item if at the root
|
||||
// otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
|
||||
if(keyPath[0] == '\0')
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||
else if(!_tcschr(keyPath, _T('\\')))
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||
}
|
||||
RefreshListView(pChildWnd->hListWnd, hRootKey, keyPath);
|
||||
rootName = get_root_key_name(hRootKey);
|
||||
fullPath = HeapAlloc(GetProcessHeap(), 0, (_tcslen(rootName) + 1 + _tcslen(keyPath) + 1) * sizeof(TCHAR));
|
||||
if (fullPath)
|
||||
{
|
||||
/* set (correct) the address bar text */
|
||||
if(keyPath[0] != '\0')
|
||||
_stprintf(fullPath, _T("%s\\%s"), rootName, keyPath);
|
||||
else
|
||||
fullPath = _tcscpy(fullPath, rootName);
|
||||
SendMessage(hStatusBar, SB_SETTEXT, 0, (LPARAM)fullPath);
|
||||
SendMessage(pChildWnd->hAddressBarWnd, WM_SETTEXT, 0, (LPARAM)fullPath);
|
||||
HeapFree(GetProcessHeap(), 0, fullPath);
|
||||
/* disable hive manipulation items temporarily (enable only if necessary) */
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED);
|
||||
/* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */
|
||||
if (!(_tcsicmp(rootName, TEXT("HKEY_LOCAL_MACHINE")) &&
|
||||
_tcsicmp(rootName, TEXT("HKEY_USERS"))))
|
||||
{
|
||||
// enable the unload menu item if at the root
|
||||
// otherwise enable the load menu item if there is no slash in keyPath (ie. immediate child selected)
|
||||
if(keyPath[0] == '\0')
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||
else if(!_tcschr(keyPath, _T('\\')))
|
||||
EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_ENABLED);
|
||||
}
|
||||
|
||||
{
|
||||
HKEY hKey;
|
||||
TCHAR szBuffer[MAX_PATH];
|
||||
_sntprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), _T("My Computer\\%s\\%s"), rootName, keyPath);
|
||||
{
|
||||
HKEY hKey;
|
||||
TCHAR szBuffer[MAX_PATH];
|
||||
_sntprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), _T("My Computer\\%s\\%s"), rootName, keyPath);
|
||||
|
||||
if (RegCreateKey(HKEY_CURRENT_USER,
|
||||
g_szGeneralRegKey,
|
||||
&hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
RegSetValueEx(hKey, _T("LastKey"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) _tcslen(szBuffer) * sizeof(szBuffer[0]));
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (RegCreateKey(HKEY_CURRENT_USER,
|
||||
g_szGeneralRegKey,
|
||||
&hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
RegSetValueEx(hKey, _T("LastKey"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) _tcslen(szBuffer) * sizeof(szBuffer[0]));
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NM_SETFOCUS:
|
||||
pChildWnd->nFocusPanel = 0;
|
||||
break;
|
||||
case NM_SETFOCUS:
|
||||
pChildWnd->nFocusPanel = 0;
|
||||
break;
|
||||
case TVN_BEGINLABELEDIT:
|
||||
{
|
||||
LPNMTVDISPINFO ptvdi;
|
||||
/* cancel label edit for rootkeys */
|
||||
ptvdi = (LPNMTVDISPINFO) lParam;
|
||||
LPNMTVDISPINFO ptvdi;
|
||||
/* cancel label edit for rootkeys */
|
||||
ptvdi = (LPNMTVDISPINFO) lParam;
|
||||
if (!TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem) ||
|
||||
!TreeView_GetParent(pChildWnd->hTreeWnd, TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem)))
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
!TreeView_GetParent(pChildWnd->hTreeWnd, TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem)))
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
case TVN_ENDLABELEDIT:
|
||||
{
|
||||
LPCTSTR keyPath;
|
||||
HKEY hRootKey;
|
||||
HKEY hKey = NULL;
|
||||
LPNMTVDISPINFO ptvdi;
|
||||
LONG lResult = TRUE;
|
||||
TCHAR szBuffer[MAX_PATH];
|
||||
{
|
||||
LPCTSTR keyPath;
|
||||
HKEY hRootKey;
|
||||
HKEY hKey = NULL;
|
||||
LPNMTVDISPINFO ptvdi;
|
||||
LONG lResult = TRUE;
|
||||
TCHAR szBuffer[MAX_PATH];
|
||||
|
||||
ptvdi = (LPNMTVDISPINFO) lParam;
|
||||
if (ptvdi->item.pszText)
|
||||
{
|
||||
ptvdi = (LPNMTVDISPINFO) lParam;
|
||||
if (ptvdi->item.pszText)
|
||||
{
|
||||
keyPath = GetItemPath(pChildWnd->hTreeWnd, TreeView_GetParent(pChildWnd->hTreeWnd, ptvdi->item.hItem), &hRootKey);
|
||||
_sntprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), _T("%s\\%s"), keyPath, ptvdi->item.pszText);
|
||||
keyPath = GetItemPath(pChildWnd->hTreeWnd, ptvdi->item.hItem, &hRootKey);
|
||||
if (RegOpenKeyEx(hRootKey, szBuffer, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
lResult = FALSE;
|
||||
RegCloseKey(hKey);
|
||||
(void)TreeView_EditLabel(pChildWnd->hTreeWnd, ptvdi->item.hItem);
|
||||
lResult = FALSE;
|
||||
RegCloseKey(hKey);
|
||||
(void)TreeView_EditLabel(pChildWnd->hTreeWnd, ptvdi->item.hItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RenameKey(hRootKey, keyPath, ptvdi->item.pszText) != ERROR_SUCCESS)
|
||||
lResult = FALSE;
|
||||
if (RenameKey(hRootKey, keyPath, ptvdi->item.pszText) != ERROR_SUCCESS)
|
||||
lResult = FALSE;
|
||||
}
|
||||
return lResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((int)wParam == LIST_WINDOW)
|
||||
{
|
||||
switch (((LPNMHDR)lParam)->code) {
|
||||
case NM_SETFOCUS:
|
||||
pChildWnd->nFocusPanel = 1;
|
||||
break;
|
||||
default:
|
||||
if(!ListWndNotifyProc(pChildWnd->hListWnd, wParam, lParam, &Result))
|
||||
{
|
||||
goto def;
|
||||
}
|
||||
return Result;
|
||||
break;
|
||||
}
|
||||
switch (((LPNMHDR)lParam)->code)
|
||||
{
|
||||
case NM_SETFOCUS:
|
||||
pChildWnd->nFocusPanel = 1;
|
||||
break;
|
||||
default:
|
||||
if(!ListWndNotifyProc(pChildWnd->hListWnd, wParam, lParam, &Result))
|
||||
{
|
||||
goto def;
|
||||
}
|
||||
return Result;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CONTEXTMENU:
|
||||
{
|
||||
POINT pt;
|
||||
if((HWND)wParam == pChildWnd->hListWnd)
|
||||
{
|
||||
int i, cnt;
|
||||
BOOL IsDefault;
|
||||
pt.x = (short) LOWORD(lParam);
|
||||
pt.y = (short) HIWORD(lParam);
|
||||
cnt = ListView_GetSelectedCount(pChildWnd->hListWnd);
|
||||
i = ListView_GetNextItem(pChildWnd->hListWnd, -1, LVNI_FOCUSED | LVNI_SELECTED);
|
||||
if (pt.x == -1 && pt.y == -1)
|
||||
POINT pt;
|
||||
if((HWND)wParam == pChildWnd->hListWnd)
|
||||
{
|
||||
RECT rc;
|
||||
if (i != -1)
|
||||
int i, cnt;
|
||||
BOOL IsDefault;
|
||||
pt.x = (short) LOWORD(lParam);
|
||||
pt.y = (short) HIWORD(lParam);
|
||||
cnt = ListView_GetSelectedCount(pChildWnd->hListWnd);
|
||||
i = ListView_GetNextItem(pChildWnd->hListWnd, -1, LVNI_FOCUSED | LVNI_SELECTED);
|
||||
if (pt.x == -1 && pt.y == -1)
|
||||
{
|
||||
rc.left = LVIR_BOUNDS;
|
||||
SendMessage(pChildWnd->hListWnd, LVM_GETITEMRECT, i, (LPARAM) &rc);
|
||||
pt.x = rc.left + 8;
|
||||
pt.y = rc.top + 8;
|
||||
RECT rc;
|
||||
if (i != -1)
|
||||
{
|
||||
rc.left = LVIR_BOUNDS;
|
||||
SendMessage(pChildWnd->hListWnd, LVM_GETITEMRECT, i, (LPARAM) &rc);
|
||||
pt.x = rc.left + 8;
|
||||
pt.y = rc.top + 8;
|
||||
}
|
||||
else
|
||||
pt.x = pt.y = 0;
|
||||
ClientToScreen(pChildWnd->hListWnd, &pt);
|
||||
}
|
||||
if(i == -1)
|
||||
{
|
||||
TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
|
||||
}
|
||||
else
|
||||
pt.x = pt.y = 0;
|
||||
ClientToScreen(pChildWnd->hListWnd, &pt);
|
||||
}
|
||||
if(i == -1)
|
||||
{
|
||||
TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
HMENU mnu = GetSubMenu(hPopupMenus, PM_MODIFYVALUE);
|
||||
SetMenuDefaultItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND);
|
||||
IsDefault = IsDefaultValue(pChildWnd->hListWnd, i);
|
||||
if(cnt == 1)
|
||||
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | (IsDefault ? MF_DISABLED | MF_GRAYED : MF_ENABLED));
|
||||
else
|
||||
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
||||
EnableMenuItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
|
||||
EnableMenuItem(mnu, ID_EDIT_MODIFY_BIN, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
|
||||
|
||||
TrackPopupMenu(mnu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
|
||||
}
|
||||
}
|
||||
else if ((HWND)wParam == pChildWnd->hTreeWnd)
|
||||
{
|
||||
TVHITTESTINFO hti;
|
||||
HMENU hContextMenu;
|
||||
TVITEM item;
|
||||
MENUITEMINFO mii;
|
||||
TCHAR resource[256];
|
||||
TCHAR buffer[256];
|
||||
LPTSTR s;
|
||||
LPCTSTR keyPath;
|
||||
HKEY hRootKey;
|
||||
int iLastPos;
|
||||
WORD wID;
|
||||
|
||||
pt.x = (short) LOWORD(lParam);
|
||||
pt.y = (short) HIWORD(lParam);
|
||||
|
||||
if (pt.x == -1 && pt.y == -1)
|
||||
{
|
||||
RECT rc;
|
||||
hti.hItem = TreeView_GetSelection(pChildWnd->hTreeWnd);
|
||||
if (hti.hItem != NULL)
|
||||
{
|
||||
TreeView_GetItemRect(pChildWnd->hTreeWnd, hti.hItem, &rc, TRUE);
|
||||
pt.x = rc.left + 8;
|
||||
pt.y = rc.top + 8;
|
||||
ClientToScreen(pChildWnd->hTreeWnd, &pt);
|
||||
hti.flags = TVHT_ONITEM;
|
||||
HMENU mnu = GetSubMenu(hPopupMenus, PM_MODIFYVALUE);
|
||||
SetMenuDefaultItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND);
|
||||
IsDefault = IsDefaultValue(pChildWnd->hListWnd, i);
|
||||
if(cnt == 1)
|
||||
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | (IsDefault ? MF_DISABLED | MF_GRAYED : MF_ENABLED));
|
||||
else
|
||||
EnableMenuItem(mnu, ID_EDIT_RENAME, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
|
||||
EnableMenuItem(mnu, ID_EDIT_MODIFY, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
|
||||
EnableMenuItem(mnu, ID_EDIT_MODIFY_BIN, MF_BYCOMMAND | (cnt == 1 ? MF_ENABLED : MF_DISABLED | MF_GRAYED));
|
||||
|
||||
TrackPopupMenu(mnu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);
|
||||
}
|
||||
}
|
||||
else if ((HWND)wParam == pChildWnd->hTreeWnd)
|
||||
{
|
||||
TVHITTESTINFO hti;
|
||||
HMENU hContextMenu;
|
||||
TVITEM item;
|
||||
MENUITEMINFO mii;
|
||||
TCHAR resource[256];
|
||||
TCHAR buffer[256];
|
||||
LPTSTR s;
|
||||
LPCTSTR keyPath;
|
||||
HKEY hRootKey;
|
||||
int iLastPos;
|
||||
WORD wID;
|
||||
|
||||
pt.x = (short) LOWORD(lParam);
|
||||
pt.y = (short) HIWORD(lParam);
|
||||
|
||||
if (pt.x == -1 && pt.y == -1)
|
||||
{
|
||||
RECT rc;
|
||||
hti.hItem = TreeView_GetSelection(pChildWnd->hTreeWnd);
|
||||
if (hti.hItem != NULL)
|
||||
{
|
||||
TreeView_GetItemRect(pChildWnd->hTreeWnd, hti.hItem, &rc, TRUE);
|
||||
pt.x = rc.left + 8;
|
||||
pt.y = rc.top + 8;
|
||||
ClientToScreen(pChildWnd->hTreeWnd, &pt);
|
||||
hti.flags = TVHT_ONITEM;
|
||||
}
|
||||
else
|
||||
hti.flags = 0;
|
||||
}
|
||||
else
|
||||
hti.flags = 0;
|
||||
{
|
||||
hti.pt.x = pt.x;
|
||||
hti.pt.y = pt.y;
|
||||
ScreenToClient(pChildWnd->hTreeWnd, &hti.pt);
|
||||
(void)TreeView_HitTest(pChildWnd->hTreeWnd, &hti);
|
||||
}
|
||||
|
||||
if (hti.flags & TVHT_ONITEM)
|
||||
{
|
||||
hContextMenu = GetSubMenu(hPopupMenus, PM_TREECONTEXT);
|
||||
(void)TreeView_SelectItem(pChildWnd->hTreeWnd, hti.hItem);
|
||||
|
||||
memset(&item, 0, sizeof(item));
|
||||
item.mask = TVIF_STATE | TVIF_CHILDREN;
|
||||
item.hItem = hti.hItem;
|
||||
(void)TreeView_GetItem(pChildWnd->hTreeWnd, &item);
|
||||
|
||||
/* Set the Expand/Collapse menu item appropriately */
|
||||
LoadString(hInst, (item.state & TVIS_EXPANDED) ? IDS_COLLAPSE : IDS_EXPAND, buffer, sizeof(buffer) / sizeof(buffer[0]));
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_STRING | MIIM_STATE | MIIM_ID;
|
||||
mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
|
||||
mii.wID = (item.state & TVIS_EXPANDED) ? ID_TREE_COLLAPSEBRANCH : ID_TREE_EXPANDBRANCH;
|
||||
mii.dwTypeData = (LPTSTR) buffer;
|
||||
SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
|
||||
|
||||
/* Remove any existing suggestions */
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID;
|
||||
GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
|
||||
if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
|
||||
{
|
||||
do
|
||||
{
|
||||
iLastPos = GetMenuItemCount(hContextMenu) - 1;
|
||||
GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
|
||||
RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
|
||||
}
|
||||
while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
|
||||
}
|
||||
|
||||
/* Come up with suggestions */
|
||||
keyPath = GetItemPath(pChildWnd->hTreeWnd, NULL, &hRootKey);
|
||||
SuggestKeys(hRootKey, keyPath, Suggestions, sizeof(Suggestions) / sizeof(Suggestions[0]));
|
||||
if (Suggestions[0])
|
||||
{
|
||||
AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
|
||||
|
||||
LoadString(hInst, IDS_GOTO_SUGGESTED_KEY, resource, sizeof(resource) / sizeof(resource[0]));
|
||||
|
||||
s = Suggestions;
|
||||
wID = ID_TREE_SUGGESTION_MIN;
|
||||
while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
|
||||
{
|
||||
_sntprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), resource, s);
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_STRING | MIIM_ID;
|
||||
mii.wID = wID++;
|
||||
mii.dwTypeData = buffer;
|
||||
InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
|
||||
|
||||
s += _tcslen(s) + 1;
|
||||
}
|
||||
}
|
||||
TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, pChildWnd->hWnd, NULL);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hti.pt.x = pt.x;
|
||||
hti.pt.y = pt.y;
|
||||
ScreenToClient(pChildWnd->hTreeWnd, &hti.pt);
|
||||
(void)TreeView_HitTest(pChildWnd->hTreeWnd, &hti);
|
||||
}
|
||||
|
||||
if (hti.flags & TVHT_ONITEM)
|
||||
{
|
||||
hContextMenu = GetSubMenu(hPopupMenus, PM_TREECONTEXT);
|
||||
(void)TreeView_SelectItem(pChildWnd->hTreeWnd, hti.hItem);
|
||||
|
||||
memset(&item, 0, sizeof(item));
|
||||
item.mask = TVIF_STATE | TVIF_CHILDREN;
|
||||
item.hItem = hti.hItem;
|
||||
(void)TreeView_GetItem(pChildWnd->hTreeWnd, &item);
|
||||
|
||||
/* Set the Expand/Collapse menu item appropriately */
|
||||
LoadString(hInst, (item.state & TVIS_EXPANDED) ? IDS_COLLAPSE : IDS_EXPAND, buffer, sizeof(buffer) / sizeof(buffer[0]));
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_STRING | MIIM_STATE | MIIM_ID;
|
||||
mii.fState = (item.cChildren > 0) ? MFS_DEFAULT : MFS_GRAYED;
|
||||
mii.wID = (item.state & TVIS_EXPANDED) ? ID_TREE_COLLAPSEBRANCH : ID_TREE_EXPANDBRANCH;
|
||||
mii.dwTypeData = (LPTSTR) buffer;
|
||||
SetMenuItemInfo(hContextMenu, 0, TRUE, &mii);
|
||||
|
||||
/* Remove any existing suggestions */
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID;
|
||||
GetMenuItemInfo(hContextMenu, GetMenuItemCount(hContextMenu) - 1, TRUE, &mii);
|
||||
if ((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX))
|
||||
{
|
||||
do
|
||||
{
|
||||
iLastPos = GetMenuItemCount(hContextMenu) - 1;
|
||||
GetMenuItemInfo(hContextMenu, iLastPos, TRUE, &mii);
|
||||
RemoveMenu(hContextMenu, iLastPos, MF_BYPOSITION);
|
||||
}
|
||||
while((mii.wID >= ID_TREE_SUGGESTION_MIN) && (mii.wID <= ID_TREE_SUGGESTION_MAX));
|
||||
}
|
||||
|
||||
/* Come up with suggestions */
|
||||
keyPath = GetItemPath(pChildWnd->hTreeWnd, NULL, &hRootKey);
|
||||
SuggestKeys(hRootKey, keyPath, Suggestions, sizeof(Suggestions) / sizeof(Suggestions[0]));
|
||||
if (Suggestions[0])
|
||||
{
|
||||
AppendMenu(hContextMenu, MF_SEPARATOR, 0, NULL);
|
||||
|
||||
LoadString(hInst, IDS_GOTO_SUGGESTED_KEY, resource, sizeof(resource) / sizeof(resource[0]));
|
||||
|
||||
s = Suggestions;
|
||||
wID = ID_TREE_SUGGESTION_MIN;
|
||||
while(*s && (wID <= ID_TREE_SUGGESTION_MAX))
|
||||
{
|
||||
_sntprintf(buffer, sizeof(buffer) / sizeof(buffer[0]), resource, s);
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_STRING | MIIM_ID;
|
||||
mii.wID = wID++;
|
||||
mii.dwTypeData = buffer;
|
||||
InsertMenuItem(hContextMenu, GetMenuItemCount(hContextMenu), TRUE, &mii);
|
||||
|
||||
s += _tcslen(s) + 1;
|
||||
}
|
||||
}
|
||||
TrackPopupMenu(hContextMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, pChildWnd->hWnd, NULL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_SIZE:
|
||||
if (wParam != SIZE_MINIMIZED && pChildWnd != NULL) {
|
||||
if (wParam != SIZE_MINIMIZED && pChildWnd != NULL)
|
||||
{
|
||||
ResizeWnd(pChildWnd, LOWORD(lParam), HIWORD(lParam));
|
||||
}
|
||||
/* fall through */
|
||||
default: def:
|
||||
default:
|
||||
def:
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -123,41 +123,41 @@ ClbWndProc(IN HWND hwnd,
|
|||
LRESULT Ret = 0;
|
||||
|
||||
DPRINT1("ClbWndProc(0x%p, 0x%x, 0x%p, 0x%p)\n", hwnd, uMsg, wParam, lParam);
|
||||
|
||||
|
||||
PrivData = (PCLB_PRIVATEDATA)GetWindowLongPtr(hwnd,
|
||||
0);
|
||||
0);
|
||||
if (PrivData == NULL && uMsg != WM_CREATE)
|
||||
{
|
||||
goto HandleDefMsg;
|
||||
}
|
||||
|
||||
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
PrivData = HeapAlloc(GetProcessHeap(),
|
||||
0,
|
||||
sizeof(CLB_PRIVATEDATA));
|
||||
if (PrivData == NULL)
|
||||
{
|
||||
Ret = (LRESULT)-1;
|
||||
break;
|
||||
}
|
||||
PrivData->hwnd = hwnd;
|
||||
case WM_CREATE:
|
||||
PrivData = HeapAlloc(GetProcessHeap(),
|
||||
0,
|
||||
sizeof(CLB_PRIVATEDATA));
|
||||
if (PrivData == NULL)
|
||||
{
|
||||
Ret = (LRESULT)-1;
|
||||
break;
|
||||
}
|
||||
PrivData->hwnd = hwnd;
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
HeapFree(GetProcessHeap(),
|
||||
0,
|
||||
PrivData);
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
HeapFree(GetProcessHeap(),
|
||||
0,
|
||||
PrivData);
|
||||
break;
|
||||
|
||||
default:
|
||||
default:
|
||||
HandleDefMsg:
|
||||
Ret = DefWindowProc(hwnd,
|
||||
uMsg,
|
||||
wParam,
|
||||
lParam);
|
||||
break;
|
||||
Ret = DefWindowProc(hwnd,
|
||||
uMsg,
|
||||
wParam,
|
||||
lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
return Ret;
|
||||
|
@ -171,32 +171,32 @@ ClbpStyleDlgProc(IN HWND hwndDlg,
|
|||
IN LPARAM lParam)
|
||||
{
|
||||
INT_PTR Ret = FALSE;
|
||||
|
||||
|
||||
DPRINT1("ClbpStyleDlgProc(0x%p, 0x%x, 0x%p, 0x%p)\n", hwndDlg, uMsg, wParam, lParam);
|
||||
|
||||
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
case IDCANCEL:
|
||||
EndDialog(hwndDlg,
|
||||
(INT_PTR)LOWORD(wParam));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CLOSE:
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
case IDCANCEL:
|
||||
EndDialog(hwndDlg,
|
||||
IDCANCEL);
|
||||
(INT_PTR)LOWORD(wParam));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_INITDIALOG:
|
||||
Ret = TRUE;
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
EndDialog(hwndDlg,
|
||||
IDCANCEL);
|
||||
break;
|
||||
|
||||
case WM_INITDIALOG:
|
||||
Ret = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return Ret;
|
||||
}
|
||||
|
||||
|
@ -230,7 +230,7 @@ CustomControlInfoW(OUT LPCUSTOM_CONTROL_INFO CustomControlInfo OPTIONAL)
|
|||
ClbClassName);
|
||||
|
||||
CustomControlInfo->Zero1 = 0;
|
||||
|
||||
|
||||
wcscpy(CustomControlInfo->ClassName2,
|
||||
ClbClassName);
|
||||
|
||||
|
@ -240,15 +240,15 @@ CustomControlInfoW(OUT LPCUSTOM_CONTROL_INFO CustomControlInfo OPTIONAL)
|
|||
|
||||
CustomControlInfo->Zero2 = 0;
|
||||
CustomControlInfo->Zero3 = 0;
|
||||
|
||||
|
||||
CustomControlInfo->StylesCount = sizeof(ClbsSupportedStyles) / sizeof(ClbsSupportedStyles[0]);
|
||||
CustomControlInfo->SupportedStyles = ClbsSupportedStyles;
|
||||
|
||||
|
||||
wcscpy(CustomControlInfo->Columns,
|
||||
ClbColumns);
|
||||
|
||||
CustomControlInfo->ClbStyleW = ClbStyleW;
|
||||
|
||||
|
||||
CustomControlInfo->Zero4 = 0;
|
||||
CustomControlInfo->Zero5 = 0;
|
||||
CustomControlInfo->Zero6 = 0;
|
||||
|
@ -267,43 +267,43 @@ DllMain(IN HINSTANCE hinstDLL,
|
|||
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
{
|
||||
WNDCLASS ClbWndClass;
|
||||
case DLL_PROCESS_ATTACH:
|
||||
{
|
||||
WNDCLASS ClbWndClass;
|
||||
|
||||
hDllInstance = hinstDLL;
|
||||
|
||||
InitCommonControls();
|
||||
|
||||
/* register the control's window class */
|
||||
ClbWndClass.style = CS_GLOBALCLASS | CS_OWNDC;
|
||||
ClbWndClass.lpfnWndProc = ClbWndProc;
|
||||
ClbWndClass.cbClsExtra = 0;
|
||||
ClbWndClass.cbWndExtra = sizeof(PCLB_PRIVATEDATA);
|
||||
ClbWndClass.hInstance = hinstDLL,
|
||||
ClbWndClass.hIcon = NULL;
|
||||
ClbWndClass.hCursor = LoadCursor(NULL,
|
||||
(LPWSTR)IDC_ARROW);
|
||||
ClbWndClass.hbrBackground = NULL;
|
||||
ClbWndClass.lpszMenuName = NULL;
|
||||
ClbWndClass.lpszClassName = ClbClassName;
|
||||
|
||||
if (!RegisterClass(&ClbWndClass))
|
||||
{
|
||||
Ret = FALSE;
|
||||
break;
|
||||
}
|
||||
hDllInstance = hinstDLL;
|
||||
|
||||
InitCommonControls();
|
||||
|
||||
/* register the control's window class */
|
||||
ClbWndClass.style = CS_GLOBALCLASS | CS_OWNDC;
|
||||
ClbWndClass.lpfnWndProc = ClbWndProc;
|
||||
ClbWndClass.cbClsExtra = 0;
|
||||
ClbWndClass.cbWndExtra = sizeof(PCLB_PRIVATEDATA);
|
||||
ClbWndClass.hInstance = hinstDLL,
|
||||
ClbWndClass.hIcon = NULL;
|
||||
ClbWndClass.hCursor = LoadCursor(NULL,
|
||||
(LPWSTR)IDC_ARROW);
|
||||
ClbWndClass.hbrBackground = NULL;
|
||||
ClbWndClass.lpszMenuName = NULL;
|
||||
ClbWndClass.lpszClassName = ClbClassName;
|
||||
|
||||
if (!RegisterClass(&ClbWndClass))
|
||||
{
|
||||
Ret = FALSE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case DLL_THREAD_ATTACH:
|
||||
case DLL_THREAD_DETACH:
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
case DLL_THREAD_DETACH:
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
UnregisterClass(ClbClassName,
|
||||
hinstDLL);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
UnregisterClass(ClbClassName,
|
||||
hinstDLL);
|
||||
break;
|
||||
}
|
||||
return Ret;
|
||||
}
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
|
||||
typedef enum _EDIT_MODE
|
||||
{
|
||||
EDIT_MODE_DEC,
|
||||
EDIT_MODE_HEX
|
||||
EDIT_MODE_DEC,
|
||||
EDIT_MODE_HEX
|
||||
} EDIT_MODE;
|
||||
|
||||
|
||||
|
@ -96,17 +96,18 @@ INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
|
|||
|
||||
UNREFERENCED_PARAMETER(lParam);
|
||||
|
||||
switch(uMsg) {
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
if(editValueName && _tcscmp(editValueName, _T("")))
|
||||
{
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
|
||||
}
|
||||
else
|
||||
{
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
}
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData);
|
||||
SetFocus(GetDlgItem(hwndDlg, IDC_VALUE_DATA));
|
||||
|
@ -140,8 +141,8 @@ INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
|
|||
}
|
||||
else
|
||||
{
|
||||
if (stringValueData)
|
||||
*stringValueData = 0;
|
||||
if (stringValueData)
|
||||
*stringValueData = 0;
|
||||
}
|
||||
}
|
||||
EndDialog(hwndDlg, IDOK);
|
||||
|
@ -163,17 +164,18 @@ INT_PTR CALLBACK modify_multi_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wPa
|
|||
|
||||
UNREFERENCED_PARAMETER(lParam);
|
||||
|
||||
switch(uMsg) {
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
if(editValueName && _tcscmp(editValueName, _T("")))
|
||||
{
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
|
||||
}
|
||||
else
|
||||
{
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
}
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_DATA, stringValueData);
|
||||
SetFocus(GetDlgItem(hwndDlg, IDC_VALUE_DATA));
|
||||
|
@ -207,8 +209,8 @@ INT_PTR CALLBACK modify_multi_string_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wPa
|
|||
}
|
||||
else
|
||||
{
|
||||
if (stringValueData)
|
||||
*stringValueData = 0;
|
||||
if (stringValueData)
|
||||
*stringValueData = 0;
|
||||
}
|
||||
}
|
||||
EndDialog(hwndDlg, IDOK);
|
||||
|
@ -274,7 +276,8 @@ INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP
|
|||
|
||||
UNREFERENCED_PARAMETER(lParam);
|
||||
|
||||
switch(uMsg) {
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
dwordEditMode = EDIT_MODE_HEX;
|
||||
|
||||
|
@ -290,9 +293,9 @@ INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP
|
|||
}
|
||||
else
|
||||
{
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
}
|
||||
CheckRadioButton (hwndDlg, IDC_FORMAT_HEX, IDC_FORMAT_DEC, IDC_FORMAT_HEX);
|
||||
_stprintf (ValueString, _T("%lx"), dwordValueData);
|
||||
|
@ -359,8 +362,8 @@ INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP
|
|||
}
|
||||
else
|
||||
{
|
||||
EndDialog(hwndDlg, IDCANCEL);
|
||||
return TRUE;
|
||||
EndDialog(hwndDlg, IDCANCEL);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
EndDialog(hwndDlg, IDOK);
|
||||
|
@ -382,17 +385,18 @@ INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
|
|||
|
||||
UNREFERENCED_PARAMETER(lParam);
|
||||
|
||||
switch(uMsg) {
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
if(editValueName && _tcscmp(editValueName, _T("")))
|
||||
{
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, editValueName);
|
||||
}
|
||||
else
|
||||
{
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
TCHAR buffer[255];
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
SetDlgItemText(hwndDlg, IDC_VALUE_NAME, buffer);
|
||||
}
|
||||
hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA);
|
||||
HexEdit_LoadBuffer(hwndValue, binValueData, valueDataLen);
|
||||
|
@ -408,9 +412,9 @@ INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
|
|||
{
|
||||
len = (UINT) HexEdit_GetBufferSize(hwndValue);
|
||||
if (len > 0 && binValueData)
|
||||
binValueData = HeapReAlloc(GetProcessHeap(), 0, binValueData, len);
|
||||
binValueData = HeapReAlloc(GetProcessHeap(), 0, binValueData, len);
|
||||
else
|
||||
binValueData = HeapAlloc(GetProcessHeap(), 0, len + 1);
|
||||
binValueData = HeapAlloc(GetProcessHeap(), 0, len + 1);
|
||||
HexEdit_CopyBuffer(hwndValue, binValueData, len);
|
||||
valueDataLen = len;
|
||||
}
|
||||
|
@ -439,11 +443,11 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
lRet = RegQueryValueEx(hKey, valueName, 0, &type, 0, &valueDataLen);
|
||||
if (lRet != ERROR_SUCCESS && (!_tcscmp(valueName, _T("")) || valueName == NULL))
|
||||
{
|
||||
lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
|
||||
type = REG_SZ;
|
||||
valueDataLen = 0;
|
||||
stringValueData = NULL;
|
||||
binValueData = NULL;
|
||||
lRet = ERROR_SUCCESS; /* Allow editing of (Default) values which don't exist */
|
||||
type = REG_SZ;
|
||||
valueDataLen = 0;
|
||||
stringValueData = NULL;
|
||||
binValueData = NULL;
|
||||
}
|
||||
|
||||
if (lRet != ERROR_SUCCESS)
|
||||
|
@ -494,7 +498,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
size_t llen, listlen, nl_len;
|
||||
LPTSTR src, lines = NULL;
|
||||
|
||||
if (!(stringValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen)))
|
||||
if (!(stringValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen)))
|
||||
{
|
||||
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
|
||||
goto done;
|
||||
|
@ -506,7 +510,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
goto done;
|
||||
}
|
||||
|
||||
/* convert \0 to \r\n */
|
||||
/* convert \0 to \r\n */
|
||||
src = stringValueData;
|
||||
nl_len = _tcslen(_T("\r\n")) * sizeof(TCHAR);
|
||||
listlen = sizeof(TCHAR);
|
||||
|
@ -515,12 +519,12 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
{
|
||||
llen = _tcslen(src);
|
||||
if(llen == 0)
|
||||
break;
|
||||
break;
|
||||
listlen += (llen * sizeof(TCHAR)) + nl_len;
|
||||
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, listlen);
|
||||
_tcscat(lines, src);
|
||||
_tcscat(lines, _T("\r\n"));
|
||||
src += llen + 1;
|
||||
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, listlen);
|
||||
_tcscat(lines, src);
|
||||
_tcscat(lines, _T("\r\n"));
|
||||
src += llen + 1;
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, stringValueData);
|
||||
stringValueData = lines;
|
||||
|
@ -552,7 +556,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
if(nl == src)
|
||||
{
|
||||
EmptyLines = TRUE;
|
||||
src = nl + c_nl;
|
||||
src = nl + c_nl;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -562,7 +566,7 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
}
|
||||
if(linechars > 0)
|
||||
{
|
||||
buflen += ((linechars + 1) * sizeof(TCHAR));
|
||||
buflen += ((linechars + 1) * sizeof(TCHAR));
|
||||
lines = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lines, buflen);
|
||||
memcpy((lines + dest), src, linechars * sizeof(TCHAR));
|
||||
dest += linechars;
|
||||
|
@ -581,8 +585,8 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
warning(hwnd, IDS_MULTI_SZ_EMPTY_STRING);
|
||||
}
|
||||
|
||||
lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
|
||||
HeapFree(GetProcessHeap(), 0, lines);
|
||||
lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)lines, (DWORD) buflen);
|
||||
HeapFree(GetProcessHeap(), 0, lines);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -614,44 +618,44 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
LPWSTR u_valuename;
|
||||
int len_vname = lstrlen(valueName);
|
||||
|
||||
if(len_vname > 0)
|
||||
if(len_vname > 0)
|
||||
{
|
||||
if(!(u_valuename = HeapAlloc(GetProcessHeap(), 0, (len_vname + 1) * sizeof(WCHAR))))
|
||||
{
|
||||
error(hwnd, IDS_TOO_BIG_VALUE, len_vname);
|
||||
goto done;
|
||||
}
|
||||
/* convert the ansi value name to an unicode string */
|
||||
MultiByteToWideChar(CP_ACP, 0, valueName, -1, u_valuename, len_vname + 1);
|
||||
valueDataLen *= sizeof(WCHAR);
|
||||
if(!(u_valuename = HeapAlloc(GetProcessHeap(), 0, (len_vname + 1) * sizeof(WCHAR))))
|
||||
{
|
||||
error(hwnd, IDS_TOO_BIG_VALUE, len_vname);
|
||||
goto done;
|
||||
}
|
||||
/* convert the ansi value name to an unicode string */
|
||||
MultiByteToWideChar(CP_ACP, 0, valueName, -1, u_valuename, len_vname + 1);
|
||||
valueDataLen *= sizeof(WCHAR);
|
||||
}
|
||||
else
|
||||
u_valuename = L"";
|
||||
u_valuename = L"";
|
||||
#endif
|
||||
if(valueDataLen > 0)
|
||||
if(valueDataLen > 0)
|
||||
{
|
||||
if(!(binValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + 1)))
|
||||
if(!(binValueData = HeapAlloc(GetProcessHeap(), 0, valueDataLen + 1)))
|
||||
{
|
||||
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
|
||||
goto done;
|
||||
error(hwnd, IDS_TOO_BIG_VALUE, valueDataLen);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* force to use the unicode version, so editing strings in binary mode is correct */
|
||||
lRet = RegQueryValueExW(hKey,
|
||||
/* force to use the unicode version, so editing strings in binary mode is correct */
|
||||
lRet = RegQueryValueExW(hKey,
|
||||
#ifndef UNICODE
|
||||
u_valuename,
|
||||
u_valuename,
|
||||
#else
|
||||
valueName,
|
||||
valueName,
|
||||
#endif
|
||||
0, 0, (LPBYTE)binValueData, &valueDataLen);
|
||||
0, 0, (LPBYTE)binValueData, &valueDataLen);
|
||||
if (lRet != ERROR_SUCCESS)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, binValueData);
|
||||
#ifndef UNICODE
|
||||
if(len_vname > 0)
|
||||
HeapFree(GetProcessHeap(), 0, u_valuename);
|
||||
HeapFree(GetProcessHeap(), 0, u_valuename);
|
||||
#endif
|
||||
error(hwnd, IDS_BAD_VALUE, valueName);
|
||||
error(hwnd, IDS_BAD_VALUE, valueName);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
@ -662,22 +666,22 @@ BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin)
|
|||
|
||||
if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_BIN_DATA), hwnd, modify_binary_dlgproc) == IDOK)
|
||||
{
|
||||
/* force to use the unicode version, so editing strings in binary mode is correct */
|
||||
lRet = RegSetValueExW(hKey,
|
||||
/* force to use the unicode version, so editing strings in binary mode is correct */
|
||||
lRet = RegSetValueExW(hKey,
|
||||
#ifndef UNICODE
|
||||
u_valuename,
|
||||
u_valuename,
|
||||
#else
|
||||
valueName,
|
||||
valueName,
|
||||
#endif
|
||||
0, type, (LPBYTE)binValueData, valueDataLen);
|
||||
0, type, (LPBYTE)binValueData, valueDataLen);
|
||||
if (lRet == ERROR_SUCCESS)
|
||||
result = TRUE;
|
||||
}
|
||||
if(binValueData != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, binValueData);
|
||||
HeapFree(GetProcessHeap(), 0, binValueData);
|
||||
#ifndef UNICODE
|
||||
if(len_vname > 0)
|
||||
HeapFree(GetProcessHeap(), 0, u_valuename);
|
||||
HeapFree(GetProcessHeap(), 0, u_valuename);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
@ -717,7 +721,7 @@ static LONG CopyKey(HKEY hDestKey, LPCTSTR lpDestSubKey, HKEY hSrcKey, LPCTSTR l
|
|||
|
||||
/* create the destination subkey */
|
||||
lResult = RegCreateKeyEx(hDestKey, lpDestSubKey, 0, NULL, 0, KEY_WRITE, NULL,
|
||||
&hDestSubKey, &dwDisposition);
|
||||
&hDestSubKey, &dwDisposition);
|
||||
if (lResult)
|
||||
goto done;
|
||||
|
||||
|
@ -786,9 +790,10 @@ BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
|
|||
HKEY hKey;
|
||||
|
||||
lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_READ|KEY_SET_VALUE, &hKey);
|
||||
if (lRet != ERROR_SUCCESS) {
|
||||
error_code_messagebox(hwnd, lRet);
|
||||
return FALSE;
|
||||
if (lRet != ERROR_SUCCESS)
|
||||
{
|
||||
error_code_messagebox(hwnd, lRet);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LoadString(hInst, IDS_QUERY_DELETE_KEY_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
|
@ -798,9 +803,10 @@ BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath)
|
|||
goto done;
|
||||
|
||||
lRet = SHDeleteKey(hKeyRoot, keyPath);
|
||||
if (lRet != ERROR_SUCCESS) {
|
||||
error(hwnd, IDS_BAD_KEY, keyPath);
|
||||
goto done;
|
||||
if (lRet != ERROR_SUCCESS)
|
||||
{
|
||||
error(hwnd, IDS_BAD_KEY, keyPath);
|
||||
goto done;
|
||||
}
|
||||
result = TRUE;
|
||||
|
||||
|
|
|
@ -101,10 +101,10 @@ CompareData(
|
|||
{
|
||||
if (s_dwFlags & RSF_MATCHCASE)
|
||||
return 2 == CompareString(LOCALE_SYSTEM_DEFAULT, 0,
|
||||
psz1, cch1, psz2, cch2);
|
||||
psz1, cch1, psz2, cch2);
|
||||
else
|
||||
return 2 == CompareString(LOCALE_SYSTEM_DEFAULT,
|
||||
NORM_IGNORECASE, psz1, cch1, psz2, cch2);
|
||||
return 2 == CompareString(LOCALE_SYSTEM_DEFAULT,
|
||||
NORM_IGNORECASE, psz1, cch1, psz2, cch2);
|
||||
}
|
||||
|
||||
for(i = 0; i <= cch1 - cch2; i++)
|
||||
|
@ -112,13 +112,13 @@ CompareData(
|
|||
if (s_dwFlags & RSF_MATCHCASE)
|
||||
{
|
||||
if (2 == CompareString(LOCALE_SYSTEM_DEFAULT, 0,
|
||||
psz1 + i, cch2, psz2, cch2))
|
||||
psz1 + i, cch2, psz2, cch2))
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (2 == CompareString(LOCALE_SYSTEM_DEFAULT,
|
||||
NORM_IGNORECASE, psz1 + i, cch2, psz2, cch2))
|
||||
NORM_IGNORECASE, psz1 + i, cch2, psz2, cch2))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ int compare(const void *x, const void *y)
|
|||
}
|
||||
|
||||
BOOL RegFindRecurse(
|
||||
HKEY hKey,
|
||||
HKEY hKey,
|
||||
LPCTSTR pszSubKey,
|
||||
LPCTSTR pszValueName,
|
||||
LPTSTR *ppszFoundSubKey,
|
||||
|
@ -162,7 +162,7 @@ BOOL RegFindRecurse(
|
|||
pszValueName = s_empty;
|
||||
|
||||
lResult = RegQueryInfoKey(hSubKey, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
&c, NULL, NULL, NULL, NULL);
|
||||
&c, NULL, NULL, NULL, NULL);
|
||||
if (lResult != ERROR_SUCCESS)
|
||||
goto err;
|
||||
ppszNames = (LPTSTR *) malloc(c * sizeof(LPTSTR));
|
||||
|
@ -176,7 +176,7 @@ BOOL RegFindRecurse(
|
|||
goto err;
|
||||
|
||||
s_cbName = MAX_PATH * sizeof(TCHAR);
|
||||
lResult = RegEnumValue(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
|
||||
lResult = RegEnumValue(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
|
||||
NULL, &cb);
|
||||
if (lResult == ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
|
@ -206,8 +206,8 @@ BOOL RegFindRecurse(
|
|||
if (!fPast)
|
||||
continue;
|
||||
|
||||
if ((s_dwFlags & RSF_LOOKATVALUES) &&
|
||||
CompareName(ppszNames[i], s_szFindWhat))
|
||||
if ((s_dwFlags & RSF_LOOKATVALUES) &&
|
||||
CompareName(ppszNames[i], s_szFindWhat))
|
||||
{
|
||||
*ppszFoundSubKey = _tcsdup(szSubKey);
|
||||
if (ppszNames[i][0] == 0)
|
||||
|
@ -218,19 +218,19 @@ BOOL RegFindRecurse(
|
|||
}
|
||||
|
||||
lResult = RegQueryValueEx(hSubKey, ppszNames[i], NULL, &type,
|
||||
NULL, &cb);
|
||||
NULL, &cb);
|
||||
if (lResult != ERROR_SUCCESS)
|
||||
goto err;
|
||||
pb = malloc(cb);
|
||||
if (pb == NULL)
|
||||
goto err;
|
||||
lResult = RegQueryValueEx(hSubKey, ppszNames[i], NULL, &type,
|
||||
pb, &cb);
|
||||
pb, &cb);
|
||||
if (lResult != ERROR_SUCCESS)
|
||||
goto err;
|
||||
|
||||
if ((s_dwFlags & RSF_LOOKATDATA) &&
|
||||
CompareData(type, (LPTSTR) pb, s_szFindWhat))
|
||||
if ((s_dwFlags & RSF_LOOKATDATA) &&
|
||||
CompareData(type, (LPTSTR) pb, s_szFindWhat))
|
||||
{
|
||||
*ppszFoundSubKey = _tcsdup(szSubKey);
|
||||
if (ppszNames[i][0] == 0)
|
||||
|
@ -252,7 +252,7 @@ BOOL RegFindRecurse(
|
|||
ppszNames = NULL;
|
||||
|
||||
lResult = RegQueryInfoKey(hSubKey, NULL, NULL, NULL, &c, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL);
|
||||
NULL, NULL, NULL, NULL, NULL);
|
||||
if (lResult != ERROR_SUCCESS)
|
||||
goto err;
|
||||
ppszNames = (LPTSTR *) malloc(c * sizeof(LPTSTR));
|
||||
|
@ -266,7 +266,7 @@ BOOL RegFindRecurse(
|
|||
goto err;
|
||||
|
||||
s_cbName = MAX_PATH * sizeof(TCHAR);
|
||||
lResult = RegEnumKeyEx(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
|
||||
lResult = RegEnumKeyEx(hSubKey, i, s_szName, &s_cbName, NULL, NULL,
|
||||
NULL, NULL);
|
||||
if (lResult == ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
|
@ -289,11 +289,11 @@ BOOL RegFindRecurse(
|
|||
goto err;
|
||||
|
||||
if ((s_dwFlags & RSF_LOOKATKEYS) &&
|
||||
CompareName(ppszNames[i], s_szFindWhat))
|
||||
CompareName(ppszNames[i], s_szFindWhat))
|
||||
{
|
||||
*ppszFoundSubKey = malloc(
|
||||
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
|
||||
sizeof(TCHAR));
|
||||
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
|
||||
sizeof(TCHAR));
|
||||
if (*ppszFoundSubKey == NULL)
|
||||
goto err;
|
||||
if (szSubKey[0])
|
||||
|
@ -313,7 +313,7 @@ BOOL RegFindRecurse(
|
|||
{
|
||||
LPTSTR psz = *ppszFoundSubKey;
|
||||
*ppszFoundSubKey = malloc(
|
||||
(lstrlen(szSubKey) + lstrlen(psz) + 2) * sizeof(TCHAR));
|
||||
(lstrlen(szSubKey) + lstrlen(psz) + 2) * sizeof(TCHAR));
|
||||
if (*ppszFoundSubKey == NULL)
|
||||
goto err;
|
||||
if (szSubKey[0])
|
||||
|
@ -352,7 +352,7 @@ success:
|
|||
}
|
||||
|
||||
BOOL RegFindWalk(
|
||||
HKEY * phKey,
|
||||
HKEY * phKey,
|
||||
LPCTSTR pszSubKey,
|
||||
LPCTSTR pszValueName,
|
||||
LPTSTR *ppszFoundSubKey,
|
||||
|
@ -393,13 +393,13 @@ BOOL RegFindWalk(
|
|||
lstrcpyn(szKeyName, pch + 1, MAX_PATH);
|
||||
*pch = 0;
|
||||
lResult = RegOpenKeyEx(hBaseKey, szSubKey, 0, KEY_ALL_ACCESS,
|
||||
&hSubKey);
|
||||
&hSubKey);
|
||||
if (lResult != ERROR_SUCCESS)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
lResult = RegQueryInfoKey(hSubKey, NULL, NULL, NULL, &c, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL);
|
||||
NULL, NULL, NULL, NULL, NULL);
|
||||
if (lResult != ERROR_SUCCESS)
|
||||
goto err;
|
||||
|
||||
|
@ -415,7 +415,7 @@ BOOL RegFindWalk(
|
|||
|
||||
s_cbName = MAX_PATH * sizeof(TCHAR);
|
||||
lResult = RegEnumKeyExW(hSubKey, i, s_szName, &s_cbName,
|
||||
NULL, NULL, NULL, NULL);
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (lResult == ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
c = i;
|
||||
|
@ -443,11 +443,11 @@ BOOL RegFindWalk(
|
|||
continue;
|
||||
|
||||
if ((s_dwFlags & RSF_LOOKATKEYS) &&
|
||||
CompareName(ppszNames[i], s_szFindWhat))
|
||||
CompareName(ppszNames[i], s_szFindWhat))
|
||||
{
|
||||
*ppszFoundSubKey = malloc(
|
||||
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
|
||||
sizeof(TCHAR));
|
||||
(lstrlen(szSubKey) + lstrlen(ppszNames[i]) + 2) *
|
||||
sizeof(TCHAR));
|
||||
if (*ppszFoundSubKey == NULL)
|
||||
goto err;
|
||||
if (szSubKey[0])
|
||||
|
@ -462,13 +462,13 @@ BOOL RegFindWalk(
|
|||
goto success;
|
||||
}
|
||||
|
||||
if (RegFindRecurse(hSubKey, ppszNames[i], NULL,
|
||||
if (RegFindRecurse(hSubKey, ppszNames[i], NULL,
|
||||
ppszFoundSubKey, ppszFoundValueName))
|
||||
{
|
||||
LPTSTR psz = *ppszFoundSubKey;
|
||||
*ppszFoundSubKey = malloc(
|
||||
(lstrlen(szSubKey) + lstrlen(psz) + 2) *
|
||||
sizeof(TCHAR));
|
||||
(lstrlen(szSubKey) + lstrlen(psz) + 2) *
|
||||
sizeof(TCHAR));
|
||||
if (*ppszFoundSubKey == NULL)
|
||||
goto err;
|
||||
if (szSubKey[0])
|
||||
|
@ -605,23 +605,23 @@ static INT_PTR CALLBACK AbortFindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam,
|
|||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_CLOSE:
|
||||
s_bAbort = TRUE;
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
s_bAbort = TRUE;
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch(HIWORD(wParam))
|
||||
case WM_COMMAND:
|
||||
switch(HIWORD(wParam))
|
||||
{
|
||||
case BN_CLICKED:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case BN_CLICKED:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case IDCANCEL:
|
||||
s_bAbort = TRUE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case IDCANCEL:
|
||||
s_bAbort = TRUE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -652,7 +652,7 @@ BOOL FindNext(HWND hWnd)
|
|||
|
||||
/* Create abort find dialog */
|
||||
s_hwndAbortDialog = CreateDialog(GetModuleHandle(NULL),
|
||||
MAKEINTRESOURCE(IDD_FINDING), hWnd, AbortFindDialogProc);
|
||||
MAKEINTRESOURCE(IDD_FINDING), hWnd, AbortFindDialogProc);
|
||||
if (s_hwndAbortDialog)
|
||||
{
|
||||
ShowWindow(s_hwndAbortDialog, SW_SHOW);
|
||||
|
@ -667,7 +667,7 @@ BOOL FindNext(HWND hWnd)
|
|||
EnableWindow(g_pChildWnd->hListWnd, FALSE);
|
||||
EnableWindow(g_pChildWnd->hAddressBarWnd, FALSE);
|
||||
|
||||
fSuccess = RegFindWalk(&hKeyRoot, pszKeyPath, pszValueName,
|
||||
fSuccess = RegFindWalk(&hKeyRoot, pszKeyPath, pszValueName,
|
||||
&pszFoundSubKey, &pszFoundValueName);
|
||||
|
||||
EnableWindow(hFrameWnd, TRUE);
|
||||
|
@ -703,107 +703,107 @@ static INT_PTR CALLBACK FindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPAR
|
|||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
dwFlags = GetFindFlags();
|
||||
case WM_INITDIALOG:
|
||||
dwFlags = GetFindFlags();
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATKEYS) ? TRUE : FALSE, 0);
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATKEYS) ? TRUE : FALSE, 0);
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATVALUES) ? TRUE : FALSE, 0);
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATVALUES) ? TRUE : FALSE, 0);
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATDATA) ? TRUE : FALSE, 0);
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_LOOKATDATA) ? TRUE : FALSE, 0);
|
||||
|
||||
/* Match whole string */
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_WHOLESTRING) ? TRUE : FALSE, 0);
|
||||
/* Match whole string */
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_WHOLESTRING) ? TRUE : FALSE, 0);
|
||||
|
||||
/* Case sensitivity */
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_MATCHCASE) ? TRUE : FALSE, 0);
|
||||
/* Case sensitivity */
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
|
||||
if (hControl)
|
||||
SendMessage(hControl, BM_SETCHECK, (dwFlags & RSF_MATCHCASE) ? TRUE : FALSE, 0);
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
|
||||
if (hControl)
|
||||
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
|
||||
if (hControl)
|
||||
{
|
||||
SetWindowText(hControl, s_szSavedFindValue);
|
||||
SetFocus(hControl);
|
||||
SendMessage(hControl, EM_SETSEL, 0, -1);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CLOSE:
|
||||
EndDialog(hDlg, 0);
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch(HIWORD(wParam))
|
||||
{
|
||||
case BN_CLICKED:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
SetWindowText(hControl, s_szSavedFindValue);
|
||||
SetFocus(hControl);
|
||||
SendMessage(hControl, EM_SETSEL, 0, -1);
|
||||
case IDOK:
|
||||
dwFlags = 0;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_LOOKATKEYS;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_LOOKATVALUES;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_LOOKATDATA;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_WHOLESTRING;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_MATCHCASE;
|
||||
|
||||
SetFindFlags(dwFlags);
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
|
||||
if (hControl)
|
||||
GetWindowText(hControl, s_szFindWhat, sizeof(s_szFindWhat) / sizeof(s_szFindWhat[0]));
|
||||
EndDialog(hDlg, 1);
|
||||
break;
|
||||
|
||||
case IDCANCEL:
|
||||
EndDialog(hDlg, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CLOSE:
|
||||
EndDialog(hDlg, 0);
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch(HIWORD(wParam))
|
||||
case EN_CHANGE:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case BN_CLICKED:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
dwFlags = 0;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_KEYS);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_LOOKATKEYS;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_VALUES);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_LOOKATVALUES;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_LOOKAT_DATA);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_LOOKATDATA;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHSTRING);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_WHOLESTRING;
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_MATCHCASE);
|
||||
if (hControl && (SendMessage(hControl, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
dwFlags |= RSF_MATCHCASE;
|
||||
|
||||
SetFindFlags(dwFlags);
|
||||
|
||||
hControl = GetDlgItem(hDlg, IDC_FINDWHAT);
|
||||
if (hControl)
|
||||
GetWindowText(hControl, s_szFindWhat, sizeof(s_szFindWhat) / sizeof(s_szFindWhat[0]));
|
||||
EndDialog(hDlg, 1);
|
||||
break;
|
||||
|
||||
case IDCANCEL:
|
||||
EndDialog(hDlg, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case EN_CHANGE:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case IDC_FINDWHAT:
|
||||
GetWindowText((HWND) lParam, s_szSavedFindValue, sizeof(s_szSavedFindValue) / sizeof(s_szSavedFindValue[0]));
|
||||
hControl = GetDlgItem(hDlg, IDOK);
|
||||
if (hControl)
|
||||
{
|
||||
lStyle = GetWindowLongPtr(hControl, GWL_STYLE);
|
||||
if (s_szSavedFindValue[0])
|
||||
lStyle &= ~WS_DISABLED;
|
||||
else
|
||||
lStyle |= WS_DISABLED;
|
||||
SetWindowLongPtr(hControl, GWL_STYLE, lStyle);
|
||||
RedrawWindow(hControl, NULL, NULL, RDW_INVALIDATE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case IDC_FINDWHAT:
|
||||
GetWindowText((HWND) lParam, s_szSavedFindValue, sizeof(s_szSavedFindValue) / sizeof(s_szSavedFindValue[0]));
|
||||
hControl = GetDlgItem(hDlg, IDOK);
|
||||
if (hControl)
|
||||
{
|
||||
lStyle = GetWindowLongPtr(hControl, GWL_STYLE);
|
||||
if (s_szSavedFindValue[0])
|
||||
lStyle &= ~WS_DISABLED;
|
||||
else
|
||||
lStyle |= WS_DISABLED;
|
||||
SetWindowLongPtr(hControl, GWL_STYLE, lStyle);
|
||||
RedrawWindow(hControl, NULL, NULL, RDW_INVALIDATE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return iResult;
|
||||
}
|
||||
|
@ -811,15 +811,15 @@ static INT_PTR CALLBACK FindDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPAR
|
|||
void FindDialog(HWND hWnd)
|
||||
{
|
||||
if (DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_FIND),
|
||||
hWnd, FindDialogProc, 0) != 0)
|
||||
hWnd, FindDialogProc, 0) != 0)
|
||||
{
|
||||
if (!FindNext(hWnd))
|
||||
{
|
||||
TCHAR msg[128], caption[128];
|
||||
TCHAR msg[128], caption[128];
|
||||
|
||||
LoadString(hInst, IDS_FINISHEDFIND, msg, sizeof(msg)/sizeof(TCHAR));
|
||||
LoadString(hInst, IDS_APP_TITLE, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
MessageBox(0, msg, caption, MB_ICONINFORMATION);
|
||||
LoadString(hInst, IDS_FINISHEDFIND, msg, sizeof(msg)/sizeof(TCHAR));
|
||||
LoadString(hInst, IDS_APP_TITLE, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
MessageBox(0, msg, caption, MB_ICONINFORMATION);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,8 @@ static void resize_frame_rect(HWND hWnd, PRECT prect)
|
|||
prect->bottom -= rt.bottom+3;
|
||||
}
|
||||
*/
|
||||
if (IsWindowVisible(hStatusBar)) {
|
||||
if (IsWindowVisible(hStatusBar))
|
||||
{
|
||||
SetupStatusBar(hWnd, TRUE);
|
||||
GetClientRect(hStatusBar, &rt);
|
||||
prect->bottom -= rt.bottom;
|
||||
|
@ -141,12 +142,15 @@ static void OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
|
|||
TCHAR str[100];
|
||||
|
||||
_tcscpy(str, _T(""));
|
||||
if (nFlags & MF_POPUP) {
|
||||
if (hSysMenu != GetMenu(hWnd)) {
|
||||
if (nFlags & MF_POPUP)
|
||||
{
|
||||
if (hSysMenu != GetMenu(hWnd))
|
||||
{
|
||||
if (nItemID == 2) nItemID = 5;
|
||||
}
|
||||
}
|
||||
if (LoadString(hInst, nItemID, str, 100)) {
|
||||
if (LoadString(hInst, nItemID, str, 100))
|
||||
{
|
||||
/* load appropriate string*/
|
||||
LPTSTR lpsz = str;
|
||||
/* first newline terminates actual string*/
|
||||
|
@ -171,8 +175,8 @@ void SetupStatusBar(HWND hWnd, BOOL bResize)
|
|||
|
||||
void UpdateStatusBar(void)
|
||||
{
|
||||
NMHDR nmhdr;
|
||||
ZeroMemory(&nmhdr, sizeof(NMHDR));
|
||||
NMHDR nmhdr;
|
||||
ZeroMemory(&nmhdr, sizeof(NMHDR));
|
||||
nmhdr.code = TVN_SELCHANGED;
|
||||
SendMessage(g_pChildWnd->hWnd, WM_NOTIFY, (WPARAM)TREE_WINDOW, (LPARAM)&nmhdr);
|
||||
}
|
||||
|
@ -191,7 +195,8 @@ static BOOL CheckCommDlgError(HWND hWnd)
|
|||
{
|
||||
DWORD dwErrorCode = CommDlgExtendedError();
|
||||
UNREFERENCED_PARAMETER(hWnd);
|
||||
switch (dwErrorCode) {
|
||||
switch (dwErrorCode)
|
||||
{
|
||||
case CDERR_DIALOGFAILURE:
|
||||
break;
|
||||
case CDERR_FINDRESFAILURE:
|
||||
|
@ -233,24 +238,24 @@ TCHAR FileTitleBuffer[_MAX_PATH];
|
|||
|
||||
typedef struct
|
||||
{
|
||||
UINT DisplayID;
|
||||
UINT FilterID;
|
||||
UINT DisplayID;
|
||||
UINT FilterID;
|
||||
} FILTERPAIR, *PFILTERPAIR;
|
||||
|
||||
void
|
||||
BuildFilterStrings(TCHAR *Filter, PFILTERPAIR Pairs, int PairCount)
|
||||
{
|
||||
int i, c;
|
||||
int i, c;
|
||||
|
||||
c = 0;
|
||||
for(i = 0; i < PairCount; i++)
|
||||
{
|
||||
c += LoadString(hInst, Pairs[i].DisplayID, &Filter[c], 255 * sizeof(TCHAR));
|
||||
c = 0;
|
||||
for(i = 0; i < PairCount; i++)
|
||||
{
|
||||
c += LoadString(hInst, Pairs[i].DisplayID, &Filter[c], 255 * sizeof(TCHAR));
|
||||
Filter[++c] = '\0';
|
||||
c += LoadString(hInst, Pairs[i].FilterID, &Filter[c], 255 * sizeof(TCHAR));
|
||||
Filter[++c] = '\0';
|
||||
}
|
||||
Filter[++c] = '\0';
|
||||
c += LoadString(hInst, Pairs[i].FilterID, &Filter[c], 255 * sizeof(TCHAR));
|
||||
Filter[++c] = '\0';
|
||||
}
|
||||
Filter[++c] = '\0';
|
||||
}
|
||||
|
||||
static BOOL InitOpenFileName(HWND hWnd, OPENFILENAME* pofn)
|
||||
|
@ -288,18 +293,18 @@ static INT_PTR CALLBACK LoadHive_KeyNameInHookProc(HWND hWndDlg, UINT uMsg, WPAR
|
|||
static INT sLength = 0;
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
case WM_INITDIALOG:
|
||||
sKey = (LPTSTR)lParam;
|
||||
sLength = 128; /* FIXME: Ugly hack! */
|
||||
case WM_COMMAND:
|
||||
case WM_COMMAND:
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
case IDOK:
|
||||
if(GetDlgItemText(hWndDlg, IDC_EDIT_KEY, sKey, sLength))
|
||||
return EndDialog(hWndDlg, -1);
|
||||
else
|
||||
return EndDialog(hWndDlg, 0);
|
||||
case IDCANCEL:
|
||||
case IDCANCEL:
|
||||
return EndDialog(hWndDlg, 0);
|
||||
}
|
||||
break;
|
||||
|
@ -349,7 +354,9 @@ static BOOL LoadHive(HWND hWnd)
|
|||
return FALSE;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckCommDlgError(hWnd);
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -395,9 +402,11 @@ static BOOL ImportRegistryFile(HWND hWnd)
|
|||
ofn.lpstrTitle = Caption;
|
||||
ofn.Flags |= OFN_ENABLESIZING;
|
||||
/* ofn.lCustData = ;*/
|
||||
if (GetOpenFileName(&ofn)) {
|
||||
if (GetOpenFileName(&ofn))
|
||||
{
|
||||
FILE *fp = _wfopen(ofn.lpstrFile, L"r");
|
||||
if (fp == NULL || !import_registry_file(fp)) {
|
||||
if (fp == NULL || !import_registry_file(fp))
|
||||
{
|
||||
LPSTR p = GetMultiByteString(ofn.lpstrFile);
|
||||
fprintf(stderr, "Can't open file \"%s\"\n", p);
|
||||
HeapFree(GetProcessHeap(), 0, p);
|
||||
|
@ -406,7 +415,9 @@ static BOOL ImportRegistryFile(HWND hWnd)
|
|||
return FALSE;
|
||||
}
|
||||
fclose(fp);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckCommDlgError(hWnd);
|
||||
}
|
||||
|
||||
|
@ -429,8 +440,9 @@ static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, W
|
|||
|
||||
UNREFERENCED_PARAMETER(wParam);
|
||||
|
||||
switch(uiMsg) {
|
||||
case WM_INITDIALOG:
|
||||
switch(uiMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
pOfn = (OPENFILENAME *) lParam;
|
||||
pszSelectedKey = (LPTSTR) pOfn->lCustData;
|
||||
|
||||
|
@ -447,7 +459,7 @@ static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, W
|
|||
SetWindowText(hwndExportBranchText, pszSelectedKey);
|
||||
break;
|
||||
|
||||
case WM_NOTIFY:
|
||||
case WM_NOTIFY:
|
||||
if (((NMHDR *) lParam)->code == CDN_FILEOK)
|
||||
{
|
||||
pOfnNotify = (OFNOTIFY *) lParam;
|
||||
|
@ -456,15 +468,15 @@ static UINT_PTR CALLBACK ExportRegistryFile_OFNHookProc(HWND hdlg, UINT uiMsg, W
|
|||
hwndExportBranch = GetDlgItem(hdlg, IDC_EXPORT_BRANCH);
|
||||
hwndExportBranchText = GetDlgItem(hdlg, IDC_EXPORT_BRANCH_TEXT);
|
||||
if (hwndExportBranch && hwndExportBranchText
|
||||
&& (SendMessage(hwndExportBranch, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
{
|
||||
GetWindowText(hwndExportBranchText, pszSelectedKey, _MAX_PATH);
|
||||
}
|
||||
else
|
||||
{
|
||||
pszSelectedKey[0] = '\0';
|
||||
}
|
||||
}
|
||||
&& (SendMessage(hwndExportBranch, BM_GETCHECK, 0, 0) == BST_CHECKED))
|
||||
{
|
||||
GetWindowText(hwndExportBranchText, pszSelectedKey, _MAX_PATH);
|
||||
}
|
||||
else
|
||||
{
|
||||
pszSelectedKey[0] = '\0';
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return iResult;
|
||||
|
@ -494,7 +506,8 @@ BOOL ExportRegistryFile(HWND hWnd)
|
|||
ofn.Flags = OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT;
|
||||
ofn.lpfnHook = ExportRegistryFile_OFNHookProc;
|
||||
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_EXPORTRANGE);
|
||||
if (GetSaveFileName(&ofn)) {
|
||||
if (GetSaveFileName(&ofn))
|
||||
{
|
||||
BOOL result;
|
||||
DWORD format;
|
||||
|
||||
|
@ -503,13 +516,16 @@ BOOL ExportRegistryFile(HWND hWnd)
|
|||
else
|
||||
format = REG_FORMAT_4;
|
||||
result = export_registry_key(ofn.lpstrFile, ExportKeyPath, format);
|
||||
if (!result) {
|
||||
if (!result)
|
||||
{
|
||||
LPSTR p = GetMultiByteString(ofn.lpstrFile);
|
||||
fprintf(stderr, "Can't open file \"%s\"\n", p);
|
||||
HeapFree(GetProcessHeap(), 0, p);
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckCommDlgError(hWnd);
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -532,7 +548,8 @@ BOOL PrintRegistryHive(HWND hWnd, LPTSTR path)
|
|||
pd.nToPage = 0xFFFF;
|
||||
pd.nMinPage = 1;
|
||||
pd.nMaxPage = 0xFFFF;
|
||||
if (PrintDlg(&pd)) {
|
||||
if (PrintDlg(&pd))
|
||||
{
|
||||
/* GDI calls to render output. */
|
||||
DeleteDC(pd.hDC); /* Delete DC when done.*/
|
||||
}
|
||||
|
@ -541,8 +558,10 @@ BOOL PrintRegistryHive(HWND hWnd, LPTSTR path)
|
|||
PRINTDLGEX pd;
|
||||
|
||||
hResult = PrintDlgEx(&pd);
|
||||
if (hResult == S_OK) {
|
||||
switch (pd.dwResultAction) {
|
||||
if (hResult == S_OK)
|
||||
{
|
||||
switch (pd.dwResultAction)
|
||||
{
|
||||
case PD_RESULT_APPLY:
|
||||
/*The user clicked the Apply button and later clicked the Cancel button. This indicates that the user wants to apply the changes made in the property sheet, but does not yet want to print. The PRINTDLGEX structure contains the information specified by the user at the time the Apply button was clicked. */
|
||||
break;
|
||||
|
@ -555,8 +574,11 @@ BOOL PrintRegistryHive(HWND hWnd, LPTSTR path)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (hResult) {
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (hResult)
|
||||
{
|
||||
case E_OUTOFMEMORY:
|
||||
/*Insufficient memory. */
|
||||
break;
|
||||
|
@ -664,9 +686,11 @@ static BOOL CreateNewValue(HKEY hRootKey, LPCTSTR pszKeyPath, DWORD dwType)
|
|||
wsprintf(szNewValue, szNewValueFormat, iIndex++);
|
||||
cbData = sizeof(data);
|
||||
lResult = RegQueryValueEx(hKey, szNewValue, NULL, &dwExistingType, data, &cbData);
|
||||
} while(lResult == ERROR_SUCCESS);
|
||||
}
|
||||
while(lResult == ERROR_SUCCESS);
|
||||
|
||||
switch(dwType) {
|
||||
switch(dwType)
|
||||
{
|
||||
case REG_DWORD:
|
||||
cbData = sizeof(DWORD);
|
||||
break;
|
||||
|
@ -725,9 +749,9 @@ InitializeRemoteRegistryPicker(OUT IDsObjectPicker **pDsObjectPicker)
|
|||
{
|
||||
sizeof(DSOP_SCOPE_INIT_INFO),
|
||||
DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE | DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE |
|
||||
DSOP_SCOPE_TYPE_GLOBAL_CATALOG | DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN |
|
||||
DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN | DSOP_SCOPE_TYPE_WORKGROUP |
|
||||
DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN | DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN,
|
||||
DSOP_SCOPE_TYPE_GLOBAL_CATALOG | DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN |
|
||||
DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN | DSOP_SCOPE_TYPE_WORKGROUP |
|
||||
DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN | DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN,
|
||||
0,
|
||||
{
|
||||
{
|
||||
|
@ -752,7 +776,7 @@ InitializeRemoteRegistryPicker(OUT IDsObjectPicker **pDsObjectPicker)
|
|||
InitInfo.apwzAttributeNames = NULL;
|
||||
|
||||
hRet = (*pDsObjectPicker)->lpVtbl->Initialize(*pDsObjectPicker,
|
||||
&InitInfo);
|
||||
&InitInfo);
|
||||
|
||||
if (FAILED(hRet))
|
||||
{
|
||||
|
@ -774,8 +798,8 @@ InvokeRemoteRegistryPickerDialog(IN IDsObjectPicker *pDsObjectPicker,
|
|||
HRESULT hRet;
|
||||
|
||||
hRet = pDsObjectPicker->lpVtbl->InvokeDialog(pDsObjectPicker,
|
||||
hwndParent,
|
||||
&pdo);
|
||||
hwndParent,
|
||||
&pdo);
|
||||
if (hRet == S_OK)
|
||||
{
|
||||
STGMEDIUM stm;
|
||||
|
@ -857,7 +881,8 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
UNREFERENCED_PARAMETER(lParam);
|
||||
UNREFERENCED_PARAMETER(message);
|
||||
|
||||
switch (LOWORD(wParam)) {
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case ID_REGISTRY_LOADHIVE:
|
||||
LoadHive(hWnd);
|
||||
return TRUE;
|
||||
|
@ -926,9 +951,9 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
pts = pt;
|
||||
if(ClientToScreen(g_pChildWnd->hWnd, &pts))
|
||||
{
|
||||
SetCursorPos(pts.x, pts.y);
|
||||
SetCursor(LoadCursor(0, IDC_SIZEWE));
|
||||
SendMessage(g_pChildWnd->hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(pt.x, pt.y));
|
||||
SetCursorPos(pts.x, pts.y);
|
||||
SetCursor(LoadCursor(0, IDC_SIZEWE));
|
||||
SendMessage(g_pChildWnd->hWnd, WM_LBUTTONDOWN, 0, MAKELPARAM(pt.x, pt.y));
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -942,12 +967,14 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
|
||||
valueName = GetValueName(g_pChildWnd->hListWnd, -1);
|
||||
if (keyPath) {
|
||||
if (keyPath)
|
||||
{
|
||||
lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, regsam, &hKey);
|
||||
if (lRet != ERROR_SUCCESS) hKey = 0;
|
||||
}
|
||||
|
||||
switch (LOWORD(wParam)) {
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case ID_EDIT_MODIFY:
|
||||
if (valueName && ModifyValue(hWnd, hKey, valueName, FALSE))
|
||||
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
|
||||
|
@ -980,49 +1007,49 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
if (GetFocus() == g_pChildWnd->hListWnd)
|
||||
{
|
||||
UINT nSelected = ListView_GetSelectedCount(g_pChildWnd->hListWnd);
|
||||
if(nSelected >= 1)
|
||||
{
|
||||
TCHAR msg[128], caption[128];
|
||||
LoadString(hInst, IDS_QUERY_DELETE_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
LoadString(hInst, (nSelected == 1 ? IDS_QUERY_DELETE_ONE : IDS_QUERY_DELETE_MORE), msg, sizeof(msg)/sizeof(TCHAR));
|
||||
if(MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) == IDYES)
|
||||
UINT nSelected = ListView_GetSelectedCount(g_pChildWnd->hListWnd);
|
||||
if(nSelected >= 1)
|
||||
{
|
||||
int ni, errs;
|
||||
|
||||
item = -1;
|
||||
errs = 0;
|
||||
while((ni = ListView_GetNextItem(g_pChildWnd->hListWnd, item, LVNI_SELECTED)) > -1)
|
||||
{
|
||||
valueName = GetValueName(g_pChildWnd->hListWnd, item);
|
||||
if(RegDeleteValue(hKey, valueName) != ERROR_SUCCESS)
|
||||
TCHAR msg[128], caption[128];
|
||||
LoadString(hInst, IDS_QUERY_DELETE_CONFIRM, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
LoadString(hInst, (nSelected == 1 ? IDS_QUERY_DELETE_ONE : IDS_QUERY_DELETE_MORE), msg, sizeof(msg)/sizeof(TCHAR));
|
||||
if(MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONQUESTION | MB_YESNO) == IDYES)
|
||||
{
|
||||
errs++;
|
||||
}
|
||||
item = ni;
|
||||
}
|
||||
int ni, errs;
|
||||
|
||||
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
|
||||
if(errs > 0)
|
||||
{
|
||||
LoadString(hInst, IDS_ERR_DELVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
LoadString(hInst, IDS_ERR_DELETEVALUE, msg, sizeof(msg)/sizeof(TCHAR));
|
||||
MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONSTOP);
|
||||
}
|
||||
item = -1;
|
||||
errs = 0;
|
||||
while((ni = ListView_GetNextItem(g_pChildWnd->hListWnd, item, LVNI_SELECTED)) > -1)
|
||||
{
|
||||
valueName = GetValueName(g_pChildWnd->hListWnd, item);
|
||||
if(RegDeleteValue(hKey, valueName) != ERROR_SUCCESS)
|
||||
{
|
||||
errs++;
|
||||
}
|
||||
item = ni;
|
||||
}
|
||||
|
||||
RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath);
|
||||
if(errs > 0)
|
||||
{
|
||||
LoadString(hInst, IDS_ERR_DELVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
LoadString(hInst, IDS_ERR_DELETEVALUE, msg, sizeof(msg)/sizeof(TCHAR));
|
||||
MessageBox(g_pChildWnd->hWnd, msg, caption, MB_ICONSTOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (GetFocus() == g_pChildWnd->hTreeWnd)
|
||||
{
|
||||
if (keyPath == 0 || *keyPath == 0)
|
||||
{
|
||||
MessageBeep(MB_ICONHAND);
|
||||
} else
|
||||
if (DeleteKey(hWnd, hKeyRoot, keyPath))
|
||||
{
|
||||
DeleteNode(g_pChildWnd->hTreeWnd, 0);
|
||||
RefreshTreeView(g_pChildWnd->hTreeWnd);
|
||||
}
|
||||
if (keyPath == 0 || *keyPath == 0)
|
||||
{
|
||||
MessageBeep(MB_ICONHAND);
|
||||
}
|
||||
else if (DeleteKey(hWnd, hKeyRoot, keyPath))
|
||||
{
|
||||
DeleteNode(g_pChildWnd->hTreeWnd, 0);
|
||||
RefreshTreeView(g_pChildWnd->hTreeWnd);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1066,9 +1093,9 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
RefreshTreeView(g_pChildWnd->hTreeWnd);
|
||||
/*RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, NULL); */
|
||||
break;
|
||||
/*case ID_OPTIONS_TOOLBAR:*/
|
||||
/* toggle_child(hWnd, LOWORD(wParam), hToolBar);*/
|
||||
/* break;*/
|
||||
/*case ID_OPTIONS_TOOLBAR:*/
|
||||
/* toggle_child(hWnd, LOWORD(wParam), hToolBar);*/
|
||||
/* break;*/
|
||||
case ID_EDIT_NEW_KEY:
|
||||
CreateNewKey(g_pChildWnd->hTreeWnd, TreeView_GetSelection(g_pChildWnd->hTreeWnd));
|
||||
break;
|
||||
|
@ -1101,7 +1128,7 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
|
||||
if(hKey)
|
||||
RegCloseKey(hKey);
|
||||
RegCloseKey(hKey);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -1118,7 +1145,8 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message) {
|
||||
switch (message)
|
||||
{
|
||||
case WM_CREATE:
|
||||
CreateWindowEx(0, szChildClass, NULL, WS_CHILD | WS_VISIBLE,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,4 @@
|
|||
//Íåäîâúðøåí
|
||||
/*
|
||||
* Regedit resources
|
||||
*
|
||||
|
@ -135,8 +136,8 @@ BEGIN
|
|||
MENUITEM "&Íèçîâà ñòîéíîñò", ID_EDIT_NEW_STRINGVALUE
|
||||
MENUITEM "&Äâîè÷íà ñòîéíîñò", ID_EDIT_NEW_BINARYVALUE
|
||||
MENUITEM "&Ñòîéíîñò íà äâîéíà äóìà", ID_EDIT_NEW_DWORDVALUE
|
||||
MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE
|
||||
MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
|
||||
MENUITEM "&Ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_MULTISTRINGVALUE
|
||||
MENUITEM "&Ðàçøèðèìà ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
|
||||
END
|
||||
END
|
||||
POPUP ""
|
||||
|
@ -149,8 +150,8 @@ BEGIN
|
|||
MENUITEM "&Íèçîâà ñòîéíîñò", ID_EDIT_NEW_STRINGVALUE
|
||||
MENUITEM "&Äâîè÷íà ñòîéíîñò", ID_EDIT_NEW_BINARYVALUE
|
||||
MENUITEM "&Ñòîéíîñò íà äâîéíà äóìà", ID_EDIT_NEW_DWORDVALUE
|
||||
MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE
|
||||
MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
|
||||
MENUITEM "&Ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_MULTISTRINGVALUE
|
||||
MENUITEM "&Ðàçøèðèìà ìíîãîíèçîâà ñòîéíîñò", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
|
||||
END
|
||||
MENUITEM "&Òúðñåíå", ID_EDIT_FIND
|
||||
MENUITEM SEPARATOR
|
||||
|
@ -165,11 +166,11 @@ BEGIN
|
|||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "C&ut", ID_HEXEDIT_CUT
|
||||
MENUITEM "&Copy", ID_HEXEDIT_COPY
|
||||
MENUITEM "&Paste", ID_HEXEDIT_PASTE
|
||||
MENUITEM "&Delete", ID_HEXEDIT_DELETE
|
||||
MENUITEM "Çà&ïîìíÿíå", ID_HEXEDIT_COPY
|
||||
MENUITEM "&Ïîñòàâÿíå", ID_HEXEDIT_PASTE
|
||||
MENUITEM "Èç&òðèâàíå", ID_HEXEDIT_DELETE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
|
||||
MENUITEM "Èçáîð íà âñè&÷êè", ID_HEXEDIT_SELECT_ALL
|
||||
END
|
||||
END
|
||||
|
||||
|
@ -182,10 +183,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
|||
CAPTION "Load Hive"
|
||||
FONT 8, "Ms Shell Dlg"
|
||||
{
|
||||
LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
|
||||
LTEXT "&Êëàâèø:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT
|
||||
EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13
|
||||
DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14
|
||||
PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14
|
||||
DEFPUSHBUTTON "Äîáðå", IDOK, 140, 17, 50, 14
|
||||
PUSHBUTTON "Îòêàç", IDCANCEL, 89, 17, 50, 14
|
||||
}
|
||||
|
||||
IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84
|
||||
|
|
|
@ -96,23 +96,23 @@ VOID SetValueName(HWND hwndLV, LPCTSTR pszValueName)
|
|||
i = ListView_FindItem(hwndLV, -1, &fi);
|
||||
}
|
||||
ListView_SetItemState(hwndLV, i, LVIS_FOCUSED | LVIS_SELECTED,
|
||||
LVIS_FOCUSED | LVIS_SELECTED);
|
||||
LVIS_FOCUSED | LVIS_SELECTED);
|
||||
iListViewSelect = i;
|
||||
}
|
||||
|
||||
BOOL IsDefaultValue(HWND hwndLV, int i)
|
||||
{
|
||||
PLINE_INFO lineinfo;
|
||||
LVITEM Item;
|
||||
PLINE_INFO lineinfo;
|
||||
LVITEM Item;
|
||||
|
||||
Item.mask = LVIF_PARAM;
|
||||
Item.iItem = i;
|
||||
if(ListView_GetItem(hwndLV, &Item))
|
||||
{
|
||||
lineinfo = (PLINE_INFO)Item.lParam;
|
||||
return lineinfo && (!lineinfo->name || !_tcscmp(lineinfo->name, _T("")));
|
||||
}
|
||||
return FALSE;
|
||||
Item.mask = LVIF_PARAM;
|
||||
Item.iItem = i;
|
||||
if(ListView_GetItem(hwndLV, &Item))
|
||||
{
|
||||
lineinfo = (PLINE_INFO)Item.lParam;
|
||||
return lineinfo && (!lineinfo->name || !_tcscmp(lineinfo->name, _T("")));
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -129,7 +129,7 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB
|
|||
linfo->val_len = dwCount;
|
||||
if(dwCount > 0)
|
||||
{
|
||||
memcpy(&linfo[1], ValBuf, dwCount);
|
||||
memcpy(&linfo[1], ValBuf, dwCount);
|
||||
}
|
||||
linfo->name = _tcsdup(Name);
|
||||
|
||||
|
@ -146,12 +146,12 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB
|
|||
item.lParam = (LPARAM)linfo;
|
||||
switch(dwValType)
|
||||
{
|
||||
case REG_SZ:
|
||||
case REG_EXPAND_SZ:
|
||||
case REG_MULTI_SZ:
|
||||
case REG_SZ:
|
||||
case REG_EXPAND_SZ:
|
||||
case REG_MULTI_SZ:
|
||||
item.iImage = Image_String;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
item.iImage = Image_Bin;
|
||||
break;
|
||||
}
|
||||
|
@ -162,87 +162,90 @@ static void AddEntryToList(HWND hwndLV, LPTSTR Name, DWORD dwValType, void* ValB
|
|||
#endif
|
||||
|
||||
index = ListView_InsertItem(hwndLV, &item);
|
||||
if (index != -1) {
|
||||
switch (dwValType) {
|
||||
if (index != -1)
|
||||
{
|
||||
switch (dwValType)
|
||||
{
|
||||
case REG_SZ:
|
||||
case REG_EXPAND_SZ:
|
||||
if(dwCount > 0)
|
||||
{
|
||||
ListView_SetItemText(hwndLV, index, 2, ValBuf);
|
||||
ListView_SetItemText(hwndLV, index, 2, ValBuf);
|
||||
}
|
||||
else if(!ValExists)
|
||||
{
|
||||
TCHAR buffer[255];
|
||||
/* load (value not set) string */
|
||||
LoadString(hInst, IDS_VALUE_NOT_SET, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
ListView_SetItemText(hwndLV, index, 2, buffer);
|
||||
TCHAR buffer[255];
|
||||
/* load (value not set) string */
|
||||
LoadString(hInst, IDS_VALUE_NOT_SET, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
ListView_SetItemText(hwndLV, index, 2, buffer);
|
||||
}
|
||||
break;
|
||||
case REG_MULTI_SZ:
|
||||
{
|
||||
LPTSTR src, str;
|
||||
if(dwCount >= 2)
|
||||
{
|
||||
LPTSTR src, str;
|
||||
if(dwCount >= 2)
|
||||
{
|
||||
src = (LPTSTR)ValBuf;
|
||||
str = HeapAlloc(GetProcessHeap(), 0, dwCount);
|
||||
if(str != NULL)
|
||||
{
|
||||
*str = _T('\0');
|
||||
/* concatenate all srings */
|
||||
while(*src != _T('\0'))
|
||||
{
|
||||
_tcscat(str, src);
|
||||
_tcscat(str, _T(" "));
|
||||
src += _tcslen(src) + 1;
|
||||
}
|
||||
ListView_SetItemText(hwndLV, index, 2, str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
else
|
||||
ListView_SetItemText(hwndLV, index, 2, _T(""));
|
||||
}
|
||||
else
|
||||
ListView_SetItemText(hwndLV, index, 2, _T(""));
|
||||
}
|
||||
break;
|
||||
case REG_DWORD: {
|
||||
TCHAR buf[200];
|
||||
if(dwCount == sizeof(DWORD))
|
||||
src = (LPTSTR)ValBuf;
|
||||
str = HeapAlloc(GetProcessHeap(), 0, dwCount);
|
||||
if(str != NULL)
|
||||
{
|
||||
wsprintf(buf, _T("0x%08x (%u)"), *(DWORD*)ValBuf, *(DWORD*)ValBuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadString(hInst, IDS_INVALID_DWORD, buf, sizeof(buf)/sizeof(TCHAR));
|
||||
}
|
||||
ListView_SetItemText(hwndLV, index, 2, buf);
|
||||
}
|
||||
/* lpsRes = convertHexToDWORDStr(lpbData, dwLen); */
|
||||
break;
|
||||
default:
|
||||
{
|
||||
unsigned int i;
|
||||
LPBYTE pData = (LPBYTE)ValBuf;
|
||||
LPTSTR strBinary;
|
||||
if(dwCount > 0)
|
||||
{
|
||||
strBinary = HeapAlloc(GetProcessHeap(), 0, (dwCount * sizeof(TCHAR) * 3) + sizeof(TCHAR));
|
||||
for (i = 0; i < dwCount; i++)
|
||||
*str = _T('\0');
|
||||
/* concatenate all srings */
|
||||
while(*src != _T('\0'))
|
||||
{
|
||||
wsprintf( strBinary + i*3, _T("%02X "), pData[i] );
|
||||
_tcscat(str, src);
|
||||
_tcscat(str, _T(" "));
|
||||
src += _tcslen(src) + 1;
|
||||
}
|
||||
strBinary[dwCount * 3] = 0;
|
||||
ListView_SetItemText(hwndLV, index, 2, strBinary);
|
||||
HeapFree(GetProcessHeap(), 0, strBinary);
|
||||
ListView_SetItemText(hwndLV, index, 2, str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
else
|
||||
{
|
||||
TCHAR szText[128];
|
||||
LoadString(hInst, IDS_BINARY_EMPTY, szText, sizeof(szText)/sizeof(TCHAR));
|
||||
ListView_SetItemText(hwndLV, index, 2, szText);
|
||||
}
|
||||
ListView_SetItemText(hwndLV, index, 2, _T(""));
|
||||
}
|
||||
break;
|
||||
else
|
||||
ListView_SetItemText(hwndLV, index, 2, _T(""));
|
||||
}
|
||||
break;
|
||||
case REG_DWORD:
|
||||
{
|
||||
TCHAR buf[200];
|
||||
if(dwCount == sizeof(DWORD))
|
||||
{
|
||||
wsprintf(buf, _T("0x%08x (%u)"), *(DWORD*)ValBuf, *(DWORD*)ValBuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadString(hInst, IDS_INVALID_DWORD, buf, sizeof(buf)/sizeof(TCHAR));
|
||||
}
|
||||
ListView_SetItemText(hwndLV, index, 2, buf);
|
||||
}
|
||||
/* lpsRes = convertHexToDWORDStr(lpbData, dwLen); */
|
||||
break;
|
||||
default:
|
||||
{
|
||||
unsigned int i;
|
||||
LPBYTE pData = (LPBYTE)ValBuf;
|
||||
LPTSTR strBinary;
|
||||
if(dwCount > 0)
|
||||
{
|
||||
strBinary = HeapAlloc(GetProcessHeap(), 0, (dwCount * sizeof(TCHAR) * 3) + sizeof(TCHAR));
|
||||
for (i = 0; i < dwCount; i++)
|
||||
{
|
||||
wsprintf( strBinary + i*3, _T("%02X "), pData[i] );
|
||||
}
|
||||
strBinary[dwCount * 3] = 0;
|
||||
ListView_SetItemText(hwndLV, index, 2, strBinary);
|
||||
HeapFree(GetProcessHeap(), 0, strBinary);
|
||||
}
|
||||
else
|
||||
{
|
||||
TCHAR szText[128];
|
||||
LoadString(hInst, IDS_BINARY_EMPTY, szText, sizeof(szText)/sizeof(TCHAR));
|
||||
ListView_SetItemText(hwndLV, index, 2, szText);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -258,7 +261,8 @@ static BOOL CreateListColumns(HWND hWndListView)
|
|||
lvC.pszText = szText;
|
||||
|
||||
/* Load the column labels from the resource file. */
|
||||
for (index = 0; index < MAX_LIST_COLUMNS; index++) {
|
||||
for (index = 0; index < MAX_LIST_COLUMNS; index++)
|
||||
{
|
||||
lvC.iSubItem = index;
|
||||
lvC.cx = default_column_widths[index];
|
||||
lvC.fmt = column_alignment[index];
|
||||
|
@ -288,7 +292,7 @@ static BOOL InitListViewImageLists(HWND hwndLV)
|
|||
/* Fail if not all of the images were added. */
|
||||
if (ImageList_GetImageCount(himl) < NUM_ICONS)
|
||||
{
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Associate the image list with the tree view control. */
|
||||
|
@ -306,13 +310,15 @@ static void OnGetDispInfo(NMLVDISPINFO* plvdi)
|
|||
plvdi->item.pszText = NULL;
|
||||
plvdi->item.cchTextMax = 0;
|
||||
|
||||
switch (plvdi->item.iSubItem) {
|
||||
switch (plvdi->item.iSubItem)
|
||||
{
|
||||
case 0:
|
||||
LoadString(hInst, IDS_DEFAULT_VALUE_NAME, buffer, sizeof(buffer)/sizeof(TCHAR));
|
||||
plvdi->item.pszText = buffer;
|
||||
plvdi->item.pszText = buffer;
|
||||
break;
|
||||
case 1:
|
||||
switch (((LINE_INFO*)plvdi->item.lParam)->dwValType) {
|
||||
switch (((LINE_INFO*)plvdi->item.lParam)->dwValType)
|
||||
{
|
||||
case REG_NONE:
|
||||
plvdi->item.pszText = _T("REG_NONE");
|
||||
break;
|
||||
|
@ -349,13 +355,14 @@ static void OnGetDispInfo(NMLVDISPINFO* plvdi)
|
|||
case REG_QWORD: /* REG_QWORD_LITTLE_ENDIAN */
|
||||
plvdi->item.pszText = _T("REG_QWORD");
|
||||
break;
|
||||
default: {
|
||||
default:
|
||||
{
|
||||
TCHAR buf2[200];
|
||||
LoadString(hInst, IDS_UNKNOWN_TYPE, buf2, sizeof(buf2)/sizeof(TCHAR));
|
||||
wsprintf(buffer, buf2, ((LINE_INFO*)plvdi->item.lParam)->dwValType);
|
||||
LoadString(hInst, IDS_UNKNOWN_TYPE, buf2, sizeof(buf2)/sizeof(TCHAR));
|
||||
wsprintf(buffer, buf2, ((LINE_INFO*)plvdi->item.lParam)->dwValType);
|
||||
plvdi->item.pszText = buffer;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
@ -377,7 +384,8 @@ static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSor
|
|||
|
||||
if (g_columnToSort == 1 && l->dwValType != r->dwValType)
|
||||
return g_invertSort ? (int)r->dwValType - (int)l->dwValType : (int)l->dwValType - (int)r->dwValType;
|
||||
if (g_columnToSort == 2) {
|
||||
if (g_columnToSort == 2)
|
||||
{
|
||||
/* FIXME: Sort on value */
|
||||
}
|
||||
return g_invertSort ? _tcsicmp(r->name, l->name) : _tcsicmp(l->name, r->name);
|
||||
|
@ -388,87 +396,89 @@ BOOL ListWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result)
|
|||
NMLVDISPINFO* Info;
|
||||
UNREFERENCED_PARAMETER(wParam);
|
||||
*Result = TRUE;
|
||||
switch (((LPNMHDR)lParam)->code) {
|
||||
case LVN_GETDISPINFO:
|
||||
OnGetDispInfo((NMLVDISPINFO*)lParam);
|
||||
return TRUE;
|
||||
case LVN_COLUMNCLICK:
|
||||
if (g_columnToSort == (DWORD)((LPNMLISTVIEW)lParam)->iSubItem)
|
||||
g_invertSort = !g_invertSort;
|
||||
else {
|
||||
g_columnToSort = ((LPNMLISTVIEW)lParam)->iSubItem;
|
||||
g_invertSort = FALSE;
|
||||
}
|
||||
switch (((LPNMHDR)lParam)->code)
|
||||
{
|
||||
case LVN_GETDISPINFO:
|
||||
OnGetDispInfo((NMLVDISPINFO*)lParam);
|
||||
return TRUE;
|
||||
case LVN_COLUMNCLICK:
|
||||
if (g_columnToSort == (DWORD)((LPNMLISTVIEW)lParam)->iSubItem)
|
||||
g_invertSort = !g_invertSort;
|
||||
else
|
||||
{
|
||||
g_columnToSort = ((LPNMLISTVIEW)lParam)->iSubItem;
|
||||
g_invertSort = FALSE;
|
||||
}
|
||||
|
||||
(void)ListView_SortItems(hWnd, CompareFunc, (WPARAM)hWnd);
|
||||
return TRUE;
|
||||
case NM_DBLCLK:
|
||||
case NM_RETURN:
|
||||
(void)ListView_SortItems(hWnd, CompareFunc, (WPARAM)hWnd);
|
||||
return TRUE;
|
||||
case NM_DBLCLK:
|
||||
case NM_RETURN:
|
||||
{
|
||||
SendMessage(hFrameWnd, WM_COMMAND, MAKEWPARAM(ID_EDIT_MODIFY, 0), 0);
|
||||
}
|
||||
return TRUE;
|
||||
case NM_SETFOCUS:
|
||||
g_pChildWnd->nFocusPanel = 0;
|
||||
break;
|
||||
case LVN_BEGINLABELEDIT:
|
||||
Info = (NMLVDISPINFO*)lParam;
|
||||
if(Info)
|
||||
{
|
||||
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
|
||||
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
|
||||
{
|
||||
SendMessage(hFrameWnd, WM_COMMAND, MAKEWPARAM(ID_EDIT_MODIFY, 0), 0);
|
||||
*Result = TRUE;
|
||||
}
|
||||
return TRUE;
|
||||
case NM_SETFOCUS:
|
||||
g_pChildWnd->nFocusPanel = 0;
|
||||
break;
|
||||
case LVN_BEGINLABELEDIT:
|
||||
Info = (NMLVDISPINFO*)lParam;
|
||||
if(Info)
|
||||
else
|
||||
{
|
||||
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
|
||||
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
|
||||
*Result = FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
*Result = TRUE;
|
||||
return TRUE;
|
||||
case LVN_ENDLABELEDIT:
|
||||
Info = (NMLVDISPINFO*)lParam;
|
||||
if(Info && Info->item.pszText)
|
||||
{
|
||||
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
|
||||
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
|
||||
{
|
||||
*Result = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(_tcslen(Info->item.pszText) == 0)
|
||||
{
|
||||
TCHAR msg[128], caption[128];
|
||||
|
||||
LoadString(hInst, IDS_ERR_RENVAL_TOEMPTY, msg, sizeof(msg)/sizeof(TCHAR));
|
||||
LoadString(hInst, IDS_ERR_RENVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
MessageBox(0, msg, caption, 0);
|
||||
*Result = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
*Result = FALSE;
|
||||
HKEY hKeyRoot;
|
||||
LPCTSTR keyPath;
|
||||
LONG lResult;
|
||||
|
||||
keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
|
||||
lResult = RenameValue(hKeyRoot, keyPath, Info->item.pszText, lineinfo->name);
|
||||
lineinfo->name = realloc(lineinfo->name, (_tcslen(Info->item.pszText)+1)*sizeof(TCHAR));
|
||||
if (lineinfo->name != NULL)
|
||||
_tcscpy(lineinfo->name, Info->item.pszText);
|
||||
|
||||
*Result = TRUE;
|
||||
return (lResult == ERROR_SUCCESS);
|
||||
}
|
||||
}
|
||||
else
|
||||
*Result = TRUE;
|
||||
return TRUE;
|
||||
case LVN_ENDLABELEDIT:
|
||||
Info = (NMLVDISPINFO*)lParam;
|
||||
if(Info && Info->item.pszText)
|
||||
{
|
||||
PLINE_INFO lineinfo = (PLINE_INFO)Info->item.lParam;
|
||||
if(!lineinfo->name || !_tcscmp(lineinfo->name, _T("")))
|
||||
{
|
||||
*Result = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(_tcslen(Info->item.pszText) == 0)
|
||||
{
|
||||
TCHAR msg[128], caption[128];
|
||||
}
|
||||
else
|
||||
*Result = TRUE;
|
||||
|
||||
LoadString(hInst, IDS_ERR_RENVAL_TOEMPTY, msg, sizeof(msg)/sizeof(TCHAR));
|
||||
LoadString(hInst, IDS_ERR_RENVAL_CAPTION, caption, sizeof(caption)/sizeof(TCHAR));
|
||||
MessageBox(0, msg, caption, 0);
|
||||
*Result = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
HKEY hKeyRoot;
|
||||
LPCTSTR keyPath;
|
||||
LONG lResult;
|
||||
|
||||
keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
|
||||
lResult = RenameValue(hKeyRoot, keyPath, Info->item.pszText, lineinfo->name);
|
||||
lineinfo->name = realloc(lineinfo->name, (_tcslen(Info->item.pszText)+1)*sizeof(TCHAR));
|
||||
if (lineinfo->name != NULL)
|
||||
_tcscpy(lineinfo->name, Info->item.pszText);
|
||||
|
||||
*Result = TRUE;
|
||||
return (lResult == ERROR_SUCCESS);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
*Result = TRUE;
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -500,10 +510,11 @@ fail:
|
|||
void DestroyListView(HWND hwndLV)
|
||||
{
|
||||
INT count, i;
|
||||
LVITEM item;
|
||||
LVITEM item;
|
||||
|
||||
count = ListView_GetItemCount(hwndLV);
|
||||
for (i = 0; i < count; i++) {
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
item.mask = LVIF_PARAM;
|
||||
item.iItem = i;
|
||||
(void)ListView_GetItem(hwndLV, &item);
|
||||
|
@ -555,7 +566,8 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
|
|||
/* AddEntryToList(hwndLV, _T("(Default)"), dwValType, ValBuf, dwValSize); */
|
||||
/* } */
|
||||
/* dwValSize = max_val_size; */
|
||||
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS) {
|
||||
while (RegEnumValue(hNewKey, dwIndex, ValName, &dwValNameLen, NULL, &dwValType, ValBuf, &dwValSize) == ERROR_SUCCESS)
|
||||
{
|
||||
/* Add a terminating 0 character. Usually this is only necessary for strings. */
|
||||
ValBuf[dwValSize] = 0;
|
||||
#ifdef UNICODE
|
||||
|
@ -568,7 +580,7 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
|
|||
++dwIndex;
|
||||
if(!_tcscmp(ValName, _T("")))
|
||||
{
|
||||
AddedDefault = TRUE;
|
||||
AddedDefault = TRUE;
|
||||
}
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, ValBuf);
|
||||
|
@ -576,7 +588,7 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
|
|||
}
|
||||
if(!AddedDefault)
|
||||
{
|
||||
AddEntryToList(hwndLV, _T(""), REG_SZ, NULL, 0, 0, FALSE);
|
||||
AddEntryToList(hwndLV, _T(""), REG_SZ, NULL, 0, 0, FALSE);
|
||||
}
|
||||
ListView_SortItems(hwndLV, CompareFunc, (WPARAM)hwndLV);
|
||||
c = ListView_GetItemCount(hwndLV);
|
||||
|
@ -585,8 +597,8 @@ BOOL RefreshListView(HWND hwndLV, HKEY hKey, LPCTSTR keyPath)
|
|||
ListView_SetItemState(hwndLV, i, 0, LVIS_FOCUSED | LVIS_SELECTED);
|
||||
}
|
||||
ListView_SetItemState(hwndLV, iListViewSelect,
|
||||
LVIS_FOCUSED | LVIS_SELECTED,
|
||||
LVIS_FOCUSED | LVIS_SELECTED);
|
||||
LVIS_FOCUSED | LVIS_SELECTED,
|
||||
LVIS_FOCUSED | LVIS_SELECTED);
|
||||
RegCloseKey(hNewKey);
|
||||
SendMessage(hwndLV, WM_SETREDRAW, TRUE, 0);
|
||||
|
||||
|
|
|
@ -88,9 +88,9 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
wcChild.hInstance = hInstance;
|
||||
wcChild.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_REGEDIT));
|
||||
wcChild.hCursor = LoadCursor(0, IDC_ARROW),
|
||||
wcChild.lpszClassName = szChildClass,
|
||||
wcChild.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_REGEDIT), IMAGE_ICON,
|
||||
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
|
||||
wcChild.lpszClassName = szChildClass,
|
||||
wcChild.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_REGEDIT), IMAGE_ICON,
|
||||
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED);
|
||||
|
||||
RegisterClassEx(&wcChild); /* register child windows class */
|
||||
|
||||
|
@ -107,13 +107,13 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
AclUiAvailable = InitializeAclUiDll();
|
||||
if(!AclUiAvailable)
|
||||
{
|
||||
/* hide the Edit/Permissions... menu entry */
|
||||
if(hEditMenu != NULL)
|
||||
{
|
||||
RemoveMenu(hEditMenu, ID_EDIT_PERMISSIONS, MF_BYCOMMAND);
|
||||
/* remove the separator after the menu item */
|
||||
RemoveMenu(hEditMenu, 4, MF_BYPOSITION);
|
||||
}
|
||||
/* hide the Edit/Permissions... menu entry */
|
||||
if(hEditMenu != NULL)
|
||||
{
|
||||
RemoveMenu(hEditMenu, ID_EDIT_PERMISSIONS, MF_BYCOMMAND);
|
||||
/* remove the separator after the menu item */
|
||||
RemoveMenu(hEditMenu, 4, MF_BYPOSITION);
|
||||
}
|
||||
}
|
||||
|
||||
if(hEditMenu != NULL)
|
||||
|
@ -129,14 +129,16 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
NULL, hMenuFrame, hInstance, NULL/*lpParam*/);
|
||||
|
||||
if (!hFrameWnd) {
|
||||
if (!hFrameWnd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Create the status bar */
|
||||
hStatusBar = CreateStatusWindow(WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBT_NOBORDERS,
|
||||
_T(""), hFrameWnd, STATUS_WINDOW);
|
||||
if (hStatusBar) {
|
||||
if (hStatusBar)
|
||||
{
|
||||
/* Create the status bar panes */
|
||||
SetupStatusBar(hFrameWnd, FALSE);
|
||||
CheckMenuItem(GetSubMenu(hMenuFrame, ID_VIEW_MENU), ID_VIEW_STATUSBAR, MF_BYCOMMAND|MF_CHECKED);
|
||||
|
@ -144,7 +146,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
|
||||
/* Restore position */
|
||||
if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, _T("LastKey"),
|
||||
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
||||
szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS)
|
||||
{
|
||||
SelectNode(g_pChildWnd->hTreeWnd, szBuffer);
|
||||
}
|
||||
|
@ -159,8 +161,9 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
/* we need to destroy the main menu before destroying the main window
|
||||
to avoid a memory leak */
|
||||
|
||||
void DestroyMainMenu() {
|
||||
DestroyMenu(hMenuFrame);
|
||||
void DestroyMainMenu()
|
||||
{
|
||||
DestroyMenu(hMenuFrame);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -175,11 +178,11 @@ void ExitInstance(HINSTANCE hInstance)
|
|||
|
||||
BOOL TranslateChildTabMessage(MSG *msg)
|
||||
{
|
||||
if (msg->message != WM_KEYDOWN) return FALSE;
|
||||
if (msg->wParam != VK_TAB) return FALSE;
|
||||
if (GetParent(msg->hwnd) != g_pChildWnd->hWnd) return FALSE;
|
||||
PostMessage(g_pChildWnd->hWnd, WM_COMMAND, ID_SWITCH_PANELS, 0);
|
||||
return TRUE;
|
||||
if (msg->message != WM_KEYDOWN) return FALSE;
|
||||
if (msg->wParam != VK_TAB) return FALSE;
|
||||
if (GetParent(msg->hwnd) != g_pChildWnd->hWnd) return FALSE;
|
||||
PostMessage(g_pChildWnd->hWnd, WM_COMMAND, ID_SWITCH_PANELS, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int APIENTRY wWinMain(HINSTANCE hInstance,
|
||||
|
@ -192,7 +195,8 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
|
|||
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
|
||||
if (ProcessCmdLine(lpCmdLine)) {
|
||||
if (ProcessCmdLine(lpCmdLine))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -205,15 +209,18 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
|
|||
hInst = hInstance;
|
||||
|
||||
/* Perform application initialization */
|
||||
if (!InitInstance(hInstance, nCmdShow)) {
|
||||
if (!InitInstance(hInstance, nCmdShow))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(ID_ACCEL));
|
||||
|
||||
/* Main message loop */
|
||||
while (GetMessage(&msg, (HWND)NULL, 0, 0)) {
|
||||
while (GetMessage(&msg, (HWND)NULL, 0, 0))
|
||||
{
|
||||
if (!TranslateAccelerator(hFrameWnd, hAccel, &msg)
|
||||
&& !TranslateChildTabMessage(&msg)) {
|
||||
&& !TranslateChildTabMessage(&msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,8 @@ extern HINSTANCE hInst;
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
enum OPTION_FLAGS {
|
||||
enum OPTION_FLAGS
|
||||
{
|
||||
OPTIONS_AUTO_REFRESH = 0x01,
|
||||
OPTIONS_READ_ONLY_MODE = 0x02,
|
||||
OPTIONS_CONFIRM_ON_DELETE = 0x04,
|
||||
|
@ -53,12 +54,13 @@ enum OPTION_FLAGS {
|
|||
OPTIONS_VIEW_DATA_ONLY = 0x40,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
typedef struct
|
||||
{
|
||||
HWND hWnd;
|
||||
HWND hTreeWnd;
|
||||
HWND hListWnd;
|
||||
HWND hAddressBarWnd;
|
||||
HWND hAddressBtnWnd;
|
||||
HWND hAddressBarWnd;
|
||||
HWND hAddressBtnWnd;
|
||||
int nFocusPanel; /* 0: left 1: right */
|
||||
int nSplitPos;
|
||||
WINDOWPLACEMENT pos;
|
||||
|
|
|
@ -52,7 +52,8 @@ static const char *usage =
|
|||
"This program is command-line compatible with Microsoft Windows\n"
|
||||
"regedit.\n";
|
||||
|
||||
typedef enum {
|
||||
typedef enum
|
||||
{
|
||||
ACTION_UNDEF, ACTION_ADD, ACTION_EXPORT, ACTION_DELETE
|
||||
} REGEDIT_ACTION;
|
||||
|
||||
|
@ -79,40 +80,52 @@ void get_file_name(LPWSTR *command_line, LPWSTR file_name)
|
|||
int pos = 0; /* position of pointer "s" in *command_line */
|
||||
file_name[0] = 0;
|
||||
|
||||
if (!s[0]) {
|
||||
if (!s[0])
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (s[0] == L'"') {
|
||||
if (s[0] == L'"')
|
||||
{
|
||||
s++;
|
||||
(*command_line)++;
|
||||
while(s[0] != L'"') {
|
||||
if (!s[0]) {
|
||||
while(s[0] != L'"')
|
||||
{
|
||||
if (!s[0])
|
||||
{
|
||||
fprintf(stderr, "%s: Unexpected end of file name!\n", getAppName());
|
||||
exit(1);
|
||||
}
|
||||
s++;
|
||||
pos++;
|
||||
}
|
||||
} else {
|
||||
while(s[0] && !iswspace(s[0])) {
|
||||
}
|
||||
else
|
||||
{
|
||||
while(s[0] && !iswspace(s[0]))
|
||||
{
|
||||
s++;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
memcpy(file_name, *command_line, pos * sizeof((*command_line)[0]));
|
||||
/* remove the last backslash */
|
||||
if (file_name[pos - 1] == L'\\') {
|
||||
if (file_name[pos - 1] == L'\\')
|
||||
{
|
||||
file_name[pos - 1] = L'\0';
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
file_name[pos] = L'\0';
|
||||
}
|
||||
|
||||
if (s[0]) {
|
||||
if (s[0])
|
||||
{
|
||||
s++;
|
||||
pos++;
|
||||
}
|
||||
while(s[0] && iswspace(s[0])) {
|
||||
while(s[0] && iswspace(s[0]))
|
||||
{
|
||||
s++;
|
||||
pos++;
|
||||
}
|
||||
|
@ -121,64 +134,75 @@ void get_file_name(LPWSTR *command_line, LPWSTR file_name)
|
|||
|
||||
BOOL PerformRegAction(REGEDIT_ACTION action, LPWSTR s)
|
||||
{
|
||||
switch (action) {
|
||||
case ACTION_ADD: {
|
||||
WCHAR filename[MAX_PATH];
|
||||
FILE *fp;
|
||||
switch (action)
|
||||
{
|
||||
case ACTION_ADD:
|
||||
{
|
||||
WCHAR filename[MAX_PATH];
|
||||
FILE *fp;
|
||||
|
||||
get_file_name(&s, filename);
|
||||
if (!filename[0]) {
|
||||
fprintf(stderr, "%s: No file name is specified\n", getAppName());
|
||||
fprintf(stderr, usage);
|
||||
exit(4);
|
||||
}
|
||||
|
||||
while(filename[0]) {
|
||||
fp = _wfopen(filename, L"r");
|
||||
if (fp == NULL)
|
||||
{
|
||||
LPSTR p = GetMultiByteString(filename);
|
||||
perror("");
|
||||
fprintf(stderr, "%s: Can't open file \"%s\"\n", getAppName(), p);
|
||||
HeapFree(GetProcessHeap(), 0, p);
|
||||
exit(5);
|
||||
}
|
||||
import_registry_file(fp);
|
||||
get_file_name(&s, filename);
|
||||
}
|
||||
break;
|
||||
get_file_name(&s, filename);
|
||||
if (!filename[0])
|
||||
{
|
||||
fprintf(stderr, "%s: No file name is specified\n", getAppName());
|
||||
fprintf(stderr, usage);
|
||||
exit(4);
|
||||
}
|
||||
case ACTION_DELETE: {
|
||||
|
||||
while(filename[0])
|
||||
{
|
||||
fp = _wfopen(filename, L"r");
|
||||
if (fp == NULL)
|
||||
{
|
||||
LPSTR p = GetMultiByteString(filename);
|
||||
perror("");
|
||||
fprintf(stderr, "%s: Can't open file \"%s\"\n", getAppName(), p);
|
||||
HeapFree(GetProcessHeap(), 0, p);
|
||||
exit(5);
|
||||
}
|
||||
import_registry_file(fp);
|
||||
get_file_name(&s, filename);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ACTION_DELETE:
|
||||
{
|
||||
WCHAR reg_key_name[KEY_MAX_LEN];
|
||||
get_file_name(&s, reg_key_name);
|
||||
if (!reg_key_name[0])
|
||||
{
|
||||
fprintf(stderr, "%s: No registry key is specified for removal\n", getAppName());
|
||||
fprintf(stderr, usage);
|
||||
exit(6);
|
||||
}
|
||||
delete_registry_key(reg_key_name);
|
||||
break;
|
||||
}
|
||||
case ACTION_EXPORT:
|
||||
{
|
||||
WCHAR filename[MAX_PATH];
|
||||
|
||||
filename[0] = _T('\0');
|
||||
get_file_name(&s, filename);
|
||||
if (!filename[0])
|
||||
{
|
||||
fprintf(stderr, "%s: No file name is specified\n", getAppName());
|
||||
fprintf(stderr, usage);
|
||||
exit(7);
|
||||
}
|
||||
|
||||
if (s[0])
|
||||
{
|
||||
WCHAR reg_key_name[KEY_MAX_LEN];
|
||||
get_file_name(&s, reg_key_name);
|
||||
if (!reg_key_name[0]) {
|
||||
fprintf(stderr, "%s: No registry key is specified for removal\n", getAppName());
|
||||
fprintf(stderr, usage);
|
||||
exit(6);
|
||||
}
|
||||
delete_registry_key(reg_key_name);
|
||||
break;
|
||||
export_registry_key(filename, reg_key_name, REG_FORMAT_4);
|
||||
}
|
||||
case ACTION_EXPORT: {
|
||||
WCHAR filename[MAX_PATH];
|
||||
|
||||
filename[0] = _T('\0');
|
||||
get_file_name(&s, filename);
|
||||
if (!filename[0]) {
|
||||
fprintf(stderr, "%s: No file name is specified\n", getAppName());
|
||||
fprintf(stderr, usage);
|
||||
exit(7);
|
||||
}
|
||||
|
||||
if (s[0]) {
|
||||
WCHAR reg_key_name[KEY_MAX_LEN];
|
||||
get_file_name(&s, reg_key_name);
|
||||
export_registry_key(filename, reg_key_name, REG_FORMAT_4);
|
||||
} else {
|
||||
export_registry_key(filename, NULL, REG_FORMAT_4);
|
||||
}
|
||||
break;
|
||||
else
|
||||
{
|
||||
export_registry_key(filename, NULL, REG_FORMAT_4);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
fprintf(stderr, "%s: Unhandled action!\n", getAppName());
|
||||
exit(8);
|
||||
|
@ -196,9 +220,12 @@ BOOL PerformRegAction(REGEDIT_ACTION action, LPWSTR s)
|
|||
*/
|
||||
static void error_unknown_switch(WCHAR chu, LPWSTR s)
|
||||
{
|
||||
if (iswalpha(chu)) {
|
||||
if (iswalpha(chu))
|
||||
{
|
||||
fprintf(stderr, "%s: Undefined switch /%c!\n", getAppName(), chu);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "%s: Alphabetic character is expected after '%c' "
|
||||
"in swit ch specification\n", getAppName(), *(s - 1));
|
||||
}
|
||||
|
@ -220,12 +247,16 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
|
|||
ch = *s;
|
||||
ch2 = *(s + 1);
|
||||
chu = (WCHAR)towupper(ch);
|
||||
if (!ch2 || iswspace(ch2)) {
|
||||
if (!ch2 || iswspace(ch2))
|
||||
{
|
||||
if (chu == L'S' || chu == L'V')
|
||||
{
|
||||
/* ignore these switches */
|
||||
} else {
|
||||
switch (chu) {
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (chu)
|
||||
{
|
||||
case L'D':
|
||||
action = ACTION_DELETE;
|
||||
break;
|
||||
|
@ -242,14 +273,19 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
|
|||
}
|
||||
}
|
||||
s++;
|
||||
} else {
|
||||
if (ch2 == L':') {
|
||||
switch (chu) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ch2 == L':')
|
||||
{
|
||||
switch (chu)
|
||||
{
|
||||
case L'L':
|
||||
/* fall through */
|
||||
case L'R':
|
||||
s += 2;
|
||||
while (*s && !iswspace(*s)) {
|
||||
while (*s && !iswspace(*s))
|
||||
{
|
||||
s++;
|
||||
}
|
||||
break;
|
||||
|
@ -257,7 +293,9 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
|
|||
error_unknown_switch(chu, s);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* this is a file name, starting from '/' */
|
||||
s--;
|
||||
break;
|
||||
|
@ -265,7 +303,8 @@ BOOL ProcessCmdLine(LPWSTR lpCmdLine)
|
|||
}
|
||||
/* skip spaces to the next parameter */
|
||||
ch = *s;
|
||||
while (ch && iswspace(ch)) {
|
||||
while (ch && iswspace(ch))
|
||||
{
|
||||
s++;
|
||||
ch = *s;
|
||||
}
|
||||
|
|
|
@ -31,10 +31,10 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||
|
||||
#include "rsrc.rc"
|
||||
|
||||
IDI_OPEN_FILE ICON DISCARDABLE res/folderopen.ico
|
||||
IDI_CLOSED_FILE ICON DISCARDABLE res/folder.ico
|
||||
IDI_ROOT ICON DISCARDABLE res/computer.ico
|
||||
IDI_STRING ICON DISCARDABLE res/string.ico
|
||||
IDI_BIN ICON DISCARDABLE res/bin.ico
|
||||
IDI_REGEDIT ICON DISCARDABLE res/regedit.ico
|
||||
IDI_REGFILE ICON DISCARDABLE res/regfile.ico
|
||||
IDI_OPEN_FILE ICON DISCARDABLE res/folderopen.ico
|
||||
IDI_CLOSED_FILE ICON DISCARDABLE res/folder.ico
|
||||
IDI_ROOT ICON DISCARDABLE res/computer.ico
|
||||
IDI_STRING ICON DISCARDABLE res/string.ico
|
||||
IDI_BIN ICON DISCARDABLE res/bin.ico
|
||||
IDI_REGEDIT ICON DISCARDABLE res/regedit.ico
|
||||
IDI_REGFILE ICON DISCARDABLE res/regfile.ico
|
||||
|
|
|
@ -30,22 +30,25 @@
|
|||
*/
|
||||
#define REG_FILE_HEX_LINE_LEN (2 + 25 * 3)
|
||||
|
||||
static const CHAR *reg_class_names[] = {
|
||||
"HKEY_LOCAL_MACHINE", "HKEY_USERS", "HKEY_CLASSES_ROOT",
|
||||
"HKEY_CURRENT_CONFIG", "HKEY_CURRENT_USER", "HKEY_DYN_DATA"
|
||||
};
|
||||
static const CHAR *reg_class_names[] =
|
||||
{
|
||||
"HKEY_LOCAL_MACHINE", "HKEY_USERS", "HKEY_CLASSES_ROOT",
|
||||
"HKEY_CURRENT_CONFIG", "HKEY_CURRENT_USER", "HKEY_DYN_DATA"
|
||||
};
|
||||
|
||||
#define REG_CLASS_NUMBER (sizeof(reg_class_names) / sizeof(reg_class_names[0]))
|
||||
|
||||
const WCHAR* reg_class_namesW[REG_CLASS_NUMBER] = {
|
||||
const WCHAR* reg_class_namesW[REG_CLASS_NUMBER] =
|
||||
{
|
||||
L"HKEY_LOCAL_MACHINE", L"HKEY_USERS", L"HKEY_CLASSES_ROOT",
|
||||
L"HKEY_CURRENT_CONFIG", L"HKEY_CURRENT_USER", L"HKEY_DYN_DATA"
|
||||
};
|
||||
|
||||
static HKEY reg_class_keys[REG_CLASS_NUMBER] = {
|
||||
HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT,
|
||||
HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA
|
||||
};
|
||||
static HKEY reg_class_keys[REG_CLASS_NUMBER] =
|
||||
{
|
||||
HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT,
|
||||
HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA
|
||||
};
|
||||
|
||||
/* return values */
|
||||
#define NOT_ENOUGH_MEMORY 1
|
||||
|
@ -149,7 +152,8 @@ static BOOL convertHexToDWord(WCHAR* str, DWORD *dw)
|
|||
char dummy;
|
||||
|
||||
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, 9, NULL, NULL);
|
||||
if (lstrlenW(str) > 8 || sscanf(buf, "%lx%c", dw, &dummy) != 1) {
|
||||
if (lstrlenW(str) > 8 || sscanf(buf, "%lx%c", dw, &dummy) != 1)
|
||||
{
|
||||
fprintf(stderr,"%s: ERROR, invalid hex value\n", getAppName());
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -172,12 +176,14 @@ static BYTE* convertHexCSVToHex(WCHAR *str, DWORD *size)
|
|||
s = str;
|
||||
d = data;
|
||||
*size=0;
|
||||
while (*s != '\0') {
|
||||
while (*s != '\0')
|
||||
{
|
||||
UINT wc;
|
||||
WCHAR *end;
|
||||
|
||||
wc = wcstoul(s,&end, 16);
|
||||
if (end == s || wc > 0xff || (*end && *end != L',')) {
|
||||
if (end == s || wc > 0xff || (*end && *end != L','))
|
||||
{
|
||||
char* strA = GetMultiByteString(s);
|
||||
fprintf(stderr,"%s: ERROR converting CSV hex stream. Invalid value at '%s'\n",
|
||||
getAppName(), strA);
|
||||
|
@ -203,7 +209,13 @@ static BYTE* convertHexCSVToHex(WCHAR *str, DWORD *size)
|
|||
*/
|
||||
static DWORD getDataType(LPWSTR *lpValue, DWORD* parse_type)
|
||||
{
|
||||
struct data_type { const WCHAR *tag; int len; int type; int parse_type; };
|
||||
struct data_type
|
||||
{
|
||||
const WCHAR *tag;
|
||||
int len;
|
||||
int type;
|
||||
int parse_type;
|
||||
};
|
||||
|
||||
static const WCHAR quote[] = {'"'};
|
||||
static const WCHAR str[] = {'s','t','r',':','"'};
|
||||
|
@ -213,19 +225,20 @@ static DWORD getDataType(LPWSTR *lpValue, DWORD* parse_type)
|
|||
static const WCHAR hexp[] = {'h','e','x','('};
|
||||
|
||||
static const struct data_type data_types[] = { /* actual type */ /* type to assume for parsing */
|
||||
{ quote, 1, REG_SZ, REG_SZ },
|
||||
{ str, 5, REG_SZ, REG_SZ },
|
||||
{ str2, 8, REG_EXPAND_SZ, REG_SZ },
|
||||
{ hex, 4, REG_BINARY, REG_BINARY },
|
||||
{ dword, 6, REG_DWORD, REG_DWORD },
|
||||
{ hexp, 4, -1, REG_BINARY },
|
||||
{ NULL, 0, 0, 0 }
|
||||
};
|
||||
{ quote, 1, REG_SZ, REG_SZ },
|
||||
{ str, 5, REG_SZ, REG_SZ },
|
||||
{ str2, 8, REG_EXPAND_SZ, REG_SZ },
|
||||
{ hex, 4, REG_BINARY, REG_BINARY },
|
||||
{ dword, 6, REG_DWORD, REG_DWORD },
|
||||
{ hexp, 4, -1, REG_BINARY },
|
||||
{ NULL, 0, 0, 0 }
|
||||
};
|
||||
|
||||
const struct data_type *ptr;
|
||||
int type;
|
||||
|
||||
for (ptr = data_types; ptr->tag; ptr++) {
|
||||
for (ptr = data_types; ptr->tag; ptr++)
|
||||
{
|
||||
if (wcsncmp(ptr->tag, *lpValue, ptr->len))
|
||||
continue;
|
||||
|
||||
|
@ -233,14 +246,18 @@ static DWORD getDataType(LPWSTR *lpValue, DWORD* parse_type)
|
|||
*parse_type = ptr->parse_type;
|
||||
type=ptr->type;
|
||||
*lpValue+=ptr->len;
|
||||
if (type == -1) {
|
||||
if (type == -1)
|
||||
{
|
||||
WCHAR* end;
|
||||
|
||||
/* "hex(xx):" is special */
|
||||
type = (int)wcstoul( *lpValue , &end, 16 );
|
||||
if (**lpValue=='\0' || *end!=')' || *(end+1)!=':') {
|
||||
if (**lpValue=='\0' || *end!=')' || *(end+1)!=':')
|
||||
{
|
||||
type=REG_NONE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
*lpValue = end + 2;
|
||||
}
|
||||
}
|
||||
|
@ -258,10 +275,13 @@ static void REGPROC_unescape_string(WCHAR* str)
|
|||
int str_idx = 0; /* current character under analysis */
|
||||
int val_idx = 0; /* the last character of the unescaped string */
|
||||
int len = lstrlenW(str);
|
||||
for (str_idx = 0; str_idx < len; str_idx++, val_idx++) {
|
||||
if (str[str_idx] == '\\') {
|
||||
for (str_idx = 0; str_idx < len; str_idx++, val_idx++)
|
||||
{
|
||||
if (str[str_idx] == '\\')
|
||||
{
|
||||
str_idx++;
|
||||
switch (str[str_idx]) {
|
||||
switch (str[str_idx])
|
||||
{
|
||||
case 'n':
|
||||
str[val_idx] = '\n';
|
||||
break;
|
||||
|
@ -271,11 +291,13 @@ static void REGPROC_unescape_string(WCHAR* str)
|
|||
break;
|
||||
default:
|
||||
fprintf(stderr,"Warning! Unrecognized escape sequence: \\%c'\n",
|
||||
str[str_idx]);
|
||||
str[str_idx]);
|
||||
str[val_idx] = str[str_idx];
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
str[val_idx] = str[str_idx];
|
||||
}
|
||||
}
|
||||
|
@ -310,9 +332,11 @@ static BOOL parseKeyName(LPWSTR lpKeyName, HKEY *hKey, LPWSTR *lpKeyPath)
|
|||
}
|
||||
*hKey = NULL;
|
||||
|
||||
for (i = 0; i < REG_CLASS_NUMBER; i++) {
|
||||
for (i = 0; i < REG_CLASS_NUMBER; i++)
|
||||
{
|
||||
if (CompareStringW(LOCALE_USER_DEFAULT, 0, lpKeyName, len, reg_class_namesW[i], len) == CSTR_EQUAL &&
|
||||
len == lstrlenW(reg_class_namesW[i])) {
|
||||
len == lstrlenW(reg_class_namesW[i]))
|
||||
{
|
||||
*hKey = reg_class_keys[i];
|
||||
break;
|
||||
}
|
||||
|
@ -404,12 +428,12 @@ static LONG setValue(WCHAR* val_name, WCHAR* val_data, BOOL is_unicode)
|
|||
}
|
||||
|
||||
res = RegSetValueExW(
|
||||
currentKeyHandle,
|
||||
val_name,
|
||||
0, /* Reserved */
|
||||
dwDataType,
|
||||
lpbData,
|
||||
dwLen);
|
||||
currentKeyHandle,
|
||||
val_name,
|
||||
0, /* Reserved */
|
||||
dwDataType,
|
||||
lpbData,
|
||||
dwLen);
|
||||
if (dwParseType == REG_BINARY)
|
||||
HeapFree(GetProcessHeap(), 0, lpbData);
|
||||
return res;
|
||||
|
@ -435,15 +459,15 @@ static LONG openKeyW(WCHAR* stdInput)
|
|||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
res = RegCreateKeyExW(
|
||||
keyClass, /* Class */
|
||||
keyPath, /* Sub Key */
|
||||
0, /* MUST BE 0 */
|
||||
NULL, /* object type */
|
||||
REG_OPTION_NON_VOLATILE, /* option, REG_OPTION_NON_VOLATILE ... */
|
||||
KEY_ALL_ACCESS, /* access mask, KEY_ALL_ACCESS */
|
||||
NULL, /* security attribute */
|
||||
¤tKeyHandle, /* result */
|
||||
&dwDisp); /* disposition, REG_CREATED_NEW_KEY or
|
||||
keyClass, /* Class */
|
||||
keyPath, /* Sub Key */
|
||||
0, /* MUST BE 0 */
|
||||
NULL, /* object type */
|
||||
REG_OPTION_NON_VOLATILE, /* option, REG_OPTION_NON_VOLATILE ... */
|
||||
KEY_ALL_ACCESS, /* access mask, KEY_ALL_ACCESS */
|
||||
NULL, /* security attribute */
|
||||
¤tKeyHandle, /* result */
|
||||
&dwDisp); /* disposition, REG_CREATED_NEW_KEY or
|
||||
REG_OPENED_EXISTING_KEY */
|
||||
|
||||
if (res == ERROR_SUCCESS)
|
||||
|
@ -485,29 +509,39 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
|
|||
|
||||
/* get value name */
|
||||
while ( iswspace(line[line_idx]) ) line_idx++;
|
||||
if (line[line_idx] == '@' && line[line_idx + 1] == '=') {
|
||||
if (line[line_idx] == '@' && line[line_idx + 1] == '=')
|
||||
{
|
||||
line[line_idx] = '\0';
|
||||
val_name = line;
|
||||
line_idx++;
|
||||
} else if (line[line_idx] == '\"') {
|
||||
}
|
||||
else if (line[line_idx] == '\"')
|
||||
{
|
||||
line_idx++;
|
||||
val_name = line + line_idx;
|
||||
while (TRUE) {
|
||||
while (TRUE)
|
||||
{
|
||||
if (line[line_idx] == '\\') /* skip escaped character */
|
||||
{
|
||||
line_idx += 2;
|
||||
} else {
|
||||
if (line[line_idx] == '\"') {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (line[line_idx] == '\"')
|
||||
{
|
||||
line[line_idx] = '\0';
|
||||
line_idx++;
|
||||
break;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
line_idx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
while ( iswspace(line[line_idx]) ) line_idx++;
|
||||
if (line[line_idx] != '=') {
|
||||
if (line[line_idx] != '=')
|
||||
{
|
||||
char* lineA;
|
||||
line[line_idx] = '\"';
|
||||
lineA = GetMultiByteString(line);
|
||||
|
@ -516,7 +550,9 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
|
|||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
char* lineA = GetMultiByteString(line);
|
||||
fprintf(stderr,"Warning! unrecognized line:\n%s\n", lineA);
|
||||
HeapFree(GetProcessHeap(), 0, lineA);
|
||||
|
@ -538,10 +574,10 @@ static void processSetValue(WCHAR* line, BOOL is_unicode)
|
|||
char* val_nameA = GetMultiByteString(val_name);
|
||||
char* val_dataA = GetMultiByteString(val_data);
|
||||
fprintf(stderr,"%s: ERROR Key %s not created. Value: %s, Data: %s\n",
|
||||
getAppName(),
|
||||
currentKeyName,
|
||||
val_nameA,
|
||||
val_dataA);
|
||||
getAppName(),
|
||||
currentKeyName,
|
||||
val_nameA,
|
||||
val_dataA);
|
||||
HeapFree(GetProcessHeap(), 0, val_nameA);
|
||||
HeapFree(GetProcessHeap(), 0, val_dataA);
|
||||
}
|
||||
|
@ -558,7 +594,8 @@ static void processRegEntry(WCHAR* stdInput, BOOL isUnicode)
|
|||
* We encountered the end of the file, make sure we
|
||||
* close the opened key and exit
|
||||
*/
|
||||
if (stdInput == NULL) {
|
||||
if (stdInput == NULL)
|
||||
{
|
||||
closeKey();
|
||||
return;
|
||||
}
|
||||
|
@ -578,19 +615,22 @@ static void processRegEntry(WCHAR* stdInput, BOOL isUnicode)
|
|||
if ( stdInput[0] == '-')
|
||||
{
|
||||
delete_registry_key(stdInput + 1);
|
||||
} else if ( openKeyW(stdInput) != ERROR_SUCCESS )
|
||||
}
|
||||
else if ( openKeyW(stdInput) != ERROR_SUCCESS )
|
||||
{
|
||||
char* stdInputA = GetMultiByteString(stdInput);
|
||||
fprintf(stderr,"%s: setValue failed to open key %s\n",
|
||||
getAppName(), stdInputA);
|
||||
getAppName(), stdInputA);
|
||||
HeapFree(GetProcessHeap(), 0, stdInputA);
|
||||
}
|
||||
} else if( currentKeyHandle &&
|
||||
(( stdInput[0] == '@') || /* reading a default @=data pair */
|
||||
( stdInput[0] == '\"'))) /* reading a new value=data pair */
|
||||
}
|
||||
else if( currentKeyHandle &&
|
||||
(( stdInput[0] == '@') || /* reading a default @=data pair */
|
||||
( stdInput[0] == '\"'))) /* reading a new value=data pair */
|
||||
{
|
||||
processSetValue(stdInput, isUnicode);
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Since we are assuming that the file format is valid we must be
|
||||
* reading a blank line which indicates the end of this key processing
|
||||
|
@ -614,13 +654,15 @@ static void processRegLinesA(FILE *in)
|
|||
line = HeapAlloc(GetProcessHeap(), 0, lineSize);
|
||||
CHECK_ENOUGH_MEMORY(line);
|
||||
|
||||
while (!feof(in)) {
|
||||
while (!feof(in))
|
||||
{
|
||||
LPSTR s; /* The pointer into line for where the current fgets should read */
|
||||
LPSTR check;
|
||||
WCHAR* lineW;
|
||||
s = line;
|
||||
|
||||
for (;;) {
|
||||
for (;;)
|
||||
{
|
||||
size_t size_remaining;
|
||||
int size_to_get;
|
||||
char *s_eol; /* various local uses */
|
||||
|
@ -650,11 +692,15 @@ static void processRegLinesA(FILE *in)
|
|||
|
||||
check = fgets (s, size_to_get, in);
|
||||
|
||||
if (check == NULL) {
|
||||
if (ferror(in)) {
|
||||
if (check == NULL)
|
||||
{
|
||||
if (ferror(in))
|
||||
{
|
||||
perror ("While reading input");
|
||||
exit (IO_ERROR);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (feof(in));
|
||||
*s = '\0';
|
||||
/* It is not clear to me from the definition that the
|
||||
|
@ -666,40 +712,46 @@ static void processRegLinesA(FILE *in)
|
|||
|
||||
/* If we didn't read the eol nor the eof go around for the rest */
|
||||
s_eol = strchr (s, '\n');
|
||||
if (!feof (in) && !s_eol) {
|
||||
if (!feof (in) && !s_eol)
|
||||
{
|
||||
s = strchr (s, '\0');
|
||||
/* It should be s + size_to_get - 1 but this is safer */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If it is a comment line then discard it and go around again */
|
||||
if (line [0] == '#') {
|
||||
if (line [0] == '#')
|
||||
{
|
||||
s = line;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Remove any line feed. Leave s_eol on the \0 */
|
||||
if (s_eol) {
|
||||
if (s_eol)
|
||||
{
|
||||
*s_eol = '\0';
|
||||
if (s_eol > line && *(s_eol-1) == '\r')
|
||||
*--s_eol = '\0';
|
||||
} else
|
||||
}
|
||||
else
|
||||
s_eol = strchr (s, '\0');
|
||||
|
||||
/* If there is a concatenating \\ then go around again */
|
||||
if (s_eol > line && *(s_eol-1) == '\\') {
|
||||
if (s_eol > line && *(s_eol-1) == '\\')
|
||||
{
|
||||
int c;
|
||||
s = s_eol-1;
|
||||
|
||||
do
|
||||
{
|
||||
c = fgetc(in);
|
||||
} while(c == ' ' || c == '\t');
|
||||
}
|
||||
while(c == ' ' || c == '\t');
|
||||
|
||||
if(c == EOF)
|
||||
{
|
||||
fprintf(stderr,"%s: ERROR - invalid continuation.\n",
|
||||
getAppName());
|
||||
getAppName());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -737,7 +789,8 @@ static void processRegLinesW(FILE *in)
|
|||
s = buf;
|
||||
line = buf;
|
||||
|
||||
while(!feof(in)) {
|
||||
while(!feof(in))
|
||||
{
|
||||
size_t size_remaining;
|
||||
int size_to_get;
|
||||
WCHAR *s_eol = NULL; /* various local uses */
|
||||
|
@ -769,11 +822,15 @@ static void processRegLinesW(FILE *in)
|
|||
CharsInBuf = fread(s, sizeof(WCHAR), size_to_get - 1, in);
|
||||
s[CharsInBuf] = 0;
|
||||
|
||||
if (CharsInBuf == 0) {
|
||||
if (ferror(in)) {
|
||||
if (CharsInBuf == 0)
|
||||
{
|
||||
if (ferror(in))
|
||||
{
|
||||
perror ("While reading input");
|
||||
exit (IO_ERROR);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
assert (feof(in));
|
||||
*s = '\0';
|
||||
/* It is not clear to me from the definition that the
|
||||
|
@ -788,7 +845,8 @@ static void processRegLinesW(FILE *in)
|
|||
{
|
||||
s_eol = wcschr(line, '\n');
|
||||
|
||||
if(!s_eol) {
|
||||
if(!s_eol)
|
||||
{
|
||||
/* Move the stub of the line to the start of the buffer so
|
||||
* we get the maximum space to read into, and so we don't
|
||||
* have to recalculate 'line' if the buffer expands */
|
||||
|
@ -799,14 +857,16 @@ static void processRegLinesW(FILE *in)
|
|||
}
|
||||
|
||||
/* If it is a comment line then discard it and go around again */
|
||||
if (*line == '#') {
|
||||
if (*line == '#')
|
||||
{
|
||||
line = s_eol + 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If there is a concatenating \\ then go around again */
|
||||
if ((*(s_eol-1) == '\\') ||
|
||||
(*(s_eol-1) == '\r' && *(s_eol-2) == '\\')) {
|
||||
(*(s_eol-1) == '\r' && *(s_eol-2) == '\\'))
|
||||
{
|
||||
WCHAR* NextLine = s_eol;
|
||||
|
||||
while(*(NextLine+1) == ' ' || *(NextLine+1) == '\t')
|
||||
|
@ -824,7 +884,8 @@ static void processRegLinesW(FILE *in)
|
|||
}
|
||||
|
||||
/* Remove any line feed. Leave s_eol on the \0 */
|
||||
if (s_eol) {
|
||||
if (s_eol)
|
||||
{
|
||||
*s_eol = '\0';
|
||||
if (s_eol > buf && *(s_eol-1) == '\r')
|
||||
*(s_eol-1) = '\0';
|
||||
|
@ -859,10 +920,11 @@ static void REGPROC_print_error(void)
|
|||
|
||||
error_code = GetLastError ();
|
||||
status = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL, error_code, 0, (LPTSTR) &lpMsgBuf, 0, NULL);
|
||||
if (!status) {
|
||||
NULL, error_code, 0, (LPTSTR) &lpMsgBuf, 0, NULL);
|
||||
if (!status)
|
||||
{
|
||||
fprintf(stderr,"%s: Cannot display message for error %ld, status %ld\n",
|
||||
getAppName(), error_code, GetLastError());
|
||||
getAppName(), error_code, GetLastError());
|
||||
exit(1);
|
||||
}
|
||||
puts(lpMsgBuf);
|
||||
|
@ -883,7 +945,8 @@ static void REGPROC_print_error(void)
|
|||
static void REGPROC_resize_char_buffer(WCHAR **buffer, DWORD *len, DWORD required_len)
|
||||
{
|
||||
required_len++;
|
||||
if (required_len > *len) {
|
||||
if (required_len > *len)
|
||||
{
|
||||
*len = required_len;
|
||||
if (!*buffer)
|
||||
*buffer = HeapAlloc(GetProcessHeap(), 0, *len * sizeof(**buffer));
|
||||
|
@ -903,7 +966,8 @@ static void REGPROC_resize_char_buffer(WCHAR **buffer, DWORD *len, DWORD require
|
|||
*/
|
||||
static void REGPROC_resize_binary_buffer(BYTE **buffer, DWORD *size, DWORD required_size)
|
||||
{
|
||||
if (required_size > *size) {
|
||||
if (required_size > *size)
|
||||
{
|
||||
*size = required_size;
|
||||
if (!*buffer)
|
||||
*buffer = HeapAlloc(GetProcessHeap(), 0, *size);
|
||||
|
@ -925,9 +989,11 @@ static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD
|
|||
|
||||
/* escaping characters */
|
||||
pos = *line_len;
|
||||
for (i = 0; i < str_len; i++) {
|
||||
for (i = 0; i < str_len; i++)
|
||||
{
|
||||
WCHAR c = str[i];
|
||||
switch (c) {
|
||||
switch (c)
|
||||
{
|
||||
case '\n':
|
||||
extra++;
|
||||
REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + str_len + extra);
|
||||
|
@ -962,9 +1028,12 @@ static void REGPROC_export_binary(WCHAR **line_buf, DWORD *line_buf_size, DWORD
|
|||
const WCHAR newline[] = {'\n',0};
|
||||
CHAR* value_multibyte = NULL;
|
||||
|
||||
if (type == REG_BINARY) {
|
||||
if (type == REG_BINARY)
|
||||
{
|
||||
hex_prefix = hex;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
const WCHAR hex_format[] = {'h','e','x','(','%','u',')',':',0};
|
||||
hex_prefix = hex_buf;
|
||||
wsprintfW(hex_buf, hex_format, type);
|
||||
|
@ -1011,7 +1080,8 @@ static void REGPROC_export_binary(WCHAR **line_buf, DWORD *line_buf_size, DWORD
|
|||
column += 3;
|
||||
|
||||
/* wrap the line */
|
||||
if (column >= REG_FILE_HEX_LINE_LEN) {
|
||||
if (column >= REG_FILE_HEX_LINE_LEN)
|
||||
{
|
||||
lstrcpyW(*line_buf + data_pos, concat);
|
||||
data_pos += concat_len;
|
||||
column = concat_prefix;
|
||||
|
@ -1062,11 +1132,11 @@ static void REGPROC_write_line(FILE *file, const WCHAR* str, BOOL unicode)
|
|||
* val_size - size of the buffer for storing values in bytes.
|
||||
*/
|
||||
static void export_hkey(FILE *file, HKEY key,
|
||||
WCHAR **reg_key_name_buf, DWORD *reg_key_name_size,
|
||||
WCHAR **val_name_buf, DWORD *val_name_size,
|
||||
BYTE **val_buf, DWORD *val_size,
|
||||
WCHAR **line_buf, DWORD *line_buf_size,
|
||||
BOOL unicode)
|
||||
WCHAR **reg_key_name_buf, DWORD *reg_key_name_size,
|
||||
WCHAR **val_name_buf, DWORD *val_name_size,
|
||||
BYTE **val_buf, DWORD *val_size,
|
||||
WCHAR **line_buf, DWORD *line_buf_size,
|
||||
BOOL unicode)
|
||||
{
|
||||
DWORD max_sub_key_len;
|
||||
DWORD max_val_name_len;
|
||||
|
@ -1079,16 +1149,17 @@ static void export_hkey(FILE *file, HKEY key,
|
|||
|
||||
/* get size information and resize the buffers if necessary */
|
||||
if (RegQueryInfoKeyW(key, NULL, NULL, NULL, NULL,
|
||||
&max_sub_key_len, NULL,
|
||||
NULL, &max_val_name_len, &max_val_size, NULL, NULL
|
||||
) != ERROR_SUCCESS) {
|
||||
&max_sub_key_len, NULL,
|
||||
NULL, &max_val_name_len, &max_val_size, NULL, NULL
|
||||
) != ERROR_SUCCESS)
|
||||
{
|
||||
REGPROC_print_error();
|
||||
}
|
||||
curr_len = lstrlenW(*reg_key_name_buf);
|
||||
REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_size,
|
||||
max_sub_key_len + curr_len + 1);
|
||||
max_sub_key_len + curr_len + 1);
|
||||
REGPROC_resize_char_buffer(val_name_buf, val_name_size,
|
||||
max_val_name_len);
|
||||
max_val_name_len);
|
||||
REGPROC_resize_binary_buffer(val_buf, val_size, max_val_size);
|
||||
REGPROC_resize_char_buffer(line_buf, line_buf_size, lstrlenW(*reg_key_name_buf) + 4);
|
||||
/* output data for the current key */
|
||||
|
@ -1098,26 +1169,34 @@ static void export_hkey(FILE *file, HKEY key,
|
|||
/* print all the values */
|
||||
i = 0;
|
||||
more_data = TRUE;
|
||||
while(more_data) {
|
||||
while(more_data)
|
||||
{
|
||||
DWORD value_type;
|
||||
DWORD val_name_size1 = *val_name_size;
|
||||
DWORD val_size1 = *val_size;
|
||||
ret = RegEnumValueW(key, i, *val_name_buf, &val_name_size1, NULL,
|
||||
&value_type, *val_buf, &val_size1);
|
||||
if (ret == ERROR_MORE_DATA) {
|
||||
&value_type, *val_buf, &val_size1);
|
||||
if (ret == ERROR_MORE_DATA)
|
||||
{
|
||||
/* Increase the size of the buffers and retry */
|
||||
REGPROC_resize_char_buffer(val_name_buf, val_name_size, val_name_size1);
|
||||
REGPROC_resize_binary_buffer(val_buf, val_size, val_size1);
|
||||
} else if (ret != ERROR_SUCCESS) {
|
||||
}
|
||||
else if (ret != ERROR_SUCCESS)
|
||||
{
|
||||
more_data = FALSE;
|
||||
if (ret != ERROR_NO_MORE_ITEMS) {
|
||||
if (ret != ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
REGPROC_print_error();
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
DWORD line_len;
|
||||
i++;
|
||||
|
||||
if ((*val_name_buf)[0]) {
|
||||
if ((*val_name_buf)[0])
|
||||
{
|
||||
const WCHAR val_start[] = {'"','%','s','"','=',0};
|
||||
|
||||
line_len = 0;
|
||||
|
@ -1128,22 +1207,28 @@ static void export_hkey(FILE *file, HKEY key,
|
|||
line_len = 3 + lstrlenW(*val_name_buf);
|
||||
REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
|
||||
wsprintfW(*line_buf, val_start, *val_name_buf);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
const WCHAR std_val[] = {'@','=',0};
|
||||
line_len = 2;
|
||||
REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
|
||||
lstrcpyW(*line_buf, std_val);
|
||||
}
|
||||
|
||||
switch (value_type) {
|
||||
switch (value_type)
|
||||
{
|
||||
case REG_SZ:
|
||||
{
|
||||
WCHAR* wstr = (WCHAR*)*val_buf;
|
||||
|
||||
if (val_size1 < sizeof(WCHAR) || val_size1 % sizeof(WCHAR) ||
|
||||
wstr[val_size1 / sizeof(WCHAR) - 1]) {
|
||||
wstr[val_size1 / sizeof(WCHAR) - 1])
|
||||
{
|
||||
REGPROC_export_binary(line_buf, line_buf_size, &line_len, value_type, *val_buf, val_size1, unicode);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
const WCHAR start[] = {'"',0};
|
||||
const WCHAR end[] = {'"','\n',0};
|
||||
DWORD len;
|
||||
|
@ -1178,14 +1263,14 @@ static void export_hkey(FILE *file, HKEY key,
|
|||
char* key_nameA = GetMultiByteString(*reg_key_name_buf);
|
||||
char* value_nameA = GetMultiByteString(*val_name_buf);
|
||||
fprintf(stderr,"%s: warning - unsupported registry format '%ld', "
|
||||
"treat as binary\n",
|
||||
getAppName(), value_type);
|
||||
"treat as binary\n",
|
||||
getAppName(), value_type);
|
||||
fprintf(stderr,"key name: \"%s\"\n", key_nameA);
|
||||
fprintf(stderr,"value name:\"%s\"\n\n", value_nameA);
|
||||
HeapFree(GetProcessHeap(), 0, key_nameA);
|
||||
HeapFree(GetProcessHeap(), 0, value_nameA);
|
||||
}
|
||||
/* falls through */
|
||||
/* falls through */
|
||||
case REG_EXPAND_SZ:
|
||||
case REG_MULTI_SZ:
|
||||
/* falls through */
|
||||
|
@ -1199,30 +1284,40 @@ static void export_hkey(FILE *file, HKEY key,
|
|||
i = 0;
|
||||
more_data = TRUE;
|
||||
(*reg_key_name_buf)[curr_len] = '\\';
|
||||
while(more_data) {
|
||||
while(more_data)
|
||||
{
|
||||
DWORD buf_size = *reg_key_name_size - curr_len - 1;
|
||||
|
||||
ret = RegEnumKeyExW(key, i, *reg_key_name_buf + curr_len + 1, &buf_size,
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (ret == ERROR_MORE_DATA) {
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (ret == ERROR_MORE_DATA)
|
||||
{
|
||||
/* Increase the size of the buffer and retry */
|
||||
REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_size, curr_len + 1 + buf_size);
|
||||
} else if (ret != ERROR_SUCCESS) {
|
||||
}
|
||||
else if (ret != ERROR_SUCCESS)
|
||||
{
|
||||
more_data = FALSE;
|
||||
if (ret != ERROR_NO_MORE_ITEMS) {
|
||||
if (ret != ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
REGPROC_print_error();
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
HKEY subkey;
|
||||
|
||||
i++;
|
||||
if (RegOpenKeyW(key, *reg_key_name_buf + curr_len + 1,
|
||||
&subkey) == ERROR_SUCCESS) {
|
||||
&subkey) == ERROR_SUCCESS)
|
||||
{
|
||||
export_hkey(file, subkey, reg_key_name_buf, reg_key_name_size,
|
||||
val_name_buf, val_name_size, val_buf, val_size,
|
||||
line_buf, line_buf_size, unicode);
|
||||
val_name_buf, val_name_size, val_buf, val_size,
|
||||
line_buf, line_buf_size, unicode);
|
||||
RegCloseKey(subkey);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
REGPROC_print_error();
|
||||
}
|
||||
}
|
||||
|
@ -1246,7 +1341,8 @@ static FILE *REGPROC_open_export_file(WCHAR *file_name, BOOL unicode)
|
|||
file = _wfopen(file_name, L"wb");
|
||||
else
|
||||
file = _wfopen(file_name, L"w");
|
||||
if (!file) {
|
||||
if (!file)
|
||||
{
|
||||
CHAR* file_nameA = GetMultiByteString(file_name);
|
||||
perror("");
|
||||
fprintf(stderr,"%s: Can't open file \"%s\"\n", getAppName(), file_nameA);
|
||||
|
@ -1291,75 +1387,87 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
|
|||
BOOL unicode = (format == REG_FORMAT_5);
|
||||
|
||||
reg_key_name_buf = HeapAlloc(GetProcessHeap(), 0,
|
||||
reg_key_name_size * sizeof(*reg_key_name_buf));
|
||||
reg_key_name_size * sizeof(*reg_key_name_buf));
|
||||
val_name_buf = HeapAlloc(GetProcessHeap(), 0,
|
||||
val_name_size * sizeof(*val_name_buf));
|
||||
val_name_size * sizeof(*val_name_buf));
|
||||
val_buf = HeapAlloc(GetProcessHeap(), 0, val_size);
|
||||
line_buf = HeapAlloc(GetProcessHeap(), 0, line_buf_size * sizeof(*line_buf));
|
||||
CHECK_ENOUGH_MEMORY(reg_key_name_buf && val_name_buf && val_buf && line_buf);
|
||||
|
||||
if (reg_key_name && reg_key_name[0]) {
|
||||
if (reg_key_name && reg_key_name[0])
|
||||
{
|
||||
HKEY reg_key_class;
|
||||
WCHAR *branch_name = NULL;
|
||||
HKEY key;
|
||||
|
||||
REGPROC_resize_char_buffer(®_key_name_buf, ®_key_name_size,
|
||||
lstrlenW(reg_key_name));
|
||||
lstrlenW(reg_key_name));
|
||||
lstrcpyW(reg_key_name_buf, reg_key_name);
|
||||
|
||||
/* open the specified key */
|
||||
if (!parseKeyName(reg_key_name, ®_key_class, &branch_name)) {
|
||||
if (!parseKeyName(reg_key_name, ®_key_class, &branch_name))
|
||||
{
|
||||
CHAR* key_nameA = GetMultiByteString(reg_key_name);
|
||||
fprintf(stderr,"%s: Incorrect registry class specification in '%s'\n",
|
||||
getAppName(), key_nameA);
|
||||
getAppName(), key_nameA);
|
||||
HeapFree(GetProcessHeap(), 0, key_nameA);
|
||||
exit(1);
|
||||
}
|
||||
if (!branch_name[0]) {
|
||||
if (!branch_name[0])
|
||||
{
|
||||
/* no branch - registry class is specified */
|
||||
file = REGPROC_open_export_file(file_name, unicode);
|
||||
export_hkey(file, reg_key_class,
|
||||
®_key_name_buf, ®_key_name_size,
|
||||
&val_name_buf, &val_name_size,
|
||||
&val_buf, &val_size, &line_buf,
|
||||
&line_buf_size, unicode);
|
||||
} else if (RegOpenKeyW(reg_key_class, branch_name, &key) == ERROR_SUCCESS) {
|
||||
®_key_name_buf, ®_key_name_size,
|
||||
&val_name_buf, &val_name_size,
|
||||
&val_buf, &val_size, &line_buf,
|
||||
&line_buf_size, unicode);
|
||||
}
|
||||
else if (RegOpenKeyW(reg_key_class, branch_name, &key) == ERROR_SUCCESS)
|
||||
{
|
||||
file = REGPROC_open_export_file(file_name, unicode);
|
||||
export_hkey(file, key,
|
||||
®_key_name_buf, ®_key_name_size,
|
||||
&val_name_buf, &val_name_size,
|
||||
&val_buf, &val_size, &line_buf,
|
||||
&line_buf_size, unicode);
|
||||
®_key_name_buf, ®_key_name_size,
|
||||
&val_name_buf, &val_name_size,
|
||||
&val_buf, &val_size, &line_buf,
|
||||
&line_buf_size, unicode);
|
||||
RegCloseKey(key);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
CHAR* key_nameA = GetMultiByteString(reg_key_name);
|
||||
fprintf(stderr,"%s: Can't export. Registry key '%s' does not exist!\n",
|
||||
getAppName(), key_nameA);
|
||||
getAppName(), key_nameA);
|
||||
HeapFree(GetProcessHeap(), 0, key_nameA);
|
||||
REGPROC_print_error();
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* export all registry classes */
|
||||
file = REGPROC_open_export_file(file_name, unicode);
|
||||
for (i = 0; i < REG_CLASS_NUMBER; i++) {
|
||||
for (i = 0; i < REG_CLASS_NUMBER; i++)
|
||||
{
|
||||
/* do not export HKEY_CLASSES_ROOT */
|
||||
if (reg_class_keys[i] != HKEY_CLASSES_ROOT &&
|
||||
reg_class_keys[i] != HKEY_CURRENT_USER &&
|
||||
reg_class_keys[i] != HKEY_CURRENT_CONFIG &&
|
||||
reg_class_keys[i] != HKEY_DYN_DATA) {
|
||||
reg_class_keys[i] != HKEY_CURRENT_USER &&
|
||||
reg_class_keys[i] != HKEY_CURRENT_CONFIG &&
|
||||
reg_class_keys[i] != HKEY_DYN_DATA)
|
||||
{
|
||||
lstrcpyW(reg_key_name_buf, reg_class_namesW[i]);
|
||||
export_hkey(file, reg_class_keys[i],
|
||||
®_key_name_buf, ®_key_name_size,
|
||||
&val_name_buf, &val_name_size,
|
||||
&val_buf, &val_size, &line_buf,
|
||||
&line_buf_size, unicode);
|
||||
®_key_name_buf, ®_key_name_size,
|
||||
&val_name_buf, &val_name_size,
|
||||
&val_buf, &val_size, &line_buf,
|
||||
&line_buf_size, unicode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (file) {
|
||||
if (file)
|
||||
{
|
||||
fclose(file);
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, reg_key_name);
|
||||
|
@ -1382,7 +1490,8 @@ BOOL import_registry_file(FILE* reg_file)
|
|||
if (s[0] == 0xff && s[1] == 0xfe)
|
||||
{
|
||||
processRegLinesW(reg_file);
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
fseek(reg_file, 0, SEEK_SET);
|
||||
processRegLinesA(reg_file);
|
||||
|
@ -1408,17 +1517,19 @@ void delete_registry_key(WCHAR *reg_key_name)
|
|||
if (!reg_key_name || !reg_key_name[0])
|
||||
return;
|
||||
|
||||
if (!parseKeyName(reg_key_name, &key_class, &key_name)) {
|
||||
if (!parseKeyName(reg_key_name, &key_class, &key_name))
|
||||
{
|
||||
char* reg_key_nameA = GetMultiByteString(reg_key_name);
|
||||
fprintf(stderr,"%s: Incorrect registry class specification in '%s'\n",
|
||||
getAppName(), reg_key_nameA);
|
||||
getAppName(), reg_key_nameA);
|
||||
HeapFree(GetProcessHeap(), 0, reg_key_nameA);
|
||||
exit(1);
|
||||
}
|
||||
if (!*key_name) {
|
||||
if (!*key_name)
|
||||
{
|
||||
char* reg_key_nameA = GetMultiByteString(reg_key_name);
|
||||
fprintf(stderr,"%s: Can't delete registry class '%s'\n",
|
||||
getAppName(), reg_key_nameA);
|
||||
getAppName(), reg_key_nameA);
|
||||
HeapFree(GetProcessHeap(), 0, reg_key_nameA);
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -42,19 +42,22 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPTSTR* pKe
|
|||
item.hItem = hItem;
|
||||
if (!TreeView_GetItem(hwndTV, &item)) return FALSE;
|
||||
|
||||
if (item.lParam) {
|
||||
/* found root key with valid key value */
|
||||
*phKey = (HKEY)item.lParam;
|
||||
return TRUE;
|
||||
if (item.lParam)
|
||||
{
|
||||
/* found root key with valid key value */
|
||||
*phKey = (HKEY)item.lParam;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if(!get_item_path(hwndTV, TreeView_GetParent(hwndTV, hItem), phKey, pKeyPath, pPathLen, pMaxLen)) return FALSE;
|
||||
if (*pPathLen) {
|
||||
if (*pPathLen)
|
||||
{
|
||||
(*pKeyPath)[*pPathLen] = _T('\\');
|
||||
++(*pPathLen);
|
||||
}
|
||||
|
||||
do {
|
||||
do
|
||||
{
|
||||
item.mask = TVIF_TEXT;
|
||||
item.hItem = hItem;
|
||||
item.pszText = *pKeyPath + *pPathLen;
|
||||
|
@ -62,15 +65,17 @@ static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPTSTR* pKe
|
|||
item.cchTextMax = (int) maxLen;
|
||||
if (!TreeView_GetItem(hwndTV, &item)) return FALSE;
|
||||
len = _tcslen(item.pszText);
|
||||
if (len < maxLen - 1) {
|
||||
if (len < maxLen - 1)
|
||||
{
|
||||
*pPathLen += (int) len;
|
||||
break;
|
||||
}
|
||||
newStr = HeapReAlloc(GetProcessHeap(), 0, *pKeyPath, *pMaxLen * 2);
|
||||
if (!newStr) return FALSE;
|
||||
*pKeyPath = newStr;
|
||||
*pMaxLen *= 2;
|
||||
} while(TRUE);
|
||||
}
|
||||
newStr = HeapReAlloc(GetProcessHeap(), 0, *pKeyPath, *pMaxLen * 2);
|
||||
if (!newStr) return FALSE;
|
||||
*pKeyPath = newStr;
|
||||
*pMaxLen *= 2;
|
||||
}
|
||||
while(TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -87,9 +92,10 @@ LPCTSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY* phRootKey)
|
|||
if (maxLen == -1) return NULL;
|
||||
if (!hItem) hItem = TreeView_GetSelection(hwndTV);
|
||||
if (!hItem) return NULL;
|
||||
if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen)) {
|
||||
return NULL;
|
||||
}
|
||||
if (!get_item_path(hwndTV, hItem, phRootKey, &pathBuffer, &pathLen, &maxLen))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
return pathBuffer;
|
||||
}
|
||||
|
||||
|
@ -106,8 +112,10 @@ static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPTSTR label, HK
|
|||
TVITEM tvi;
|
||||
TVINSERTSTRUCT tvins;
|
||||
|
||||
if (hKey) {
|
||||
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
|
||||
if (hKey)
|
||||
{
|
||||
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwChildren, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
|
||||
{
|
||||
dwChildren = 0;
|
||||
}
|
||||
}
|
||||
|
@ -140,15 +148,20 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
|
|||
|
||||
KeyPath = GetItemPath(hwndTV, hItem, &hRoot);
|
||||
|
||||
if (*KeyPath) {
|
||||
if (RegOpenKeyEx(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
|
||||
if (*KeyPath)
|
||||
{
|
||||
if (RegOpenKeyEx(hRoot, KeyPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
hKey = hRoot;
|
||||
}
|
||||
|
||||
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
|
||||
if (RegQueryInfoKey(hKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
@ -156,19 +169,22 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
|
|||
tvItem.mask = TVIF_CHILDREN;
|
||||
tvItem.hItem = hItem;
|
||||
tvItem.cChildren = dwCount;
|
||||
if (!TreeView_SetItem(hwndTV, &tvItem)) {
|
||||
if (!TreeView_SetItem(hwndTV, &tvItem))
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* We don't have to bother with the rest if it's not expanded. */
|
||||
if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDED) == 0) {
|
||||
if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDED) == 0)
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
bSuccess = TRUE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
dwMaxSubKeyLen++; /* account for the \0 terminator */
|
||||
if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR)))) {
|
||||
if (!(Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR))))
|
||||
{
|
||||
goto done;
|
||||
}
|
||||
tvItem.cchTextMax = dwMaxSubKeyLen;
|
||||
|
@ -185,7 +201,8 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
|
|||
DWORD dwStep = 10000;
|
||||
|
||||
for (childItem = TreeView_GetChild(hwndTV, hItem); childItem;
|
||||
childItem = TreeView_GetNextSibling(hwndTV, childItem)) {
|
||||
childItem = TreeView_GetNextSibling(hwndTV, childItem))
|
||||
{
|
||||
|
||||
if (dwActualSize + dwMaxSubKeyLen + 1 > dwPhysicalSize)
|
||||
{
|
||||
|
@ -218,40 +235,50 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem)
|
|||
|
||||
/* Now go through all the children in the tree, and check if any have to be removed. */
|
||||
childItem = TreeView_GetChild(hwndTV, hItem);
|
||||
while (childItem) {
|
||||
while (childItem)
|
||||
{
|
||||
HTREEITEM nextItem = TreeView_GetNextSibling(hwndTV, childItem);
|
||||
if (RefreshTreeItem(hwndTV, childItem) == FALSE) {
|
||||
if (RefreshTreeItem(hwndTV, childItem) == FALSE)
|
||||
{
|
||||
(void)TreeView_DeleteItem(hwndTV, childItem);
|
||||
}
|
||||
childItem = nextItem;
|
||||
}
|
||||
|
||||
/* Now go through all the children in the registry, and check if any have to be added. */
|
||||
/* Now go through all the children in the registry, and check if any have to be added. */
|
||||
bAddedAny = FALSE;
|
||||
for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
|
||||
for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
|
||||
{
|
||||
DWORD cName = dwMaxSubKeyLen, dwSubCount;
|
||||
BOOL found;
|
||||
|
||||
found = FALSE;
|
||||
if (RegEnumKeyEx(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS) {
|
||||
if (RegEnumKeyEx(hKey, dwIndex, Name, &cName, 0, 0, 0, NULL) != ERROR_SUCCESS)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check if the node is already in there. */
|
||||
if (pszNodes) {
|
||||
for (s = pszNodes; *s; s += _tcslen(s) + 1) {
|
||||
if (!_tcscmp(s, Name)) {
|
||||
if (pszNodes)
|
||||
{
|
||||
for (s = pszNodes; *s; s += _tcslen(s) + 1)
|
||||
{
|
||||
if (!_tcscmp(s, Name))
|
||||
{
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (found == FALSE) {
|
||||
if (found == FALSE)
|
||||
{
|
||||
/* Find the number of children of the node. */
|
||||
dwSubCount = 0;
|
||||
if (RegOpenKeyEx(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS) {
|
||||
if (RegQueryInfoKey(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS) {
|
||||
if (RegOpenKeyEx(hKey, Name, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS)
|
||||
{
|
||||
if (RegQueryInfoKey(hSubKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0) != ERROR_SUCCESS)
|
||||
{
|
||||
dwSubCount = 0;
|
||||
}
|
||||
RegCloseKey(hSubKey);
|
||||
|
@ -287,7 +314,8 @@ BOOL RefreshTreeView(HWND hwndTV)
|
|||
SendMessage(hwndTV, WM_SETREDRAW, FALSE, 0);
|
||||
|
||||
hItem = TreeView_GetChild(hwndTV, TreeView_GetRoot(hwndTV));
|
||||
while (hItem) {
|
||||
while (hItem)
|
||||
{
|
||||
RefreshTreeItem(hwndTV, hItem);
|
||||
hItem = TreeView_GetNextSibling(hwndTV, hItem);
|
||||
}
|
||||
|
@ -325,7 +353,7 @@ HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPTSTR name)
|
|||
hNewItem = AddEntryToTree(hwndTV, hItem, name, 0, 0);
|
||||
SendMessage(hwndTV, TVM_SORTCHILDREN, 0, (LPARAM) hItem);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
item.mask = TVIF_CHILDREN | TVIF_HANDLE;
|
||||
item.hItem = hItem;
|
||||
|
@ -388,11 +416,11 @@ static BOOL InitTreeViewItems(HWND hwndTV, LPTSTR pHostName)
|
|||
if (!AddEntryToTree(hwndTV, hRoot, _T("HKEY_USERS"), HKEY_USERS, 1)) return FALSE;
|
||||
if (!AddEntryToTree(hwndTV, hRoot, _T("HKEY_CURRENT_CONFIG"), HKEY_CURRENT_CONFIG, 1)) return FALSE;
|
||||
|
||||
if (GetVersion() & 0x80000000)
|
||||
if (GetVersion() & 0x80000000)
|
||||
{
|
||||
/* Win9x specific key */
|
||||
if (!AddEntryToTree(hwndTV, hRoot, _T("HKEY_DYN_DATA"), HKEY_DYN_DATA, 1)) return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* expand and select host name */
|
||||
(void)TreeView_Expand(hwndTV, hRoot, TVE_EXPAND);
|
||||
|
@ -431,8 +459,8 @@ static BOOL InitTreeViewImageLists(HWND hwndTV)
|
|||
0);
|
||||
if (hico)
|
||||
{
|
||||
Image_Open = ImageList_AddIcon(himl, hico);
|
||||
DestroyIcon(hico);
|
||||
Image_Open = ImageList_AddIcon(himl, hico);
|
||||
DestroyIcon(hico);
|
||||
}
|
||||
|
||||
hico = LoadImage(hInst,
|
||||
|
@ -443,8 +471,8 @@ static BOOL InitTreeViewImageLists(HWND hwndTV)
|
|||
0);
|
||||
if (hico)
|
||||
{
|
||||
Image_Closed = ImageList_AddIcon(himl, hico);
|
||||
DestroyIcon(hico);
|
||||
Image_Closed = ImageList_AddIcon(himl, hico);
|
||||
DestroyIcon(hico);
|
||||
}
|
||||
|
||||
hico = LoadImage(hInst,
|
||||
|
@ -455,8 +483,8 @@ static BOOL InitTreeViewImageLists(HWND hwndTV)
|
|||
0);
|
||||
if (hico)
|
||||
{
|
||||
Image_Root = ImageList_AddIcon(himl, hico);
|
||||
DestroyIcon(hico);
|
||||
Image_Root = ImageList_AddIcon(himl, hico);
|
||||
DestroyIcon(hico);
|
||||
}
|
||||
|
||||
/* Fail if not all of the images were added. */
|
||||
|
@ -483,7 +511,8 @@ BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv)
|
|||
|
||||
static int expanding;
|
||||
if (expanding) return FALSE;
|
||||
if (pnmtv->itemNew.state & TVIS_EXPANDEDONCE ) {
|
||||
if (pnmtv->itemNew.state & TVIS_EXPANDEDONCE )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
expanding = TRUE;
|
||||
|
@ -493,11 +522,14 @@ BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv)
|
|||
keyPath = GetItemPath(hwndTV, pnmtv->itemNew.hItem, &hRoot);
|
||||
if (!keyPath) goto done;
|
||||
|
||||
if (*keyPath) {
|
||||
if (*keyPath)
|
||||
{
|
||||
errCode = RegOpenKeyEx(hRoot, keyPath, 0, KEY_READ, &hNewKey);
|
||||
if (errCode != ERROR_SUCCESS) goto done;
|
||||
} else {
|
||||
hNewKey = hRoot;
|
||||
}
|
||||
else
|
||||
{
|
||||
hNewKey = hRoot;
|
||||
}
|
||||
|
||||
errCode = RegQueryInfoKey(hNewKey, 0, 0, 0, &dwCount, &dwMaxSubKeyLen, 0, 0, 0, 0, 0, 0);
|
||||
|
@ -506,13 +538,15 @@ BOOL OnTreeExpanding(HWND hwndTV, NMTREEVIEW* pnmtv)
|
|||
Name = HeapAlloc(GetProcessHeap(), 0, dwMaxSubKeyLen * sizeof(TCHAR));
|
||||
if (!Name) goto done;
|
||||
|
||||
for (dwIndex = 0; dwIndex < dwCount; dwIndex++) {
|
||||
for (dwIndex = 0; dwIndex < dwCount; dwIndex++)
|
||||
{
|
||||
DWORD cName = dwMaxSubKeyLen, dwSubCount;
|
||||
|
||||
errCode = RegEnumKeyEx(hNewKey, dwIndex, Name, &cName, 0, 0, 0, 0);
|
||||
if (errCode != ERROR_SUCCESS) continue;
|
||||
errCode = RegOpenKeyEx(hNewKey, Name, 0, KEY_QUERY_VALUE, &hKey);
|
||||
if (errCode == ERROR_SUCCESS) {
|
||||
if (errCode == ERROR_SUCCESS)
|
||||
{
|
||||
errCode = RegQueryInfoKey(hKey, 0, 0, 0, &dwSubCount, 0, 0, 0, 0, 0, 0, 0);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
@ -611,88 +645,90 @@ HWND CreateTreeView(HWND hwndParent, LPTSTR pHostName, HMENU id)
|
|||
0, 0, rcClient.right, rcClient.bottom,
|
||||
hwndParent, id, hInst, NULL);
|
||||
/* Initialize the image list, and add items to the control. */
|
||||
if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV, pHostName)) {
|
||||
if (!InitTreeViewImageLists(hwndTV) || !InitTreeViewItems(hwndTV, pHostName))
|
||||
{
|
||||
DestroyWindow(hwndTV);
|
||||
return NULL;
|
||||
}
|
||||
return hwndTV;
|
||||
}
|
||||
|
||||
void DestroyTreeView() {
|
||||
if (pathBuffer)
|
||||
HeapFree(GetProcessHeap(), 0, pathBuffer);
|
||||
void DestroyTreeView()
|
||||
{
|
||||
if (pathBuffer)
|
||||
HeapFree(GetProcessHeap(), 0, pathBuffer);
|
||||
}
|
||||
|
||||
BOOL SelectNode(HWND hwndTV, LPCTSTR keyPath)
|
||||
{
|
||||
HTREEITEM hRoot, hItem;
|
||||
HTREEITEM hChildItem;
|
||||
TCHAR szPathPart[128];
|
||||
TCHAR szBuffer[128];
|
||||
LPCTSTR s;
|
||||
TVITEM tvi;
|
||||
HTREEITEM hRoot, hItem;
|
||||
HTREEITEM hChildItem;
|
||||
TCHAR szPathPart[128];
|
||||
TCHAR szBuffer[128];
|
||||
LPCTSTR s;
|
||||
TVITEM tvi;
|
||||
|
||||
/* Total no-good hack */
|
||||
if (!_tcsnicmp(keyPath, _T("My Computer\\"), 12))
|
||||
keyPath += 12;
|
||||
|
||||
hRoot = TreeView_GetRoot(hwndTV);
|
||||
hItem = hRoot;
|
||||
hRoot = TreeView_GetRoot(hwndTV);
|
||||
hItem = hRoot;
|
||||
|
||||
while(keyPath[0])
|
||||
{
|
||||
s = _tcschr(keyPath, TEXT('\\'));
|
||||
lstrcpyn(szPathPart, keyPath, s ? s - keyPath + 1 : _tcslen(keyPath) + 1);
|
||||
while(keyPath[0])
|
||||
{
|
||||
s = _tcschr(keyPath, TEXT('\\'));
|
||||
lstrcpyn(szPathPart, keyPath, s ? s - keyPath + 1 : _tcslen(keyPath) + 1);
|
||||
|
||||
/* Special case for root to expand root key abbreviations */
|
||||
if (hItem == hRoot)
|
||||
{
|
||||
if (!_tcsicmp(szPathPart, TEXT("HKCR")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKU")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
|
||||
}
|
||||
/* Special case for root to expand root key abbreviations */
|
||||
if (hItem == hRoot)
|
||||
{
|
||||
if (!_tcsicmp(szPathPart, TEXT("HKCR")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_CLASSES_ROOT"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKCU")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_USER"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKLM")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_LOCAL_MACHINE"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKU")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_USERS"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKCC")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_CURRENT_CONFIG"));
|
||||
else if (!_tcsicmp(szPathPart, TEXT("HKDD")))
|
||||
_tcscpy(szPathPart, TEXT("HKEY_DYN_DATA"));
|
||||
}
|
||||
|
||||
for (hChildItem = TreeView_GetChild(hwndTV, hItem); hChildItem;
|
||||
hChildItem = TreeView_GetNextSibling(hwndTV, hChildItem))
|
||||
{
|
||||
memset(&tvi, 0, sizeof(tvi));
|
||||
tvi.hItem = hChildItem;
|
||||
tvi.mask = TVIF_TEXT | TVIF_CHILDREN;
|
||||
tvi.pszText = szBuffer;
|
||||
tvi.cchTextMax = sizeof(szBuffer) / sizeof(szBuffer[0]);
|
||||
for (hChildItem = TreeView_GetChild(hwndTV, hItem); hChildItem;
|
||||
hChildItem = TreeView_GetNextSibling(hwndTV, hChildItem))
|
||||
{
|
||||
memset(&tvi, 0, sizeof(tvi));
|
||||
tvi.hItem = hChildItem;
|
||||
tvi.mask = TVIF_TEXT | TVIF_CHILDREN;
|
||||
tvi.pszText = szBuffer;
|
||||
tvi.cchTextMax = sizeof(szBuffer) / sizeof(szBuffer[0]);
|
||||
|
||||
(void)TreeView_GetItem(hwndTV, &tvi);
|
||||
(void)TreeView_GetItem(hwndTV, &tvi);
|
||||
|
||||
if (!_tcsicmp(szBuffer, szPathPart))
|
||||
break;
|
||||
}
|
||||
if (!_tcsicmp(szBuffer, szPathPart))
|
||||
break;
|
||||
}
|
||||
|
||||
if (!hChildItem)
|
||||
return FALSE;
|
||||
if (!hChildItem)
|
||||
return FALSE;
|
||||
|
||||
if (tvi.cChildren > 0)
|
||||
{
|
||||
if (!TreeView_Expand(hwndTV, hChildItem, TVE_EXPAND))
|
||||
return FALSE;
|
||||
}
|
||||
if (tvi.cChildren > 0)
|
||||
{
|
||||
if (!TreeView_Expand(hwndTV, hChildItem, TVE_EXPAND))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
keyPath = s ? s + 1 : _T("");
|
||||
hItem = hChildItem;
|
||||
}
|
||||
keyPath = s ? s + 1 : _T("");
|
||||
hItem = hChildItem;
|
||||
}
|
||||
|
||||
(void)TreeView_SelectItem(hwndTV, hItem);
|
||||
(void)TreeView_EnsureVisible(hwndTV, hItem);
|
||||
(void)TreeView_SelectItem(hwndTV, hItem);
|
||||
(void)TreeView_EnsureVisible(hwndTV, hItem);
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -210,6 +210,11 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
ApplicationPageOnNotify(wParam, lParam);
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
if (wParam == VK_DELETE)
|
||||
ProcessPage_OnEndProcess();
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -584,6 +589,14 @@ void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
|
|||
ApplicationPage_OnSwitchTo();
|
||||
|
||||
break;
|
||||
|
||||
case LVN_KEYDOWN:
|
||||
|
||||
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
|
||||
ApplicationPage_OnEndTask();
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
else if (pnmh->hwndFrom == ListView_GetHeader(hApplicationPageListCtrl))
|
||||
|
|
|
@ -392,13 +392,13 @@ BEGIN
|
|||
WS_TABSTOP,125,94,115,10
|
||||
CONTROL "GDI Objects",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,125,105,115,10
|
||||
CONTROL "I/O Writes",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX |
|
||||
CONTROL "Â/È ïèñàíåòà",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,125,116,115,10
|
||||
CONTROL "I/O Write Bytes",IDC_IOWRITEBYTES,"Button",
|
||||
CONTROL "Â/È áàéòîâå çà ïèñàíå",IDC_IOWRITEBYTES,"Button",
|
||||
BS_AUTOCHECKBOX | WS_TABSTOP,125,127,65,10
|
||||
CONTROL "I/O Other",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX |
|
||||
CONTROL "Äðóãè Â/È",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX |
|
||||
WS_TABSTOP,125,138,115,10
|
||||
CONTROL "I/O Other Bytes",IDC_IOOTHERBYTES,"Button",
|
||||
CONTROL "Äðóãè Â/È áàéòîâå",IDC_IOOTHERBYTES,"Button",
|
||||
BS_AUTOCHECKBOX | WS_TABSTOP,125,149,115,10
|
||||
END
|
||||
|
||||
|
|
|
@ -201,6 +201,11 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
case WM_NOTIFY:
|
||||
ProcessPageOnNotify(wParam, lParam);
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
if (wParam == VK_DELETE)
|
||||
ProcessPage_OnEndProcess();
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -251,6 +256,12 @@ void ProcessPageOnNotify(WPARAM wParam, LPARAM lParam)
|
|||
ProcessPageShowContextMenu(GetSelectedProcessId());
|
||||
break;
|
||||
|
||||
case LVN_KEYDOWN:
|
||||
|
||||
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
|
||||
ProcessPage_OnEndProcess();
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
else if (pnmh->hwndFrom == hProcessPageHeaderCtrl)
|
||||
|
|
|
@ -21,49 +21,51 @@
|
|||
|
||||
#include "winhelp_res.h"
|
||||
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
|
||||
|
||||
/* Menu */
|
||||
|
||||
MAIN_MENU MENU
|
||||
{
|
||||
POPUP "파일(&F)" {
|
||||
MENUITEM "열기(&O)...", MNID_FILE_OPEN
|
||||
POPUP "파일(&F)" {
|
||||
MENUITEM "열기(&O)...", MNID_FILE_OPEN
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "인쇄(&P)", MNID_FILE_PRINT
|
||||
MENUITEM "프린터 설정(&S)...", MNID_FILE_SETUP
|
||||
MENUITEM "인쇄(&P)", MNID_FILE_PRINT
|
||||
MENUITEM "프린터 설정(&S)...", MNID_FILE_SETUP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "종료(&E)", MNID_FILE_EXIT
|
||||
MENUITEM "종료(&E)", MNID_FILE_EXIT
|
||||
}
|
||||
POPUP "편집(&E)" {
|
||||
MENUITEM "복사(&C)...", MNID_EDIT_COPYDLG
|
||||
POPUP "편집(&E)" {
|
||||
MENUITEM "복사(&C)...", MNID_EDIT_COPYDLG
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "주석(&A)...", MNID_EDIT_ANNOTATE
|
||||
MENUITEM "주석(&A)...", MNID_EDIT_ANNOTATE
|
||||
}
|
||||
POPUP "책갈피(&B)" {
|
||||
MENUITEM "정의(&D)...", MNID_BKMK_DEFINE
|
||||
POPUP "책갈피(&B)" {
|
||||
MENUITEM "정의(&D)...", MNID_BKMK_DEFINE
|
||||
}
|
||||
POPUP "옵션(&O)" {
|
||||
POPUP "가능한 도움말 보이기"
|
||||
POPUP "옵션(&O)" {
|
||||
POPUP "가능한 도움말 보이기"
|
||||
BEGIN
|
||||
MENUITEM "기본", MNID_OPTS_HELP_DEFAULT
|
||||
MENUITEM "보이기", MNID_OPTS_HELP_VISIBLE
|
||||
MENUITEM "보여주지 않기", MNID_OPTS_HELP_NONVISIBLE
|
||||
MENUITEM "기본", MNID_OPTS_HELP_DEFAULT
|
||||
MENUITEM "보이기", MNID_OPTS_HELP_VISIBLE
|
||||
MENUITEM "보여주지 않기", MNID_OPTS_HELP_NONVISIBLE
|
||||
END
|
||||
MENUITEM "기록", MNID_OPTS_HISTORY
|
||||
POPUP "글꼴"
|
||||
MENUITEM "기록", MNID_OPTS_HISTORY
|
||||
POPUP "글꼴"
|
||||
BEGIN
|
||||
MENUITEM "작게", MNID_OPTS_FONTS_SMALL
|
||||
MENUITEM "보통", MNID_OPTS_FONTS_NORMAL
|
||||
MENUITEM "크게", MNID_OPTS_FONTS_LARGE
|
||||
MENUITEM "작게", MNID_OPTS_FONTS_SMALL
|
||||
MENUITEM "보통", MNID_OPTS_FONTS_NORMAL
|
||||
MENUITEM "크게", MNID_OPTS_FONTS_LARGE
|
||||
END
|
||||
MENUITEM "시스템 색상 사용", MNID_OPTS_SYSTEM_COLORS
|
||||
MENUITEM "시스템 색상 사용", MNID_OPTS_SYSTEM_COLORS
|
||||
}
|
||||
POPUP "도움말(&H)" {
|
||||
MENUITEM "도움말 사용법(&O)", MNID_HELP_HELPON
|
||||
MENUITEM "항상 위(&T)", MNID_HELP_HELPTOP
|
||||
POPUP "도움말(&H)" {
|
||||
MENUITEM "도움말 사용법(&O)", MNID_HELP_HELPON
|
||||
MENUITEM "항상 위(&T)", MNID_HELP_HELPTOP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "정보(&I)...", MNID_HELP_ABOUT
|
||||
MENUITEM "Wine 도움말 정보(&I)...", MNID_HELP_ABOUT
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -71,7 +73,7 @@ MAIN_MENU MENU
|
|||
IDD_INDEX DIALOG 0, 0, 200, 190
|
||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
FONT 9, "MS Shell Dlg"
|
||||
CAPTION "인덱스"
|
||||
CAPTION "인덱스"
|
||||
{
|
||||
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
|
||||
}
|
||||
|
@ -79,50 +81,50 @@ CAPTION "
|
|||
IDD_SEARCH DIALOG 0, 0, 200, 190
|
||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
FONT 9, "MS Shell Dlg"
|
||||
CAPTION "찾기"
|
||||
CAPTION "찾기"
|
||||
{
|
||||
LTEXT "아직 구현되지 않음", -1, 10, 10, 180, 150
|
||||
LTEXT "아직 구현되지 않음", -1, 10, 10, 180, 150
|
||||
}
|
||||
|
||||
/* Strings */
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STID_WINE_HELP, "Wine 도움말"
|
||||
STID_WHERROR, "에러"
|
||||
STID_WARNING, "경고"
|
||||
STID_INFO, "정보"
|
||||
STID_NOT_IMPLEMENTED, "구현되지 않았음"
|
||||
STID_HLPFILE_ERROR_s, "도움말 파일 `%s'를 읽는 도중 오류 발생"
|
||||
STID_INDEX, "목차(&C)"
|
||||
STID_CONTENTS, "요약"
|
||||
STID_BACK, "뒤로(&B)"
|
||||
STID_ALL_FILES, "모든 파일 (*.*)"
|
||||
STID_HELP_FILES_HLP, "도움말 파일 (*.hlp)"
|
||||
STID_FILE_NOT_FOUND_s "%s을 찾을 수 없습니다'. 이 파일을 직접 찾겠습니까?"
|
||||
STID_NO_RICHEDIT "richedit 구현을 찾을수 업습니다.. 취소중"
|
||||
STID_PSH_INDEX, "도움말 목차: "
|
||||
STID_WINE_HELP, "Wine 도움말"
|
||||
STID_WHERROR, "에러"
|
||||
STID_WARNING, "경고"
|
||||
STID_INFO, "정보"
|
||||
STID_NOT_IMPLEMENTED, "구현되지 않았음"
|
||||
STID_HLPFILE_ERROR_s, "도움말 파일 `%s'를 읽는 도중 오류 발생"
|
||||
STID_INDEX, "목차(&C)"
|
||||
STID_CONTENTS, "요약"
|
||||
STID_BACK, "뒤로(&B)"
|
||||
STID_ALL_FILES, "모든 파일 (*.*)"
|
||||
STID_HELP_FILES_HLP, "도움말 파일 (*.hlp)"
|
||||
STID_FILE_NOT_FOUND_s "%s을 찾을 수 없습니다'. 이 파일을 직접 찾겠습니까?"
|
||||
STID_NO_RICHEDIT "richedit 구현을 찾을수 업습니다.. 취소중"
|
||||
STID_PSH_INDEX, "도움말 목차: "
|
||||
}
|
||||
|
||||
CONTEXT_MENU MENU
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "주석...", MNID_CTXT_ANNOTATE
|
||||
MENUITEM "복사", MNID_CTXT_COPY
|
||||
MENUITEM "인쇄...", MNID_CTXT_PRINT
|
||||
POPUP "글꼴"
|
||||
MENUITEM "주석...", MNID_CTXT_ANNOTATE
|
||||
MENUITEM "복사", MNID_CTXT_COPY
|
||||
MENUITEM "인쇄...", MNID_CTXT_PRINT
|
||||
POPUP "글꼴"
|
||||
BEGIN
|
||||
MENUITEM "좁게", MNID_CTXT_FONTS_SMALL
|
||||
MENUITEM "보통", MNID_CTXT_FONTS_NORMAL
|
||||
MENUITEM "넓게", MNID_CTXT_FONTS_LARGE
|
||||
MENUITEM "좁게", MNID_CTXT_FONTS_SMALL
|
||||
MENUITEM "보통", MNID_CTXT_FONTS_NORMAL
|
||||
MENUITEM "넓게", MNID_CTXT_FONTS_LARGE
|
||||
END
|
||||
POPUP "도움말 항상 보이기"
|
||||
POPUP "도움말 항상 보이기"
|
||||
BEGIN
|
||||
MENUITEM "기본", MNID_CTXT_HELP_DEFAULT
|
||||
MENUITEM "보이기", MNID_CTXT_HELP_VISIBLE
|
||||
MENUITEM "안 보이기", MNID_CTXT_HELP_NONVISIBLE
|
||||
MENUITEM "기본", MNID_CTXT_HELP_DEFAULT
|
||||
MENUITEM "보이기", MNID_CTXT_HELP_VISIBLE
|
||||
MENUITEM "안 보이기", MNID_CTXT_HELP_NONVISIBLE
|
||||
END
|
||||
MENUITEM "시스템 색상 사용", MNID_CTXT_SYSTEM_COLORS
|
||||
MENUITEM "시스템 색상 사용", MNID_CTXT_SYSTEM_COLORS
|
||||
END
|
||||
END
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
*
|
||||
* Copyright 2002 liuspider <liuspider@yahoo.com>
|
||||
* Copyright 2008 Hongbo Ni <hongbo.at.njstar.com>
|
||||
* Copyright 2010 Cheer Xiao <xiaqqaix.at.gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -37,7 +38,7 @@ MAIN_MENU MENU
|
|||
MENUITEM "打印(&P)", MNID_FILE_PRINT
|
||||
MENUITEM "打印机设置(&S)...", MNID_FILE_SETUP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "退出(&E)", MNID_FILE_EXIT
|
||||
MENUITEM "退出(&X)", MNID_FILE_EXIT
|
||||
}
|
||||
POPUP "编辑(&E)" {
|
||||
MENUITEM "复制(&C)...", MNID_EDIT_COPYDLG
|
||||
|
@ -48,7 +49,7 @@ MAIN_MENU MENU
|
|||
MENUITEM "定义(&D)...", MNID_BKMK_DEFINE
|
||||
}
|
||||
POPUP "选项(&O)" {
|
||||
POPUP "显示帮助"
|
||||
POPUP "总是显示帮助"
|
||||
BEGIN
|
||||
MENUITEM "默认", MNID_OPTS_HELP_DEFAULT
|
||||
MENUITEM "显示", MNID_OPTS_HELP_VISIBLE
|
||||
|
@ -67,10 +68,26 @@ MAIN_MENU MENU
|
|||
MENUITEM "如何使用帮助(&O)", MNID_HELP_HELPON
|
||||
MENUITEM "总是在最前面(&T)", MNID_HELP_HELPTOP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "资料信息(&I)...", MNID_HELP_ABOUT
|
||||
MENUITEM "关于 Wine 帮助(&I)...", MNID_HELP_ABOUT
|
||||
}
|
||||
}
|
||||
|
||||
IDD_INDEX DIALOG 0, 0, 200, 190
|
||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
FONT 8, "MS Shell Dlg"
|
||||
CAPTION "索引"
|
||||
{
|
||||
LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER
|
||||
}
|
||||
|
||||
IDD_SEARCH DIALOG 0, 0, 200, 190
|
||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||
FONT 8, "MS Shell Dlg"
|
||||
CAPTION "搜索"
|
||||
{
|
||||
LTEXT "尚未实现", -1, 10, 10, 180, 150
|
||||
}
|
||||
|
||||
/* Strings */
|
||||
STRINGTABLE
|
||||
{
|
||||
|
@ -79,17 +96,40 @@ STID_WHERROR, "错误"
|
|||
STID_WARNING, "警告"
|
||||
STID_INFO, "信息"
|
||||
STID_NOT_IMPLEMENTED, "未实现"
|
||||
STID_HLPFILE_ERROR_s, "读入帮助文件 ‘%s’ 时发生错误"
|
||||
STID_INDEX, "内容(&C)"
|
||||
STID_HLPFILE_ERROR_s, "读入帮助文件“%s”时发生错误"
|
||||
STID_INDEX, "索引(&I)"
|
||||
STID_CONTENTS, "概要"
|
||||
STID_BACK, "返回(&B)"
|
||||
STID_ALL_FILES, "所有文件 (*.*)"
|
||||
STID_HELP_FILES_HLP, "帮助文件 (*.hlp)"
|
||||
STID_FILE_NOT_FOUND_s "不能打开文件 '%s'. 你想要自己找这个文件吗?"
|
||||
STID_NO_RICHEDIT "找不到 richedit... 终止"
|
||||
STID_PSH_INDEX, "帮助内容: "
|
||||
STID_FILE_NOT_FOUND_s "找不到文件“%s”。 你想要自己找这个文件吗?"
|
||||
STID_NO_RICHEDIT "找不到 richedit 的实现……终止"
|
||||
STID_PSH_INDEX, "帮助主题:"
|
||||
}
|
||||
|
||||
CONTEXT_MENU MENU
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "注释...", MNID_CTXT_ANNOTATE
|
||||
MENUITEM "复制", MNID_CTXT_COPY
|
||||
MENUITEM "打印...", MNID_CTXT_PRINT
|
||||
POPUP "字体"
|
||||
BEGIN
|
||||
MENUITEM "小号", MNID_CTXT_FONTS_SMALL
|
||||
MENUITEM "中号", MNID_CTXT_FONTS_NORMAL
|
||||
MENUITEM "大号", MNID_CTXT_FONTS_LARGE
|
||||
END
|
||||
POPUP "总是显示帮助"
|
||||
BEGIN
|
||||
MENUITEM "默认", MNID_CTXT_HELP_DEFAULT
|
||||
MENUITEM "显示", MNID_CTXT_HELP_VISIBLE
|
||||
MENUITEM "不显示", MNID_CTXT_HELP_NONVISIBLE
|
||||
END
|
||||
MENUITEM "使用系统颜色", MNID_CTXT_SYSTEM_COLORS
|
||||
END
|
||||
END
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
||||
|
||||
/* Menu */
|
||||
|
|
|
@ -30,7 +30,6 @@ IDI_WINHELP ICON winhelp.ico
|
|||
#include "Es.rc"
|
||||
#include "Fi.rc"
|
||||
#include "Hu.rc"
|
||||
#include "Ko.rc"
|
||||
#include "No.rc"
|
||||
#include "Pl.rc"
|
||||
#include "Sk.rc"
|
||||
|
@ -44,6 +43,7 @@ IDI_WINHELP ICON winhelp.ico
|
|||
#include "He.rc"
|
||||
#include "It.rc"
|
||||
#include "Ja.rc"
|
||||
#include "Ko.rc"
|
||||
#include "Lt.rc"
|
||||
#include "Nl.rc"
|
||||
#include "Pt.rc"
|
||||
|
|
|
@ -61,7 +61,7 @@ BEGIN
|
|||
MENUITEM SEPARATOR
|
||||
POPUP "其他(&X)"
|
||||
BEGIN
|
||||
MENUITEM "选中信息(&I)", ID_EDIT_SELECTIONINFO
|
||||
MENUITEM "选中信息(&I)", ID_EDIT_SELECTIONINFO /* 准确性待议 */
|
||||
MENUITEM "文字格式(&F)", ID_EDIT_CHARFORMAT
|
||||
MENUITEM "默认格式(&D)", ID_EDIT_DEFCHARFORMAT
|
||||
MENUITEM "段落格式(&H)", ID_EDIT_PARAFORMAT
|
||||
|
@ -107,8 +107,8 @@ BEGIN
|
|||
MENUITEM "复制(&C)", ID_EDIT_COPY
|
||||
MENUITEM "粘贴(&P)", ID_EDIT_PASTE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "项目符号(&B)", ID_BULLET
|
||||
MENUITEM "段落(&P)...", ID_PARAFORMAT
|
||||
MENUITEM "项目符号(&B)", ID_BULLET
|
||||
MENUITEM "段落(&P)...", ID_PARAFORMAT
|
||||
END
|
||||
END
|
||||
|
||||
|
@ -118,21 +118,21 @@ BEGIN
|
|||
BEGIN
|
||||
MENUITEM "黑色", ID_COLOR_BLACK /* 未找到“标准译名表” */
|
||||
MENUITEM "栗色", ID_COLOR_MAROON
|
||||
MENUITEM "调和绿", ID_COLOR_GREEN
|
||||
MENUITEM "橄榄色", ID_COLOR_OLIVE
|
||||
MENUITEM "藏青", ID_COLOR_NAVY
|
||||
MENUITEM "紫色", ID_COLOR_PURPLE
|
||||
MENUITEM "鸭翅绿", ID_COLOR_TEAL
|
||||
MENUITEM "灰色", ID_COLOR_GRAY
|
||||
MENUITEM "银色", ID_COLOR_SILVER
|
||||
MENUITEM "红色", ID_COLOR_RED
|
||||
MENUITEM "绿色", ID_COLOR_LIME
|
||||
MENUITEM "黄色", ID_COLOR_YELLOW
|
||||
MENUITEM "蓝色", ID_COLOR_BLUE
|
||||
MENUITEM "洋红", ID_COLOR_FUCHSIA /* =magenta? */
|
||||
MENUITEM "水绿", ID_COLOR_AQUA
|
||||
MENUITEM "白色", ID_COLOR_WHITE
|
||||
MENUITEM "自动", ID_COLOR_AUTOMATIC
|
||||
MENUITEM "绿色", ID_COLOR_GREEN
|
||||
MENUITEM "橄榄色", ID_COLOR_OLIVE
|
||||
MENUITEM "藏青", ID_COLOR_NAVY
|
||||
MENUITEM "紫色", ID_COLOR_PURPLE
|
||||
MENUITEM "鸭翅绿", ID_COLOR_TEAL
|
||||
MENUITEM "灰色", ID_COLOR_GRAY
|
||||
MENUITEM "银色", ID_COLOR_SILVER
|
||||
MENUITEM "红色", ID_COLOR_RED
|
||||
MENUITEM "青柠色", ID_COLOR_LIME
|
||||
MENUITEM "黄色", ID_COLOR_YELLOW
|
||||
MENUITEM "蓝色", ID_COLOR_BLUE
|
||||
MENUITEM "洋红", ID_COLOR_FUCHSIA /* =magenta? */
|
||||
MENUITEM "水绿", ID_COLOR_AQUA
|
||||
MENUITEM "白色", ID_COLOR_WHITE
|
||||
MENUITEM "自动", ID_COLOR_AUTOMATIC
|
||||
END
|
||||
END
|
||||
|
||||
|
@ -359,8 +359,8 @@ BEGIN
|
|||
MENUITEM "複製(&C)", ID_EDIT_COPY
|
||||
MENUITEM "貼上(&P)", ID_EDIT_PASTE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "子彈點(&B)", ID_BULLET
|
||||
MENUITEM "段落(&P)...", ID_PARAFORMAT
|
||||
MENUITEM "子彈點(&B)", ID_BULLET
|
||||
MENUITEM "段落(&P)...", ID_PARAFORMAT
|
||||
END
|
||||
END
|
||||
|
||||
|
@ -487,7 +487,9 @@ BEGIN
|
|||
STRING_PROMPT_SAVE_CHANGES, "儲存改動到 '%s'?"
|
||||
STRING_SEARCH_FINISHED, "檔案查找結束."
|
||||
STRING_LOAD_RICHED_FAILED, "RichEdit 裝載失敗."
|
||||
STRING_SAVE_LOSEFORMATTING, "你已經選擇儲存為文本檔案, 這可能導致格式丟失. 你確定要這麼做嗎?"
|
||||
STRING_SAVE_LOSEFORMATTING, "你已經選擇儲存為文本檔案, " \
|
||||
"這可能導致格式丟失. " \
|
||||
"你確定要這麼做嗎?"
|
||||
STRING_INVALID_NUMBER, "數字格式無效"
|
||||
STRING_OLE_STORAGE_NOT_SUPPORTED, "不支援OLE 儲存檔案"
|
||||
STRING_WRITE_FAILED, "不能儲存檔案."
|
||||
|
|
|
@ -162,7 +162,7 @@ static void AddButton(HWND hwndToolBar, int nImage, int nCommand)
|
|||
button.iBitmap = nImage;
|
||||
button.idCommand = nCommand;
|
||||
button.fsState = TBSTATE_ENABLED;
|
||||
button.fsStyle = TBSTYLE_BUTTON;
|
||||
button.fsStyle = BTNS_BUTTON;
|
||||
button.dwData = 0;
|
||||
button.iString = -1;
|
||||
SendMessageW(hwndToolBar, TB_ADDBUTTONSW, 1, (LPARAM)&button);
|
||||
|
@ -176,7 +176,7 @@ static void AddSeparator(HWND hwndToolBar)
|
|||
button.iBitmap = -1;
|
||||
button.idCommand = 0;
|
||||
button.fsState = 0;
|
||||
button.fsStyle = TBSTYLE_SEP;
|
||||
button.fsStyle = BTNS_SEP;
|
||||
button.dwData = 0;
|
||||
button.iString = -1;
|
||||
SendMessageW(hwndToolBar, TB_ADDBUTTONSW, 1, (LPARAM)&button);
|
||||
|
@ -1818,7 +1818,7 @@ static LRESULT OnCreate( HWND hWnd )
|
|||
if(!SendMessageW(hReBarWnd, RB_SETBARINFO, 0, (LPARAM)&rbi))
|
||||
return -1;
|
||||
|
||||
hToolBarWnd = CreateToolbarEx(hReBarWnd, CCS_NOPARENTALIGN|CCS_NOMOVEY|WS_VISIBLE|WS_CHILD|TBSTYLE_TOOLTIPS|TBSTYLE_BUTTON,
|
||||
hToolBarWnd = CreateToolbarEx(hReBarWnd, CCS_NOPARENTALIGN|CCS_NOMOVEY|WS_VISIBLE|WS_CHILD|TBSTYLE_TOOLTIPS|BTNS_BUTTON,
|
||||
IDC_TOOLBAR,
|
||||
1, hInstance, IDB_TOOLBAR,
|
||||
NULL, 0,
|
||||
|
@ -1880,7 +1880,7 @@ static LRESULT OnCreate( HWND hWnd )
|
|||
SendMessageW(hReBarWnd, RB_INSERTBAND, -1, (LPARAM)&rbb);
|
||||
|
||||
hFormatBarWnd = CreateToolbarEx(hReBarWnd,
|
||||
CCS_NOPARENTALIGN | CCS_NOMOVEY | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_BUTTON,
|
||||
CCS_NOPARENTALIGN | CCS_NOMOVEY | WS_VISIBLE | TBSTYLE_TOOLTIPS | BTNS_BUTTON,
|
||||
IDC_FORMATBAR, 8, hInstance, IDB_FORMATBAR, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON));
|
||||
|
||||
AddButton(hFormatBarWnd, 0, ID_FORMAT_BOLD);
|
||||
|
|
38
base/applications/write/Sr.rc
Normal file
38
base/applications/write/Sr.rc
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Serbian language support
|
||||
*
|
||||
* Copyright (C) 2007 Mikolaj Zalewski
|
||||
* Copyright 2010 Đorđe Vasiljević
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "resources.h"
|
||||
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
IDS_FAILED, "Покретање Писанке није успело"
|
||||
}
|
||||
|
||||
LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
IDS_FAILED, "Pokretanje Pisanke nije uspelo"
|
||||
}
|
31
base/applications/write/Zh.rc
Normal file
31
base/applications/write/Zh.rc
Normal file
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Simplified Chinese language support
|
||||
*
|
||||
* Copyright (C) 2010 Cheer Xiao <xiaqqaix.at.gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include "resources.h"
|
||||
|
||||
/* Chinese text is encoded in UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
IDS_FAILED, "启动写字板失败"
|
||||
}
|
|
@ -39,4 +39,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||
#include "Ro.rc"
|
||||
#include "Ru.rc"
|
||||
#include "Si.rc"
|
||||
#include "Sr.rc"
|
||||
#include "Uk.rc"
|
||||
#include "Zh.rc"
|
||||
|
|
|
@ -104,7 +104,7 @@ BOOL PrepareService(LPCTSTR ServiceName)
|
|||
HeapFree(GetProcessHeap(), 0, Buffer);
|
||||
|
||||
/* Load the service dll */
|
||||
DPRINT1("Trying to load dll\n");
|
||||
DPRINT("Trying to load dll\n");
|
||||
hServiceDll = LoadLibrary(DllPath);
|
||||
|
||||
if (NULL == hServiceDll)
|
||||
|
@ -226,7 +226,7 @@ int _tmain (int argc, LPTSTR argv [])
|
|||
|
||||
NrOfServices = LoadServiceCategory(argv[2]);
|
||||
|
||||
DPRINT1("NrOfServices: %lu\n", NrOfServices);
|
||||
DPRINT("NrOfServices: %lu\n", NrOfServices);
|
||||
if (0 == NrOfServices)
|
||||
return 0;
|
||||
|
||||
|
@ -240,7 +240,7 @@ int _tmain (int argc, LPTSTR argv [])
|
|||
/* Fill the service table */
|
||||
for (i = 0; i < NrOfServices; ++i)
|
||||
{
|
||||
DPRINT1("Loading service: %s\n", Service->Name);
|
||||
DPRINT("Loading service: %s\n", Service->Name);
|
||||
ServiceTable[i].lpServiceName = Service->Name;
|
||||
ServiceTable[i].lpServiceProc = Service->ServiceMainFunc;
|
||||
Service = Service->Next;
|
||||
|
|
|
@ -94,20 +94,37 @@ static DWORD WINAPI
|
|||
RpcServerThread(LPVOID lpParameter)
|
||||
{
|
||||
RPC_STATUS Status;
|
||||
BOOLEAN RegisteredProtSeq = FALSE;
|
||||
|
||||
UNREFERENCED_PARAMETER(lpParameter);
|
||||
|
||||
DPRINT("RpcServerThread() called\n");
|
||||
|
||||
#if 0
|
||||
/* XP-compatible protocol sequence/endpoint */
|
||||
Status = RpcServerUseProtseqEpW(L"ncacn_np",
|
||||
20,
|
||||
L"\\pipe\\umpnpmgr",
|
||||
L"\\pipe\\ntsvcs",
|
||||
NULL); // Security descriptor
|
||||
if (Status != RPC_S_OK)
|
||||
{
|
||||
if (Status == RPC_S_OK)
|
||||
RegisteredProtSeq = TRUE;
|
||||
else
|
||||
DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
|
||||
#endif
|
||||
|
||||
/* Vista-compatible protocol sequence/endpoint */
|
||||
Status = RpcServerUseProtseqEpW(L"ncacn_np",
|
||||
20,
|
||||
L"\\pipe\\plugplay",
|
||||
NULL); // Security descriptor
|
||||
if (Status == RPC_S_OK)
|
||||
RegisteredProtSeq = TRUE;
|
||||
else
|
||||
DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
|
||||
|
||||
/* Make sure there's a usable endpoint */
|
||||
if (RegisteredProtSeq == FALSE)
|
||||
return 0;
|
||||
}
|
||||
|
||||
Status = RpcServerRegisterIf(pnp_v1_0_s_ifspec,
|
||||
NULL,
|
||||
|
|
|
@ -1496,7 +1496,7 @@ MUI_ERROR bgBGErrorEntries[] =
|
|||
},
|
||||
{
|
||||
//ERROR_INSUFFICIENT_DISKSPACE,
|
||||
"Not enough free space in the selected partition.\n"
|
||||
"<EFBFBD> ¨§΅ΰ ¨ο ¤ο« ο¬ ¤®αβ βκη® αΆ®΅®¤® ―ΰ®αβΰ αβΆ®.\n"
|
||||
" * <20> â¨á¥â¥ ª« ¢¨è, § ¤ ¯à®¤ê«¦¨â¥.",
|
||||
NULL
|
||||
},
|
||||
|
@ -1640,7 +1640,7 @@ MUI_STRING bgBGStrings[] =
|
|||
{STRING_COPYING,
|
||||
" ‡ ¯¨á ä ©«: %S"},
|
||||
{STRING_SETUPCOPYINGFILES,
|
||||
"’¥ç¥ § ¯¨á¢ ¥ ä ©«®¢¥â¥..."},
|
||||
"” ©«®Ά¥β¥ α¥ § ―¨αΆ β..."},
|
||||
{STRING_REGHIVEUPDATE,
|
||||
" Žáê¢à¥¬¥ï¢ ¥ ॣ¨áâêà¨â¥ ஥¢¥..."},
|
||||
{STRING_IMPORTFILE,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* FILE: setup/usetup/lang/cs-CZ.rc
|
||||
* TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
|
||||
* THANKS TO: preston
|
||||
* UPDATED: 2010-05-25
|
||||
* UPDATED: 2010-12-12
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@ -993,13 +993,13 @@ static MUI_ENTRY csCZBootLoaderEntries[] =
|
|||
{
|
||||
8,
|
||||
12,
|
||||
"Install bootloader on the harddisk (MBR and VBR).",
|
||||
"Nainstalovat zavadŘź na pevně disk (MBR a VBR).",
|
||||
TEXT_STYLE_NORMAL
|
||||
},
|
||||
{
|
||||
8,
|
||||
13,
|
||||
"Install bootloader on the harddisk (VBR only).",
|
||||
"Nainstalovat zavadŘź na pevně disk (pouze VBR).",
|
||||
TEXT_STYLE_NORMAL
|
||||
},
|
||||
{
|
||||
|
|
|
@ -180,7 +180,7 @@ WORD wDefColor; /* default color */
|
|||
* insert commas into a number
|
||||
*/
|
||||
INT
|
||||
ConvertULargeInteger(ULONGLONG num, LPTSTR des, INT len, BOOL bPutSeperator)
|
||||
ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeperator)
|
||||
{
|
||||
TCHAR temp[39]; /* maximum length with nNumberGroups == 1 */
|
||||
UINT n, iTarget;
|
||||
|
|
|
@ -99,7 +99,7 @@ INT cmd_cls (LPTSTR);
|
|||
|
||||
|
||||
/* Prototypes for CMD.C */
|
||||
INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, INT len, BOOL bPutSeperator);
|
||||
INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeperator);
|
||||
HANDLE RunFile(DWORD, LPTSTR, LPTSTR, LPTSTR, INT);
|
||||
INT ParseCommandLine(LPTSTR);
|
||||
struct _PARSED_COMMAND;
|
||||
|
|
|
@ -131,7 +131,7 @@ static VOID ConWrite(TCHAR *str, DWORD len, DWORD nStdHandle)
|
|||
error_out_of_memory();
|
||||
return;
|
||||
}
|
||||
len = MultiByteToWideChar(OutputCodePage, 0, str, len, buffer, len, NULL, NULL);
|
||||
len = MultiByteToWideChar(OutputCodePage, 0, str, len, buffer, len);
|
||||
str = (PVOID)buffer;
|
||||
#endif
|
||||
WriteFile(hOutput, str, len * sizeof(WCHAR), &dwWritten, NULL);
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <stdarg.h>
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
#include <assert.h>
|
||||
|
||||
#define NTOS_MODE_USER
|
||||
#include <ndk/ntndk.h>
|
||||
|
|
|
@ -152,7 +152,7 @@ CreateDropTarget(IN HWND hwndTarget,
|
|||
{
|
||||
CopyMemory(&This->Callbacks,
|
||||
Callbacks,
|
||||
sizeof(Callbacks));
|
||||
sizeof(*Callbacks));
|
||||
}
|
||||
|
||||
hr = CoCreateInstance(&CLSID_DragDropHelper,
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
|
||||
|
||||
IDM_TRAYWND MENU DISCARDABLE
|
||||
|
@ -36,7 +37,7 @@ BEGIN
|
|||
MENUITEM "&Ñèãóðíîñò...", IDM_SECURITY, MFT_STRING, MFS_ENABLED
|
||||
MENUITEM "&Ìðåæîâè âðúçêè", IDM_NETWORKCONNECTIONS, MFT_STRING, MFS_ENABLED
|
||||
MENUITEM "&Ïå÷àòà÷è è ôàêñîâå", IDM_PRINTERSANDFAXES, MFT_STRING, MFS_ENABLED
|
||||
MENUITEM "&Taskbar and Start Menu", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED
|
||||
MENUITEM "&Задачна лента и изборник „Пуск“", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED
|
||||
END
|
||||
POPUP "&Òúðñåíå", IDM_SEARCH
|
||||
BEGIN
|
||||
|
@ -49,6 +50,7 @@ BEGIN
|
|||
MENUITEM "&Èçõîä %s...", IDM_LOGOFF, MFT_STRING, MFS_ENABLED
|
||||
MENUITEM "&Îòêà÷âàíå...", IDM_DISCONNECT, MFT_STRING, MFS_ENABLED
|
||||
/* undock computer*/
|
||||
/* неясно */
|
||||
MENUITEM "Îò&ãíåçäâàíå íà êîìïþòúðà", IDM_UNDOCKCOMPUTER, MFT_STRING, MFS_ENABLED
|
||||
MENUITEM "&Èçêëþ÷âàíå...", IDM_SHUTDOWN, MFT_STRING, MFS_ENABLED
|
||||
END
|
||||
|
@ -121,7 +123,7 @@ BEGIN
|
|||
IDS_PROPERTIES "&Ñâîéñòâà"
|
||||
IDS_OPEN_ALL_USERS "&Îòâàðÿíå íà âñè÷êè ïîòðåáèòåëè"
|
||||
IDS_EXPLORE_ALL_USERS "&Ðàçëèñòâàíå íà âñè÷êè ïîòðåáèòåëè"
|
||||
IDS_STARTUP_ERROR "The system cannot start explorer because the registry is corrupted or unavailable."
|
||||
IDS_STARTUP_ERROR "Уредбата не може да пусне изследователя, понеже понеже регистърът е увреден или недостъпен."
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue