mirror of
https://github.com/reactos/reactos
synced 2025-10-06 16:32:42 +02:00
Compare commits
283 Commits
ntos/KiWri
...
hpoussin/m
Author | SHA1 | Date | |
---|---|---|---|
|
90b12e88a5 | ||
|
85cde17c46 | ||
|
92ff994cc2 | ||
|
87f4b28b99 | ||
|
c129b6d921 | ||
|
4b87ae3dca | ||
|
901af6a681 | ||
|
99ddf459e0 | ||
|
7cf1e01cd4 | ||
|
2335229c32 | ||
|
5b4d1dbd4b | ||
|
6dd04063ba | ||
|
21d02b8266 | ||
|
fbd676f4c9 | ||
|
dfe30e58c0 | ||
|
273b4c8702 | ||
|
7c3a119d6d | ||
|
4a3a446ba7 | ||
|
18290a7b6b | ||
|
7d8d8a6e52 | ||
|
67a4cf93be | ||
|
0947a64a90 | ||
|
aa0089a3ec | ||
|
343d1d4873 | ||
|
6f47c884d5 | ||
|
4f7736a088 | ||
|
22d077f9f1 | ||
|
2ab01e7302 | ||
|
d80fdbe146 | ||
|
2fd0af4f8f | ||
|
2543e2179c | ||
|
1395e7ecc4 | ||
|
9fd4378def | ||
|
bb282448c6 | ||
|
81edd1f9b4 | ||
|
6a154167cf | ||
|
9d8b342e60 | ||
|
d09c3d0af8 | ||
|
dd896f6f44 | ||
|
bad53bf847 | ||
|
9fe829874b | ||
|
1286711ac4 | ||
|
52ca35327e | ||
|
ddcd5f7083 | ||
|
54840389ee | ||
|
45eff312cb | ||
|
babe6046e5 | ||
|
87b8c1ee2f | ||
|
51495b1b75 | ||
|
c187cf8b9e | ||
|
001d0051e9 | ||
|
e431470ff9 | ||
|
d663eb4466 | ||
|
6dd8e04438 | ||
|
e43e639c30 | ||
|
543cf1e2fd | ||
|
bc03c010b3 | ||
|
72dcb3a11f | ||
|
9f21cc3e98 | ||
|
4534537036 | ||
|
9853f1de67 | ||
|
b4e471c87d | ||
|
b627a42898 | ||
|
7015c76c63 | ||
|
d4c64771cd | ||
|
2a0d98c2bc | ||
|
412fe7d9ac | ||
|
228156e79f | ||
|
07ab1cc82d | ||
|
6696d40cfc | ||
|
4fce13e06b | ||
|
2c5bba3c48 | ||
|
14877a7ec6 | ||
|
30a7d19d84 | ||
|
29b5003455 | ||
|
2f00ca4663 | ||
|
17577d2581 | ||
|
3df71d678d | ||
|
c03d7794b8 | ||
|
4bdbb3092c | ||
|
f4992a4484 | ||
|
5af1d7c6b1 | ||
|
99e2606982 | ||
|
3194e0556f | ||
|
0743ceefa2 | ||
|
c699471994 | ||
|
16e620d647 | ||
|
55b6f3455c | ||
|
8a913baed8 | ||
|
a6bdcbc007 | ||
|
64fda67763 | ||
|
284f15be02 | ||
|
6bd0ffc494 | ||
|
57981ed025 | ||
|
2041f3c7a1 | ||
|
5299f047e4 | ||
|
e326b06983 | ||
|
08b6106aac | ||
|
f920d349e0 | ||
|
4cb4eee23a | ||
|
99064a58d9 | ||
|
40721f49ba | ||
|
99d9e764a2 | ||
|
ec5b1422bc | ||
|
06034b258a | ||
|
8369c55edb | ||
|
0453ed98df | ||
|
876bba3d07 | ||
|
ada4584cb6 | ||
|
61ff0eb940 | ||
|
2f30fda4f9 | ||
|
eff677ca98 | ||
|
95caf762d4 | ||
|
281855e88c | ||
|
937954cf6c | ||
|
3842b59f75 | ||
|
c876fe350d | ||
|
7ce90a0399 | ||
|
eff61af6df | ||
|
7cc36bd42f | ||
|
c477928b0e | ||
|
5d40ec3e8c | ||
|
eb9c664d7e | ||
|
6b222fb084 | ||
|
8029339c49 | ||
|
9e1f2b035f | ||
|
53685ada35 | ||
|
6bfb792439 | ||
|
6efbed51ac | ||
|
490f7af4ae | ||
|
e2e6fcdb96 | ||
|
a2dd6efcb4 | ||
|
0fa49018cd | ||
|
947c03e948 | ||
|
8df62f2f2c | ||
|
3a0e02cede | ||
|
c47d1ffba6 | ||
|
4f84ffa118 | ||
|
189623614d | ||
|
626a875de1 | ||
|
6d1d6a7c51 | ||
|
6d460b61bf | ||
|
9e3546028d | ||
|
e07cf7f629 | ||
|
6cca9a9466 | ||
|
f17f96cb7e | ||
|
2766144b8b | ||
|
0c5274549b | ||
|
42b48b7435 | ||
|
28ff80d3d1 | ||
|
aa79640218 | ||
|
4fe1f62ba3 | ||
|
42da121600 | ||
|
99ecbf5e56 | ||
|
49427c48c5 | ||
|
dca369cf41 | ||
|
6df1cc63b6 | ||
|
d06d9f3e8f | ||
|
6a905ae2e1 | ||
|
d32fd58722 | ||
|
00b5dc8b49 | ||
|
afe29ee7fa | ||
|
e0ef51b11e | ||
|
3729b96625 | ||
|
a8abe1d677 | ||
|
a36bf31a0d | ||
|
f20efc6007 | ||
|
3bb27eb416 | ||
|
0ca6002b4f | ||
|
530d26a1f4 | ||
|
2c475add8c | ||
|
45b928f8bc | ||
|
d1f9e06a4f | ||
|
93e9710caf | ||
|
7073bdfead | ||
|
24c2e4433b | ||
|
986c4778fa | ||
|
2e7cfa0400 | ||
|
2aa6fc1c7f | ||
|
7c8a8400e0 | ||
|
fad52db479 | ||
|
39ce22150a | ||
|
9638666d84 | ||
|
5414600e1e | ||
|
cc16769179 | ||
|
3e342246d4 | ||
|
946f17e93d | ||
|
fb8e6124e0 | ||
|
21d3e290b7 | ||
|
a9ba54f678 | ||
|
e6f5065f32 | ||
|
85a69768d0 | ||
|
6829350af9 | ||
|
102c1db735 | ||
|
7af8ab2470 | ||
|
4cee67df3f | ||
|
2d57c60148 | ||
|
edc8eb63c4 | ||
|
9bfa6b51be | ||
|
e98bba2535 | ||
|
bbd6a57c0f | ||
|
21810f11e4 | ||
|
b79a0447b9 | ||
|
d722e70817 | ||
|
e40e5f572f | ||
|
b33127f494 | ||
|
ba6760683b | ||
|
b1cf981c52 | ||
|
37e2c59096 | ||
|
eb91f91569 | ||
|
be87e0099f | ||
|
dbc0c37750 | ||
|
bfa63932ce | ||
|
5456e195db | ||
|
87eac43fb9 | ||
|
fe6de816d6 | ||
|
f19c62c80e | ||
|
378a335468 | ||
|
9b70d4380c | ||
|
c27a2fc7cb | ||
|
f8efb5d474 | ||
|
d1aa59982d | ||
|
a6558c0562 | ||
|
bd2d3b8603 | ||
|
0a6bcfc9ff | ||
|
8b6907f2a6 | ||
|
85afe48c3e | ||
|
efbdd483b3 | ||
|
7eb8535edf | ||
|
78e04c07b8 | ||
|
e452980e0e | ||
|
35fd771c84 | ||
|
faaac75546 | ||
|
f1f01771b6 | ||
|
884f73fb04 | ||
|
0f6e982ad7 | ||
|
2c057d9bc1 | ||
|
94fc56c038 | ||
|
860262952d | ||
|
fcc2247774 | ||
|
6faee56f86 | ||
|
d3456f5060 | ||
|
4cbd5d1b44 | ||
|
73b019a390 | ||
|
fb6191b71a | ||
|
4514e748f0 | ||
|
f135cab83e | ||
|
2c2cdfddd3 | ||
|
d489f1a170 | ||
|
0e21c6f3fd | ||
|
005f75bd61 | ||
|
a7d86fe3a7 | ||
|
b42b015cc6 | ||
|
2fe3073697 | ||
|
3fe4b41f20 | ||
|
fa7890f39d | ||
|
aa60e56199 | ||
|
aa6c33b21c | ||
|
5a10ec60be | ||
|
2e85425c53 | ||
|
0e58b59794 | ||
|
1f27911997 | ||
|
f60128b69d | ||
|
edecbf4799 | ||
|
a8f4a76c7b | ||
|
8851d86847 | ||
|
7611e49b9d | ||
|
7ec2e1cd2f | ||
|
2696f1a29f | ||
|
ec45b8fde8 | ||
|
fca88bb94d | ||
|
d0a7e496aa | ||
|
42c7e4f66a | ||
|
d27f5971c5 | ||
|
48027a8058 | ||
|
7b23673851 | ||
|
31a693a035 | ||
|
67e5343daf | ||
|
016c5fd083 | ||
|
3d9b919814 | ||
|
26e0a5472f | ||
|
7026466324 | ||
|
be56c5c328 |
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"indentation": {
|
||||
"type": "spaces",
|
||||
"size": 4
|
||||
},
|
||||
"lineLength": 100,
|
||||
"braceStyle": "allman",
|
||||
"namingConventions": {
|
||||
"functions": {
|
||||
"public": "PascalCase",
|
||||
"private": "_PascalCase"
|
||||
},
|
||||
"variables": {
|
||||
"local": "camelCase",
|
||||
"global": "PascalCase",
|
||||
"constants": "UPPER_CASE"
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,52 +0,0 @@
|
||||
{
|
||||
"editor": {
|
||||
"defaultFormatter": null
|
||||
},
|
||||
"[c,cpp]": {
|
||||
"editor": {
|
||||
"tabSize": 4,
|
||||
"insertSpaces": true,
|
||||
"detectIndentation": false,
|
||||
"trimAutoWhitespace": true,
|
||||
"formatOnSave": false,
|
||||
"formatOnType": true,
|
||||
"defaultFormatter": "clang-format",
|
||||
"rulers": [100],
|
||||
"wordWrap": "off"
|
||||
}
|
||||
},
|
||||
"files": {
|
||||
"associations": {
|
||||
"*.c": "c",
|
||||
"*.h": "c",
|
||||
"*.cpp": "cpp",
|
||||
"*.hpp": "cpp"
|
||||
},
|
||||
"encoding": "utf8",
|
||||
"trimTrailingWhitespace": true,
|
||||
"insertFinalNewline": true,
|
||||
"exclude": {
|
||||
"**/.git": true,
|
||||
"compile_commands.json": true,
|
||||
"output-*": true,
|
||||
"modules/optional": true,
|
||||
"modules/3rdparty": true,
|
||||
"modules/bootcd_extras": true,
|
||||
"modules/livecd_extras": true,
|
||||
"modules/hybridcd_extras": true,
|
||||
"modules/[Aa][Hh][Kk]_[Tt]ests": true,
|
||||
".cache": true,
|
||||
".cproject": true,
|
||||
".DS_Store": true,
|
||||
".project": true,
|
||||
".settings": true,
|
||||
".vscode": true,
|
||||
"sdk/tools/winesync/winesync.cfg": true,
|
||||
"**/build": true,
|
||||
"**/obj": true,
|
||||
"**/bin": true,
|
||||
"**/*.o": true,
|
||||
"**/*.obj": true
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,46 +0,0 @@
|
||||
{
|
||||
"projectType": "reactos",
|
||||
"language": {
|
||||
"c": {
|
||||
"standard": "c99",
|
||||
"warnings": ["all", "error", "pedantic", "unused"],
|
||||
"formatter": "clang-format",
|
||||
"linter": "clang-tidy"
|
||||
},
|
||||
"cpp": {
|
||||
"standard": "c++11",
|
||||
"warnings": ["all", "error", "pedantic", "unused"],
|
||||
"formatter": "clang-format",
|
||||
"linter": "clang-tidy"
|
||||
}
|
||||
},
|
||||
"codingStyle": "reactos",
|
||||
"formatOnSave": false,
|
||||
"lintOnSave": false,
|
||||
"paths": {
|
||||
"source": [
|
||||
"base",
|
||||
"boot",
|
||||
"dll",
|
||||
"drivers",
|
||||
"hal",
|
||||
"ntoskrnl",
|
||||
"subsystems",
|
||||
"win32ss"
|
||||
],
|
||||
"include": [
|
||||
"sdk/include"
|
||||
],
|
||||
"docs": [
|
||||
"**/*.md",
|
||||
"media/doc/*.md",
|
||||
"media/doc/*.txt"
|
||||
],
|
||||
"tests": [
|
||||
"modules/rostests"
|
||||
],
|
||||
"build": [
|
||||
"output-*"
|
||||
]
|
||||
}
|
||||
}
|
7
.github/labeler.yml
vendored
7
.github/labeler.yml
vendored
@@ -47,10 +47,7 @@ Win32SS:
|
||||
"input method":
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- base/applications/ctfmon/**
|
||||
- dll/ime/**
|
||||
- dll/win32/imm32/**
|
||||
- dll/win32/msctf/**
|
||||
- dll/win32/msutb/**
|
||||
- base/ctf/**
|
||||
- win32ss/user/imm32/**
|
||||
- win32ss/user/ntuser/ime.c
|
||||
- win32ss/user/user32/misc/imm.c
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -13,5 +13,3 @@ modules/[Aa][Hh][Kk]_[Tt]ests
|
||||
.settings
|
||||
.vscode
|
||||
sdk/tools/winesync/winesync.cfg
|
||||
.cursor/cache/
|
||||
.cursor/logs/
|
||||
|
@@ -347,8 +347,7 @@ Enable this if the module uses typeid or dynamic_cast. You will probably need to
|
||||
add_subdirectory(sdk/include/xdk)
|
||||
add_subdirectory(sdk/include/psdk)
|
||||
add_subdirectory(sdk/include/dxsdk)
|
||||
add_subdirectory(sdk/include/reactos/wine)
|
||||
add_subdirectory(sdk/include/reactos/mc)
|
||||
add_subdirectory(sdk/include/reactos)
|
||||
add_subdirectory(sdk/include/asm)
|
||||
|
||||
if(ARCH MATCHES "64$")
|
||||
|
24
CODEOWNERS
24
CODEOWNERS
@@ -167,6 +167,8 @@
|
||||
/drivers/base/condrv/ @HBelusca
|
||||
/drivers/setup/blue/ @HBelusca
|
||||
/modules/rostests/winetests/kernel32/console.c @HBelusca
|
||||
/sdk/include/psdk/wincon.h @HBelusca
|
||||
/sdk/include/reactos/wincon_undoc.h @HBelusca
|
||||
/sdk/include/reactos/drivers/condrv/ @HBelusca
|
||||
/sdk/include/reactos/drivers/blue/ @HBelusca
|
||||
/sdk/include/reactos/subsys/win/conmsg.h @HBelusca
|
||||
@@ -294,7 +296,7 @@
|
||||
/dll/win32/kernel32/client/vdm.c @reactos573 @HBelusca
|
||||
/dll/win32/kernel32/include/vdm.h @reactos573 @HBelusca
|
||||
/sdk/include/reactos/subsys/win/vdm.h @reactos573 @HBelusca
|
||||
/ntoskrnl/vdm @reactos573 @HBelusca
|
||||
/ntoskrnl/vdm/ @reactos573 @HBelusca
|
||||
/sdk/include/reactos/libs/fast486/ @reactos573 @HBelusca
|
||||
/sdk/lib/fast486/ @reactos573 @HBelusca
|
||||
/subsystems/mvdm/ @reactos573 @HBelusca
|
||||
@@ -428,21 +430,23 @@
|
||||
/modules/rosapps/applications/cmdutils/vfdcmd/ @HeisSpiter
|
||||
/modules/rosapps/drivers/vfd/ @HeisSpiter
|
||||
|
||||
# Win32 file functions
|
||||
# Win32 Subsystem
|
||||
# M:
|
||||
# R: HBelusca, Hermès Bélusca-Maïto
|
||||
# S: Maintained
|
||||
/sdk/include/reactos/winbase_undoc.h @HBelusca
|
||||
/subsystems/win/basesrv/
|
||||
/win32ss/user/winsrv/
|
||||
/win32ss/user/winsrv/usersrv/harderror.c @HBelusca
|
||||
|
||||
# Win32 Subsystem - File functions
|
||||
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
|
||||
# R: HBelusca, Hermès Bélusca-Maïto
|
||||
# S: Maintained
|
||||
/dll/win32/kernel32/client/file/ @HeisSpiter
|
||||
/dll/win32/kernel32/client/file/find.c @HBelusca
|
||||
|
||||
# Win32 Subsystem - User Server
|
||||
# M:
|
||||
# R: HBelusca, Hermès Bélusca-Maïto
|
||||
# S: Maintained
|
||||
/win32ss/user/winsrv/
|
||||
/win32ss/user/winsrv/usersrv/harderror.c @HBelusca
|
||||
|
||||
# Win32 Subsystem Shutdown
|
||||
# Win32 Subsystem - Shutdown
|
||||
# M: HBelusca, Hermès Bélusca-Maïto
|
||||
# R: EricKohl, ekohl, Eric Kohl
|
||||
# S: Maintained
|
||||
|
@@ -1,5 +1,6 @@
|
||||
|
||||
add_subdirectory(applications)
|
||||
add_subdirectory(ctf)
|
||||
add_subdirectory(services)
|
||||
add_subdirectory(setup)
|
||||
add_subdirectory(shell)
|
||||
|
@@ -7,7 +7,6 @@ add_subdirectory(cleanmgr)
|
||||
add_subdirectory(clipbrd)
|
||||
add_subdirectory(cmdutils)
|
||||
add_subdirectory(control)
|
||||
add_subdirectory(ctfmon)
|
||||
add_subdirectory(drwtsn32)
|
||||
add_subdirectory(dxdiag)
|
||||
add_subdirectory(extrac32)
|
||||
|
@@ -801,11 +801,13 @@ MapWndProc(HWND hwnd,
|
||||
infoPtr->CurrentFont.lfFaceName,
|
||||
SIZEOF(lfFaceName));
|
||||
SetFont(infoPtr, lfFaceName);
|
||||
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
|
||||
break;
|
||||
|
||||
case FM_SETFONT:
|
||||
infoPtr->CaretX = infoPtr->CaretY = infoPtr->iYStart = 0;
|
||||
SetFont(infoPtr, (LPWSTR)lParam);
|
||||
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
|
||||
break;
|
||||
|
||||
case FM_GETCHAR:
|
||||
|
@@ -3,6 +3,7 @@
|
||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||
* PURPOSE: Implementation of Italian language for Clipboard Viewer
|
||||
* COPYRIGHT: Copyright 2018 George Bișoc (george.bisoc@reactos.org)
|
||||
* Copyright 2025 Gabriele Lo Re (gabrolr70@gmail.com)
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
|
||||
@@ -39,12 +40,12 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
STRING_CLIPBOARD "Visualizzatore di Clipboard"
|
||||
STRING_CLIPFILE "Elemento Clipboard"
|
||||
STRING_DELETE_MSG "Cancella i contenuti del Clipboard?"
|
||||
STRING_DELETE_TITLE "Cancella Clipboard"
|
||||
STRING_FORMAT_NT "I file del Clipboard di ReactOS (*.clp)"
|
||||
STRING_FORMAT_GEN "I file Clipboard (*.clp)"
|
||||
STRING_CLIPBOARD "Visualizzatore Appunti condivisi"
|
||||
STRING_CLIPFILE "Elemento appunti condivisi"
|
||||
STRING_DELETE_MSG "Cancella i contenuti degli appunti condivisi?"
|
||||
STRING_DELETE_TITLE "Cancella appunti condivisi"
|
||||
STRING_FORMAT_NT "Appunti condivisi di ReactOS (*.clp)"
|
||||
STRING_FORMAT_GEN "Appunti condivisi (*.clp)"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
@@ -67,6 +68,6 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
ERROR_UNSUPPORTED_FORMAT "Il Clipboard contiene informazioni in formato data, che non può essere visualizzato."
|
||||
ERROR_INVALID_FILE_FORMAT "Il file selezionato non è un file di tipo clipboard valido."
|
||||
ERROR_UNSUPPORTED_FORMAT "Gli appunti Condivisi contengono informazioni in formato data, che non possono essere visualizzate."
|
||||
ERROR_INVALID_FILE_FORMAT "Il file selezionato non è un file di tipo appunti condivisi valido."
|
||||
END
|
||||
|
@@ -15,28 +15,7 @@
|
||||
#include <winbase.h>
|
||||
#include <winuser.h>
|
||||
#include <wincon.h>
|
||||
|
||||
/* Console API functions which are absent from wincon.h */
|
||||
#define EXENAME_LENGTH (255 + 1)
|
||||
|
||||
VOID
|
||||
WINAPI
|
||||
ExpungeConsoleCommandHistoryW(LPCWSTR lpExeName);
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
GetConsoleCommandHistoryW(LPWSTR lpHistory,
|
||||
DWORD cbHistory,
|
||||
LPCWSTR lpExeName);
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
GetConsoleCommandHistoryLengthW(LPCWSTR lpExeName);
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
SetConsoleNumberOfCommandsW(DWORD dwNumCommands,
|
||||
LPCWSTR lpExeName);
|
||||
#include <wincon_undoc.h>
|
||||
|
||||
#include "doskey.h"
|
||||
|
||||
|
@@ -2,40 +2,39 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Compares two files or sets of files and displays the differences between\n\
|
||||
them.\n\
|
||||
IDS_USAGE "2つのファイルまたはファイル セットを比較し、それらの違いを表示します。\n\
|
||||
\n\
|
||||
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]\n\
|
||||
[drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
||||
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2\n\
|
||||
[ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2\n\
|
||||
FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2\n\
|
||||
\n\
|
||||
/A Displays only first and last lines for each set of differences.\n\
|
||||
/B Performs a binary comparison.\n\
|
||||
/C Disregards the case of letters.\n\
|
||||
/L Compares files as ASCII text.\n\
|
||||
/LBn Sets the maximum consecutive mismatches to the specified\n\
|
||||
number of lines (default: 100).\n\
|
||||
/N Displays the line numbers on an ASCII comparison.\n\
|
||||
/OFF[LINE] Doesn't skip files with offline attribute set.\n\
|
||||
/T Doesn't expand tabs to spaces (default: expand).\n\
|
||||
/U Compare files as UNICODE text files.\n\
|
||||
/W Compresses white space (tabs and spaces) for comparison.\n\
|
||||
/nnnn Specifies the number of consecutive lines that must match\n\
|
||||
after a mismatch (default: 2).\n\
|
||||
[drive1:][path1]filename1\n\
|
||||
Specifies the first file or set of files to compare.\n\
|
||||
[drive2:][path2]filename2\n\
|
||||
Specifies the second file or set of files to compare.\n"
|
||||
IDS_NO_DIFFERENCE "FC: no differences encountered\n"
|
||||
IDS_LONGER_THAN "FC: %ls longer than %ls\n"
|
||||
IDS_COMPARING "Comparing files %ls and %ls\n"
|
||||
IDS_OUT_OF_MEMORY "FC: Out of memory\n"
|
||||
IDS_CANNOT_READ "FC: cannot read from %ls\n"
|
||||
IDS_INVALID_SWITCH "FC: Invalid Switch\n"
|
||||
IDS_CANNOT_OPEN "FC: cannot open %ls - No such file or folder\n"
|
||||
IDS_NEEDS_FILES "FC: Insufficient number of file specifications\n"
|
||||
IDS_CANT_USE_WILDCARD "Wildcard ('*' and '?') are not supported yet\n"
|
||||
IDS_DIFFERENT "FC: File %ls and %ls are different\n"
|
||||
IDS_TOO_LARGE "FC: File %ls too large\n"
|
||||
IDS_RESYNC_FAILED "Resync failed. Files are too different.\n"
|
||||
/A 各差分集合の最初の行と最後の行のみを表示します。\n\
|
||||
/B バイナリ比較を実行します。\n\
|
||||
/C 大文字と小文字を区別しません。\n\
|
||||
/L ファイルを ASCII テキストとして比較します。\n\
|
||||
/LBn 連続する不一致の最大数を指定された行数に設定します\n\
|
||||
(デフォルト: 100)。\n\
|
||||
/N ASCII 比較の行番号を表示します。\n\
|
||||
/OFF[LINE] オフライン属性が設定されたファイルをスキップしません。\n\
|
||||
/T タブをスペースに展開しません (デフォルト: 展開する)。\n\
|
||||
/U ファイルを UNICODE テキスト ファイルとして比較します。\n\
|
||||
/W 比較のために空白 (タブとスペース) を圧縮します。\n\
|
||||
/nnnn 不一致の後に一致する必要がある連続行の数を指定します\n\
|
||||
(デフォルト: 2)。\n\
|
||||
[ドライブ1:][パス1]ファイル名1\n\
|
||||
比較する最初のファイルまたはファイル集合を指定します。\n\
|
||||
[ドライブ2:][パス2]ファイル名2\n\
|
||||
比較する 2 番目のファイルまたはファイル集合を指定します。\n"
|
||||
IDS_NO_DIFFERENCE "FC: 違いは見つかりませんでした\n"
|
||||
IDS_LONGER_THAN "FC: %ls は %ls より長いです\n"
|
||||
IDS_COMPARING "ファイル %ls と %ls を比較しています\n"
|
||||
IDS_OUT_OF_MEMORY "FC: メモリ不足\n"
|
||||
IDS_CANNOT_READ "FC: %ls から読み取れません\n"
|
||||
IDS_INVALID_SWITCH "FC: 無効なスイッチ\n"
|
||||
IDS_CANNOT_OPEN "FC: %ls を開けません - そのようなファイルまたはフォルダはありません\n"
|
||||
IDS_NEEDS_FILES "FC: ファイル指定が必要です\n"
|
||||
IDS_CANT_USE_WILDCARD "ワイルドカード(「*」と「?」)はまだサポートされていません\n"
|
||||
IDS_DIFFERENT "FC: ファイル %ls と %ls は異なります\n"
|
||||
IDS_TOO_LARGE "FC: ファイル %ls が大きすぎます\n"
|
||||
IDS_RESYNC_FAILED "再同期に失敗しました。ファイルが違いすぎます。\n"
|
||||
END
|
||||
|
@@ -4,14 +4,14 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_NO_ENTRY "This command is not supported by the help utility.\nTry ""%s /?"".\n"
|
||||
IDS_NO_ENTRY "このコマンドはヘルプ ユーティリティではサポートされていません。\n「%s /?」を試してください。\n"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_USAGE "Provides Help information for ReactOS commands.\n\n\
|
||||
HELP [command]\n\n\
|
||||
command - Display help information for this command.\n"
|
||||
IDS_USAGE "ReactOS コマンドのヘルプ情報を提供します。\n\n\
|
||||
HELP [コマンド]\n\n\
|
||||
コマンド - このコマンドのヘルプ情報を表示します。\n"
|
||||
IDS_HELP1 "利用可能なすべてのコマンドの一覧と、その説明。\n\n\
|
||||
help コマンド\n\
|
||||
コマンド /? 特定のコマンドに関する詳細情報\n\n\
|
||||
@@ -43,7 +43,7 @@ IF バッチ プログラム中で条件処理を実行します。\n\
|
||||
LABEL ディスクのボリューム ラベルを表示または変更します。\n\
|
||||
MD ディレクトリを作成します。\n\
|
||||
MKDIR ディレクトリを作成します。\n\
|
||||
MKLINK Creates a filesystem link object.\n\
|
||||
MKLINK ファイルシステム リンク オブジェクトを作成します。\n\
|
||||
MOVE ファイルを移動およびファイルとディレクトリ名を変更します。\n\
|
||||
PATH 実行可能ファイルの検索パスを表示または設定します。\n\
|
||||
PAUSE バッチ プログラムの処理を一時停止し、メッセージを表示します。\n\
|
||||
|
@@ -2,180 +2,180 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_USAGE, "Usage:\n\
|
||||
REG [operation] [parameters]\n\n\
|
||||
Supported operations:\n\
|
||||
STRING_USAGE, "使い方:\n\
|
||||
REG [操作] [引数]\n\n\
|
||||
サポートされた操作:\n\
|
||||
ADD | COPY | DELETE | EXPORT | IMPORT | QUERY\n\n\
|
||||
For help on a specific operation, type:\n\
|
||||
REG [operation] /?\n\n"
|
||||
特定の操作に関するヘルプを表示するには、次のように入力します。\n\
|
||||
REG [操作] /?\n\n"
|
||||
|
||||
STRING_ADD_USAGE, "REG ADD <key> [/v value_name | /ve] [/t type] [/s separator] [/d data] [/f]\n\n\
|
||||
Adds a key to the registry or adds a new value to a given registry key.\n\n\
|
||||
<key>\n\
|
||||
The registry key to add or, if either [/v] or [/ve] is specified,\n\
|
||||
the key in which to add the new registry data.\n\n\
|
||||
Format: ROOT\\Subkey\n\n\
|
||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
||||
STRING_ADD_USAGE, "REG ADD <キー> [/v 値名 | /ve] [/t 種類] [/s 区切り] [/d データ] [/f]\n\n\
|
||||
レジストリにキーを追加するか、指定されたレジストリ キーに新しい値を追加します。\n\n\
|
||||
<キー>\n\
|
||||
追加するレジストリ キー、または [/v] または [/ve] のいずれかが指定されて\n\
|
||||
いる場合は、新しいレジストリ データを追加するキー。\n\n\
|
||||
形式: <ルート>\\<サブキー>\n\n\
|
||||
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||
HKEY_CURRENT_USER | HKCU\n\
|
||||
HKEY_CLASSES_ROOT | HKCR\n\
|
||||
HKEY_USERS | HKU\n\
|
||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
||||
/v <value_name>\n\
|
||||
The name of the registry value to add.\n\n\
|
||||
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||
/v <値名>\n\
|
||||
追加するレジストリ値の名前。\n\n\
|
||||
/ve\n\
|
||||
Add an unnamed registry value. This option modifies the (Default)\n\
|
||||
registry value.\n\n\
|
||||
/t <type>\n\
|
||||
The type of data to add to the registry. If [/t] is specified,\n\
|
||||
<type> must be one of the following:\n\n\
|
||||
名前のないレジストリ値を追加します。このオプションは(既定の)レジストリ\n\
|
||||
値を変更します。\n\n\
|
||||
/t <種類>\n\
|
||||
レジストリに追加するデータの種類。 [/t] が指定されている場合、<種類> は\n\
|
||||
次のいずれかである必要があります。\n\n\
|
||||
REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ\n\
|
||||
REG_DWORD | REG_BINARY | REG_NONE\n\n\
|
||||
If [/t] is not specified, the default data type is REG_SZ.\n\n\
|
||||
/s <separator>\n\
|
||||
The character used to separate strings in REG_MULTI_SZ data.\n\
|
||||
If [/s] is not specified, the default separator is \\0.\n\n\
|
||||
/d <data>\n\
|
||||
The data to add to the new registry value.\n\n\
|
||||
[/t]が指定されていない場合、デフォルトのデータ型は REG_SZ になります。\n\n\
|
||||
/s <区切り>\n\
|
||||
REG_MULTI_SZ データ内の文字列を区切るために使用される文字。\n\
|
||||
[/s] が指定されていない場合、デフォルトの区切り文字は \\0 になります。\n\n\
|
||||
/d <データ>\n\
|
||||
新しいレジストリ値に追加するデータ。\n\n\
|
||||
/f\n\
|
||||
Modify the registry without prompting for confirmation.\n\n"
|
||||
確認を求めずにレジストリを変更します。\n\n"
|
||||
|
||||
STRING_DELETE_USAGE, "REG DELETE <key> [/v value_name | /ve | /va] [/f]\n\n\
|
||||
Deletes a registry key (including all subkeys and values), or deletes\n\
|
||||
one or more values from a given registry key.\n\n\
|
||||
STRING_DELETE_USAGE, "REG DELETE <キー> [/v 値名 | /ve | /va] [/f]\n\n\
|
||||
レジストリ キー (すべてのサブキーと値を含む) を削除するか、指定された\n\
|
||||
レジストリ キーから 1 つ以上の値を削除します。\n\n\
|
||||
<key>\n\
|
||||
The registry key to delete or, if one of [/v], [/ve] or [/va] is\n\
|
||||
specified, the registry key in which to delete one or more values.\n\n\
|
||||
Format: ROOT\\Subkey\n\n\
|
||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
||||
削除するレジストリ キー、または [/v]、[/ve]、[/va] のいずれかが指定されて\n\
|
||||
いる場合は、1 つ以上の値を削除するレジストリ キー。\n\n\
|
||||
形式: <ルート>\\<サブキー>\n\n\
|
||||
ルート: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||
HKEY_CURRENT_USER | HKCU\n\
|
||||
HKEY_CLASSES_ROOT | HKCR\n\
|
||||
HKEY_USERS | HKU\n\
|
||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
||||
/v <value_name>\n\
|
||||
The name of the registry value to delete.\n\n\
|
||||
サブキー: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||
/v <値名>\n\
|
||||
削除するレジストリ値の名前。\n\n\
|
||||
/ve\n\
|
||||
Delete an unnamed registry value. This option deletes the (Default)\n\
|
||||
registry value.\n\n\
|
||||
名前のないレジストリ値を削除します。このオプションは、(既定の) \n\
|
||||
レジストリ値を削除します。\n\n\
|
||||
/va\n\
|
||||
Delete all values from a registry key.\n\n\
|
||||
レジストリ キーからすべての値を削除します。\n\n\
|
||||
/f\n\
|
||||
Delete a registry key (including all subkeys and values) without\n\
|
||||
prompting for confirmation.\n\n"
|
||||
確認を求めることなくレジストリ キー (すべてのサブキーと値を含む) を削除します。\n\n"
|
||||
|
||||
STRING_QUERY_USAGE, "REG QUERY <key> [/v value_name | /ve] [/s]\n\n\
|
||||
Queries a specified registry key and lists all immediate subkeys, values\n\
|
||||
and data within that key. Use [/s] to recursively query each subkey.\n\n\
|
||||
<key>\n\
|
||||
The registry key to query.\n\n\
|
||||
Format: ROOT\\Subkey\n\n\
|
||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
||||
STRING_QUERY_USAGE, "REG QUERY <キー> [/v 値名 | /ve] [/s]\n\n\
|
||||
指定されたレジストリキーを照会し、そのキーに含まれるすべてのサブキー、値、\n\
|
||||
およびデータを一覧表示します。[/s] を使用すると、各サブキーを再帰的に照会できます。\n\n\
|
||||
<キー>\n\
|
||||
照会するレジストリ キー。\n\n\
|
||||
形式: <ルート>\\<サブキー>\n\n\
|
||||
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||
HKEY_CURRENT_USER | HKCU\n\
|
||||
HKEY_CLASSES_ROOT | HKCR\n\
|
||||
HKEY_USERS | HKU\n\
|
||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
||||
/v <value_name>\n\
|
||||
The name of the registry value to query. If neither [/v] nor [/ve] is\n\
|
||||
specified, all values under <key> are listed.\n\n\
|
||||
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||
/v <値名>\n\
|
||||
照会するレジストリ値の名前。[/v] も [/ve] も指定されていない場合は、\n\
|
||||
<キー> の下のすべての値がリストされます。\n\n\
|
||||
/ve\n\
|
||||
Query an unnamed registry value. This option queries the (Default)\n\
|
||||
registry value.\n\n\
|
||||
名前のないレジストリ値を照会します。このオプションは、(既定の) \n\
|
||||
レジストリ値を照会します。\n\n\
|
||||
/s\n\
|
||||
List all registry entries under <key> and its subkeys.\n\n"
|
||||
<キー> とそのサブキーの下にあるすべてのレジストリ エントリを一覧表示します。\n\n"
|
||||
|
||||
STRING_SUCCESS, "操作は正常に完了しました\n"
|
||||
STRING_INVALID_KEY, "エラー: キー名が無効です\n"
|
||||
STRING_INVALID_CMDLINE, "エラー: コマンド ライン引数が無効です\n"
|
||||
STRING_NO_REMOTE, "エラー: リモート マシンにキーを追加できませんでした\n"
|
||||
STRING_VALUE_NONEXIST, "エラー: システムは指定されたキーまたは値を見つけられませんでした\n"
|
||||
STRING_UNSUPPORTED_TYPE, "reg: Unsupported registry data type [%1]\n"
|
||||
STRING_MISSING_NUMBER, "reg: The option [/d] must be followed by a valid numeric value\n"
|
||||
STRING_MISSING_HEXDATA, "reg: The option [/d] must be followed by a valid hexadecimal value\n"
|
||||
STRING_UNHANDLED_TYPE, "reg: Unhandled registry data type [/t 0x%1!x!, /d %2]\n"
|
||||
STRING_OVERWRITE_VALUE, "The registry value '%1' already exists. Do you want to overwrite it?"
|
||||
STRING_UNSUPPORTED_TYPE, "reg: サポートされていないレジストリ データ型 [%1]\n"
|
||||
STRING_MISSING_NUMBER, "reg: オプション[/d]の後には有効な数値を続ける必要があります\n"
|
||||
STRING_MISSING_HEXDATA, "reg: オプション[/d]の後には有効な16進数値を続ける必要があります\n"
|
||||
STRING_UNHANDLED_TYPE, "reg: 未処理のレジストリデータ型 [/t 0x%1!x!, /d %2]\n"
|
||||
STRING_OVERWRITE_VALUE, "レジストリ値 '%1' は既に存在します。上書きしますか?"
|
||||
STRING_YES, "Y"
|
||||
STRING_NO, "N"
|
||||
STRING_ALL, "A"
|
||||
STRING_YESNO, " (Yes|No)"
|
||||
STRING_YESNOALL, " (Yes|No|All)"
|
||||
STRING_CANCELLED, "reg: The registry operation was cancelled\n"
|
||||
STRING_DEFAULT_VALUE, "(Default)"
|
||||
STRING_DELETE_VALUE, "Are you sure you want to delete the registry value '%1'?"
|
||||
STRING_DELETE_VALUEALL, "Are you sure you want to delete all registry values in '%1'?"
|
||||
STRING_DELETE_SUBKEY, "Are you sure you want to delete the registry key '%1'?"
|
||||
STRING_INVALID_STRING, "reg: The option [/d] must be followed by a valid string\n"
|
||||
STRING_VALUEALL_FAILED, "reg: Unable to delete all registry values in '%1'\n"
|
||||
STRING_MATCHES_FOUND, "Search complete. Number of matches found: %1!d!\n"
|
||||
STRING_INVALID_SYNTAX, "reg: Invalid syntax. "
|
||||
STRING_INVALID_OPTION, "reg: Invalid option [%1]. "
|
||||
STRING_REG_HELP, "Type ""REG /?"" for help.\n"
|
||||
STRING_FUNC_HELP, "Type ""REG %1 /?"" for help.\n"
|
||||
STRING_VALUE_NOT_SET, "(value not set)"
|
||||
STRING_YESNO, " (はい(Y)|いいえ(N))"
|
||||
STRING_YESNOALL, " (はい(Y)|いいえ(N)|すべて(A))"
|
||||
STRING_CANCELLED, "reg: レジストリ操作はキャンセルされました\n"
|
||||
STRING_DEFAULT_VALUE, "(デフォルト)"
|
||||
STRING_DELETE_VALUE, "レジストリ値 '%1' を削除してもよろしいですか?"
|
||||
STRING_DELETE_VALUEALL, "'%1' 内のすべてのレジストリ値を削除してもよろしいですか?"
|
||||
STRING_DELETE_SUBKEY, "レジストリ キー '%1' を削除してもよろしいですか?"
|
||||
STRING_INVALID_STRING, "reg: オプション[/d]の後に有効な文字列を続ける必要があります\n"
|
||||
STRING_VALUEALL_FAILED, "reg: '%1' のすべてのレジストリ値を削除できません\n"
|
||||
STRING_MATCHES_FOUND, "検索が完了しました。一致した件数: %1!d!\n"
|
||||
STRING_INVALID_SYNTAX, "reg: 無効な文法"
|
||||
STRING_INVALID_OPTION, "reg: 無効なオプション [%1]. "
|
||||
STRING_REG_HELP, "ヘルプを表示するには、「REG /?」と入力してください。\n"
|
||||
STRING_FUNC_HELP, "ヘルプを表示するには「REG %1 /?」と入力してください.\n"
|
||||
STRING_VALUE_NOT_SET, "(未設定の値)"
|
||||
|
||||
STRING_IMPORT_USAGE, "REG IMPORT <file>\n\n\
|
||||
Imports keys, values and data from a given file into the registry.\n\n\
|
||||
<file>\n\
|
||||
The name and path of the registry file to import.\n\n"
|
||||
STRING_IMPORT_USAGE, "REG IMPORT <ファイル>\n\n\
|
||||
指定されたファイルからキー、値、データをレジストリにインポートします。\n\n\
|
||||
<ファイル>\n\
|
||||
インポートするレジストリ ファイルの名前とパス。\n\n"
|
||||
|
||||
STRING_FILE_NOT_FOUND, "reg: The file '%1' was not found.\n"
|
||||
STRING_ESCAPE_SEQUENCE, "reg: Unrecognized escape sequence [\\%1!c!]\n"
|
||||
STRING_FILE_NOT_FOUND, "reg: ファイル '%1' が見つかりませんでした。\n"
|
||||
STRING_ESCAPE_SEQUENCE, "reg: 認識されないエスケープシーケンス [\\%1!c!]\n"
|
||||
|
||||
STRING_EXPORT_USAGE, "REG EXPORT <key> <file> [/y]\n\n\
|
||||
Exports a specified registry key (including all subkeys and values)\n\
|
||||
to a file.\n\n\
|
||||
<key>\n\
|
||||
The registry key to export.\n\n\
|
||||
Format: ROOT\\Subkey\n\n\
|
||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
||||
STRING_EXPORT_USAGE, "REG EXPORT <キー> <ファイル> [/y]\n\n\
|
||||
指定されたレジストリ キー (すべてのサブキーと値を含む) をファイルに\n\
|
||||
エクスポートします。\n\n\
|
||||
<キー>\n\
|
||||
エクスポートするレジストリ キー。\n\n\
|
||||
形式: <ルート>\\<サブキー>\n\n\
|
||||
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||
HKEY_CURRENT_USER | HKCU\n\
|
||||
HKEY_CLASSES_ROOT | HKCR\n\
|
||||
HKEY_USERS | HKU\n\
|
||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
||||
<file>\n\
|
||||
The name and path of the registry file that will be created.\n\
|
||||
This file must have a .reg extension.\n\n\
|
||||
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||
<ファイル>\n\
|
||||
作成されるレジストリ ファイルの名前とパス。\n\
|
||||
このファイルには .reg 拡張子が必要です。\n\n\
|
||||
/y\n\
|
||||
Overwrite <file> without prompting for confirmation.\n\n"
|
||||
確認のプロンプトを表示せずに <ファイル> を上書きします。\n\n"
|
||||
|
||||
STRING_INVALID_SYSTEM_KEY, "reg: Invalid system key\n"
|
||||
STRING_OVERWRITE_FILE, "The file '%1' already exists. Do you want to overwrite it?"
|
||||
STRING_KEY_NONEXIST, "reg: Unable to find the specified registry key\n"
|
||||
STRING_KEY_IMPORT_FAILED, "reg: Unable to import the registry key '%1'\n"
|
||||
STRING_INVALID_SYSTEM_KEY, "reg: 無効なシステム キー\n"
|
||||
STRING_OVERWRITE_FILE, "ファイル '%1' は既に存在します。上書きしますか?"
|
||||
STRING_KEY_NONEXIST, "reg: 指定されたレジストリキーが見つかりません\n"
|
||||
STRING_KEY_IMPORT_FAILED, "reg: レジストリキーをインポートできません '%1'\n"
|
||||
|
||||
STRING_REG_VIEW_USAGE, " /reg:32\n\
|
||||
Access the registry using the 32-bit view.\n\n\
|
||||
32 ビット ビューを使用してレジストリにアクセスします。\n\n\
|
||||
/reg:64\n\
|
||||
Access the registry using the 64-bit view.\n\n"
|
||||
STRING_ACCESS_DENIED, "reg: Unable to access or create the specified registry key\n"
|
||||
64 ビット ビューを使用してレジストリにアクセスします。\n\n"
|
||||
STRING_ACCESS_DENIED, "reg: 指定されたレジストリキーにアクセスまたは作成できません\n"
|
||||
|
||||
STRING_COPY_USAGE, "REG COPY <key1> <key2> [/s] [/f]\n\n\
|
||||
Copies the contents of a specified registry key to another location.\n\
|
||||
By default, this operation only copies registry values. Use [/s] to\n\
|
||||
recursively copy all subkeys and values.\n\n\
|
||||
<key1>, <key2>\n\
|
||||
Registry keys specifying the source (<key1>) and destination (<key2>)\n\
|
||||
of the data. If <key2> does not exist, it is created.\n\n\
|
||||
Format: ROOT\\Subkey\n\n\
|
||||
ROOT: A predefined registry key. This must be one of the following:\n\n\
|
||||
STRING_COPY_USAGE, "REG COPY <キー1> <キー2> [/s] [/f]\n\n\
|
||||
指定されたレジストリ キーの内容を別の場所にコピーします。\n\
|
||||
デフォルトでは、この操作はレジストリ値のみをコピーします。[/s] を使用して、\n\
|
||||
すべてのサブキーと値を再帰的にコピーします。\n\n\
|
||||
<キー1>, <キー2>\n\
|
||||
データのコピー元(<キー1>) とコピー先 (<キー2>) を指定するレジストリ キー。\n\
|
||||
<キー2> が存在しない場合は作成されます。\n\n\
|
||||
形式: <ルート>\\<サブキー>\n\n\
|
||||
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
|
||||
HKEY_LOCAL_MACHINE | HKLM\n\
|
||||
HKEY_CURRENT_USER | HKCU\n\
|
||||
HKEY_CLASSES_ROOT | HKCR\n\
|
||||
HKEY_USERS | HKU\n\
|
||||
HKEY_CURRENT_CONFIG | HKCC\n\n\
|
||||
Subkey: The full path to a registry key under a given ROOT key.\n\n\
|
||||
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
|
||||
/s\n\
|
||||
Copy all subkeys and values from <key1> to <key2>.\n\n\
|
||||
<キー1> から <キー2> にすべてのサブキーと値をコピーします。\n\n\
|
||||
/f\n\
|
||||
Overwrite all registry data in <key2> without prompting for confirmation.\n\
|
||||
This option does not modify subkeys and values that only exist in <key2>.\n\n"
|
||||
確認のプロンプトを表示せずに、<キー2> 内のすべてのレジストリ\n\
|
||||
データを上書きします。\n\
|
||||
このオプションは、<キー2> にのみ存在するサブキーと値を変更しません。\n\n"
|
||||
|
||||
STRING_COPY_SRC_DEST_SAME, "reg: The source and destination keys cannot be the same\n"
|
||||
STRING_COPY_CONFIRM, "The value '%1\\%2' already exists in the destination key. Do you want to overwrite it?"
|
||||
STRING_COPY_SRC_DEST_SAME, "reg: コピー元キーとコピー先キーは同じにすることはできません\n"
|
||||
STRING_COPY_CONFIRM, "値 '%1\\%2' はコピー先キーに既に存在します。上書きしますか?"
|
||||
}
|
||||
|
@@ -13,11 +13,11 @@
|
||||
#define WIDTH 800
|
||||
#define HEIGHT 600
|
||||
|
||||
BOOL D3D7Test(HWND hWnd);
|
||||
BOOL D3D8Test(HWND hWnd);
|
||||
BOOL D3D9Test(HWND hWnd);
|
||||
BOOL D3D7Test(GUID *lpDevice, HWND hWnd);
|
||||
BOOL D3D8Test(GUID *lpDevice, HWND hWnd);
|
||||
BOOL D3D9Test(GUID *lpDevice, HWND hWnd);
|
||||
|
||||
BOOL StartD3DTest(HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
|
||||
BOOL StartD3DTest(GUID *lpDevice, HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
|
||||
{
|
||||
WCHAR szTestDescriptionRaw[256];
|
||||
WCHAR szTestDescription[256];
|
||||
@@ -39,13 +39,13 @@ BOOL StartD3DTest(HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
|
||||
|
||||
switch(TestNr){
|
||||
case 7:
|
||||
Result = D3D7Test(hWnd);
|
||||
Result = D3D7Test(lpDevice, hWnd);
|
||||
break;
|
||||
case 8:
|
||||
Result = D3D8Test(hWnd);
|
||||
Result = D3D8Test(lpDevice, hWnd);
|
||||
break;
|
||||
case 9:
|
||||
Result = D3D9Test(hWnd);
|
||||
Result = D3D9Test(lpDevice, hWnd);
|
||||
break;
|
||||
default:
|
||||
Result = FALSE;
|
||||
@@ -70,7 +70,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
VOID D3DTests()
|
||||
VOID D3DTests(GUID *lpDevice)
|
||||
{
|
||||
WNDCLASSEX winClass;
|
||||
HWND hWnd;
|
||||
@@ -116,9 +116,9 @@ VOID D3DTests()
|
||||
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
||||
goto cleanup;
|
||||
|
||||
StartD3DTest(hWnd, hInstance, szCaption, 7);
|
||||
StartD3DTest(hWnd, hInstance, szCaption, 8);
|
||||
StartD3DTest(hWnd, hInstance, szCaption, 9);
|
||||
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 7);
|
||||
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 8);
|
||||
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 9);
|
||||
|
||||
cleanup:
|
||||
DestroyWindow(hWnd);
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
BOOL D3D7Test(HWND hWnd)
|
||||
BOOL D3D7Test(GUID *lpDevice, HWND hWnd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
BOOL D3D8Test(HWND hWnd)
|
||||
BOOL D3D8Test(GUID *lpDevice, HWND hWnd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
BOOL D3D9Test(HWND hWnd)
|
||||
BOOL D3D9Test(GUID *lpDevice, HWND hWnd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@@ -8,8 +8,8 @@
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
BOOL DDPrimarySurfaceTest(HWND hWnd);
|
||||
BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen);
|
||||
BOOL DDPrimarySurfaceTest(GUID *lpDevice, HWND hWnd);
|
||||
BOOL DDOffscreenBufferTest(GUID *lpDevice, HWND hWnd, BOOL Fullscreen);
|
||||
VOID DDRedrawFrame(LPDIRECTDRAWSURFACE lpDDSurface);
|
||||
VOID DDUpdateFrame(LPDIRECTDRAWSURFACE lpDDPrimarySurface ,LPDIRECTDRAWSURFACE lpDDBackBuffer, BOOL Fullscreen, INT *posX, INT *posY, INT *gainX, INT *gainY, RECT *rectDD);
|
||||
|
||||
@@ -21,7 +21,7 @@ VOID DDUpdateFrame(LPDIRECTDRAWSURFACE lpDDPrimarySurface ,LPDIRECTDRAWSURFACE l
|
||||
#define DD_SQUARE_STEP 2
|
||||
|
||||
|
||||
BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT resResult, INT TestNr)
|
||||
BOOL StartDDTest(GUID *lpDevice, HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT resResult, INT TestNr)
|
||||
{
|
||||
WCHAR szTestDescription[256];
|
||||
WCHAR szCaption[256];
|
||||
@@ -41,13 +41,13 @@ BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT res
|
||||
|
||||
switch(TestNr){
|
||||
case 1:
|
||||
Result = DDPrimarySurfaceTest(hWnd);
|
||||
Result = DDPrimarySurfaceTest(lpDevice, hWnd);
|
||||
break;
|
||||
case 2:
|
||||
Result = DDOffscreenBufferTest(hWnd, FALSE);
|
||||
Result = DDOffscreenBufferTest(lpDevice, hWnd, FALSE);
|
||||
break;
|
||||
case 3:
|
||||
Result = DDOffscreenBufferTest(hWnd, TRUE);
|
||||
Result = DDOffscreenBufferTest(lpDevice, hWnd, TRUE);
|
||||
break;
|
||||
default:
|
||||
Result = FALSE;
|
||||
@@ -67,7 +67,7 @@ BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT res
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
VOID DDTests()
|
||||
VOID DDTests(GUID *lpDevice)
|
||||
{
|
||||
WNDCLASSEX winClass;
|
||||
HWND hWnd;
|
||||
@@ -105,15 +105,15 @@ VOID DDTests()
|
||||
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
||||
return;
|
||||
|
||||
StartDDTest(hWnd, hInstance, IDS_DDPRIMARY_DESCRIPTION, IDS_DDPRIMARY_RESULT, 1);
|
||||
StartDDTest(hWnd, hInstance, IDS_DDOFFSCREEN_DESCRIPTION, IDS_DDOFFSCREEN_RESULT, 2);
|
||||
StartDDTest(hWnd, hInstance, IDS_DDFULLSCREEN_DESCRIPTION, IDS_DDFULLSCREEN_RESULT, 3);
|
||||
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDPRIMARY_DESCRIPTION, IDS_DDPRIMARY_RESULT, 1);
|
||||
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDOFFSCREEN_DESCRIPTION, IDS_DDOFFSCREEN_RESULT, 2);
|
||||
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDFULLSCREEN_DESCRIPTION, IDS_DDFULLSCREEN_RESULT, 3);
|
||||
|
||||
DestroyWindow(hWnd);
|
||||
UnregisterClass(winClass.lpszClassName, hInstance);
|
||||
}
|
||||
|
||||
BOOL DDPrimarySurfaceTest(HWND hWnd){
|
||||
BOOL DDPrimarySurfaceTest(GUID *lpDevice, HWND hWnd){
|
||||
UINT TimerID;
|
||||
MSG msg;
|
||||
|
||||
@@ -121,7 +121,7 @@ BOOL DDPrimarySurfaceTest(HWND hWnd){
|
||||
LPDIRECTDRAWSURFACE lpDDSurface = NULL;
|
||||
DDSURFACEDESC DDSurfaceDesc;
|
||||
|
||||
if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK)
|
||||
if(DirectDrawCreate(lpDevice, &lpDD, NULL) != DD_OK)
|
||||
return FALSE;
|
||||
|
||||
if(lpDD->lpVtbl->SetCooperativeLevel(lpDD, hWnd, DDSCL_NORMAL) != DD_OK)
|
||||
@@ -197,7 +197,7 @@ VOID DDRedrawFrame(LPDIRECTDRAWSURFACE lpDDSurface)
|
||||
}
|
||||
|
||||
|
||||
BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen){
|
||||
BOOL DDOffscreenBufferTest(GUID *lpDevice, HWND hWnd, BOOL Fullscreen){
|
||||
UINT_PTR TimerID, TimerIDUpdate;
|
||||
LPDIRECTDRAW lpDD;
|
||||
LPDIRECTDRAWSURFACE lpDDPrimarySurface;
|
||||
@@ -210,7 +210,7 @@ BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen){
|
||||
POINT wndPoint;
|
||||
INT posX = 0, posY = 10, xGain = DD_SQUARE_STEP, yGain = DD_SQUARE_STEP;
|
||||
|
||||
if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK)
|
||||
if(DirectDrawCreate(lpDevice, &lpDD, NULL) != DD_OK)
|
||||
return FALSE;
|
||||
|
||||
ZeroMemory(&DDSurfaceDesc, sizeof(DDSurfaceDesc));
|
||||
|
@@ -305,56 +305,89 @@ InitializeDialog(HWND hwndDlg, PDISPLAY_DEVICEW pDispDevice)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void InitializeDisplayAdapters(PDXDIAG_CONTEXT pContext)
|
||||
|
||||
static BOOL WINAPI
|
||||
DDEnumerateCallback(
|
||||
IN GUID *lpGuid,
|
||||
IN LPSTR lpDriverName,
|
||||
IN LPSTR lpDriverDescription,
|
||||
IN LPVOID lpContext,
|
||||
IN HMONITOR hMonitor)
|
||||
{
|
||||
DISPLAY_DEVICEW DispDevice;
|
||||
HWND * hDlgs;
|
||||
LPWSTR lpDriverDescriptionW;
|
||||
PDXDIAG_CONTEXT pContext = lpContext;
|
||||
PDXDIAG_DISPLAY *pDisplayAdapters;
|
||||
PDXDIAG_DISPLAY pDisplayAdapter;
|
||||
HWND hwndDlg;
|
||||
WCHAR szDisplay[20];
|
||||
WCHAR szText[30];
|
||||
DWORD dwOffset = 0;
|
||||
int len;
|
||||
BOOL ret;
|
||||
|
||||
while(TRUE)
|
||||
/* Convert lpDriverDescription to WCHAR */
|
||||
len = MultiByteToWideChar(CP_ACP, 0, lpDriverDescription, strlen(lpDriverDescription), NULL, 0);
|
||||
if (!len)
|
||||
return FALSE;
|
||||
lpDriverDescriptionW = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
|
||||
if (!lpDriverDescriptionW)
|
||||
return FALSE;
|
||||
MultiByteToWideChar(CP_ACP, 0, lpDriverDescription, strlen(lpDriverDescription), lpDriverDescriptionW, len);
|
||||
lpDriverDescriptionW[len] = UNICODE_NULL;
|
||||
|
||||
/* Get associated display device */
|
||||
ZeroMemory(&DispDevice, sizeof(DispDevice));
|
||||
DispDevice.cb = sizeof(DispDevice);
|
||||
ret = EnumDisplayDevicesW(lpDriverDescriptionW, 0, &DispDevice, 0);
|
||||
HeapFree(GetProcessHeap(), 0, lpDriverDescriptionW);
|
||||
if (!ret)
|
||||
return TRUE;
|
||||
|
||||
pDisplayAdapter = HeapAlloc(GetProcessHeap(), 0, sizeof(DXDIAG_DISPLAY));
|
||||
if (!pDisplayAdapter)
|
||||
return FALSE;
|
||||
|
||||
if (pContext->NumDisplayAdapter)
|
||||
pDisplayAdapters = HeapReAlloc(GetProcessHeap(), 0, pContext->DisplayAdapters, (pContext->NumDisplayAdapter + 1) * sizeof(PDXDIAG_DISPLAY));
|
||||
else
|
||||
pDisplayAdapters = HeapAlloc(GetProcessHeap(), 0, (pContext->NumDisplayAdapter + 1) * sizeof(PDXDIAG_DISPLAY));
|
||||
|
||||
if (!pDisplayAdapters)
|
||||
{
|
||||
ZeroMemory(&DispDevice, sizeof(DISPLAY_DEVICEW));
|
||||
DispDevice.cb = sizeof(DISPLAY_DEVICEW);
|
||||
if (!EnumDisplayDevicesW(NULL, pContext->NumDisplayAdapter + dwOffset, &DispDevice, 0))
|
||||
return;
|
||||
|
||||
/* skip devices not attached to the desktop and mirror drivers */
|
||||
if (!(DispDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) || (DispDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))
|
||||
{
|
||||
dwOffset++;
|
||||
continue;
|
||||
}
|
||||
if (pContext->NumDisplayAdapter)
|
||||
hDlgs = HeapReAlloc(GetProcessHeap(), 0, pContext->hDisplayWnd, (pContext->NumDisplayAdapter + 1) * sizeof(HWND));
|
||||
else
|
||||
hDlgs = HeapAlloc(GetProcessHeap(), 0, (pContext->NumDisplayAdapter + 1) * sizeof(HWND));
|
||||
|
||||
if (!hDlgs)
|
||||
break;
|
||||
|
||||
pContext->hDisplayWnd = hDlgs;
|
||||
hwndDlg = CreateDialogParamW(hInst, MAKEINTRESOURCEW(IDD_DISPLAY_DIALOG), pContext->hMainDialog, DisplayPageWndProc, (LPARAM)pContext); EnableDialogTheme(hwndDlg);
|
||||
if (!hwndDlg)
|
||||
break;
|
||||
|
||||
/* initialize the dialog */
|
||||
InitializeDialog(hwndDlg, &DispDevice);
|
||||
|
||||
szDisplay[0] = L'\0';
|
||||
LoadStringW(hInst, IDS_DISPLAY_DIALOG, szDisplay, sizeof(szDisplay)/sizeof(WCHAR));
|
||||
szDisplay[(sizeof(szDisplay)/sizeof(WCHAR))-1] = L'\0';
|
||||
|
||||
wsprintfW (szText, L"%s %u", szDisplay, pContext->NumDisplayAdapter + 1);
|
||||
InsertTabCtrlItem(GetDlgItem(pContext->hMainDialog, IDC_TAB_CONTROL), pContext->NumDisplayAdapter + 1, szText);
|
||||
|
||||
hDlgs[pContext->NumDisplayAdapter] = hwndDlg;
|
||||
pContext->NumDisplayAdapter++;
|
||||
HeapFree(GetProcessHeap(), 0, pDisplayAdapter);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pContext->DisplayAdapters = pDisplayAdapters;
|
||||
hwndDlg = CreateDialogParamW(hInst, MAKEINTRESOURCEW(IDD_DISPLAY_DIALOG), pContext->hMainDialog, DisplayPageWndProc, (LPARAM)pDisplayAdapter);
|
||||
EnableDialogTheme(hwndDlg);
|
||||
if (!hwndDlg)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, pDisplayAdapter);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* initialize the dialog */
|
||||
InitializeDialog(hwndDlg, &DispDevice);
|
||||
|
||||
szDisplay[0] = UNICODE_NULL;
|
||||
LoadStringW(hInst, IDS_DISPLAY_DIALOG, szDisplay, ARRAYSIZE(szDisplay));
|
||||
szDisplay[ARRAYSIZE(szDisplay) - 1] = UNICODE_NULL;
|
||||
|
||||
wsprintfW(szText, L"%s %u", szDisplay, pContext->NumDisplayAdapter + 1);
|
||||
InsertTabCtrlItem(GetDlgItem(pContext->hMainDialog, IDC_TAB_CONTROL), pContext->NumDisplayAdapter + 1, szText);
|
||||
|
||||
pDisplayAdapter->hDisplayWnd = hwndDlg;
|
||||
if (lpGuid)
|
||||
pDisplayAdapter->guid = *lpGuid;
|
||||
pContext->DisplayAdapters[pContext->NumDisplayAdapter++] = pDisplayAdapter;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void InitializeDisplayAdapters(PDXDIAG_CONTEXT pContext)
|
||||
{
|
||||
DirectDrawEnumerateExA(DDEnumerateCallback, pContext, DDENUM_ATTACHEDSECONDARYDEVICES);
|
||||
}
|
||||
|
||||
|
||||
@@ -362,13 +395,14 @@ INT_PTR CALLBACK
|
||||
DisplayPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
RECT rect;
|
||||
PDXDIAG_CONTEXT pContext = (PDXDIAG_CONTEXT)GetWindowLongPtr(hDlg, DWLP_USER);
|
||||
HWND hMainDialog;
|
||||
PDXDIAG_DISPLAY pDisplay = (PDXDIAG_DISPLAY)GetWindowLongPtr(hDlg, DWLP_USER);
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
pContext = (PDXDIAG_CONTEXT) lParam;
|
||||
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pContext);
|
||||
pDisplay = (PDXDIAG_DISPLAY) lParam;
|
||||
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pDisplay);
|
||||
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -378,13 +412,14 @@ DisplayPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
case IDC_BUTTON_TESTDD:
|
||||
case IDC_BUTTON_TEST3D:
|
||||
GetWindowRect(pContext->hMainDialog, &rect);
|
||||
hMainDialog = GetWindow(hDlg, GW_OWNER);
|
||||
GetWindowRect(hMainDialog, &rect);
|
||||
/* FIXME log result errors */
|
||||
if (IDC_BUTTON_TESTDD == LOWORD(wParam))
|
||||
DDTests();
|
||||
DDTests(&pDisplay->guid);
|
||||
else if (IDC_BUTTON_TEST3D == LOWORD(wParam))
|
||||
D3DTests();
|
||||
SetWindowPos(pContext->hMainDialog, NULL, rect.left, rect.top, rect.right, rect.bottom, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
||||
D3DTests(&pDisplay->guid);
|
||||
SetWindowPos(hMainDialog, NULL, rect.left, rect.top, rect.right, rect.bottom, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
@@ -84,8 +84,8 @@ DestroyTabCtrlDialogs(PDXDIAG_CONTEXT pContext)
|
||||
/* destroy display dialogs */
|
||||
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
|
||||
{
|
||||
if (pContext->hDisplayWnd[Index])
|
||||
DestroyWindow(pContext->hDisplayWnd[Index]);
|
||||
if (pContext->DisplayAdapters[Index]->hDisplayWnd)
|
||||
DestroyWindow(pContext->DisplayAdapters[Index]->hDisplayWnd);
|
||||
}
|
||||
|
||||
/* destroy audio dialogs */
|
||||
@@ -142,7 +142,7 @@ TabCtrl_OnSelChange(PDXDIAG_CONTEXT pContext)
|
||||
ShowWindow(pContext->hDialogs[Index], SW_HIDE);
|
||||
|
||||
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
|
||||
ShowWindow(pContext->hDisplayWnd[Index], SW_HIDE);
|
||||
ShowWindow(pContext->DisplayAdapters[Index]->hDisplayWnd, SW_HIDE);
|
||||
|
||||
for(Index = 0; Index < pContext->NumSoundAdapter; Index++)
|
||||
ShowWindow(pContext->hSoundWnd[Index], SW_HIDE);
|
||||
@@ -158,7 +158,7 @@ TabCtrl_OnSelChange(PDXDIAG_CONTEXT pContext)
|
||||
|
||||
if (CurSel -1 < pContext->NumDisplayAdapter)
|
||||
{
|
||||
ShowWindow(pContext->hDisplayWnd[CurSel-1], SW_SHOW);
|
||||
ShowWindow(pContext->DisplayAdapters[CurSel-1]->hDisplayWnd, SW_SHOW);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -42,7 +42,7 @@ BEGIN
|
||||
EDITTEXT IDC_STATIC_MEM, 155, 130, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_STATIC_SWAP, 155, 140, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
EDITTEXT IDC_STATIC_VERSION, 155, 150, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
CHECKBOX "Check for WHQL digital signatures", IDC_WHQL_SIGN_CHECK, 15, 170, 135, 10, WS_DISABLED
|
||||
CHECKBOX "WHQL デジタル署名を確認する", IDC_WHQL_SIGN_CHECK, 15, 170, 135, 10, WS_DISABLED
|
||||
END
|
||||
|
||||
IDD_DISPLAY_DIALOG DIALOGEX 0, 0, 462, 220
|
||||
@@ -127,7 +127,7 @@ BEGIN
|
||||
EDITTEXT IDC_STATIC_ADAPTER_PROVIDER, 335, 60, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
GROUPBOX "ReactX の機能", IDC_STATIC, 5, 97, 452, 70
|
||||
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 110, 125, 80, 17
|
||||
RTEXT "Hardware Sound\nAcceleration Level:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
|
||||
RTEXT "ハードウェア音声\n加速レベル:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
|
||||
PUSHBUTTON "DirectSound のテスト", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
|
||||
GROUPBOX "注意", IDC_STATIC, 5, 170, 452, 50
|
||||
EDITTEXT IDC_TEXT_DSOUNDINFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||
@@ -137,17 +137,17 @@ IDD_MUSIC_DIALOG DIALOGEX 0, 0, 462, 220
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 9, "MS UI Gothic"
|
||||
BEGIN
|
||||
RTEXT "General MIDI DLS Collection:", IDC_STATIC, 0, 0, 100, 10
|
||||
RTEXT "General MIDI DLS コレクション:", IDC_STATIC, 0, 0, 100, 10
|
||||
EDITTEXT IDC_MIDI_DLS_COLLECTION, 105, 0, 250, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
GROUPBOX "Music Ports", IDC_STATIC, 5, 10, 452, 85
|
||||
GROUPBOX "ReactX Features", IDC_STATIC, 5, 97, 452, 70
|
||||
LTEXT "Default Port Acceleration:", IDC_STATIC, 15, 120, 95, 17
|
||||
GROUPBOX "音楽ポート", IDC_STATIC, 5, 10, 452, 85
|
||||
GROUPBOX "ReactXの機能", IDC_STATIC, 5, 97, 452, 70
|
||||
LTEXT "デフォルトのポート高速化:", IDC_STATIC, 15, 120, 95, 17
|
||||
LTEXT "", IDC_STATIC_DEFAULT_PORT_ACCELERATION, 115, 120, 50, 10
|
||||
PUSHBUTTON "Disable", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
|
||||
LTEXT "Test using this port:", IDC_STATIC, 180, 105, 100, 10
|
||||
PUSHBUTTON "無効にする", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
|
||||
LTEXT "このポートを使用してテストします:", IDC_STATIC, 180, 105, 100, 10
|
||||
LISTBOX IDC_DMUSIC_TEST_LIST, 180, 115, 180, 45, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
|
||||
PUSHBUTTON "Test DirectMusic", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
|
||||
GROUPBOX "Notes", IDC_STATIC, 5, 170, 452, 50
|
||||
PUSHBUTTON "DirectMusic をテストする", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
|
||||
GROUPBOX "注記", IDC_STATIC, 5, 170, 452, 50
|
||||
EDITTEXT IDC_MUSIC_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||
END
|
||||
|
||||
@@ -170,11 +170,11 @@ FONT 9, "MS UI Gothic"
|
||||
BEGIN
|
||||
GROUPBOX "登録済み DirectPlay サービス プロバイダ", IDC_STATIC, 5, 0, 452, 75
|
||||
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 15, 12, 432, 55
|
||||
GROUPBOX "Registered Lobbyable DirectPlay Applications", IDC_STATIC, 5, 77, 452, 55
|
||||
GROUPBOX "ReactX Features", IDC_STATIC, 5, 133, 452, 35
|
||||
PUSHBUTTON "DirectPlay Voice Options", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
|
||||
PUSHBUTTON "Test DirectPlay", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
|
||||
GROUPBOX "Notes", IDC_STATIC, 5, 170, 452, 50
|
||||
GROUPBOX "登録済みのロビー可能な DirectPlay アプリ", IDC_STATIC, 5, 77, 452, 55
|
||||
GROUPBOX "ReactX の機能", IDC_STATIC, 5, 133, 452, 35
|
||||
PUSHBUTTON "DirectPlay 音声オプション", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
|
||||
PUSHBUTTON "DirectPlay をテストする", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
|
||||
GROUPBOX "注記", IDC_STATIC, 5, 170, 452, 50
|
||||
EDITTEXT IDC_NETWORK_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
|
||||
END
|
||||
|
||||
@@ -182,11 +182,11 @@ IDD_HELP_DIALOG DIALOGEX 0, 0, 462, 220
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 9, "MS UI Gothic"
|
||||
BEGIN
|
||||
LTEXT "Still can't find the information you're looking for? Here are some additional things you can do:", IDC_STATIC, 5, 0, 300, 10
|
||||
PUSHBUTTON "System Information", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
|
||||
LTEXT "Displays additional system information", IDC_STATIC, 90, 23, 300, 10
|
||||
PUSHBUTTON "Refresh Rate Override", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
|
||||
LTEXT "Overrides the Refresh Rate for DirectDraw", IDC_STATIC, 90, 43, 300, 10
|
||||
LTEXT "探している情報がまだ見つかりませんか? 以下の方法をお試しください。", IDC_STATIC, 5, 0, 300, 10
|
||||
PUSHBUTTON "システム情報", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
|
||||
LTEXT "追加のシステム情報を表示します", IDC_STATIC, 90, 23, 300, 10
|
||||
PUSHBUTTON "リフレッシュ レートのオーバーライド", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
|
||||
LTEXT "DirectDrawのリフレッシュ レートを上書きします", IDC_STATIC, 90, 43, 300, 10
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
@@ -238,17 +238,17 @@ BEGIN
|
||||
IDS_DDFULLSCREEN_DESCRIPTION "このテストでは、DirectDraw を使って全画面表示モードで描画します。移動している白い矩形が描画されます。続行しますか?"
|
||||
IDS_DDFULLSCREEN_RESULT "全画面表示モードで移動している白い矩形が見えましたか?"
|
||||
IDS_FORMAT_ADAPTER_MEM "%u MB"
|
||||
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u bit)(%uHz)"
|
||||
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u ビット) (%uHz)"
|
||||
IDS_OPTION_NO "いいえ"
|
||||
IDS_D3DTEST_DESCRIPTION "Direct3D インタフェーステストを開始しようとしています。続行しますか?"
|
||||
IDS_D3DTEST_D3Dx "このテストはハードウェア アクセラーレータ Direct3D %u インターフェイスを使います。"
|
||||
IDS_OS_VERSION "%s %s (%d.%d, Build %d)"
|
||||
IDS_DMUSIC_DESC "Description"
|
||||
IDS_DMUSIC_TYPE "Type"
|
||||
IDS_DMUSIC_KERNEL "Kernel Mode"
|
||||
IDS_DMUSIC_IO "In/Out"
|
||||
IDS_DMUSIC_DLS "Supports DLS"
|
||||
IDS_DMUSIC_EXT "External"
|
||||
IDS_DMUSIC_PORT "Default Port"
|
||||
IDS_DDDISABLE_MSG "This will disable all hardware acceleration for DirectDraw on all display devices.\nDo you wish to continue?\n"
|
||||
IDS_OS_VERSION "%s %s (%d.%d, ビルド %d)"
|
||||
IDS_DMUSIC_DESC "説明"
|
||||
IDS_DMUSIC_TYPE "種類"
|
||||
IDS_DMUSIC_KERNEL "カーネル モード"
|
||||
IDS_DMUSIC_IO "入出力"
|
||||
IDS_DMUSIC_DLS "DLS をサポート"
|
||||
IDS_DMUSIC_EXT "外部"
|
||||
IDS_DMUSIC_PORT "デフォルトのポート"
|
||||
IDS_DDDISABLE_MSG "これにより、すべてのディスプレイ デバイス上の DirectDraw のすべてのハードウェア アクセラレーションが無効になります。\n続行しますか?\n"
|
||||
END
|
||||
|
@@ -26,12 +26,18 @@
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
HWND hDisplayWnd;
|
||||
GUID guid;
|
||||
} DXDIAG_DISPLAY, *PDXDIAG_DISPLAY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
HWND hMainDialog;
|
||||
HWND hTabCtrl;
|
||||
ULONG NumDisplayAdapter;
|
||||
HWND * hDisplayWnd;
|
||||
PDXDIAG_DISPLAY * DisplayAdapters;
|
||||
ULONG NumSoundAdapter;
|
||||
HWND * hSoundWnd;
|
||||
HWND hDialogs[5];
|
||||
@@ -53,10 +59,10 @@ INT_PTR CALLBACK NetworkPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
||||
INT_PTR CALLBACK HelpPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
/* DirectDraw tests */
|
||||
VOID DDTests(VOID);
|
||||
VOID DDTests(GUID *lpDevice);
|
||||
|
||||
/* Direct3D tests */
|
||||
VOID D3DTests(VOID);
|
||||
VOID D3DTests(GUID *lpDevice);
|
||||
|
||||
/* DirectSound initialization */
|
||||
void InitializeDirectSoundPage(PDXDIAG_CONTEXT pContext);
|
||||
|
@@ -2,7 +2,8 @@
|
||||
add_rc_deps(kbswitch.rc ${CMAKE_CURRENT_SOURCE_DIR}/res/kbswitch.ico)
|
||||
add_executable(kbswitch kbswitch.c kbswitch.rc)
|
||||
set_module_type(kbswitch win32gui UNICODE)
|
||||
add_importlibs(kbswitch advapi32 imm32 user32 shell32 shlwapi gdi32 msvcrt kernel32)
|
||||
target_link_libraries(kbswitch wine)
|
||||
add_importlibs(kbswitch advapi32 imm32 user32 shell32 shlwapi gdi32 msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET kbswitch DESTINATION reactos/system32 FOR all)
|
||||
|
||||
add_subdirectory(kbsdll)
|
||||
add_subdirectory(indicdll)
|
||||
|
12
base/applications/kbswitch/indicdll/CMakeLists.txt
Normal file
12
base/applications/kbswitch/indicdll/CMakeLists.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
spec2def(indicdll.dll indicdll.spec)
|
||||
|
||||
list(APPEND SOURCE
|
||||
indicdll.c
|
||||
indicdll.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/indicdll.def)
|
||||
|
||||
add_library(indicdll MODULE ${SOURCE})
|
||||
set_module_type(indicdll win32dll UNICODE)
|
||||
add_importlibs(indicdll user32 comctl32 msvcrt kernel32)
|
||||
add_cd_file(TARGET indicdll DESTINATION reactos/system32 FOR all)
|
153
base/applications/kbswitch/indicdll/indicdll.c
Normal file
153
base/applications/kbswitch/indicdll/indicdll.c
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* PROJECT: ReactOS Keyboard Layout Switcher
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Switching Keyboard Layouts
|
||||
* COPYRIGHT: Copyright Dmitry Chapyshev (dmitry@reactos.org)
|
||||
* Copyright Colin Finck (mail@colinfinck.de)
|
||||
* Copyright 2022-2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
|
||||
#include "../kbswitch.h"
|
||||
|
||||
HHOOK hWinHook = NULL;
|
||||
HHOOK hShellHook = NULL;
|
||||
HHOOK hKeyboardLLHook = NULL;
|
||||
HINSTANCE hInstance = NULL;
|
||||
HWND hKbSwitchWnd = NULL;
|
||||
|
||||
static VOID
|
||||
PostMessageToMainWnd(UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PostMessage(hKbSwitchWnd, Msg, wParam, lParam);
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK
|
||||
WinHookProc(INT code, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (code < 0)
|
||||
return CallNextHookEx(hWinHook, code, wParam, lParam);
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case HCBT_ACTIVATE:
|
||||
case HCBT_SETFOCUS:
|
||||
{
|
||||
HWND hwndFocus = (HWND)wParam;
|
||||
if (hwndFocus && hwndFocus != hKbSwitchWnd)
|
||||
PostMessageToMainWnd(WM_WINDOW_ACTIVATE, (WPARAM)hwndFocus, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return CallNextHookEx(hWinHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK
|
||||
ShellHookProc(INT code, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (code < 0)
|
||||
return CallNextHookEx(hShellHook, code, wParam, lParam);
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case HSHELL_WINDOWACTIVATED:
|
||||
{
|
||||
PostMessageToMainWnd(WM_WINDOW_ACTIVATE, wParam, 0);
|
||||
break;
|
||||
}
|
||||
case HSHELL_LANGUAGE:
|
||||
{
|
||||
PostMessageToMainWnd(WM_LANG_CHANGED, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return CallNextHookEx(hShellHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
static inline BOOL
|
||||
CheckVirtualKey(UINT vKey, UINT vKey1, UINT vKey2)
|
||||
{
|
||||
return vKey == vKey1 || vKey == vKey2;
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK
|
||||
KeyboardLLHook(INT code, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (code < 0)
|
||||
return CallNextHookEx(hKeyboardLLHook, code, wParam, lParam);
|
||||
|
||||
if (code == HC_ACTION)
|
||||
{
|
||||
KBDLLHOOKSTRUCT *pKbStruct = (KBDLLHOOKSTRUCT *)lParam;
|
||||
if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
|
||||
{
|
||||
BOOL bShiftPressed = GetAsyncKeyState(VK_SHIFT) < 0;
|
||||
BOOL bAltPressed = GetAsyncKeyState(VK_MENU) < 0;
|
||||
BOOL bCtrlPressed = GetAsyncKeyState(VK_CONTROL) < 0;
|
||||
// Detect Alt+Shift and Ctrl+Shift
|
||||
UINT vkCode = pKbStruct->vkCode;
|
||||
if ((bAltPressed && CheckVirtualKey(vkCode, VK_LSHIFT, VK_RSHIFT)) ||
|
||||
(bShiftPressed && CheckVirtualKey(vkCode, VK_LMENU, VK_RMENU)) ||
|
||||
(bCtrlPressed && CheckVirtualKey(vkCode, VK_LSHIFT, VK_RSHIFT)) ||
|
||||
(bShiftPressed && CheckVirtualKey(vkCode, VK_LCONTROL, VK_RCONTROL)))
|
||||
{
|
||||
PostMessageToMainWnd(WM_LANG_CHANGED, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return CallNextHookEx(hKeyboardLLHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
BOOL APIENTRY
|
||||
KbSwitchSetHooks(_In_ BOOL bDoHook)
|
||||
{
|
||||
if (bDoHook)
|
||||
{
|
||||
hWinHook = SetWindowsHookEx(WH_CBT, WinHookProc, hInstance, 0);
|
||||
hShellHook = SetWindowsHookEx(WH_SHELL, ShellHookProc, hInstance, 0);
|
||||
hKeyboardLLHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardLLHook, hInstance, 0);
|
||||
|
||||
if (hWinHook && hShellHook && hKeyboardLLHook)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Unhook */
|
||||
if (hKeyboardLLHook)
|
||||
{
|
||||
UnhookWindowsHookEx(hKeyboardLLHook);
|
||||
hKeyboardLLHook = NULL;
|
||||
}
|
||||
if (hShellHook)
|
||||
{
|
||||
UnhookWindowsHookEx(hShellHook);
|
||||
hShellHook = NULL;
|
||||
}
|
||||
if (hWinHook)
|
||||
{
|
||||
UnhookWindowsHookEx(hWinHook);
|
||||
hWinHook = NULL;
|
||||
}
|
||||
return !bDoHook;
|
||||
}
|
||||
|
||||
BOOL WINAPI
|
||||
DllMain(IN HINSTANCE hinstDLL,
|
||||
IN DWORD dwReason,
|
||||
IN LPVOID lpvReserved)
|
||||
{
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
{
|
||||
hInstance = hinstDLL;
|
||||
hKbSwitchWnd = FindWindow(szKbSwitcherName, NULL);
|
||||
if (!hKbSwitchWnd)
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
@@ -1,5 +1,5 @@
|
||||
#define REACTOS_VERSION_DLL
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Keyboard Layout Switcher"
|
||||
#define REACTOS_STR_INTERNAL_NAME "kbsdll"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "kbsdll.dll"
|
||||
#define REACTOS_STR_INTERNAL_NAME "indicdll"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "indicdll.dll"
|
||||
#include <reactos/version.rc>
|
1
base/applications/kbswitch/indicdll/indicdll.spec
Normal file
1
base/applications/kbswitch/indicdll/indicdll.spec
Normal file
@@ -0,0 +1 @@
|
||||
1 stdcall KbSwitchSetHooks(long)
|
@@ -1,12 +0,0 @@
|
||||
|
||||
spec2def(kbsdll.dll kbsdll.spec)
|
||||
|
||||
list(APPEND SOURCE
|
||||
kbsdll.c
|
||||
kbsdll.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/kbsdll.def)
|
||||
|
||||
add_library(kbsdll MODULE ${SOURCE})
|
||||
set_module_type(kbsdll win32dll UNICODE)
|
||||
add_importlibs(kbsdll user32 comctl32 msvcrt kernel32)
|
||||
add_cd_file(TARGET kbsdll DESTINATION reactos/system32 FOR all)
|
@@ -1,114 +0,0 @@
|
||||
/*
|
||||
* PROJECT: ReactOS Keyboard Layout Switcher
|
||||
* FILE: base/applications/kbswitch/kbsdll/kbsdll.c
|
||||
* PROGRAMMER: Dmitry Chapyshev <dmitry@reactos.org>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../kbswitch.h"
|
||||
|
||||
HHOOK hWinHook = NULL;
|
||||
HHOOK hShellHook = NULL;
|
||||
HINSTANCE hInstance = NULL;
|
||||
HWND hKbSwitchWnd = NULL;
|
||||
|
||||
static VOID
|
||||
PostMessageToMainWnd(UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PostMessage(hKbSwitchWnd, Msg, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
WinHookProc(int code, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (code < 0)
|
||||
{
|
||||
return CallNextHookEx(hWinHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case HCBT_SETFOCUS:
|
||||
{
|
||||
HWND hwndFocus = (HWND)wParam;
|
||||
if (hwndFocus && hwndFocus != hKbSwitchWnd)
|
||||
{
|
||||
PostMessageToMainWnd(WM_WINDOW_ACTIVATE, wParam, lParam);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return CallNextHookEx(hWinHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
ShellHookProc(int code, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (code < 0)
|
||||
{
|
||||
return CallNextHookEx(hShellHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
switch (code)
|
||||
{
|
||||
case HSHELL_LANGUAGE:
|
||||
{
|
||||
PostMessageToMainWnd(WM_LANG_CHANGED, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return CallNextHookEx(hShellHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
BOOL WINAPI
|
||||
KbSwitchSetHooks(VOID)
|
||||
{
|
||||
hWinHook = SetWindowsHookEx(WH_CBT, WinHookProc, hInstance, 0);
|
||||
hShellHook = SetWindowsHookEx(WH_SHELL, ShellHookProc, hInstance, 0);
|
||||
|
||||
if (!hWinHook || !hShellHook)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID WINAPI
|
||||
KbSwitchDeleteHooks(VOID)
|
||||
{
|
||||
if (hWinHook)
|
||||
{
|
||||
UnhookWindowsHookEx(hWinHook);
|
||||
hWinHook = NULL;
|
||||
}
|
||||
if (hShellHook)
|
||||
{
|
||||
UnhookWindowsHookEx(hShellHook);
|
||||
hShellHook = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL WINAPI
|
||||
DllMain(IN HINSTANCE hinstDLL,
|
||||
IN DWORD dwReason,
|
||||
IN LPVOID lpvReserved)
|
||||
{
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
{
|
||||
hInstance = hinstDLL;
|
||||
hKbSwitchWnd = FindWindow(szKbSwitcherName, NULL);
|
||||
if (!hKbSwitchWnd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
@@ -1,2 +0,0 @@
|
||||
@ stdcall KbSwitchSetHooks()
|
||||
@ stdcall KbSwitchDeleteHooks()
|
@@ -1,18 +1,20 @@
|
||||
/*
|
||||
* PROJECT: Keyboard Layout Switcher
|
||||
* FILE: base/applications/kbswitch/kbswitch.c
|
||||
* PURPOSE: Switching Keyboard Layouts
|
||||
* PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
|
||||
* Colin Finck (mail@colinfinck.de)
|
||||
* Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
* PROJECT: ReactOS Keyboard Layout Switcher
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Switching Keyboard Layouts
|
||||
* COPYRIGHT: Copyright Dmitry Chapyshev (dmitry@reactos.org)
|
||||
* Copyright Colin Finck (mail@colinfinck.de)
|
||||
* Copyright 2022-2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
|
||||
#include "kbswitch.h"
|
||||
#include <shlobj.h>
|
||||
#include <shlwapi_undoc.h>
|
||||
#include <imm.h>
|
||||
#include <imm32_undoc.h>
|
||||
|
||||
#include <wine/debug.h>
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(internat);
|
||||
|
||||
/*
|
||||
* This program kbswitch is a mimic of Win2k's internat.exe.
|
||||
* However, there are some differences.
|
||||
@@ -21,7 +23,7 @@
|
||||
* process boundary, so we cannot activate the IME keyboard layout from the outer process.
|
||||
* It needs special care.
|
||||
*
|
||||
* We use global hook by our kbsdll.dll, to watch the shell and the windows.
|
||||
* We use global hook by our indicdll.dll, to watch the shell and the windows.
|
||||
*
|
||||
* It might not work correctly on Vista+ because keyboard layout change notification
|
||||
* won't be generated in Vista+.
|
||||
@@ -29,27 +31,31 @@
|
||||
|
||||
#define WM_NOTIFYICONMSG (WM_USER + 248)
|
||||
|
||||
PKBSWITCHSETHOOKS KbSwitchSetHooks = NULL;
|
||||
PKBSWITCHDELETEHOOKS KbSwitchDeleteHooks = NULL;
|
||||
UINT ShellHookMessage = 0;
|
||||
#define TIMER_ID_LANG_CHANGED_DELAYED 0x10000
|
||||
#define TIMER_LANG_CHANGED_DELAY 200
|
||||
|
||||
HINSTANCE hInst;
|
||||
HANDLE hProcessHeap;
|
||||
FN_KbSwitchSetHooks KbSwitchSetHooks = NULL;
|
||||
|
||||
HINSTANCE g_hInst = NULL;
|
||||
HMODULE g_hHookDLL = NULL;
|
||||
INT g_nCurrentLayoutNum = 1;
|
||||
HICON g_hTrayIcon = NULL;
|
||||
HWND g_hwndLastActive = NULL;
|
||||
INT g_cKLs = 0;
|
||||
UINT g_iKL = 0;
|
||||
UINT g_cKLs = 0;
|
||||
HKL g_ahKLs[64];
|
||||
UINT g_uTaskbarRestartMsg = 0;
|
||||
UINT g_uShellHookMessage = 0;
|
||||
|
||||
typedef struct
|
||||
typedef struct tagSPECIAL_ID
|
||||
{
|
||||
DWORD dwLayoutId;
|
||||
HKL hKL;
|
||||
TCHAR szKLID[CCH_LAYOUT_ID + 1];
|
||||
} SPECIAL_ID, *PSPECIAL_ID;
|
||||
|
||||
SPECIAL_ID g_SpecialIds[80];
|
||||
#define MAX_SPECIAL_IDS 256
|
||||
|
||||
SPECIAL_ID g_SpecialIds[MAX_SPECIAL_IDS];
|
||||
INT g_cSpecialIds = 0;
|
||||
|
||||
static VOID LoadSpecialIds(VOID)
|
||||
@@ -69,7 +75,7 @@ static VOID LoadSpecialIds(VOID)
|
||||
|
||||
for (dwIndex = 0; dwIndex < 1000; ++dwIndex)
|
||||
{
|
||||
dwSize = ARRAYSIZE(szKLID);
|
||||
dwSize = _countof(szKLID);
|
||||
if (RegEnumKeyEx(hKey, dwIndex, szKLID, &dwSize, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
|
||||
break;
|
||||
|
||||
@@ -88,15 +94,15 @@ static VOID LoadSpecialIds(VOID)
|
||||
g_SpecialIds[g_cSpecialIds].dwLayoutId = wLayoutId;
|
||||
g_SpecialIds[g_cSpecialIds].hKL = hKL;
|
||||
StringCchCopy(g_SpecialIds[g_cSpecialIds].szKLID,
|
||||
ARRAYSIZE(g_SpecialIds[g_cSpecialIds].szKLID), szKLID);
|
||||
_countof(g_SpecialIds[g_cSpecialIds].szKLID), szKLID);
|
||||
++g_cSpecialIds;
|
||||
}
|
||||
|
||||
RegCloseKey(hLayoutKey);
|
||||
|
||||
if (g_cSpecialIds >= ARRAYSIZE(g_SpecialIds))
|
||||
if (g_cSpecialIds >= _countof(g_SpecialIds))
|
||||
{
|
||||
OutputDebugStringA("g_SpecialIds is full!");
|
||||
ERR("g_SpecialIds is full!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -133,54 +139,43 @@ GetKLIDFromHKL(HKL hKL, LPTSTR szKLID, SIZE_T KLIDLength)
|
||||
}
|
||||
}
|
||||
|
||||
static HKL GetActiveKL(VOID)
|
||||
{
|
||||
/* FIXME: Get correct console window's HKL when console window */
|
||||
HWND hwndTarget = (g_hwndLastActive ? g_hwndLastActive : GetForegroundWindow());
|
||||
DWORD dwTID = GetWindowThreadProcessId(hwndTarget, NULL);
|
||||
return GetKeyboardLayout(dwTID);
|
||||
}
|
||||
|
||||
static VOID UpdateLayoutList(HKL hKL OPTIONAL)
|
||||
{
|
||||
INT iKL;
|
||||
UINT iKL;
|
||||
|
||||
if (!hKL)
|
||||
{
|
||||
HWND hwndTarget = (g_hwndLastActive ? g_hwndLastActive : GetForegroundWindow());
|
||||
DWORD dwTID = GetWindowThreadProcessId(hwndTarget, NULL);
|
||||
hKL = GetKeyboardLayout(dwTID);
|
||||
}
|
||||
hKL = GetActiveKL();
|
||||
|
||||
g_cKLs = GetKeyboardLayoutList(ARRAYSIZE(g_ahKLs), g_ahKLs);
|
||||
g_cKLs = GetKeyboardLayoutList(_countof(g_ahKLs), g_ahKLs);
|
||||
|
||||
g_nCurrentLayoutNum = -1;
|
||||
g_iKL = 0;
|
||||
for (iKL = 0; iKL < g_cKLs; ++iKL)
|
||||
{
|
||||
if (g_ahKLs[iKL] == hKL)
|
||||
{
|
||||
g_nCurrentLayoutNum = iKL + 1;
|
||||
g_iKL = iKL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_nCurrentLayoutNum == -1 && g_cKLs < ARRAYSIZE(g_ahKLs))
|
||||
{
|
||||
g_nCurrentLayoutNum = g_cKLs;
|
||||
g_ahKLs[g_cKLs++] = hKL;
|
||||
}
|
||||
}
|
||||
|
||||
static HKL GetHKLFromLayoutNum(INT nLayoutNum)
|
||||
static HKL GetHKLFromLayoutNum(UINT iKL)
|
||||
{
|
||||
if (0 <= (nLayoutNum - 1) && (nLayoutNum - 1) < g_cKLs)
|
||||
{
|
||||
return g_ahKLs[nLayoutNum - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
HWND hwndTarget = (g_hwndLastActive ? g_hwndLastActive : GetForegroundWindow());
|
||||
DWORD dwTID = GetWindowThreadProcessId(hwndTarget, NULL);
|
||||
return GetKeyboardLayout(dwTID);
|
||||
}
|
||||
return (iKL < g_cKLs) ? g_ahKLs[iKL] : GetActiveKL();
|
||||
}
|
||||
|
||||
static VOID
|
||||
GetKLIDFromLayoutNum(INT nLayoutNum, LPTSTR szKLID, SIZE_T KLIDLength)
|
||||
GetKLIDFromLayoutNum(UINT iKL, LPTSTR szKLID, SIZE_T KLIDLength)
|
||||
{
|
||||
GetKLIDFromHKL(GetHKLFromLayoutNum(nLayoutNum), szKLID, KLIDLength);
|
||||
GetKLIDFromHKL(GetHKLFromLayoutNum(iKL), szKLID, KLIDLength);
|
||||
}
|
||||
|
||||
static BOOL
|
||||
@@ -195,16 +190,16 @@ GetSystemLibraryPath(LPTSTR szPath, SIZE_T cchPath, LPCTSTR FileName)
|
||||
}
|
||||
|
||||
static BOOL
|
||||
GetLayoutName(INT nLayoutNum, LPTSTR szName, SIZE_T NameLength)
|
||||
GetLayoutName(UINT iKL, LPTSTR szName, SIZE_T NameLength)
|
||||
{
|
||||
HKEY hKey;
|
||||
HRESULT hr;
|
||||
DWORD dwBufLen;
|
||||
TCHAR szBuf[MAX_PATH], szKLID[CCH_LAYOUT_ID + 1];
|
||||
|
||||
GetKLIDFromLayoutNum(nLayoutNum, szKLID, ARRAYSIZE(szKLID));
|
||||
GetKLIDFromLayoutNum(iKL, szKLID, _countof(szKLID));
|
||||
|
||||
StringCchPrintf(szBuf, ARRAYSIZE(szBuf),
|
||||
StringCchPrintf(szBuf, _countof(szBuf),
|
||||
_T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szKLID);
|
||||
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szBuf, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
@@ -245,7 +240,7 @@ static BOOL GetImeFile(LPTSTR szImeFile, SIZE_T cchImeFile, LPCTSTR szKLID)
|
||||
if (szKLID[0] != TEXT('E') && szKLID[0] != TEXT('e'))
|
||||
return FALSE; /* Not an IME HKL */
|
||||
|
||||
StringCchPrintf(szBuf, ARRAYSIZE(szBuf),
|
||||
StringCchPrintf(szBuf, _countof(szBuf),
|
||||
_T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szKLID);
|
||||
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, szBuf, 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
|
||||
@@ -336,7 +331,7 @@ CreateTrayIcon(LPTSTR szKLID, LPCTSTR szImeFile OPTIONAL)
|
||||
|
||||
if (szImeFile && szImeFile[0])
|
||||
{
|
||||
if (GetSystemLibraryPath(szPath, ARRAYSIZE(szPath), szImeFile))
|
||||
if (GetSystemLibraryPath(szPath, _countof(szPath), szImeFile))
|
||||
return FakeExtractIcon(szPath, cxIcon, cyIcon);
|
||||
}
|
||||
|
||||
@@ -345,7 +340,7 @@ CreateTrayIcon(LPTSTR szKLID, LPCTSTR szImeFile OPTIONAL)
|
||||
if (GetLocaleInfo(LangID,
|
||||
LOCALE_SABBREVLANGNAME | LOCALE_NOUSEROVERRIDE,
|
||||
szBuf,
|
||||
ARRAYSIZE(szBuf)) == 0)
|
||||
_countof(szBuf)) == 0)
|
||||
{
|
||||
szBuf[0] = szBuf[1] = _T('?');
|
||||
}
|
||||
@@ -421,13 +416,13 @@ AddTrayIcon(HWND hwnd)
|
||||
NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1, NIF_ICON | NIF_MESSAGE | NIF_TIP };
|
||||
TCHAR szKLID[CCH_LAYOUT_ID + 1], szName[MAX_PATH], szImeFile[80];
|
||||
|
||||
GetKLIDFromLayoutNum(g_nCurrentLayoutNum, szKLID, ARRAYSIZE(szKLID));
|
||||
GetLayoutName(g_nCurrentLayoutNum, szName, ARRAYSIZE(szName));
|
||||
GetImeFile(szImeFile, ARRAYSIZE(szImeFile), szKLID);
|
||||
GetKLIDFromLayoutNum(g_iKL, szKLID, _countof(szKLID));
|
||||
GetLayoutName(g_iKL, szName, _countof(szName));
|
||||
GetImeFile(szImeFile, _countof(szImeFile), szKLID);
|
||||
|
||||
tnid.uCallbackMessage = WM_NOTIFYICONMSG;
|
||||
tnid.hIcon = CreateTrayIcon(szKLID, szImeFile);
|
||||
StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName);
|
||||
StringCchCopy(tnid.szTip, _countof(tnid.szTip), szName);
|
||||
|
||||
Shell_NotifyIcon(NIM_ADD, &tnid);
|
||||
|
||||
@@ -455,11 +450,11 @@ UpdateTrayIcon(HWND hwnd, LPTSTR szKLID, LPTSTR szName)
|
||||
NOTIFYICONDATA tnid = { sizeof(tnid), hwnd, 1, NIF_ICON | NIF_MESSAGE | NIF_TIP };
|
||||
TCHAR szImeFile[80];
|
||||
|
||||
GetImeFile(szImeFile, ARRAYSIZE(szImeFile), szKLID);
|
||||
GetImeFile(szImeFile, _countof(szImeFile), szKLID);
|
||||
|
||||
tnid.uCallbackMessage = WM_NOTIFYICONMSG;
|
||||
tnid.hIcon = CreateTrayIcon(szKLID, szImeFile);
|
||||
StringCchCopy(tnid.szTip, ARRAYSIZE(tnid.szTip), szName);
|
||||
StringCchCopy(tnid.szTip, _countof(tnid.szTip), szName);
|
||||
|
||||
Shell_NotifyIcon(NIM_MODIFY, &tnid);
|
||||
|
||||
@@ -476,21 +471,20 @@ EnumWindowsProc(HWND hwnd, LPARAM lParam)
|
||||
}
|
||||
|
||||
static VOID
|
||||
ActivateLayout(HWND hwnd, ULONG uLayoutNum, HWND hwndTarget OPTIONAL, BOOL bNoActivate)
|
||||
ActivateLayout(HWND hwnd, UINT iKL, HWND hwndTarget OPTIONAL, BOOL bNoActivate)
|
||||
{
|
||||
HKL hKl;
|
||||
TCHAR szKLID[CCH_LAYOUT_ID + 1], szLangName[MAX_PATH];
|
||||
LANGID LangID;
|
||||
|
||||
/* The layout number starts from one. Zero is invalid */
|
||||
if (uLayoutNum == 0 || uLayoutNum > 0xFF) /* Invalid */
|
||||
if (iKL >= g_cKLs) /* Invalid */
|
||||
return;
|
||||
|
||||
GetKLIDFromLayoutNum(uLayoutNum, szKLID, ARRAYSIZE(szKLID));
|
||||
GetKLIDFromLayoutNum(iKL, szKLID, _countof(szKLID));
|
||||
LangID = (LANGID)_tcstoul(szKLID, NULL, 16);
|
||||
|
||||
/* Switch to the new keyboard layout */
|
||||
GetLocaleInfo(LangID, LOCALE_SLANGUAGE, szLangName, ARRAYSIZE(szLangName));
|
||||
GetLocaleInfo(LangID, LOCALE_SLANGUAGE, szLangName, _countof(szLangName));
|
||||
UpdateTrayIcon(hwnd, szKLID, szLangName);
|
||||
|
||||
if (hwndTarget && !bNoActivate)
|
||||
@@ -511,7 +505,7 @@ ActivateLayout(HWND hwnd, ULONG uLayoutNum, HWND hwndTarget OPTIONAL, BOOL bNoAc
|
||||
EnumWindows(EnumWindowsProc, (LPARAM) hKl);
|
||||
}
|
||||
|
||||
g_nCurrentLayoutNum = uLayoutNum;
|
||||
g_iKL = iKL;
|
||||
}
|
||||
|
||||
static HMENU
|
||||
@@ -521,18 +515,18 @@ BuildLeftPopupMenu(VOID)
|
||||
TCHAR szName[MAX_PATH], szKLID[CCH_LAYOUT_ID + 1], szImeFile[80];
|
||||
HICON hIcon;
|
||||
MENUITEMINFO mii = { sizeof(mii) };
|
||||
INT iKL;
|
||||
UINT iKL;
|
||||
|
||||
for (iKL = 0; iKL < g_cKLs; ++iKL)
|
||||
{
|
||||
GetKLIDFromHKL(g_ahKLs[iKL], szKLID, ARRAYSIZE(szKLID));
|
||||
GetImeFile(szImeFile, ARRAYSIZE(szImeFile), szKLID);
|
||||
GetKLIDFromHKL(g_ahKLs[iKL], szKLID, _countof(szKLID));
|
||||
GetImeFile(szImeFile, _countof(szImeFile), szKLID);
|
||||
|
||||
if (!GetLayoutName(iKL + 1, szName, ARRAYSIZE(szName)))
|
||||
if (!GetLayoutName(iKL, szName, _countof(szName)))
|
||||
continue;
|
||||
|
||||
mii.fMask = MIIM_ID | MIIM_STRING;
|
||||
mii.wID = iKL + 1;
|
||||
mii.wID = ID_LANG_BASE + iKL;
|
||||
mii.dwTypeData = szName;
|
||||
|
||||
hIcon = CreateTrayIcon(szKLID, szImeFile);
|
||||
@@ -547,95 +541,86 @@ BuildLeftPopupMenu(VOID)
|
||||
DestroyIcon(hIcon);
|
||||
}
|
||||
|
||||
CheckMenuItem(hMenu, g_nCurrentLayoutNum, MF_CHECKED);
|
||||
CheckMenuItem(hMenu, ID_LANG_BASE + g_iKL, MF_CHECKED);
|
||||
|
||||
return hMenu;
|
||||
}
|
||||
|
||||
BOOL
|
||||
static BOOL
|
||||
SetHooks(VOID)
|
||||
{
|
||||
g_hHookDLL = LoadLibrary(_T("kbsdll.dll"));
|
||||
g_hHookDLL = LoadLibrary(_T("indicdll.dll"));
|
||||
if (!g_hHookDLL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
KbSwitchSetHooks = (PKBSWITCHSETHOOKS) GetProcAddress(g_hHookDLL, "KbSwitchSetHooks");
|
||||
KbSwitchDeleteHooks = (PKBSWITCHDELETEHOOKS) GetProcAddress(g_hHookDLL, "KbSwitchDeleteHooks");
|
||||
#define IHOOK_SET 1
|
||||
KbSwitchSetHooks = (FN_KbSwitchSetHooks)GetProcAddress(g_hHookDLL, MAKEINTRESOURCEA(IHOOK_SET));
|
||||
|
||||
if (KbSwitchSetHooks == NULL || KbSwitchDeleteHooks == NULL)
|
||||
if (!KbSwitchSetHooks || !KbSwitchSetHooks(TRUE))
|
||||
{
|
||||
ERR("SetHooks failed\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return KbSwitchSetHooks();
|
||||
TRACE("SetHooks OK\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID
|
||||
static VOID
|
||||
DeleteHooks(VOID)
|
||||
{
|
||||
if (KbSwitchDeleteHooks)
|
||||
if (KbSwitchSetHooks)
|
||||
{
|
||||
KbSwitchDeleteHooks();
|
||||
KbSwitchDeleteHooks = NULL;
|
||||
KbSwitchSetHooks(FALSE);
|
||||
KbSwitchSetHooks = NULL;
|
||||
}
|
||||
|
||||
if (g_hHookDLL)
|
||||
{
|
||||
FreeLibrary(g_hHookDLL);
|
||||
g_hHookDLL = NULL;
|
||||
}
|
||||
|
||||
TRACE("DeleteHooks OK\n");
|
||||
}
|
||||
|
||||
static UINT GetLayoutNum(HKL hKL)
|
||||
{
|
||||
INT iKL;
|
||||
UINT iKL;
|
||||
|
||||
for (iKL = 0; iKL < g_cKLs; ++iKL)
|
||||
{
|
||||
if (g_ahKLs[iKL] == hKL)
|
||||
return iKL + 1;
|
||||
return iKL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ULONG
|
||||
GetNextLayout(VOID)
|
||||
{
|
||||
return (g_nCurrentLayoutNum % g_cKLs) + 1;
|
||||
}
|
||||
|
||||
UINT
|
||||
UpdateLanguageDisplay(HWND hwnd, HKL hKL)
|
||||
{
|
||||
TCHAR szKLID[MAX_PATH], szLangName[MAX_PATH];
|
||||
LANGID LangID;
|
||||
|
||||
GetKLIDFromHKL(hKL, szKLID, ARRAYSIZE(szKLID));
|
||||
GetKLIDFromHKL(hKL, szKLID, _countof(szKLID));
|
||||
LangID = (LANGID)_tcstoul(szKLID, NULL, 16);
|
||||
GetLocaleInfo(LangID, LOCALE_SLANGUAGE, szLangName, ARRAYSIZE(szLangName));
|
||||
GetLocaleInfo(LangID, LOCALE_SLANGUAGE, szLangName, _countof(szLangName));
|
||||
UpdateTrayIcon(hwnd, szKLID, szLangName);
|
||||
g_nCurrentLayoutNum = GetLayoutNum(hKL);
|
||||
g_iKL = GetLayoutNum(hKL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
HWND
|
||||
GetTargetWindow(HWND hwndFore)
|
||||
GetTargetWindow(HWND hwndFore OPTIONAL)
|
||||
{
|
||||
TCHAR szClass[64];
|
||||
HWND hwndIME;
|
||||
HWND hwndTarget = hwndFore;
|
||||
if (hwndTarget == NULL)
|
||||
hwndTarget = GetForegroundWindow();
|
||||
|
||||
GetClassName(hwndTarget, szClass, ARRAYSIZE(szClass));
|
||||
if (_tcsicmp(szClass, szKbSwitcherName) == 0)
|
||||
HWND hwndTarget = (hwndFore ? hwndFore : GetForegroundWindow());
|
||||
if (IsWndClassName(hwndTarget, szKbSwitcherName))
|
||||
hwndTarget = g_hwndLastActive;
|
||||
|
||||
hwndIME = ImmGetDefaultIMEWnd(hwndTarget);
|
||||
return (hwndIME ? hwndIME : hwndTarget);
|
||||
return hwndTarget;
|
||||
}
|
||||
|
||||
UINT
|
||||
@@ -650,222 +635,228 @@ UpdateLanguageDisplayCurrent(HWND hwnd, HWND hwndFore)
|
||||
|
||||
static BOOL RememberLastActive(HWND hwnd, HWND hwndFore)
|
||||
{
|
||||
TCHAR szClass[64];
|
||||
|
||||
hwndFore = GetAncestor(hwndFore, GA_ROOT);
|
||||
|
||||
if (!IsWindowVisible(hwndFore) || !GetClassName(hwndFore, szClass, ARRAYSIZE(szClass)))
|
||||
if (!IsWindowVisible(hwndFore))
|
||||
return FALSE;
|
||||
|
||||
if (_tcsicmp(szClass, szKbSwitcherName) == 0 ||
|
||||
_tcsicmp(szClass, TEXT("Shell_TrayWnd")) == 0)
|
||||
if (IsWndClassName(hwndFore, szKbSwitcherName) ||
|
||||
IsWndClassName(hwndFore, TEXT("Shell_TrayWnd")))
|
||||
{
|
||||
return FALSE; /* Special window */
|
||||
}
|
||||
|
||||
/* FIXME: CONWND needs special handling */
|
||||
if (_tcsicmp(szClass, TEXT("ConsoleWindowClass")) == 0)
|
||||
{
|
||||
HKL hKL = GetKeyboardLayout(0);
|
||||
UpdateLanguageDisplay(hwnd, hKL);
|
||||
}
|
||||
|
||||
g_hwndLastActive = hwndFore;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
|
||||
// WM_CREATE
|
||||
static INT
|
||||
KbSwitch_OnCreate(HWND hwnd)
|
||||
{
|
||||
static HMENU s_hMenu = NULL, s_hRightPopupMenu = NULL;
|
||||
static UINT s_uTaskbarRestart;
|
||||
POINT pt;
|
||||
HMENU hLeftPopupMenu;
|
||||
|
||||
switch (Message)
|
||||
if (!SetHooks())
|
||||
{
|
||||
case WM_CREATE:
|
||||
{
|
||||
if (!SetHooks())
|
||||
{
|
||||
MessageBox(NULL, TEXT("SetHooks failed."), NULL, MB_ICONERROR);
|
||||
return -1;
|
||||
}
|
||||
MessageBox(NULL, TEXT("SetHooks failed."), NULL, MB_ICONERROR);
|
||||
return -1; /* Failed */
|
||||
}
|
||||
|
||||
LoadSpecialIds();
|
||||
LoadSpecialIds();
|
||||
|
||||
UpdateLayoutList(NULL);
|
||||
AddTrayIcon(hwnd);
|
||||
UpdateLayoutList(NULL);
|
||||
AddTrayIcon(hwnd);
|
||||
|
||||
ActivateLayout(hwnd, g_nCurrentLayoutNum, NULL, TRUE);
|
||||
s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
|
||||
break;
|
||||
}
|
||||
ActivateLayout(hwnd, g_iKL, NULL, TRUE);
|
||||
g_uTaskbarRestartMsg = RegisterWindowMessage(TEXT("TaskbarCreated"));
|
||||
|
||||
case WM_LANG_CHANGED: /* Comes from kbsdll.dll and this module */
|
||||
{
|
||||
UpdateLayoutList((HKL)lParam);
|
||||
UpdateLanguageDisplay(hwnd, (HKL)lParam);
|
||||
break;
|
||||
}
|
||||
return 0; /* Success */
|
||||
}
|
||||
|
||||
case WM_WINDOW_ACTIVATE: /* Comes from kbsdll.dll and this module */
|
||||
{
|
||||
HWND hwndFore = GetForegroundWindow();
|
||||
if (RememberLastActive(hwnd, hwndFore))
|
||||
return UpdateLanguageDisplayCurrent(hwnd, hwndFore);
|
||||
break;
|
||||
}
|
||||
// WM_DESTROY
|
||||
static void
|
||||
KbSwitch_OnDestroy(HWND hwnd)
|
||||
{
|
||||
KillTimer(hwnd, TIMER_ID_LANG_CHANGED_DELAYED);
|
||||
DeleteHooks();
|
||||
DeleteTrayIcon(hwnd);
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
|
||||
case WM_NOTIFYICONMSG:
|
||||
{
|
||||
switch (lParam)
|
||||
{
|
||||
case WM_RBUTTONUP:
|
||||
case WM_LBUTTONUP:
|
||||
{
|
||||
UpdateLayoutList(NULL);
|
||||
// WM_TIMER
|
||||
static void
|
||||
KbSwitch_OnTimer(HWND hwnd, UINT_PTR nTimerID)
|
||||
{
|
||||
if (nTimerID == TIMER_ID_LANG_CHANGED_DELAYED)
|
||||
{
|
||||
KillTimer(hwnd, nTimerID);
|
||||
HKL hKL = GetActiveKL();
|
||||
UpdateLayoutList(hKL);
|
||||
UpdateLanguageDisplay(hwnd, hKL);
|
||||
}
|
||||
}
|
||||
|
||||
GetCursorPos(&pt);
|
||||
SetForegroundWindow(hwnd);
|
||||
// WM_NOTIFYICONMSG
|
||||
static void
|
||||
KbSwitch_OnNotifyIconMsg(HWND hwnd, UINT uMouseMsg)
|
||||
{
|
||||
if (uMouseMsg != WM_LBUTTONUP && uMouseMsg != WM_RBUTTONUP && uMouseMsg != WM_CONTEXTMENU)
|
||||
return;
|
||||
|
||||
if (lParam == WM_LBUTTONUP)
|
||||
{
|
||||
/* Rebuild the left popup menu on every click to take care of keyboard layout changes */
|
||||
hLeftPopupMenu = BuildLeftPopupMenu();
|
||||
TrackPopupMenu(hLeftPopupMenu, 0, pt.x, pt.y, 0, hwnd, NULL);
|
||||
DestroyMenu(hLeftPopupMenu);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!s_hRightPopupMenu)
|
||||
{
|
||||
s_hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_POPUP));
|
||||
s_hRightPopupMenu = GetSubMenu(s_hMenu, 0);
|
||||
}
|
||||
TrackPopupMenu(s_hRightPopupMenu, 0, pt.x, pt.y, 0, hwnd, NULL);
|
||||
}
|
||||
UpdateLayoutList(NULL);
|
||||
|
||||
PostMessage(hwnd, WM_NULL, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
POINT pt;
|
||||
GetCursorPos(&pt);
|
||||
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case ID_EXIT:
|
||||
{
|
||||
PostMessage(hwnd, WM_CLOSE, 0, 0);
|
||||
break;
|
||||
}
|
||||
SetForegroundWindow(hwnd);
|
||||
|
||||
case ID_PREFERENCES:
|
||||
{
|
||||
INT_PTR ret = (INT_PTR)ShellExecute(hwnd, NULL,
|
||||
TEXT("control.exe"), TEXT("input.dll"),
|
||||
NULL, SW_SHOWNORMAL);
|
||||
if (ret <= 32)
|
||||
MessageBox(hwnd, _T("Can't start input.dll"), NULL, MB_ICONERROR);
|
||||
break;
|
||||
}
|
||||
INT nID;
|
||||
if (uMouseMsg == WM_LBUTTONUP)
|
||||
{
|
||||
/* Rebuild the left popup menu on every click to take care of keyboard layout changes */
|
||||
HMENU hPopupMenu = BuildLeftPopupMenu();
|
||||
nID = TrackPopupMenuEx(hPopupMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_LEFTBUTTON,
|
||||
pt.x, pt.y, hwnd, NULL);
|
||||
DestroyMenu(hPopupMenu);
|
||||
}
|
||||
else /* WM_RBUTTONUP or WM_CONTEXTMENU */
|
||||
{
|
||||
HMENU hPopupMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_POPUP));
|
||||
HMENU hSubMenu = GetSubMenu(hPopupMenu, 0);
|
||||
nID = TrackPopupMenuEx(hSubMenu, TPM_LEFTALIGN | TPM_RETURNCMD | TPM_RIGHTBUTTON,
|
||||
pt.x, pt.y, hwnd, NULL);
|
||||
DestroyMenu(hPopupMenu);
|
||||
}
|
||||
|
||||
case ID_NEXTLAYOUT:
|
||||
{
|
||||
HWND hwndTarget = (HWND)lParam, hwndTargetSave = NULL;
|
||||
DWORD dwThreadID;
|
||||
HKL hKL;
|
||||
UINT uNum;
|
||||
TCHAR szClass[64];
|
||||
BOOL bCONWND = FALSE;
|
||||
PostMessage(hwnd, WM_NULL, 0, 0);
|
||||
|
||||
if (hwndTarget == NULL)
|
||||
hwndTarget = g_hwndLastActive;
|
||||
if (nID)
|
||||
PostMessage(hwnd, WM_COMMAND, nID, 0);
|
||||
}
|
||||
|
||||
/* FIXME: CONWND needs special handling */
|
||||
if (hwndTarget &&
|
||||
GetClassName(hwndTarget, szClass, ARRAYSIZE(szClass)) &&
|
||||
_tcsicmp(szClass, TEXT("ConsoleWindowClass")) == 0)
|
||||
{
|
||||
bCONWND = TRUE;
|
||||
hwndTargetSave = hwndTarget;
|
||||
hwndTarget = NULL;
|
||||
}
|
||||
|
||||
if (hwndTarget)
|
||||
{
|
||||
dwThreadID = GetWindowThreadProcessId(hwndTarget, NULL);
|
||||
hKL = GetKeyboardLayout(dwThreadID);
|
||||
uNum = GetLayoutNum(hKL);
|
||||
if (uNum != 0)
|
||||
g_nCurrentLayoutNum = uNum;
|
||||
}
|
||||
|
||||
ActivateLayout(hwnd, GetNextLayout(), hwndTarget, TRUE);
|
||||
|
||||
/* FIXME: CONWND needs special handling */
|
||||
if (bCONWND)
|
||||
ActivateLayout(hwnd, g_nCurrentLayoutNum, hwndTargetSave, TRUE);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
if (1 <= LOWORD(wParam) && LOWORD(wParam) <= 1000)
|
||||
{
|
||||
if (!IsWindow(g_hwndLastActive))
|
||||
{
|
||||
g_hwndLastActive = NULL;
|
||||
}
|
||||
ActivateLayout(hwnd, LOWORD(wParam), g_hwndLastActive, FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// WM_COMMAND
|
||||
static void
|
||||
KbSwitch_OnCommand(HWND hwnd, UINT nID)
|
||||
{
|
||||
switch (nID)
|
||||
{
|
||||
case ID_EXIT:
|
||||
PostMessage(hwnd, WM_CLOSE, 0, 0);
|
||||
break;
|
||||
|
||||
case WM_SETTINGCHANGE:
|
||||
case ID_PREFERENCES:
|
||||
{
|
||||
if (wParam == SPI_SETNONCLIENTMETRICS)
|
||||
{
|
||||
PostMessage(hwnd, WM_WINDOW_ACTIVATE, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
{
|
||||
DeleteHooks();
|
||||
DestroyMenu(s_hMenu);
|
||||
DeleteTrayIcon(hwnd);
|
||||
PostQuitMessage(0);
|
||||
INT_PTR ret = (INT_PTR)ShellExecute(hwnd, NULL,
|
||||
TEXT("control.exe"), TEXT("input.dll"),
|
||||
NULL, SW_SHOWNORMAL);
|
||||
if (ret <= 32)
|
||||
MessageBox(hwnd, _T("Can't start input.dll"), NULL, MB_ICONERROR);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
if (Message == s_uTaskbarRestart)
|
||||
if (nID >= ID_LANG_BASE)
|
||||
{
|
||||
UpdateLayoutList(NULL);
|
||||
AddTrayIcon(hwnd);
|
||||
break;
|
||||
if (!IsWindow(g_hwndLastActive))
|
||||
{
|
||||
g_hwndLastActive = NULL;
|
||||
}
|
||||
ActivateLayout(hwnd, nID - ID_LANG_BASE, g_hwndLastActive, FALSE);
|
||||
}
|
||||
else if (Message == ShellHookMessage)
|
||||
{
|
||||
if (wParam == HSHELL_LANGUAGE)
|
||||
PostMessage(hwnd, WM_LANG_CHANGED, wParam, lParam);
|
||||
else if (wParam == HSHELL_WINDOWACTIVATED)
|
||||
PostMessage(hwnd, WM_WINDOW_ACTIVATE, wParam, lParam);
|
||||
|
||||
break;
|
||||
}
|
||||
return DefWindowProc(hwnd, Message, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WM_LANG_CHANGED
|
||||
static LRESULT
|
||||
KbSwitch_OnLangChanged(HWND hwnd, HWND hwndTarget OPTIONAL, HKL hKL OPTIONAL)
|
||||
{
|
||||
TRACE("WM_LANG_CHANGED: hwndTarget:%p, hKL:%p\n", hwndTarget, hKL);
|
||||
/* Delayed action */
|
||||
KillTimer(hwnd, TIMER_ID_LANG_CHANGED_DELAYED);
|
||||
SetTimer(hwnd, TIMER_ID_LANG_CHANGED_DELAYED, TIMER_LANG_CHANGED_DELAY, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// WM_WINDOW_ACTIVATE
|
||||
static LRESULT
|
||||
KbSwitch_OnWindowActivate(HWND hwnd, HWND hwndTarget OPTIONAL, LPARAM lParam OPTIONAL)
|
||||
{
|
||||
TRACE("WM_WINDOW_ACTIVATE: hwndTarget:%p, lParam:%p\n", hwndTarget, lParam);
|
||||
HWND hwndFore = hwndTarget ? hwndTarget : GetForegroundWindow();
|
||||
if (RememberLastActive(hwnd, hwndFore))
|
||||
return UpdateLanguageDisplayCurrent(hwnd, hwndFore);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// WM_SETTINGCHANGE
|
||||
static void
|
||||
KbSwitch_OnSettingChange(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (wParam == SPI_SETNONCLIENTMETRICS)
|
||||
PostMessage(hwnd, WM_WINDOW_ACTIVATE, 0, 0);
|
||||
}
|
||||
|
||||
static LRESULT
|
||||
KbSwitch_OnDefault(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (uMsg == g_uTaskbarRestartMsg)
|
||||
{
|
||||
UpdateLayoutList(NULL);
|
||||
AddTrayIcon(hwnd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (uMsg == g_uShellHookMessage)
|
||||
{
|
||||
TRACE("g_uShellHookMessage: wParam:%p, lParam:%p\n", wParam, lParam);
|
||||
if (wParam == HSHELL_LANGUAGE)
|
||||
PostMessage(hwnd, WM_LANG_CHANGED, 0, 0);
|
||||
else if (wParam == HSHELL_WINDOWACTIVATED || wParam == HSHELL_RUDEAPPACTIVATED)
|
||||
PostMessage(hwnd, WM_WINDOW_ACTIVATE, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
return KbSwitch_OnCreate(hwnd);
|
||||
|
||||
case WM_TIMER:
|
||||
KbSwitch_OnTimer(hwnd, (UINT_PTR)wParam);
|
||||
break;
|
||||
|
||||
case WM_LANG_CHANGED: /* Comes from indicdll.dll and this module */
|
||||
return KbSwitch_OnLangChanged(hwnd, (HWND)wParam, (HKL)lParam);
|
||||
|
||||
case WM_WINDOW_ACTIVATE: /* Comes from indicdll.dll and this module */
|
||||
return KbSwitch_OnWindowActivate(hwnd, (HWND)wParam, lParam);
|
||||
|
||||
case WM_NOTIFYICONMSG:
|
||||
KbSwitch_OnNotifyIconMsg(hwnd, (UINT)lParam);
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
KbSwitch_OnCommand(hwnd, LOWORD(wParam));
|
||||
break;
|
||||
|
||||
case WM_SETTINGCHANGE:
|
||||
KbSwitch_OnSettingChange(hwnd, wParam, lParam);
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
KbSwitch_OnDestroy(hwnd);
|
||||
break;
|
||||
|
||||
default:
|
||||
return KbSwitch_OnDefault(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -881,6 +872,7 @@ _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdSh
|
||||
switch (GetUserDefaultUILanguage())
|
||||
{
|
||||
case MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT):
|
||||
TRACE("LAYOUT_RTL\n");
|
||||
SetProcessDefaultLayout(LAYOUT_RTL);
|
||||
break;
|
||||
default:
|
||||
@@ -889,16 +881,19 @@ _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdSh
|
||||
|
||||
hMutex = CreateMutex(NULL, FALSE, szKbSwitcherName);
|
||||
if (!hMutex)
|
||||
{
|
||||
ERR("!hMutex\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (GetLastError() == ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
ERR("Another instance is already running\n");
|
||||
CloseHandle(hMutex);
|
||||
return 1;
|
||||
}
|
||||
|
||||
hInst = hInstance;
|
||||
hProcessHeap = GetProcessHeap();
|
||||
g_hInst = hInstance;
|
||||
|
||||
ZeroMemory(&WndClass, sizeof(WndClass));
|
||||
WndClass.lpfnWndProc = WndProc;
|
||||
@@ -912,8 +907,14 @@ _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, INT nCmdSh
|
||||
}
|
||||
|
||||
hwnd = CreateWindow(szKbSwitcherName, NULL, 0, 0, 0, 1, 1, HWND_DESKTOP, NULL, hInstance, NULL);
|
||||
ShellHookMessage = RegisterWindowMessage(L"SHELLHOOK");
|
||||
RegisterShellHookWindow(hwnd);
|
||||
g_uShellHookMessage = RegisterWindowMessage(L"SHELLHOOK");
|
||||
if (!RegisterShellHookWindow(hwnd))
|
||||
{
|
||||
ERR("RegisterShellHookWindow failed\n");
|
||||
DestroyWindow(hwnd);
|
||||
CloseHandle(hMutex);
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winuser.h>
|
||||
@@ -10,20 +10,30 @@
|
||||
#include <shellapi.h>
|
||||
#include <tchar.h>
|
||||
#include <strsafe.h>
|
||||
#include <ime/indicml.h> /* INDICATOR_CLASS, INDICM_... */
|
||||
|
||||
#include "resource.h"
|
||||
|
||||
// Character Count of a layout ID like "00000409"
|
||||
#define CCH_LAYOUT_ID 8
|
||||
#define CCH_LAYOUT_ID 8 // Character Count of a layout ID like "00000409"
|
||||
#define CCH_ULONG_DEC 10 // Maximum Character Count of a ULONG in decimal
|
||||
|
||||
// Maximum Character Count of a ULONG in decimal
|
||||
#define CCH_ULONG_DEC 10
|
||||
|
||||
#define WM_KEY_PRESSED (WM_USER + 10100)
|
||||
#define WM_LANG_CHANGED (WM_USER + 10200)
|
||||
#define WM_WINDOW_ACTIVATE (WM_USER + 10300)
|
||||
|
||||
typedef BOOL (WINAPI *PKBSWITCHSETHOOKS) (VOID);
|
||||
typedef VOID (WINAPI *PKBSWITCHDELETEHOOKS) (VOID);
|
||||
typedef BOOL (APIENTRY *FN_KbSwitchSetHooks)(BOOL bDoHook);
|
||||
|
||||
TCHAR szKbSwitcherName[] = _T("kbswitcher");
|
||||
const TCHAR szKbSwitcherName[] = INDICATOR_CLASS;
|
||||
|
||||
static inline BOOL
|
||||
IsWndClassName(_In_opt_ HWND hwndTarget, PCTSTR pszName)
|
||||
{
|
||||
TCHAR szClass[32];
|
||||
GetClassName(hwndTarget, szClass, _countof(szClass));
|
||||
return lstrcmpi(szClass, pszName) == 0;
|
||||
}
|
||||
|
||||
static inline BOOL
|
||||
IsConsoleWnd(_In_opt_ HWND hwndTarget)
|
||||
{
|
||||
return IsWndClassName(hwndTarget, TEXT("ConsoleWindowClass"));
|
||||
}
|
||||
|
@@ -4,9 +4,9 @@
|
||||
#define IDI_MAIN 100
|
||||
|
||||
/* Menus */
|
||||
#define IDR_POPUP 12000
|
||||
#define IDR_POPUP 100
|
||||
|
||||
/* Menu items */
|
||||
#define ID_EXIT 10001
|
||||
#define ID_PREFERENCES 10002
|
||||
#define ID_NEXTLAYOUT 10003
|
||||
#define ID_EXIT 100
|
||||
#define ID_PREFERENCES 101
|
||||
#define ID_LANG_BASE 1000
|
||||
|
@@ -4,7 +4,7 @@
|
||||
* PURPOSE: Event Log Viewer main file.
|
||||
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
|
||||
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
|
||||
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
#include "eventvwr.h"
|
||||
@@ -1440,7 +1440,7 @@ LONG EventLogFilter_Release(IN PEVENTLOGFILTER EventLogFilter)
|
||||
void
|
||||
TrimNulls(LPWSTR s)
|
||||
{
|
||||
WCHAR *c;
|
||||
PWCHAR c;
|
||||
|
||||
if (s != NULL)
|
||||
{
|
||||
@@ -1451,17 +1451,20 @@ TrimNulls(LPWSTR s)
|
||||
}
|
||||
}
|
||||
|
||||
DWORD
|
||||
SIZE_T
|
||||
GetExpandedFilePathName(
|
||||
IN LPCWSTR ComputerName OPTIONAL,
|
||||
IN LPCWSTR lpFileName,
|
||||
OUT LPWSTR lpFullFileName OPTIONAL,
|
||||
IN DWORD nSize)
|
||||
_In_opt_ PCWSTR ComputerName,
|
||||
_In_ PCWSTR FileName,
|
||||
_Out_writes_z_(nSize) PWSTR pFullFileName,
|
||||
_In_ SIZE_T nSize)
|
||||
{
|
||||
SIZE_T dwLength;
|
||||
|
||||
if (nSize == 0)
|
||||
return 0;
|
||||
|
||||
/* Determine the needed size after expansion of any environment strings */
|
||||
dwLength = ExpandEnvironmentStringsW(lpFileName, NULL, 0);
|
||||
dwLength = ExpandEnvironmentStringsW(FileName, NULL, 0);
|
||||
if (dwLength == 0)
|
||||
{
|
||||
/* We failed, bail out */
|
||||
@@ -1487,15 +1490,14 @@ GetExpandedFilePathName(
|
||||
if (dwLength > nSize)
|
||||
{
|
||||
/* No, return the needed size in characters (includes NULL-terminator) */
|
||||
*pFullFileName = UNICODE_NULL;
|
||||
return dwLength;
|
||||
}
|
||||
|
||||
|
||||
/* Now expand the file path */
|
||||
ASSERT(dwLength <= nSize);
|
||||
|
||||
/* Expand any existing environment strings */
|
||||
if (ExpandEnvironmentStringsW(lpFileName, lpFullFileName, dwLength) == 0)
|
||||
if (ExpandEnvironmentStringsW(FileName, pFullFileName, dwLength) == 0)
|
||||
{
|
||||
/* We failed, bail out */
|
||||
return 0;
|
||||
@@ -1508,16 +1510,16 @@ GetExpandedFilePathName(
|
||||
/* Note that we previously skipped any potential leading backslashes */
|
||||
|
||||
/* Replace ':' by '$' in the drive letter */
|
||||
if (*lpFullFileName && lpFullFileName[1] == L':')
|
||||
lpFullFileName[1] = L'$';
|
||||
if (*pFullFileName && pFullFileName[1] == L':')
|
||||
pFullFileName[1] = L'$';
|
||||
|
||||
/* Prepend the computer name */
|
||||
MoveMemory(lpFullFileName + 2 + wcslen(ComputerName) + 1,
|
||||
lpFullFileName, dwLength * sizeof(WCHAR) - (2 + wcslen(ComputerName) + 1) * sizeof(WCHAR));
|
||||
lpFullFileName[0] = L'\\';
|
||||
lpFullFileName[1] = L'\\';
|
||||
wcsncpy(lpFullFileName + 2, ComputerName, wcslen(ComputerName));
|
||||
lpFullFileName[2 + wcslen(ComputerName)] = L'\\';
|
||||
MoveMemory(pFullFileName + 2 + wcslen(ComputerName) + 1,
|
||||
pFullFileName, dwLength * sizeof(WCHAR) - (2 + wcslen(ComputerName) + 1) * sizeof(WCHAR));
|
||||
pFullFileName[0] = L'\\';
|
||||
pFullFileName[1] = L'\\';
|
||||
wcsncpy(pFullFileName + 2, ComputerName, wcslen(ComputerName));
|
||||
pFullFileName[2 + wcslen(ComputerName)] = L'\\';
|
||||
}
|
||||
|
||||
/* Return the number of stored characters (includes NULL-terminator) */
|
||||
@@ -1525,27 +1527,38 @@ GetExpandedFilePathName(
|
||||
}
|
||||
|
||||
BOOL
|
||||
GetEventMessageFileDLL(IN LPCWSTR lpLogName,
|
||||
IN LPCWSTR SourceName,
|
||||
IN LPCWSTR EntryName,
|
||||
OUT PWCHAR lpModuleName) // TODO: Add IN DWORD BufLen
|
||||
GetEventMessageFileDLL(
|
||||
_In_ PCWSTR LogName,
|
||||
_In_ PCWSTR SourceName,
|
||||
_In_ PCWSTR EntryName,
|
||||
_Out_writes_z_(cchName) PWSTR pModuleName,
|
||||
_In_ SIZE_T cchName)
|
||||
{
|
||||
BOOL Success = FALSE;
|
||||
LONG Result;
|
||||
DWORD dwType, dwSize;
|
||||
WCHAR szModuleName[MAX_PATH];
|
||||
WCHAR szKeyName[MAX_PATH];
|
||||
PWSTR KeyPath;
|
||||
SIZE_T cbKeyPath;
|
||||
HKEY hLogKey = NULL;
|
||||
HKEY hSourceKey = NULL;
|
||||
|
||||
StringCbCopyW(szKeyName, sizeof(szKeyName), EVENTLOG_BASE_KEY);
|
||||
StringCbCatW(szKeyName, sizeof(szKeyName), lpLogName);
|
||||
if (cchName == 0)
|
||||
return FALSE;
|
||||
|
||||
Result = RegOpenKeyExW(hkMachine,
|
||||
szKeyName,
|
||||
0,
|
||||
KEY_READ,
|
||||
&hLogKey);
|
||||
cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(LogName) + 1) * sizeof(WCHAR);
|
||||
KeyPath = HeapAlloc(GetProcessHeap(), 0, cbKeyPath);
|
||||
if (!KeyPath)
|
||||
{
|
||||
ShowWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
StringCbCopyW(KeyPath, cbKeyPath, EVENTLOG_BASE_KEY);
|
||||
StringCbCatW(KeyPath, cbKeyPath, LogName);
|
||||
|
||||
Result = RegOpenKeyExW(hkMachine, KeyPath, 0, KEY_READ, &hLogKey);
|
||||
HeapFree(GetProcessHeap(), 0, KeyPath);
|
||||
if (Result != ERROR_SUCCESS)
|
||||
return FALSE;
|
||||
|
||||
@@ -1554,11 +1567,9 @@ GetEventMessageFileDLL(IN LPCWSTR lpLogName,
|
||||
0,
|
||||
KEY_QUERY_VALUE,
|
||||
&hSourceKey);
|
||||
RegCloseKey(hLogKey);
|
||||
if (Result != ERROR_SUCCESS)
|
||||
{
|
||||
RegCloseKey(hLogKey);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
dwSize = sizeof(szModuleName);
|
||||
Result = RegQueryValueExW(hSourceKey,
|
||||
@@ -1569,34 +1580,42 @@ GetEventMessageFileDLL(IN LPCWSTR lpLogName,
|
||||
&dwSize);
|
||||
if ((Result != ERROR_SUCCESS) || (dwType != REG_EXPAND_SZ && dwType != REG_SZ))
|
||||
{
|
||||
szModuleName[0] = UNICODE_NULL;
|
||||
*szModuleName = UNICODE_NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* NULL-terminate the string and expand it */
|
||||
szModuleName[dwSize / sizeof(WCHAR) - 1] = UNICODE_NULL;
|
||||
GetExpandedFilePathName(lpComputerName, szModuleName, lpModuleName, ARRAYSIZE(szModuleName));
|
||||
Success = TRUE;
|
||||
Success =
|
||||
(GetExpandedFilePathName(lpComputerName, szModuleName,
|
||||
pModuleName, cchName) != 0 && *pModuleName);
|
||||
}
|
||||
|
||||
RegCloseKey(hSourceKey);
|
||||
RegCloseKey(hLogKey);
|
||||
|
||||
return Success;
|
||||
}
|
||||
|
||||
BOOL
|
||||
GetEventCategory(IN LPCWSTR KeyName,
|
||||
IN LPCWSTR SourceName,
|
||||
IN PEVENTLOGRECORD pevlr,
|
||||
OUT PWCHAR CategoryName) // TODO: Add IN DWORD BufLen
|
||||
GetEventCategory(
|
||||
_In_ PCWSTR KeyName,
|
||||
_In_ PCWSTR SourceName,
|
||||
_In_ PEVENTLOGRECORD pevlr,
|
||||
_Out_writes_z_(cchName) PWSTR CategoryName,
|
||||
_In_ SIZE_T cchName)
|
||||
{
|
||||
BOOL Success = FALSE;
|
||||
WCHAR szMessageDLL[MAX_PATH];
|
||||
LPWSTR lpMsgBuf = NULL;
|
||||
LPWSTR lpMsgBuf;
|
||||
|
||||
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_CATEGORY_MESSAGE_FILE, szMessageDLL))
|
||||
if (cchName == 0)
|
||||
return FALSE;
|
||||
|
||||
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_CATEGORY_MESSAGE_FILE,
|
||||
szMessageDLL, _countof(szMessageDLL)))
|
||||
{
|
||||
goto Quit;
|
||||
}
|
||||
|
||||
/* Retrieve the message string without appending extra newlines */
|
||||
lpMsgBuf =
|
||||
@@ -1612,7 +1631,7 @@ GetEventCategory(IN LPCWSTR KeyName,
|
||||
TrimNulls(lpMsgBuf);
|
||||
|
||||
/* Copy the category name */
|
||||
StringCchCopyW(CategoryName, MAX_PATH, lpMsgBuf);
|
||||
StringCchCopyW(CategoryName, cchName, lpMsgBuf);
|
||||
|
||||
/* Free the buffer allocated by FormatMessage */
|
||||
LocalFree(lpMsgBuf);
|
||||
@@ -1626,7 +1645,7 @@ Quit:
|
||||
{
|
||||
if (pevlr->EventCategory != 0)
|
||||
{
|
||||
StringCchPrintfW(CategoryName, MAX_PATH, L"(%lu)", pevlr->EventCategory);
|
||||
StringCchPrintfW(CategoryName, cchName, L"(%lu)", pevlr->EventCategory);
|
||||
Success = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -1634,12 +1653,14 @@ Quit:
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
||||
BOOL // NOTE: Used by evtdetctl.c
|
||||
GetEventMessage(IN LPCWSTR KeyName,
|
||||
IN LPCWSTR SourceName,
|
||||
IN PEVENTLOGRECORD pevlr,
|
||||
OUT PWCHAR EventText) // TODO: Add IN DWORD BufLen
|
||||
// NOTE: Used by evtdetctl.c
|
||||
BOOL
|
||||
GetEventMessage(
|
||||
_In_ PCWSTR KeyName,
|
||||
_In_ PCWSTR SourceName,
|
||||
_In_ PEVENTLOGRECORD pevlr,
|
||||
_Out_writes_z_(cchText) PWSTR EventText,
|
||||
_In_ SIZE_T cchText)
|
||||
{
|
||||
BOOL Success = FALSE;
|
||||
DWORD i;
|
||||
@@ -1647,26 +1668,36 @@ GetEventMessage(IN LPCWSTR KeyName,
|
||||
WCHAR SourceModuleName[1024];
|
||||
WCHAR ParameterModuleName[1024];
|
||||
BOOL IsParamModNameCached = FALSE;
|
||||
LPWSTR lpMsgBuf = NULL;
|
||||
LPWSTR lpMsgBuf;
|
||||
LPWSTR szStringArray, szMessage;
|
||||
LPWSTR *szArguments;
|
||||
|
||||
if (cchText == 0)
|
||||
return FALSE;
|
||||
|
||||
/* Get the event string array */
|
||||
szStringArray = (LPWSTR)((LPBYTE)pevlr + pevlr->StringOffset);
|
||||
|
||||
/* NOTE: GetEventMessageFileDLL can return a comma-separated list of DLLs */
|
||||
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_MESSAGE_FILE, SourceModuleName))
|
||||
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_MESSAGE_FILE,
|
||||
SourceModuleName, _countof(SourceModuleName)))
|
||||
{
|
||||
goto Quit;
|
||||
}
|
||||
|
||||
/* Allocate space for insertion strings */
|
||||
szArguments = HeapAlloc(GetProcessHeap(), 0, pevlr->NumStrings * sizeof(LPVOID));
|
||||
if (!szArguments)
|
||||
goto Quit;
|
||||
|
||||
// TODO: Revisit this whole IsParamModNameCached later,
|
||||
// see commits c1ecc98f60 (r71368) and d5ba2a3784 (r71958).
|
||||
*ParameterModuleName = UNICODE_NULL; // TEMP fix in case GetEventMessageFileDLL fails.
|
||||
if (!IsParamModNameCached)
|
||||
{
|
||||
/* Now that the parameter file list is loaded, no need to reload it at the next run! */
|
||||
IsParamModNameCached = GetEventMessageFileDLL(KeyName, SourceName, EVENT_PARAMETER_MESSAGE_FILE, ParameterModuleName);
|
||||
IsParamModNameCached = GetEventMessageFileDLL(KeyName, SourceName, EVENT_PARAMETER_MESSAGE_FILE,
|
||||
ParameterModuleName, _countof(ParameterModuleName));
|
||||
// FIXME: If the string loading failed the first time, no need to retry it just after???
|
||||
}
|
||||
|
||||
@@ -1679,7 +1710,7 @@ GetEventMessage(IN LPCWSTR KeyName,
|
||||
/*
|
||||
* HACK:
|
||||
* We do some hackish preformatting of the cached event strings...
|
||||
* That's because after we pass the string to FormatMessage
|
||||
* That's because below, we pass the string to FormatMessage
|
||||
* (via GetMessageStringFromDllList) with the FORMAT_MESSAGE_ARGUMENT_ARRAY
|
||||
* flag, instead of ignoring the insertion parameters and do the formatting
|
||||
* by ourselves. Therefore, the resulting string should have the parameter
|
||||
@@ -1737,7 +1768,7 @@ GetEventMessage(IN LPCWSTR KeyName,
|
||||
}
|
||||
|
||||
/* Copy the event text */
|
||||
StringCchCopyW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, lpMsgBuf);
|
||||
StringCchCopyW(EventText, cchText, lpMsgBuf);
|
||||
|
||||
/* Free the buffer allocated by FormatMessage */
|
||||
LocalFree(lpMsgBuf);
|
||||
@@ -1748,17 +1779,31 @@ GetEventMessage(IN LPCWSTR KeyName,
|
||||
Quit:
|
||||
if (!Success)
|
||||
{
|
||||
/* Get a read-only pointer to the "event-not-found" string */
|
||||
lpMsgBuf = HeapAlloc(GetProcessHeap(), 0, EVENT_MESSAGE_EVENTTEXT_BUFFER * sizeof(WCHAR));
|
||||
LoadStringW(hInst, IDS_EVENTSTRINGIDNOTFOUND, lpMsgBuf, EVENT_MESSAGE_EVENTTEXT_BUFFER);
|
||||
StringCchPrintfW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, lpMsgBuf, (pevlr->EventID & 0xFFFF), SourceName);
|
||||
/* Get a read-only pointer to the "Event-Not-Found" string */
|
||||
SIZE_T cchResLen =
|
||||
LoadStringW(hInst, IDS_EVENTSTRINGIDNOTFOUND, (PWSTR)&szMessage, 0);
|
||||
|
||||
lpMsgBuf = HeapAlloc(GetProcessHeap(), 0, (cchResLen + 1) * sizeof(WCHAR));
|
||||
if (lpMsgBuf)
|
||||
{
|
||||
StringCchCopyNW(lpMsgBuf, cchResLen + 1, szMessage, cchResLen);
|
||||
szMessage = lpMsgBuf;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Use a hardcoded format string */
|
||||
szMessage = L"Event ID ( %lu ), Source ( %s )\n\n";
|
||||
}
|
||||
StringCchPrintfW(EventText, cchText, szMessage, (pevlr->EventID & 0xFFFF), SourceName);
|
||||
if (lpMsgBuf)
|
||||
HeapFree(GetProcessHeap(), 0, lpMsgBuf);
|
||||
|
||||
/* Append the strings */
|
||||
szMessage = szStringArray;
|
||||
for (i = 0; i < pevlr->NumStrings; i++)
|
||||
{
|
||||
StringCchCatW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, szMessage);
|
||||
StringCchCatW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, L"\n");
|
||||
StringCchCatW(EventText, cchText, szMessage);
|
||||
StringCchCatW(EventText, cchText, L"\n");
|
||||
szMessage += wcslen(szMessage) + 1;
|
||||
}
|
||||
}
|
||||
@@ -1767,49 +1812,56 @@ Quit:
|
||||
}
|
||||
|
||||
VOID
|
||||
GetEventType(IN WORD dwEventType,
|
||||
OUT PWCHAR eventTypeText) // TODO: Add IN DWORD BufLen
|
||||
GetEventType(
|
||||
_In_ WORD dwEventType,
|
||||
_Out_writes_z_(cchText) PWSTR pszEventType,
|
||||
_In_ SIZE_T cchText)
|
||||
{
|
||||
switch (dwEventType)
|
||||
{
|
||||
case EVENTLOG_ERROR_TYPE:
|
||||
LoadStringW(hInst, IDS_EVENTLOG_ERROR_TYPE, eventTypeText, MAX_LOADSTRING);
|
||||
LoadStringW(hInst, IDS_EVENTLOG_ERROR_TYPE, pszEventType, cchText);
|
||||
break;
|
||||
case EVENTLOG_WARNING_TYPE:
|
||||
LoadStringW(hInst, IDS_EVENTLOG_WARNING_TYPE, eventTypeText, MAX_LOADSTRING);
|
||||
LoadStringW(hInst, IDS_EVENTLOG_WARNING_TYPE, pszEventType, cchText);
|
||||
break;
|
||||
case EVENTLOG_INFORMATION_TYPE:
|
||||
LoadStringW(hInst, IDS_EVENTLOG_INFORMATION_TYPE, eventTypeText, MAX_LOADSTRING);
|
||||
LoadStringW(hInst, IDS_EVENTLOG_INFORMATION_TYPE, pszEventType, cchText);
|
||||
break;
|
||||
case EVENTLOG_SUCCESS:
|
||||
LoadStringW(hInst, IDS_EVENTLOG_SUCCESS, eventTypeText, MAX_LOADSTRING);
|
||||
LoadStringW(hInst, IDS_EVENTLOG_SUCCESS, pszEventType, cchText);
|
||||
break;
|
||||
case EVENTLOG_AUDIT_SUCCESS:
|
||||
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_SUCCESS, eventTypeText, MAX_LOADSTRING);
|
||||
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_SUCCESS, pszEventType, cchText);
|
||||
break;
|
||||
case EVENTLOG_AUDIT_FAILURE:
|
||||
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_FAILURE, eventTypeText, MAX_LOADSTRING);
|
||||
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_FAILURE, pszEventType, cchText);
|
||||
break;
|
||||
default:
|
||||
LoadStringW(hInst, IDS_EVENTLOG_UNKNOWN_TYPE, eventTypeText, MAX_LOADSTRING);
|
||||
LoadStringW(hInst, IDS_EVENTLOG_UNKNOWN_TYPE, pszEventType, cchText);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL
|
||||
GetEventUserName(IN PEVENTLOGRECORD pelr,
|
||||
IN OUT PSID *pLastSid,
|
||||
OUT PWCHAR pszUser) // TODO: Add IN DWORD BufLen
|
||||
GetEventUserName(
|
||||
_In_ PEVENTLOGRECORD pelr,
|
||||
_Inout_ PSID *pLastSid,
|
||||
_Out_writes_z_(cchUser) PWSTR pszUser,
|
||||
_In_ SIZE_T cchUser)
|
||||
{
|
||||
PSID pCurrentSid;
|
||||
PWSTR StringSid;
|
||||
WCHAR szName[1024];
|
||||
WCHAR szDomain[1024];
|
||||
SID_NAME_USE peUse;
|
||||
DWORD cchName = ARRAYSIZE(szName);
|
||||
DWORD cchDomain = ARRAYSIZE(szDomain);
|
||||
DWORD cchName = _countof(szName);
|
||||
DWORD cchDomain = _countof(szDomain);
|
||||
BOOL Success = FALSE;
|
||||
|
||||
if (cchUser == 0)
|
||||
return FALSE;
|
||||
|
||||
/* Point to the SID */
|
||||
pCurrentSid = (PSID)((LPBYTE)pelr + pelr->UserSidOffset);
|
||||
|
||||
@@ -1840,15 +1892,15 @@ GetEventUserName(IN PEVENTLOGRECORD pelr,
|
||||
&cchDomain,
|
||||
&peUse))
|
||||
{
|
||||
StringCchCopyW(pszUser, MAX_PATH, szName);
|
||||
StringCchCopyW(pszUser, cchUser, szName);
|
||||
Success = TRUE;
|
||||
}
|
||||
else if (ConvertSidToStringSidW(pCurrentSid, &StringSid))
|
||||
{
|
||||
/* Copy the string only if the user-provided buffer is big enough */
|
||||
if (wcslen(StringSid) + 1 <= MAX_PATH) // + 1 for NULL-terminator
|
||||
if (wcslen(StringSid) + 1 <= cchUser) // + 1 for NULL-terminator
|
||||
{
|
||||
StringCchCopyW(pszUser, MAX_PATH, StringSid);
|
||||
StringCchCopyW(pszUser, cchUser, StringSid);
|
||||
Success = TRUE;
|
||||
}
|
||||
else
|
||||
@@ -1978,7 +2030,6 @@ EnumEventsThread(IN LPVOID lpParameter)
|
||||
BOOL bResult = TRUE; /* Read succeeded */
|
||||
HANDLE hProcessHeap = GetProcessHeap();
|
||||
PSID pLastSid = NULL;
|
||||
INT nItems;
|
||||
|
||||
UINT uStep = 0, uStepAt = 0, uPos = 0;
|
||||
|
||||
@@ -1998,7 +2049,8 @@ EnumEventsThread(IN LPVOID lpParameter)
|
||||
SYSTEMTIME time;
|
||||
LVITEMW lviEventItem;
|
||||
|
||||
EnableEventDetailsButtons(hwndEventDetails, FALSE);
|
||||
/* Disable the Previous/Next buttons */
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, FALSE, (LPARAM)-1);
|
||||
|
||||
/* Save the current event log filter globally */
|
||||
EventLogFilter_AddRef(EventLogFilter);
|
||||
@@ -2190,15 +2242,19 @@ EnumEventsThread(IN LPVOID lpParameter)
|
||||
GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &time, NULL, szLocalTime, ARRAYSIZE(szLocalTime));
|
||||
|
||||
/* Get the username that generated the event, and filter it */
|
||||
lpszUsername = GetEventUserName(pEvlrTmp, &pLastSid, szUsername) ? szUsername : szNoUsername;
|
||||
lpszUsername = GetEventUserName(pEvlrTmp, &pLastSid,
|
||||
szUsername, _countof(szUsername))
|
||||
? szUsername : szNoUsername;
|
||||
|
||||
if (!FilterByString(EventLogFilter->Users, lpszUsername))
|
||||
goto SkipEvent;
|
||||
|
||||
// TODO: Filter by event ID and category
|
||||
GetEventType(pEvlrTmp->EventType, szEventTypeText);
|
||||
GetEventType(pEvlrTmp->EventType, szEventTypeText, _countof(szEventTypeText));
|
||||
|
||||
lpszCategoryName = GetEventCategory(EventLog->LogName, lpszSourceName, pEvlrTmp, szCategory) ? szCategory : szNoCategory;
|
||||
lpszCategoryName = GetEventCategory(EventLog->LogName, lpszSourceName, pEvlrTmp,
|
||||
szCategory, _countof(szCategory))
|
||||
? szCategory : szNoCategory;
|
||||
|
||||
StringCbPrintfW(szEventID, sizeof(szEventID), L"%u", (pEvlrTmp->EventID & 0xFFFF));
|
||||
StringCbPrintfW(szCategoryID, sizeof(szCategoryID), L"%u", pEvlrTmp->EventCategory);
|
||||
@@ -2265,9 +2321,6 @@ Quit:
|
||||
/* All events loaded */
|
||||
|
||||
Cleanup:
|
||||
nItems = ListView_GetItemCount(hwndListView);
|
||||
EnableEventDetailsButtons(hwndEventDetails, (nItems > 0));
|
||||
|
||||
ShowWindow(hwndStatusProgress, SW_HIDE);
|
||||
SendMessageW(hwndListView, LVM_PROGRESS, 0, FALSE);
|
||||
|
||||
@@ -2298,6 +2351,11 @@ Cleanup:
|
||||
/* Resume list view redraw */
|
||||
SendMessageW(hwndListView, WM_SETREDRAW, TRUE, 0);
|
||||
|
||||
/* Re-enable the Previous/Next buttons, keeping the current event details
|
||||
* displayed, if any. Don't auto-select the first list item but wait for
|
||||
* the user to do it. */
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, FALSE, 0);
|
||||
|
||||
EventLogFilter_Release(EventLogFilter);
|
||||
|
||||
CloseHandle(hStopEnumEvent);
|
||||
@@ -2710,14 +2768,16 @@ MyRegisterClass(HINSTANCE hInstance)
|
||||
|
||||
|
||||
BOOL
|
||||
GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
|
||||
OUT PWCHAR lpModuleName, // TODO: Add IN DWORD BufLen
|
||||
OUT PDWORD pdwMessageID)
|
||||
GetDisplayNameFileAndID(
|
||||
_In_ PCWSTR LogName,
|
||||
_Out_writes_z_(cchName) PWSTR pModuleName,
|
||||
_In_ SIZE_T cchName,
|
||||
_Out_ PDWORD pdwMessageID)
|
||||
{
|
||||
BOOL Success = FALSE;
|
||||
LONG Result;
|
||||
HKEY hLogKey;
|
||||
WCHAR *KeyPath;
|
||||
PWSTR KeyPath;
|
||||
SIZE_T cbKeyPath;
|
||||
DWORD dwType, cbData;
|
||||
DWORD dwMessageID = 0;
|
||||
@@ -2726,7 +2786,10 @@ GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
|
||||
/* Use a default value for the message ID */
|
||||
*pdwMessageID = 0;
|
||||
|
||||
cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(lpLogName) + 1) * sizeof(WCHAR);
|
||||
if (cchName == 0)
|
||||
return FALSE;
|
||||
|
||||
cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(LogName) + 1) * sizeof(WCHAR);
|
||||
KeyPath = HeapAlloc(GetProcessHeap(), 0, cbKeyPath);
|
||||
if (!KeyPath)
|
||||
{
|
||||
@@ -2735,7 +2798,7 @@ GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
|
||||
}
|
||||
|
||||
StringCbCopyW(KeyPath, cbKeyPath, EVENTLOG_BASE_KEY);
|
||||
StringCbCatW(KeyPath, cbKeyPath, lpLogName);
|
||||
StringCbCatW(KeyPath, cbKeyPath, LogName);
|
||||
|
||||
Result = RegOpenKeyExW(hkMachine, KeyPath, 0, KEY_QUERY_VALUE, &hLogKey);
|
||||
HeapFree(GetProcessHeap(), 0, KeyPath);
|
||||
@@ -2754,14 +2817,15 @@ GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
|
||||
&cbData);
|
||||
if ((Result != ERROR_SUCCESS) || (dwType != REG_EXPAND_SZ && dwType != REG_SZ))
|
||||
{
|
||||
szModuleName[0] = UNICODE_NULL;
|
||||
*szModuleName = UNICODE_NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* NULL-terminate the string and expand it */
|
||||
szModuleName[cbData / sizeof(WCHAR) - 1] = UNICODE_NULL;
|
||||
GetExpandedFilePathName(lpComputerName, szModuleName, lpModuleName, ARRAYSIZE(szModuleName));
|
||||
Success = TRUE;
|
||||
Success =
|
||||
(GetExpandedFilePathName(lpComputerName, szModuleName,
|
||||
pModuleName, cchName) != 0 && *pModuleName);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2938,8 +3002,8 @@ BuildLogListAndFilterList(IN LPCWSTR lpComputerName)
|
||||
/* Get the display name for the event log */
|
||||
lpDisplayName = NULL;
|
||||
|
||||
ZeroMemory(szModuleName, sizeof(szModuleName));
|
||||
if (GetDisplayNameFileAndID(LogName, szModuleName, &dwMessageID))
|
||||
*szModuleName = UNICODE_NULL;
|
||||
if (GetDisplayNameFileAndID(LogName, szModuleName, _countof(szModuleName), &dwMessageID))
|
||||
{
|
||||
/* Retrieve the message string without appending extra newlines */
|
||||
lpDisplayName =
|
||||
@@ -3342,7 +3406,7 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
MB_OK | MB_ICONERROR);
|
||||
break;
|
||||
}
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, 0, (LPARAM)pnmv->iItem);
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, TRUE, (LPARAM)pnmv->iItem);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3855,9 +3919,9 @@ InitPropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
|
||||
LPWSTR FileName;
|
||||
|
||||
HKEY hLogKey;
|
||||
WCHAR *KeyPath;
|
||||
DWORD cbData;
|
||||
PWSTR KeyPath;
|
||||
SIZE_T cbKeyPath;
|
||||
DWORD cbData;
|
||||
|
||||
if (EventLog->Permanent)
|
||||
{
|
||||
@@ -3927,7 +3991,7 @@ Quit:
|
||||
if (FileName && *FileName)
|
||||
{
|
||||
/* Expand the file name. If the log file is on a remote computer, retrieve the network share form of the file name. */
|
||||
GetExpandedFilePathName(EventLog->ComputerName, FileName, wszBuf, ARRAYSIZE(wszBuf));
|
||||
GetExpandedFilePathName(EventLog->ComputerName, FileName, wszBuf, _countof(wszBuf));
|
||||
FileName = wszBuf;
|
||||
}
|
||||
else
|
||||
@@ -4038,7 +4102,7 @@ SavePropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
|
||||
LONG Result;
|
||||
DWORD dwMaxSize = 0, dwRetention = 0;
|
||||
HKEY hLogKey;
|
||||
WCHAR *KeyPath;
|
||||
PWSTR KeyPath;
|
||||
SIZE_T cbKeyPath;
|
||||
|
||||
if (!EventLog->Permanent)
|
||||
@@ -4347,9 +4411,9 @@ EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
cxOld = rcWnd.right - rcWnd.left;
|
||||
cyOld = rcWnd.bottom - rcWnd.top;
|
||||
|
||||
/* Show event info in dialog control */
|
||||
iEventItem = (lParam != 0 ? ((PEVENTDETAIL_INFO)lParam)->iEventItem : 0);
|
||||
SendMessageW(hWndDetailsCtrl, EVT_DISPLAY, 0, (LPARAM)iEventItem);
|
||||
/* Display the event info in the dialog */
|
||||
iEventItem = (lParam != 0 ? ((PEVENTDETAIL_INFO)lParam)->iEventItem : -1);
|
||||
SendMessageW(hWndDetailsCtrl, EVT_DISPLAY, TRUE, (LPARAM)iEventItem);
|
||||
|
||||
// SetWindowPos(hWndDetailsCtrl, NULL,
|
||||
// 0, 0,
|
||||
|
@@ -4,7 +4,7 @@
|
||||
* PURPOSE: Event Log Viewer header.
|
||||
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
|
||||
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
|
||||
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
#ifndef _EVENTVWR_PCH_
|
||||
|
@@ -4,7 +4,7 @@
|
||||
* PURPOSE: Event Details Control.
|
||||
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
|
||||
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
|
||||
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
#include "eventvwr.h"
|
||||
@@ -12,19 +12,36 @@
|
||||
|
||||
#include <shellapi.h>
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* ReactOS-only feature:
|
||||
* Enable or disable support for copying event info text using space padding
|
||||
* between header titles and data, when pressing the SHIFT key while clicking
|
||||
* on the "Copy" button, instead of using TABs as separators.
|
||||
*
|
||||
* @see CopyEventEntry().
|
||||
**/
|
||||
#define COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
|
||||
// FIXME:
|
||||
#define EVENT_MESSAGE_EVENTTEXT_BUFFER (1024*10)
|
||||
extern WCHAR szTitle[];
|
||||
extern HWND hwndListView;
|
||||
|
||||
extern BOOL
|
||||
GetEventMessage(IN LPCWSTR KeyName,
|
||||
IN LPCWSTR SourceName,
|
||||
IN PEVENTLOGRECORD pevlr,
|
||||
OUT PWCHAR EventText);
|
||||
GetEventMessage(
|
||||
_In_ PCWSTR KeyName,
|
||||
_In_ PCWSTR SourceName,
|
||||
_In_ PEVENTLOGRECORD pevlr,
|
||||
_Out_writes_z_(cchText) PWSTR EventText,
|
||||
_In_ SIZE_T cchText);
|
||||
|
||||
|
||||
typedef struct _DETAILDATA
|
||||
{
|
||||
/* The event record being displayed */
|
||||
PEVENTLOGRECORD pevlr;
|
||||
|
||||
/* Data initialized from EVENTDETAIL_INFO */
|
||||
PEVENTLOGFILTER EventLogFilter;
|
||||
INT iEventItem;
|
||||
@@ -38,60 +55,71 @@ typedef struct _DETAILDATA
|
||||
} DETAILDATA, *PDETAILDATA;
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
DisplayEventData(
|
||||
_In_ HWND hDlg,
|
||||
_In_ PDETAILDATA pDetailData);
|
||||
|
||||
static
|
||||
VOID
|
||||
DisplayEvent(
|
||||
_In_ HWND hDlg,
|
||||
_In_ PDETAILDATA pDetailData)
|
||||
{
|
||||
/* Mapping of ListView column index to corresponding dialog control ID */
|
||||
static const WORD lvColsToDlgItemIDs[] =
|
||||
{
|
||||
IDC_EVENTTYPESTATIC, IDC_EVENTDATESTATIC, IDC_EVENTTIMESTATIC,
|
||||
IDC_EVENTSOURCESTATIC, IDC_EVENTCATEGORYSTATIC, IDC_EVENTIDSTATIC,
|
||||
IDC_EVENTUSERSTATIC, IDC_EVENTCOMPUTERSTATIC,
|
||||
};
|
||||
|
||||
PEVENTLOGRECORD pevlr;
|
||||
PEVENTLOGFILTER EventLogFilter = pDetailData->EventLogFilter;
|
||||
INT iItem = pDetailData->iEventItem;
|
||||
LVITEMW li;
|
||||
PEVENTLOGRECORD pevlr;
|
||||
USHORT i;
|
||||
BOOL bEventData;
|
||||
|
||||
WCHAR szEventType[MAX_PATH];
|
||||
WCHAR szTime[MAX_PATH];
|
||||
WCHAR szDate[MAX_PATH];
|
||||
WCHAR szUser[MAX_PATH];
|
||||
WCHAR szComputer[MAX_PATH];
|
||||
WCHAR szSource[MAX_PATH];
|
||||
WCHAR szCategory[MAX_PATH];
|
||||
WCHAR szEventID[MAX_PATH];
|
||||
WCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER];
|
||||
|
||||
/* Retrieve and cache the pointer to the selected event item */
|
||||
LVITEMW li;
|
||||
li.mask = LVIF_PARAM;
|
||||
li.iItem = iItem;
|
||||
li.iSubItem = 0;
|
||||
ListView_GetItem(hwndListView, &li);
|
||||
pevlr = pDetailData->pevlr = (PEVENTLOGRECORD)li.lParam;
|
||||
|
||||
pevlr = (PEVENTLOGRECORD)li.lParam;
|
||||
|
||||
ListView_GetItemText(hwndListView, iItem, 0, szEventType, ARRAYSIZE(szEventType));
|
||||
ListView_GetItemText(hwndListView, iItem, 1, szDate, ARRAYSIZE(szDate));
|
||||
ListView_GetItemText(hwndListView, iItem, 2, szTime, ARRAYSIZE(szTime));
|
||||
ListView_GetItemText(hwndListView, iItem, 3, szSource, ARRAYSIZE(szSource));
|
||||
ListView_GetItemText(hwndListView, iItem, 4, szCategory, ARRAYSIZE(szCategory));
|
||||
ListView_GetItemText(hwndListView, iItem, 5, szEventID, ARRAYSIZE(szEventID));
|
||||
ListView_GetItemText(hwndListView, iItem, 6, szUser, ARRAYSIZE(szUser));
|
||||
ListView_GetItemText(hwndListView, iItem, 7, szComputer, ARRAYSIZE(szComputer));
|
||||
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, szDate);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, szTime);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, szUser);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, szSource);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, szComputer);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, szCategory);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, szEventID);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, szEventType);
|
||||
for (i = 0; i < _countof(lvColsToDlgItemIDs); ++i)
|
||||
{
|
||||
PWSTR pszBuffer = szEventText;
|
||||
if (lvColsToDlgItemIDs[i] == IDC_EVENTSOURCESTATIC)
|
||||
{
|
||||
/* Use a separate buffer to store the source; used below */
|
||||
pszBuffer = szSource;
|
||||
ListView_GetItemText(hwndListView, iItem, i,
|
||||
szSource, _countof(szSource));
|
||||
}
|
||||
else
|
||||
{
|
||||
ListView_GetItemText(hwndListView, iItem, i,
|
||||
szEventText, _countof(szEventText));
|
||||
}
|
||||
SetDlgItemTextW(hDlg, lvColsToDlgItemIDs[i], pszBuffer);
|
||||
}
|
||||
|
||||
bEventData = (pevlr->DataLength > 0);
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, bEventData);
|
||||
EnableDlgItem(hDlg, IDC_WORDRADIO, bEventData);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, bEventData);
|
||||
|
||||
// FIXME: At the moment we support only one event log in the filter
|
||||
GetEventMessage(EventLogFilter->EventLogs[0]->LogName, szSource, pevlr, szEventText);
|
||||
GetEventMessage(EventLogFilter->EventLogs[0]->LogName, szSource, pevlr,
|
||||
szEventText, _countof(szEventText));
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, szEventText);
|
||||
|
||||
DisplayEventData(hDlg, pDetailData);
|
||||
}
|
||||
|
||||
static
|
||||
@@ -179,22 +207,17 @@ DisplayEventData(
|
||||
_In_ HWND hDlg,
|
||||
_In_ PDETAILDATA pDetailData)
|
||||
{
|
||||
PEVENTLOGRECORD pevlr = pDetailData->pevlr;
|
||||
BOOL bDisplayWords = pDetailData->bDisplayWords;
|
||||
INT iItem = pDetailData->iEventItem;
|
||||
LVITEMW li;
|
||||
PEVENTLOGRECORD pevlr;
|
||||
|
||||
LPBYTE pData;
|
||||
UINT i, uOffset;
|
||||
UINT uBufferSize, uLineLength;
|
||||
PWCHAR pTextBuffer, pLine;
|
||||
|
||||
li.mask = LVIF_PARAM;
|
||||
li.iItem = iItem;
|
||||
li.iSubItem = 0;
|
||||
ListView_GetItem(hwndListView, &li);
|
||||
if (!pevlr)
|
||||
return;
|
||||
|
||||
pevlr = (PEVENTLOGRECORD)li.lParam;
|
||||
if (pevlr->DataLength == 0)
|
||||
{
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
|
||||
@@ -241,83 +264,291 @@ DisplayEventData(
|
||||
HeapFree(GetProcessHeap(), 0, pTextBuffer);
|
||||
}
|
||||
|
||||
static
|
||||
HFONT
|
||||
CreateMonospaceFont(VOID)
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
|
||||
static inline
|
||||
int my_cType3ToWidth(WORD wType, wchar_t ucs)
|
||||
{
|
||||
LOGFONTW tmpFont = {0};
|
||||
HFONT hFont;
|
||||
HDC hDC;
|
||||
|
||||
hDC = GetDC(NULL);
|
||||
|
||||
tmpFont.lfHeight = -MulDiv(8, GetDeviceCaps(hDC, LOGPIXELSY), 72);
|
||||
tmpFont.lfWeight = FW_NORMAL;
|
||||
wcscpy(tmpFont.lfFaceName, L"Courier New");
|
||||
|
||||
hFont = CreateFontIndirectW(&tmpFont);
|
||||
|
||||
ReleaseDC(NULL, hDC);
|
||||
|
||||
return hFont;
|
||||
if (wType & C3_HALFWIDTH)
|
||||
return 1;
|
||||
else if (wType & (C3_FULLWIDTH | C3_KATAKANA | C3_HIRAGANA | C3_IDEOGRAPH))
|
||||
return 2;
|
||||
/*
|
||||
* HACK for Wide Hangul characters not recognized by GetStringTypeW(CT_CTYPE3)
|
||||
* See:
|
||||
* https://unicode.org/reports/tr11/
|
||||
* https://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt
|
||||
* https://www.unicode.org/Public/UCD/latest/ucd/extracted/DerivedEastAsianWidth.txt
|
||||
* (or the /Public/UNIDATA/ files)
|
||||
*/
|
||||
else if ((ucs >= 0x1100 && ucs <= 0x115F) || (ucs >= 0x302E && ucs <= 0x302F) ||
|
||||
(ucs >= 0x3131 && ucs <= 0x318E) || (ucs >= 0x3260 && ucs <= 0x327F) ||
|
||||
(ucs >= 0xA960 && ucs <= 0xA97C) || (ucs >= 0xAC00 && ucs <= 0xD7A3))
|
||||
return 2;
|
||||
else if (wType & (C3_SYMBOL | C3_KASHIDA | C3_LEXICAL | C3_ALPHA))
|
||||
return 1;
|
||||
else // if (wType & (C3_NONSPACING | C3_DIACRITIC | C3_VOWELMARK | C3_HIGHSURROGATE | C3_LOWSURROGATE | C3_NOTAPPLICABLE))
|
||||
return 0;
|
||||
}
|
||||
|
||||
int my_wcwidth(wchar_t ucs)
|
||||
{
|
||||
WORD wType = 0;
|
||||
GetStringTypeW(CT_CTYPE3, &ucs, sizeof(ucs)/sizeof(WCHAR), &wType);
|
||||
return my_cType3ToWidth(wType, ucs);
|
||||
}
|
||||
|
||||
int my_wcswidth(const wchar_t *pwcs, size_t n)
|
||||
{
|
||||
int width = 0;
|
||||
PWORD pwType, pwt;
|
||||
|
||||
pwType = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, n * sizeof(WORD));
|
||||
if (!pwType)
|
||||
return 0;
|
||||
if (!GetStringTypeW(CT_CTYPE3, pwcs, n, pwType))
|
||||
goto Quit;
|
||||
|
||||
for (pwt = pwType; n-- > 0; ++pwt, ++pwcs)
|
||||
{
|
||||
width += my_cType3ToWidth(*pwt, *pwcs);
|
||||
}
|
||||
Quit:
|
||||
HeapFree(GetProcessHeap(), 0, pwType);
|
||||
return width;
|
||||
}
|
||||
|
||||
#endif // COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Retrieves the already-gathered event information, structure it in
|
||||
* text format and copy it into the clipboard for user consumption.
|
||||
*
|
||||
* The copied event information has the following text format, where
|
||||
* each text line ends with CR-LF newlines:
|
||||
* ```
|
||||
* Event Type: <event_type>\r\n
|
||||
* Event Source: <event_source>\r\n
|
||||
* Event Category: <event_cat>\r\n
|
||||
* Event ID: <event_id>\r\n
|
||||
* Date: <event_date>\r\n
|
||||
* Time: <event_time>\r\n
|
||||
* User: <event_user>\r\n
|
||||
* Computer: <event_computer>\r\n
|
||||
* Description:\r\n
|
||||
* <event_description>\r\n
|
||||
* Data:\r\n
|
||||
* <event...
|
||||
* ...data...
|
||||
* ...if any>\r\n
|
||||
* ```
|
||||
*
|
||||
* For the single-line fields, the spacing between the header title and
|
||||
* information is either a TAB (default), to facilitate data import in
|
||||
* spreadsheet programs, or space-padding (when the user presses the
|
||||
* SHIFT key while copying the data) to prettify information display.
|
||||
* (This latter functionality is supported only if the program is compiled
|
||||
* with the @b COPY_EVTTEXT_SPACE_PADDING_MODE define.)
|
||||
**/
|
||||
static
|
||||
VOID
|
||||
CopyEventEntry(HWND hWnd)
|
||||
CopyEventEntry(
|
||||
_In_ HWND hWnd)
|
||||
{
|
||||
WCHAR tmpHeader[512];
|
||||
WCHAR szEventType[MAX_PATH];
|
||||
WCHAR szSource[MAX_PATH];
|
||||
WCHAR szCategory[MAX_PATH];
|
||||
WCHAR szEventID[MAX_PATH];
|
||||
WCHAR szDate[MAX_PATH];
|
||||
WCHAR szTime[MAX_PATH];
|
||||
WCHAR szUser[MAX_PATH];
|
||||
WCHAR szComputer[MAX_PATH];
|
||||
WCHAR evtDesc[EVENT_MESSAGE_EVENTTEXT_BUFFER];
|
||||
ULONG size = 0;
|
||||
LPWSTR output;
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
static const LONG nTabWidth = 4;
|
||||
#endif
|
||||
static const WCHAR szCRLF[] = L"\r\n";
|
||||
struct
|
||||
{
|
||||
WORD uHdrID; // Header string resource ID.
|
||||
WORD nDlgItemID; // Dialog control ID containing the corresponding info.
|
||||
WORD bSameLine : 1; // Info follows header on same line (TRUE) or not (FALSE).
|
||||
WORD bOptional : 1; // Omit if info is empty (TRUE) or keep it (FALSE).
|
||||
PCWCH pchHdrText; // Pointer to header string resource.
|
||||
SIZE_T cchHdrLen; // Header string length (number of characters).
|
||||
SIZE_T cchInfoLen; // Info string length (number of characters).
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
UINT nHdrWidth; // Display width of the header string.
|
||||
UINT nSpacesPad; // Padding after header in number of spaces.
|
||||
#endif
|
||||
} CopyData[] =
|
||||
{
|
||||
{IDS_COPY_EVTTYPE, IDC_EVENTTYPESTATIC , TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTSRC , IDC_EVENTSOURCESTATIC , TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTCAT , IDC_EVENTCATEGORYSTATIC, TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTID , IDC_EVENTIDSTATIC , TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTDATE, IDC_EVENTDATESTATIC , TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTTIME, IDC_EVENTTIMESTATIC , TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTUSER, IDC_EVENTUSERSTATIC , TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTCOMP, IDC_EVENTCOMPUTERSTATIC, TRUE , FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTTEXT, IDC_EVENTTEXTEDIT , FALSE, FALSE, NULL, 0, 0},
|
||||
{IDS_COPY_EVTDATA, IDC_EVENTDATAEDIT , FALSE, TRUE , NULL, 0, 0},
|
||||
};
|
||||
USHORT i;
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
BOOL bUsePad; // Use space padding (TRUE) or not (FALSE, default).
|
||||
UINT nMaxHdrWidth = 0;
|
||||
#endif
|
||||
SIZE_T size = 0;
|
||||
PWSTR output;
|
||||
PWSTR pszDestEnd;
|
||||
size_t cchRemaining;
|
||||
HGLOBAL hMem;
|
||||
|
||||
/* Try to open the clipboard */
|
||||
if (!OpenClipboard(hWnd))
|
||||
return;
|
||||
|
||||
/* Get the formatted text needed to place the content into */
|
||||
size += LoadStringW(hInst, IDS_COPY, tmpHeader, ARRAYSIZE(tmpHeader));
|
||||
|
||||
/* Grab all the information and get it ready for the clipboard */
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTTYPESTATIC, szEventType, ARRAYSIZE(szEventType));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTSOURCESTATIC, szSource, ARRAYSIZE(szSource));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTCATEGORYSTATIC, szCategory, ARRAYSIZE(szCategory));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTIDSTATIC, szEventID, ARRAYSIZE(szEventID));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTDATESTATIC, szDate, ARRAYSIZE(szDate));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTTIMESTATIC, szTime, ARRAYSIZE(szTime));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTUSERSTATIC, szUser, ARRAYSIZE(szUser));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTCOMPUTERSTATIC, szComputer, ARRAYSIZE(szComputer));
|
||||
size += GetDlgItemTextW(hWnd, IDC_EVENTTEXTEDIT, evtDesc, ARRAYSIZE(evtDesc));
|
||||
|
||||
size++; /* Null-termination */
|
||||
size *= sizeof(WCHAR);
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
/* Use space padding only if the user presses SHIFT */
|
||||
bUsePad = !!(GetKeyState(VK_SHIFT) & 0x8000);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Consolidate the information into one big piece and
|
||||
* sort out the memory needed to write to the clipboard.
|
||||
* Grab all the information and get it ready for the clipboard.
|
||||
*/
|
||||
hMem = GlobalAlloc(GMEM_MOVEABLE, size);
|
||||
if (hMem == NULL) goto Quit;
|
||||
|
||||
/* Calculate the necessary string buffer size */
|
||||
for (i = 0; i < _countof(CopyData); ++i)
|
||||
{
|
||||
/* Retrieve the event info string length (without NUL terminator) */
|
||||
CopyData[i].cchInfoLen = GetWindowTextLengthW(GetDlgItem(hWnd, CopyData[i].nDlgItemID));
|
||||
|
||||
/* If no data is present and is optional, ignore it */
|
||||
if ((CopyData[i].cchInfoLen == 0) && CopyData[i].bOptional)
|
||||
continue;
|
||||
|
||||
/* Load the header string from resources */
|
||||
CopyData[i].cchHdrLen = LoadStringW(hInst, CopyData[i].uHdrID, (PWSTR)&CopyData[i].pchHdrText, 0);
|
||||
size += CopyData[i].cchHdrLen;
|
||||
|
||||
if (CopyData[i].bSameLine)
|
||||
{
|
||||
/* The header and info are on the same line */
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
if (bUsePad)
|
||||
{
|
||||
/* Retrieve the maximum header string displayed
|
||||
* width for computing space padding later */
|
||||
CopyData[i].nHdrWidth = my_wcswidth(CopyData[i].pchHdrText, CopyData[i].cchHdrLen);
|
||||
nMaxHdrWidth = max(nMaxHdrWidth, CopyData[i].nHdrWidth);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/* Count a TAB separator */
|
||||
size++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The data is on a separate line, count a newline */
|
||||
size += _countof(szCRLF)-1;
|
||||
}
|
||||
|
||||
/* Count the event info string and the newline that follows it */
|
||||
size += CopyData[i].cchInfoLen;
|
||||
size += _countof(szCRLF)-1;
|
||||
}
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
if (bUsePad)
|
||||
{
|
||||
/* Round nMaxHdrWidth to the next TAB width, and
|
||||
* compute the space padding for each field */
|
||||
UINT nSpaceWidth = 1; // my_wcwidth(L' ');
|
||||
nMaxHdrWidth = ((nMaxHdrWidth / nTabWidth) + 1) * nTabWidth;
|
||||
for (i = 0; i < _countof(CopyData); ++i)
|
||||
{
|
||||
/* If no data is present and is optional, ignore it */
|
||||
if ((CopyData[i].cchInfoLen == 0) && CopyData[i].bOptional)
|
||||
continue;
|
||||
|
||||
/* If the data is on a separate line, ignore padding */
|
||||
if (!CopyData[i].bSameLine)
|
||||
continue;
|
||||
|
||||
/* Compute the padding */
|
||||
CopyData[i].nSpacesPad = (nMaxHdrWidth - CopyData[i].nHdrWidth) / nSpaceWidth;
|
||||
size += CopyData[i].nSpacesPad;
|
||||
}
|
||||
}
|
||||
#endif // COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
/* Add NUL-termination */
|
||||
size++;
|
||||
|
||||
/*
|
||||
* Consolidate the information into a single buffer to copy in the clipboard.
|
||||
*/
|
||||
hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, size * sizeof(WCHAR));
|
||||
if (!hMem)
|
||||
goto Quit;
|
||||
|
||||
output = GlobalLock(hMem);
|
||||
if (output == NULL)
|
||||
if (!output)
|
||||
{
|
||||
GlobalFree(hMem);
|
||||
goto Quit;
|
||||
}
|
||||
|
||||
StringCbPrintfW(output, size,
|
||||
tmpHeader, szEventType, szSource, szCategory, szEventID,
|
||||
szDate, szTime, szUser, szComputer, evtDesc);
|
||||
/* Build the string */
|
||||
pszDestEnd = output;
|
||||
cchRemaining = size;
|
||||
for (i = 0; i < _countof(CopyData); ++i)
|
||||
{
|
||||
SIZE_T sizeDataStr;
|
||||
|
||||
/* If no data is present and is optional, ignore it */
|
||||
if ((CopyData[i].cchInfoLen == 0) && CopyData[i].bOptional)
|
||||
continue;
|
||||
|
||||
/* Copy the header string */
|
||||
StringCchCopyNExW(pszDestEnd, cchRemaining,
|
||||
CopyData[i].pchHdrText, CopyData[i].cchHdrLen,
|
||||
&pszDestEnd, &cchRemaining, 0);
|
||||
|
||||
if (CopyData[i].bSameLine)
|
||||
{
|
||||
/* The header and info are on the same line, add
|
||||
* either the space padding or the TAB separator */
|
||||
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
|
||||
if (bUsePad)
|
||||
{
|
||||
UINT j = CopyData[i].nSpacesPad;
|
||||
while (j--)
|
||||
{
|
||||
*pszDestEnd++ = L' ';
|
||||
cchRemaining--;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
*pszDestEnd++ = L'\t';
|
||||
cchRemaining--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The data is on a separate line, add a newline */
|
||||
StringCchCopyExW(pszDestEnd, cchRemaining, szCRLF,
|
||||
&pszDestEnd, &cchRemaining, 0);
|
||||
}
|
||||
|
||||
/* Copy the event info */
|
||||
sizeDataStr = min(cchRemaining, CopyData[i].cchInfoLen + 1);
|
||||
sizeDataStr = GetDlgItemTextW(hWnd, CopyData[i].nDlgItemID, pszDestEnd, sizeDataStr);
|
||||
pszDestEnd += sizeDataStr;
|
||||
cchRemaining -= sizeDataStr;
|
||||
|
||||
/* A newline follows the data */
|
||||
StringCchCopyExW(pszDestEnd, cchRemaining, szCRLF,
|
||||
&pszDestEnd, &cchRemaining, 0);
|
||||
}
|
||||
/* NUL-terminate the buffer */
|
||||
*pszDestEnd++ = UNICODE_NULL;
|
||||
cchRemaining--;
|
||||
|
||||
GlobalUnlock(hMem);
|
||||
|
||||
@@ -651,7 +882,7 @@ OnSize(HWND hDlg, PDETAILDATA pData, INT cx, INT cy)
|
||||
0, 0,
|
||||
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
|
||||
hItemWnd = GetDlgItem(hDlg, IDC_WORDRADIO);
|
||||
hItemWnd = GetDlgItem(hDlg, IDC_WORDSRADIO);
|
||||
GetWindowRect(hItemWnd, &rect);
|
||||
MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
|
||||
// OffsetRect(&rect, 0, y);
|
||||
@@ -728,6 +959,67 @@ OnSize(HWND hDlg, PDETAILDATA pData, INT cx, INT cy)
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
EnableNavigationArrows(
|
||||
_In_ HWND hDlg,
|
||||
_In_ BOOL bEnable)
|
||||
{
|
||||
/* Enable Previous/Next only if there is more than one item in the list */
|
||||
if (bEnable)
|
||||
bEnable &= (ListView_GetItemCount(hwndListView) > 1);
|
||||
EnableDlgItem(hDlg, IDC_PREVIOUS, bEnable);
|
||||
EnableDlgItem(hDlg, IDC_NEXT, bEnable);
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
ClearContents(
|
||||
_In_ HWND hDlg)
|
||||
{
|
||||
/* Disable the Previous/Next and Copy buttons */
|
||||
EnableNavigationArrows(hDlg, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, FALSE);
|
||||
|
||||
/* Disable the Bytes/Words mode buttons */
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
|
||||
|
||||
/* Clear the data fields */
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, L"");
|
||||
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
|
||||
}
|
||||
|
||||
static
|
||||
HFONT
|
||||
CreateMonospaceFont(VOID)
|
||||
{
|
||||
LOGFONTW tmpFont = {0};
|
||||
HFONT hFont;
|
||||
HDC hDC;
|
||||
|
||||
hDC = GetDC(NULL);
|
||||
|
||||
tmpFont.lfHeight = -MulDiv(8, GetDeviceCaps(hDC, LOGPIXELSY), 72);
|
||||
tmpFont.lfWeight = FW_NORMAL;
|
||||
wcscpy(tmpFont.lfFaceName, L"Courier New");
|
||||
|
||||
hFont = CreateFontIndirectW(&tmpFont);
|
||||
|
||||
ReleaseDC(NULL, hDC);
|
||||
|
||||
return hFont;
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
InitDetailsDlgCtrl(HWND hDlg, PDETAILDATA pData)
|
||||
@@ -759,8 +1051,22 @@ InitDetailsDlgCtrl(HWND hDlg, PDETAILDATA pData)
|
||||
|
||||
/* Note that the RichEdit control never gets themed under WinXP+; one would have to write code to simulate Edit-control theming */
|
||||
|
||||
SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
|
||||
SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDSRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
|
||||
SendDlgItemMessageW(hDlg, IDC_EVENTDATAEDIT, WM_SETFONT, (WPARAM)pData->hMonospaceFont, (LPARAM)TRUE);
|
||||
|
||||
//ClearContents(hDlg);
|
||||
if (pData->iEventItem != -1)
|
||||
{
|
||||
EnableNavigationArrows(hDlg, TRUE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableNavigationArrows(hDlg, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, FALSE);
|
||||
}
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
|
||||
}
|
||||
|
||||
/* Message handler for Event Details control */
|
||||
@@ -806,6 +1112,8 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
pData->scPos.x = pData->scPos.y = 0;
|
||||
|
||||
InitDetailsDlgCtrl(hDlg, pData);
|
||||
/* NOTE: Showing the event (if any) is currently delayed to later */
|
||||
// SendMessageW(hDlg, EVT_DISPLAY, TRUE, (LPARAM)pData->iEventItem);
|
||||
|
||||
// OnSize(hDlg, pData, pData->cxOld, pData->cyOld);
|
||||
return (INT_PTR)TRUE;
|
||||
@@ -821,17 +1129,58 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
case EVT_SETFILTER:
|
||||
{
|
||||
/* Disable the display first, before changing the current filter */
|
||||
pData->pevlr = NULL;
|
||||
pData->iEventItem = -1;
|
||||
ClearContents(hDlg);
|
||||
pData->EventLogFilter = (PEVENTLOGFILTER)lParam;
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
|
||||
case EVT_DISPLAY:
|
||||
{
|
||||
pData->iEventItem = (INT)lParam;
|
||||
if (pData->EventLogFilter)
|
||||
if (wParam)
|
||||
{
|
||||
/* Show event info in control */
|
||||
DisplayEvent(hDlg, pData);
|
||||
DisplayEventData(hDlg, pData);
|
||||
INT iEventItem = (INT)lParam;
|
||||
|
||||
/* If no filter is set, don't change anything */
|
||||
if (!pData->EventLogFilter)
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
/* If we re-enable display from previously disabled state, re-enable the buttons */
|
||||
if ((pData->iEventItem == -1) && (iEventItem != -1))
|
||||
{
|
||||
EnableNavigationArrows(hDlg, TRUE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, TRUE);
|
||||
}
|
||||
else
|
||||
/* If we disable display from previously enabled state, clear and disable it */
|
||||
if ((pData->iEventItem != -1) && (iEventItem == -1))
|
||||
{
|
||||
ClearContents(hDlg);
|
||||
}
|
||||
|
||||
/* Set the new item */
|
||||
pData->pevlr = NULL;
|
||||
pData->iEventItem = iEventItem;
|
||||
|
||||
/* Display the event info, if there is one */
|
||||
if (pData->iEventItem != -1)
|
||||
DisplayEvent(hDlg, pData);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Enable or disable the Previous/Next buttons,
|
||||
* but keep the existing contents, if any */
|
||||
EnableNavigationArrows(hDlg, (lParam != -1));
|
||||
|
||||
// HACK: Disable the Bytes/Words mode buttons
|
||||
// because we won't have access anymore to the
|
||||
// event data. (This will be fixed in the future.)
|
||||
pData->pevlr = NULL; // Invalidate also the cache.
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
|
||||
}
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
@@ -843,25 +1192,33 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
case IDC_NEXT:
|
||||
{
|
||||
BOOL bPrev = (LOWORD(wParam) == IDC_PREVIOUS);
|
||||
INT iItem, iSel, nItems = ListView_GetItemCount(hwndListView);
|
||||
WCHAR szText[200];
|
||||
INT nItems = ListView_GetItemCount(hwndListView);
|
||||
INT iItem, iSel;
|
||||
|
||||
if (nItems <= 0) /* No items? */
|
||||
break;
|
||||
|
||||
/* Get the index of the first selected item */
|
||||
iSel = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED);
|
||||
|
||||
/* Select the previous/next item from our current one */
|
||||
iItem = ListView_GetNextItem(hwndListView, -1, LVNI_ALL | LVNI_SELECTED);
|
||||
iItem = ListView_GetNextItem(hwndListView, iItem,
|
||||
iItem = ListView_GetNextItem(hwndListView, iSel,
|
||||
(bPrev ? LVNI_ABOVE : LVNI_BELOW));
|
||||
if (iItem < 0 || iItem >= nItems)
|
||||
{
|
||||
LoadStringW(hInst,
|
||||
(bPrev ? IDS_CONTFROMEND : IDS_CONTFROMBEGINNING),
|
||||
szText, _countof(szText));
|
||||
if (MessageBoxW(hDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
||||
break;
|
||||
/* Confirm selection restart only if an item was previously
|
||||
* selected. If not, just proceed with default selection. */
|
||||
if (iSel != -1)
|
||||
{
|
||||
WCHAR szText[200];
|
||||
LoadStringW(hInst,
|
||||
(bPrev ? IDS_CONTFROMEND : IDS_CONTFROMBEGINNING),
|
||||
szText, _countof(szText));
|
||||
if (MessageBoxW(hDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) != IDYES)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Determine from where to restart */
|
||||
/* Determine where to restart from */
|
||||
iItem = (bPrev ? (nItems - 1) : 0);
|
||||
}
|
||||
|
||||
@@ -883,14 +1240,12 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
LVIS_FOCUSED | LVIS_SELECTED);
|
||||
ListView_EnsureVisible(hwndListView, iItem, FALSE);
|
||||
|
||||
pData->pevlr = NULL;
|
||||
pData->iEventItem = iItem;
|
||||
|
||||
/* Show event info in control */
|
||||
/* Display the event info */
|
||||
if (pData->EventLogFilter)
|
||||
{
|
||||
DisplayEvent(hDlg, pData);
|
||||
DisplayEventData(hDlg, pData);
|
||||
}
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
|
||||
@@ -900,15 +1255,11 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
case IDC_BYTESRADIO:
|
||||
case IDC_WORDRADIO:
|
||||
{
|
||||
case IDC_WORDSRADIO:
|
||||
pData->bDisplayWords = (LOWORD(wParam) == IDC_WORDSRADIO);
|
||||
if (pData->EventLogFilter)
|
||||
{
|
||||
pData->bDisplayWords = (LOWORD(wParam) == IDC_WORDRADIO);
|
||||
DisplayEventData(hDlg, pData);
|
||||
}
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
@@ -959,11 +1310,3 @@ CreateEventDetailsCtrl(HINSTANCE hInstance,
|
||||
MAKEINTRESOURCEW(IDD_EVENTDETAILS_CTRL),
|
||||
hParentWnd, EventDetailsCtrl, lParam);
|
||||
}
|
||||
|
||||
VOID
|
||||
EnableEventDetailsButtons(HWND hWnd, BOOL bEnable)
|
||||
{
|
||||
EnableDlgItem(hWnd, IDC_PREVIOUS, bEnable);
|
||||
EnableDlgItem(hWnd, IDC_NEXT, bEnable);
|
||||
EnableDlgItem(hWnd, IDC_COPY, bEnable);
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@
|
||||
* PURPOSE: Event Details Control.
|
||||
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
|
||||
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
|
||||
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
@@ -24,5 +24,3 @@ HWND
|
||||
CreateEventDetailsCtrl(HINSTANCE hInstance,
|
||||
HWND hParentWnd,
|
||||
LPARAM lParam);
|
||||
|
||||
VOID EnableEventDetailsButtons(HWND hWnd, BOOL bEnable);
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "&Данни:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Байтове", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Думи", IDC_WORDRADIO, 85, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Думи", IDC_WORDSRADIO, 85, 140, 34, 8
|
||||
LTEXT "&Данни:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -81,17 +81,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Datum:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Zdroj:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Zdroj:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Čas:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "Č&as:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Kategorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Kategorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Typ:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&yp:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "ID události:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&ID události:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Uživatel:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Popis:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Byty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Slova", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -203,7 +203,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "byty" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "bajtů" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Typ: %s\r\n\
|
||||
Zdroj: %s\r\n\
|
||||
Kategorie: %s\r\n\
|
||||
ID: %s\r\n\
|
||||
Datum: %s\r\n\
|
||||
Čas: %s\r\n\
|
||||
Uživatel: %s\r\n\
|
||||
Počítač: %s\r\n\
|
||||
Popis:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Typ:"
|
||||
IDS_COPY_EVTSRC "Zdroj:"
|
||||
IDS_COPY_EVTCAT "Kategorie:"
|
||||
IDS_COPY_EVTID "ID události:"
|
||||
IDS_COPY_EVTDATE "Datum:"
|
||||
IDS_COPY_EVTTIME "Čas:"
|
||||
IDS_COPY_EVTUSER "Uživatel:"
|
||||
IDS_COPY_EVTCOMP "Počítač:"
|
||||
IDS_COPY_EVTTEXT "Popis:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Datum:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Quelle:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Quelle:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Zeit:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Zeit:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Kategorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Kategorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Typ:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Typ:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Ereignis-ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "E&reignis-ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Benutzer:", IDC_STATIC, 8, 35, 36, 8
|
||||
LTEXT "B&enutzer:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "C&omputer:", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "&Bezeichnung:", IDC_STATIC, 8, 65, 45, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&aten:", IDC_DETAILS_STATIC, 8, 140, 24, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Wörter", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&aten:", IDC_DETAILS_STATIC, 8, 140, 24, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Typ: %s\r\n\
|
||||
Quelle: %s\r\n\
|
||||
Kategorie: %s\r\n\
|
||||
Ereignis-ID: %s\r\n\
|
||||
Datum: %s\r\n\
|
||||
Zeit: %s\r\n\
|
||||
Benutzer: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Beschreibung:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Typ:"
|
||||
IDS_COPY_EVTSRC "Quelle:"
|
||||
IDS_COPY_EVTCAT "Kategorie:"
|
||||
IDS_COPY_EVTID "Ereignis-ID:"
|
||||
IDS_COPY_EVTDATE "Datum:"
|
||||
IDS_COPY_EVTTIME "Zeit:"
|
||||
IDS_COPY_EVTUSER "Benutzer:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Beschreibung:"
|
||||
IDS_COPY_EVTDATA "Daten:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -81,17 +81,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Ημερομηνία:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Ημερομηνία:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Πηγή:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "Πη&γή:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Ώρα:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Ώρα:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Κατηγορία:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Κατηγορία:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Τύπος:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Τύπος:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "EventID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Χρήστης:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Περιγραφή:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "Δ&εδομένα:", IDC_DETAILS_STATIC, 8, 140, 40, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 49, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 87, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 87, 140, 34, 8
|
||||
LTEXT "Δ&εδομένα:", IDC_DETAILS_STATIC, 8, 140, 40, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -83,21 +83,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Date:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ate:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Source:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Source:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Time:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "Ti&me:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Category:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Category:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Type:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "Typ&e:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Event ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&User:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "C&omputer:", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -107,9 +107,9 @@ BEGIN
|
||||
LTEXT "&Description:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -223,16 +223,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -84,17 +84,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Fecha:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Fecha:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Origen:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Origen:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Hora:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Hora:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Categoría:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoría:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "ID de evento:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&ID de evento:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Usuario:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
@@ -108,9 +108,9 @@ BEGIN
|
||||
LTEXT "&Descripción:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&atos:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&atos:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -224,16 +224,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Tipo de evento: %s\r\n\
|
||||
Fuente del evento: %s\r\n\
|
||||
Categ. del evento: %s\r\n\
|
||||
ID del evento: %s\r\n\
|
||||
Fecha: %s\r\n\
|
||||
Hora: %s\r\n\
|
||||
Usuario: %s\r\n\
|
||||
Equipo: %s\r\n\
|
||||
Descripción:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Tipo de evento:"
|
||||
IDS_COPY_EVTSRC "Fuente del evento:"
|
||||
IDS_COPY_EVTCAT "Categ. del evento:"
|
||||
IDS_COPY_EVTID "ID de evento:"
|
||||
IDS_COPY_EVTDATE "Fecha:"
|
||||
IDS_COPY_EVTTIME "Hora:"
|
||||
IDS_COPY_EVTUSER "Usuario:"
|
||||
IDS_COPY_EVTCOMP "Equipo:"
|
||||
IDS_COPY_EVTTEXT "Descripción:"
|
||||
IDS_COPY_EVTDATA "Datos:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Date :", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ate :", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Source :", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Source :", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Heure :", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Heure :", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Catégorie :", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Catégorie :", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Type :", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Type :", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Événement :", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "É&vénement :", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Utilisateur :", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Ordinateur :", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "O&rdinateur :", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "&Description :", IDC_STATIC, 8, 65, 45, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "Données :", IDC_DETAILS_STATIC, 8, 140, 35, 8//FIXME: add accel
|
||||
AUTORADIOBUTTON "&Octets", IDC_BYTESRADIO, 50, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Mots", IDC_WORDRADIO, 88, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Mots", IDC_WORDSRADIO, 88, 140, 34, 8
|
||||
LTEXT "Do&nnées :", IDC_DETAILS_STATIC, 8, 140, 35, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -168,8 +168,8 @@ BEGIN
|
||||
IDS_CLEAREVENTS_MSG "Voulez-vous enregistrer ce journal d'événements avant de l'effacer ?"
|
||||
IDS_RESTOREDEFAULTS "Voulez-vous vraiment réinitialiser tous les paramètres pour ce journal aux valeurs par défaut ?"
|
||||
IDS_EVENTSTRINGIDNOTFOUND "La description pour l'événement d'ID ( %lu ) dans la source ( %s ) ne peut être trouvée. L'ordinateur local pourrait ne pas avoir les informations registres nécessaires ou les fichiers DLL de message pour afficher les messages depuis un ordinateur distant.\n\nLes informations suivantes font partie de l'événement :\n\n"
|
||||
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
|
||||
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
|
||||
IDS_CONTFROMBEGINNING "Vous avez atteint la fin du journal d'événements. Voulez-vous continuer depuis le début ?"
|
||||
IDS_CONTFROMEND "Vous avez atteint le début du journal d'événements. Voulez-vous continuer depuis la fin ?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Type d'événement : %s\r\n\
|
||||
Source de l'événement : %s\r\n\
|
||||
Catégorie de l'événement : %s\r\n\
|
||||
ID de l'événement : %s\r\n\
|
||||
Date : %s\r\n\
|
||||
Heure : %s\r\n\
|
||||
Utilisateur : %s\r\n\
|
||||
Ordinateur : %s\r\n\
|
||||
Description :\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Type de l'événement :"
|
||||
IDS_COPY_EVTSRC "Source de l'événement :"
|
||||
IDS_COPY_EVTCAT "Catégorie de l'événement :"
|
||||
IDS_COPY_EVTID "ID de l'événement :"
|
||||
IDS_COPY_EVTDATE "Date :"
|
||||
IDS_COPY_EVTTIME "Heure :"
|
||||
IDS_COPY_EVTUSER "Utilisateur :"
|
||||
IDS_COPY_EVTCOMP "Ordinateur :"
|
||||
IDS_COPY_EVTTEXT "Description :"
|
||||
IDS_COPY_EVTDATA "Données :"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "תיאור:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "נתונים:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "בתים", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "מילים", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "מילים", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "נתונים:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Sorgente:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Sorgente:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Ore:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Ore:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&ipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "IDEvento:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "ID &Evento:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&UTente:", IDC_STATIC, 8, 35, 36, 8
|
||||
LTEXT "&Utente:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "Co&mputer:", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "&Descrizione:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ati:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ti:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "説明(&D):", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "データ(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "バイト(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "ワード(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "ワード(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "データ(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
イベントの種類: %s\r\n\
|
||||
イベントのソース: %s\r\n\
|
||||
イベントのカテゴリ: %s\r\n\
|
||||
イベント ID: %s\r\n\
|
||||
日付: %s\r\n\
|
||||
時刻: %s\r\n\
|
||||
ユーザー: %s\r\n\
|
||||
コンピューター: %s\r\n\
|
||||
説明:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "イベントの種類:"
|
||||
IDS_COPY_EVTSRC "イベントのソース:"
|
||||
IDS_COPY_EVTCAT "イベントのカテゴリ:"
|
||||
IDS_COPY_EVTID "イベント ID:"
|
||||
IDS_COPY_EVTDATE "日付:"
|
||||
IDS_COPY_EVTTIME "時刻:"
|
||||
IDS_COPY_EVTUSER "ユーザー:"
|
||||
IDS_COPY_EVTCOMP "コンピューター:"
|
||||
IDS_COPY_EVTTEXT "説明:"
|
||||
IDS_COPY_EVTDATA "データ:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "설명(&D):", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "데이터(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "바이트(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "글자(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "글자(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "데이터(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Dato:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ato:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Kilde:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Kilde:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tid:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "Ti&d:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Kategori:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "Katego&ri:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Type:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "Typ&e:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Hendelse ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&Hendelse ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Bruker:", IDC_STATIC, 8, 35, 36, 8
|
||||
LTEXT "Br&uker:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Datamaskin:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "Data&maskin:", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Beskrivelse:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Tegn", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "Teg&n", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -108,9 +108,9 @@ BEGIN
|
||||
LTEXT "&Opis:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ane:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Słowa", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Słowa", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&ane:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -224,16 +224,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Typ zdarzenia: %s\r\n\
|
||||
Źródło zdarzenia: %s\r\n\
|
||||
Kategoria zdarzenia: %s\r\n\
|
||||
Idnetyfikator Zdarzenia: %s\r\n\
|
||||
Data: %s\r\n\
|
||||
Czas: %s\r\n\
|
||||
Użytkownik: %s\r\n\
|
||||
Komputer: %s\r\n\
|
||||
Opis:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Typ zdarzenia:"
|
||||
IDS_COPY_EVTSRC "Źródło zdarzenia:"
|
||||
IDS_COPY_EVTCAT "Kategoria zdarzenia:"
|
||||
IDS_COPY_EVTID "Identyfikator zdarzenia:"
|
||||
IDS_COPY_EVTDATE "Data:"
|
||||
IDS_COPY_EVTTIME "Czas:"
|
||||
IDS_COPY_EVTUSER "Użytkownik:"
|
||||
IDS_COPY_EVTCOMP "Komputer:"
|
||||
IDS_COPY_EVTTEXT "Opis:"
|
||||
IDS_COPY_EVTDATA "Dane:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Fonte:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Fonte:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tempo:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "T&empo:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "EventID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Usuário:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Computador:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "Co&mputador:", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Descrição:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -211,7 +211,7 @@ STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COLUMNTYPE "Tipo"
|
||||
IDS_COLUMNDATE "Data"
|
||||
IDS_COLUMNTIME "Hora"
|
||||
IDS_COLUMNTIME "Tempo"
|
||||
IDS_COLUMNSOURCE "Fonte"
|
||||
IDS_COLUMNCATEGORY "Categoria"
|
||||
IDS_COLUMNEVENT "Evento"
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Tipo de evento:"
|
||||
IDS_COPY_EVTSRC "Fonte do evento:"
|
||||
IDS_COPY_EVTCAT "Categoria:"
|
||||
IDS_COPY_EVTID "ID do evento:"
|
||||
IDS_COPY_EVTDATE "Data:"
|
||||
IDS_COPY_EVTTIME "Tempo:"
|
||||
IDS_COPY_EVTUSER "Usuário:"
|
||||
IDS_COPY_EVTCOMP "Computador:"
|
||||
IDS_COPY_EVTTEXT "Descrição:"
|
||||
IDS_COPY_EVTDATA "Dados:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 50, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Origem:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "O&rigem:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Hora:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Hora:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 50, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 50, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "EventID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Utilizador:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 50, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Computador:", IDC_STATIC, 8, 45, 40, 8
|
||||
LTEXT "Co&mputador:", IDC_STATIC, 8, 45, 40, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 50, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Descrição:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -203,7 +203,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "bytes" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "bajtów" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Tipo de evento: %s\r\n\
|
||||
Origem do evento: %s\r\n\
|
||||
Categoria: %s\r\n\
|
||||
ID do Evento: %s\r\n\
|
||||
Data: %s\r\n\
|
||||
Hora: %s\r\n\
|
||||
Utilizador: %s\r\n\
|
||||
Computador: %s\r\n\
|
||||
Descrição:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Tipo de evento:"
|
||||
IDS_COPY_EVTSRC "Origem do evento:"
|
||||
IDS_COPY_EVTCAT "Categoria:"
|
||||
IDS_COPY_EVTID "ID do evento:"
|
||||
IDS_COPY_EVTDATE "Data:"
|
||||
IDS_COPY_EVTTIME "Hora:"
|
||||
IDS_COPY_EVTUSER "Utilizador:"
|
||||
IDS_COPY_EVTCOMP "Computador:"
|
||||
IDS_COPY_EVTTEXT "Descrição:"
|
||||
IDS_COPY_EVTDATA "Dados:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -83,21 +83,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Dată:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ată:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Sursă:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Sursă:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Oră:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "O&ră:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Categorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tip:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&ip:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "ID Eveniment:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "ID &eveniment:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Utilizator:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Calculator:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "Ca&lculator:", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -107,9 +107,9 @@ BEGIN
|
||||
LTEXT "&Descriere:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ate:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&8 biți", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&16 biți", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&16 biți", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&te:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -205,7 +205,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "octeți" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "octeţi" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
@@ -218,21 +218,21 @@ BEGIN
|
||||
IDS_COLUMNCATEGORY "Categorie"
|
||||
IDS_COLUMNEVENT "Eveniment"
|
||||
IDS_COLUMNUSER "Utilizator"
|
||||
IDS_COLUMNCOMPUTER "Computer"
|
||||
IDS_COLUMNCOMPUTER "Calculator"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Tip eveniment: %s\r\n\
|
||||
Sursă eveniment: %s\r\n\
|
||||
Categorie eveniment: %s\r\n\
|
||||
ID eveniment: %s\r\n\
|
||||
Dată: %s\r\n\
|
||||
Oră: %s\r\n\
|
||||
Utilizator: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Descriere:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Tip eveniment:"
|
||||
IDS_COPY_EVTSRC "Sursă eveniment:"
|
||||
IDS_COPY_EVTCAT "Categorie eveniment:"
|
||||
IDS_COPY_EVTID "ID eveniment:"
|
||||
IDS_COPY_EVTDATE "Dată:"
|
||||
IDS_COPY_EVTTIME "Oră:"
|
||||
IDS_COPY_EVTUSER "Utilizator:"
|
||||
IDS_COPY_EVTCOMP "Calculator:"
|
||||
IDS_COPY_EVTTEXT "Descriere:"
|
||||
IDS_COPY_EVTDATA "Date:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -109,9 +109,9 @@ BEGIN
|
||||
LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "&Данные:", IDC_DETAILS_STATIC, 8, 140, 30, 8
|
||||
AUTORADIOBUTTON "&Байты", IDC_BYTESRADIO, 49, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слова", IDC_WORDRADIO, 87, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слова", IDC_WORDSRADIO, 87, 140, 34, 8
|
||||
LTEXT "&Данные:", IDC_DETAILS_STATIC, 8, 140, 30, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -225,16 +225,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Тип события: %s\r\n\
|
||||
Источник события: %s\r\n\
|
||||
Категория события: %s\r\n\
|
||||
ID события: %s\r\n\
|
||||
Дата: %s\r\n\
|
||||
Время: %s\r\n\
|
||||
Пользователь: %s\r\n\
|
||||
Компьютер: %s\r\n\
|
||||
Описание:\n%s"
|
||||
IDS_COPY_EVTTYPE "Тип события:"
|
||||
IDS_COPY_EVTSRC "Источник события:"
|
||||
IDS_COPY_EVTCAT "Категория события:"
|
||||
IDS_COPY_EVTID "ID события:"
|
||||
IDS_COPY_EVTDATE "Дата:"
|
||||
IDS_COPY_EVTTIME "Время:"
|
||||
IDS_COPY_EVTUSER "Пользователь:"
|
||||
IDS_COPY_EVTCOMP "Компьютер:"
|
||||
IDS_COPY_EVTTEXT "Описание:"
|
||||
IDS_COPY_EVTDATA "Данные:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Popis:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "Ú&daje:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Slová", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Slová", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Ú&daje:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -203,7 +203,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "bytes" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "bajtov" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -81,33 +81,33 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Burimi:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "B&urimi:", IDC_STATIC, 103, 5, 36, 8
|
||||
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Ora:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "O&ra:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Kategoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Kategoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Tipi:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&ipi:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "NgjarjeID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&Ngjarje ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Përdoruesi:", IDC_STATIC, 8, 35, 36, 8//FIXME: add accel
|
||||
LTEXT "Për&doruesi:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Kompjuteri:", IDC_STATIC, 8, 45, 36, 8//FIXME: add accel
|
||||
LTEXT "Ko&mpjuteri:", IDC_STATIC, 8, 45, 36, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON
|
||||
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
|
||||
|
||||
LTEXT "Përshkrimi:", IDC_STATIC, 8, 65, 39, 8//FIXME: add accel
|
||||
LTEXT "&Përshkrimi:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
LTEXT "&Beskrivning:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Byte", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -221,16 +221,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "Açıklama:", IDC_STATIC, 8, 65, 39, 8//FIXME: add accel
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "Veri:", IDC_DETAILS_STATIC, 8, 140, 20, 8//FIXME: add accel
|
||||
AUTORADIOBUTTON "&Baytlar", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "Sö&zcük", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "Sö&zcükler", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Veri:", IDC_DETAILS_STATIC, 8, 140, 20, 8//FIXME: add accel
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Olay Türü: %s\r\n\
|
||||
Olay Kaynağı: %s\r\n\
|
||||
Olay Kategorisi: %s\r\n\
|
||||
Olay Kimliği: %s\r\n\
|
||||
Tarih: %s\r\n\
|
||||
Saat: %s\r\n\
|
||||
Kullanıcı: %s\r\n\
|
||||
Bilgisayar: %s\r\n\
|
||||
Tanım:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Olay Türü:"
|
||||
IDS_COPY_EVTSRC "Olay Kaynağı:"
|
||||
IDS_COPY_EVTCAT "Olay Kategorisi:"
|
||||
IDS_COPY_EVTID "Olay Kimliği:"
|
||||
IDS_COPY_EVTDATE "Tarih:"
|
||||
IDS_COPY_EVTTIME "Saat:"
|
||||
IDS_COPY_EVTUSER "Kullanıcı:"
|
||||
IDS_COPY_EVTCOMP "Bilgisayar:"
|
||||
IDS_COPY_EVTTEXT "Tanım:"
|
||||
IDS_COPY_EVTDATA "Veri:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -107,9 +107,9 @@ BEGIN
|
||||
LTEXT "&Опис:", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
AUTORADIOBUTTON "&Байти", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слова", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Д&aта:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Байт", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слово", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -223,16 +223,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
Event Type: %s\r\n\
|
||||
Event Source: %s\r\n\
|
||||
Event Category: %s\r\n\
|
||||
Event ID: %s\r\n\
|
||||
Date: %s\r\n\
|
||||
Time: %s\r\n\
|
||||
User: %s\r\n\
|
||||
Computer: %s\r\n\
|
||||
Description:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "Event Type:"
|
||||
IDS_COPY_EVTSRC "Event Source:"
|
||||
IDS_COPY_EVTCAT "Event Category:"
|
||||
IDS_COPY_EVTID "Event ID:"
|
||||
IDS_COPY_EVTDATE "Date:"
|
||||
IDS_COPY_EVTTIME "Time:"
|
||||
IDS_COPY_EVTUSER "User:"
|
||||
IDS_COPY_EVTCOMP "Computer:"
|
||||
IDS_COPY_EVTTEXT "Description:"
|
||||
IDS_COPY_EVTDATA "Data:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -107,9 +107,9 @@ BEGIN
|
||||
LTEXT "描述(&D):", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "数据(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "字节(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "数据(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
事件类型: %s\r\n\
|
||||
事件源: %s\r\n\
|
||||
事件类别: %s\r\n\
|
||||
事件 ID: %s\r\n\
|
||||
日期: %s\r\n\
|
||||
时间: %s\r\n\
|
||||
用户: %s\r\n\
|
||||
电脑: %s\r\n\
|
||||
描述:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "事件类型:"
|
||||
IDS_COPY_EVTSRC "事件源:"
|
||||
IDS_COPY_EVTCAT "事件类别:"
|
||||
IDS_COPY_EVTID "事件 ID:"
|
||||
IDS_COPY_EVTDATE "日期:"
|
||||
IDS_COPY_EVTTIME "时间:"
|
||||
IDS_COPY_EVTUSER "用户:"
|
||||
IDS_COPY_EVTCOMP "电脑:"
|
||||
IDS_COPY_EVTTEXT "描述:"
|
||||
IDS_COPY_EVTDATA "数据:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "描述(&D):", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "位元組(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "位元(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -117,7 +117,7 @@ STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
|
||||
CAPTION "一般"
|
||||
FONT 9, "新細明體"
|
||||
BEGIN
|
||||
LTEXT "顯示名稱(&D):", IDC_STATIC, 7, 9, 60, 8
|
||||
LTEXT "顯示名稱(&D):", IDC_STATIC, 7, 9, 60, 8
|
||||
EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
|
||||
LTEXT "記錄檔名稱(&L):", IDC_STATIC, 7, 25, 60, 8
|
||||
EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
|
||||
@@ -126,7 +126,7 @@ BEGIN
|
||||
// The following 4 IDC_STATIC shall have accels in ReactOS, although MS doesn't have accels for them.
|
||||
// Translation note: First fill out ALL accels that MS has in this dialog for your language,
|
||||
// and only then as a final step use some remaining unused letters for those 4 controls!
|
||||
LTEXT "大小(&S);", IDC_STATIC, 7, 57, 60, 8
|
||||
LTEXT "大小(&S):", IDC_STATIC, 7, 57, 60, 8
|
||||
EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "建立日期(&C):", IDC_STATIC, 7, 69, 60, 8
|
||||
EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
@@ -179,14 +179,14 @@ BEGIN
|
||||
\n\
|
||||
EventVwr [電腦名稱] [/L:<事件記錄檔案>] [/?]\n\
|
||||
\n\
|
||||
""電腦名稱"" : 指定要連線的遠端電腦\n\
|
||||
""電腦名稱"" :指定要連線的遠端電腦\n\
|
||||
\t以擷取要顯示的事件。如果未指定名稱,\n\
|
||||
\t則使用本地電腦。\n\
|
||||
\n\
|
||||
/L:<事件記錄檔案> : 指定要開啟的事件記錄檔案。\n\
|
||||
/L:<事件記錄檔案> :指定要開啟的事件記錄檔案。\n\
|
||||
\t只支援 .evt 格式檔案 (NT ≤ 5.2)。\n\
|
||||
\n\
|
||||
/? : 顯示這個説明訊息。\n\
|
||||
/? :顯示這個説明訊息。\n\
|
||||
"
|
||||
IDS_EVENTLOGFILE "事件記錄檔案"
|
||||
END
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
事件種類: %s\r\n\
|
||||
事件源: %s\r\n\
|
||||
事件種類: %s\r\n\
|
||||
事件 ID: %s\r\n\
|
||||
日期: %s\r\n\
|
||||
時間: %s\r\n\
|
||||
使用者: %s\r\n\
|
||||
電腦: %s\r\n\
|
||||
描述:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "事件種類:"
|
||||
IDS_COPY_EVTSRC "事件源:"
|
||||
IDS_COPY_EVTCAT "事件種類:"
|
||||
IDS_COPY_EVTID "事件 ID:"
|
||||
IDS_COPY_EVTDATE "日期:"
|
||||
IDS_COPY_EVTTIME "時間:"
|
||||
IDS_COPY_EVTUSER "使用者:"
|
||||
IDS_COPY_EVTCOMP "電腦:"
|
||||
IDS_COPY_EVTTEXT "描述:"
|
||||
IDS_COPY_EVTDATA "資料:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "描述(&D):", IDC_STATIC, 8, 65, 39, 8
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "位元組(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "位元(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -222,16 +222,16 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_COPY "\
|
||||
事件種類: %s\r\n\
|
||||
事件源: %s\r\n\
|
||||
事件種類: %s\r\n\
|
||||
事件 ID: %s\r\n\
|
||||
日期: %s\r\n\
|
||||
時間: %s\r\n\
|
||||
使用者: %s\r\n\
|
||||
電腦: %s\r\n\
|
||||
描述:\r\n%s"
|
||||
IDS_COPY_EVTTYPE "事件種類:"
|
||||
IDS_COPY_EVTSRC "事件源:"
|
||||
IDS_COPY_EVTCAT "事件種類:"
|
||||
IDS_COPY_EVTID "事件 ID:"
|
||||
IDS_COPY_EVTDATE "日期:"
|
||||
IDS_COPY_EVTTIME "時間:"
|
||||
IDS_COPY_EVTUSER "使用者:"
|
||||
IDS_COPY_EVTCOMP "電腦:"
|
||||
IDS_COPY_EVTTEXT "描述:"
|
||||
IDS_COPY_EVTDATA "資料:"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -50,7 +50,7 @@
|
||||
#define IDC_EVENTTEXTEDIT 1011
|
||||
#define IDC_DETAILS_STATIC -2
|
||||
#define IDC_BYTESRADIO 1012
|
||||
#define IDC_WORDRADIO 1013
|
||||
#define IDC_WORDSRADIO 1013
|
||||
#define IDC_EVENTDATAEDIT 1014
|
||||
#define IDC_DISPLAYNAME 1015
|
||||
#define IDC_LOGNAME 1016
|
||||
@@ -130,7 +130,16 @@
|
||||
#define IDS_COLUMNUSER 226
|
||||
#define IDS_COLUMNCOMPUTER 227
|
||||
|
||||
#define IDS_COPY 240
|
||||
#define IDS_COPY_EVTTYPE 240
|
||||
#define IDS_COPY_EVTSRC 241
|
||||
#define IDS_COPY_EVTCAT 242
|
||||
#define IDS_COPY_EVTID 243
|
||||
#define IDS_COPY_EVTDATE 244
|
||||
#define IDS_COPY_EVTTIME 245
|
||||
#define IDS_COPY_EVTUSER 246
|
||||
#define IDS_COPY_EVTCOMP 247
|
||||
#define IDS_COPY_EVTTEXT 248
|
||||
#define IDS_COPY_EVTDATA 249
|
||||
|
||||
#define IDS_NONE 250
|
||||
#define IDS_NOT_AVAILABLE 251
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Някои услуги зависят от други услуги, водачи (driver) и зареждат други групи. Ако някоя системна съставка е спряна или не работи правилно, зависимите от нея услуги може да бъдат засегнати.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Тази услуга зависи от следните съставки", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Тази услуга зависи от следните съставки:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -157,6 +157,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Některé služby závisí na jiných službách, systémových ovladačích nebo načítají jiné skupiny služeb. Zastavené nebo nesprávně fungující součásti systému mohou ovlivnit závislé služby.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Tato služba závisí na následujících součástech:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Einige Dienste sind von anderen Diensten, Systemtreibern und Ladegruppen abhängig. Falls eine Systemkomponente anhält oder nicht einwandfrei ausgeführt wird, kann dies Auswirkungen auf abhängige Dienste haben.", IDC_STATIC, 8, 7, 238, 38
|
||||
LTEXT "Dieser Dienst ist von folgenden Systemkomponenten abhängig", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Dieser Dienst ist von folgenden Systemkomponenten abhängig:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Die folgenden Komponenten sind von diesem Dienst abhängig:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Some services depend on other services, system drivers and load order groups. If a system component is stopped or it is not running properly, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "This service depends on the following components", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "This service depends on the following components:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Some services depend on other services, system drivers and load order groups. If a system component is stopped or it is not running properly, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "This service depends on the following components", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "&This service depends on the following components:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The &following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -159,7 +159,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Algunos servicios dependen de otros servicios, controladores del sistema y grupos de orden de carga. Si se detiene un componente del sistema o no funciona correctamente, es posible que otros servicios que dependan de éstos resulten afectados.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Éste servicio depende de los siguientes componentes", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Éste servicio depende de los siguientes componentes:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Certains services dépendent d'autres services, pilotes système et groupes d'ordre de chargement. Si un composant système est arrêté ou ne fonctionne pas correctement, les services dépendants peuvent être affectés.", IDC_STATIC, 8, 7, 238, 36
|
||||
LTEXT "Ce service dépend des composants système suivants", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "&Ce service dépend des composants système suivants:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Les c&omposants système suivants dépendent de ce service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "שירותים מסוימים תלויים בשירותים אחרים, במנהלים של התקנים של המערכת ובקבוצות סדר טעינה. אם רכיב מערכת הופסק או שאינו פועל כראוי, ייתכן ששירותים התלויים בו יושפעו.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "שירות זה תלוי ברכיבי המערכת הבאים", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "שירות זה תלוי ברכיבי המערכת הבאים:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Beberapa layanan bergantung pada layanan lainnya, driver sistem dan grup urutan pengambilan. Jika komponen sistem dihentikan atau tidak berjalan dengan benar, layanan yang bergantung akan dipengaruhi.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Layanan ini tergantung pada komponen berikut", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Layanan ini tergantung pada komponen berikut:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Alcuni servizi dipendono da altri servizi, driver di sistema e gruppi di ordine di caricamento. Se un componente di sistema viene fermato o non sta funzionando regolarmente, i servizi dipendenti possono venire influenzati.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Questo servizio dipende dai seguenti componenti", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Questo servizio dipende dai seguenti componenti:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "他のサービス、システム ドライバ、読み込み順グループなどに依存しているサービスがあります。システム コンポーネントが停止するか、または正常に実行されない場合、依存するサービスが影響されている場合があります。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "このサービスが依存するコンポーネント", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "このサービスが依存するコンポーネント:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "次のコンポーネントがこのサービスに依存しています:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -159,6 +159,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "일부 서비스는 다른 서비스나 시스템 드라이버, 그룹 등에 종속되어 있습니다. 만약 시스템 컴포넌트가 정지되었거나 제대로 동작하지 않는다면, 종속된 서비스에 영향을 끼칠 수 있습니다.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "이 서비스는 다음 컴포넌트에 종속되어 있습니다.", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Noen tjenester depend på andre tjenester, system drivere og laster system grupper. Hvis system komponenten er stoppet eller ikke kjøre riktig, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Denne tjenesten depends på følgende komponenter", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Denne tjenesten depends på følgende komponenter:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -166,7 +166,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Niektóre usługi są zależne od innych usług, sterowników systemowych i grup kolejności ładowania. Jeżeli składnik systemu jest zatrzymany lub nie działa prawidłowo, zależne od niego usługi nie uruchomią się.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Ta usługa jest zależna od następujących składników systemu", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Ta usługa jest zależna od następujących składników systemu:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -157,6 +157,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Alguns serviços dependem de outros serviços, controladores de sistema e grupos de ordenamento de carregamento. Se um componente do sistema for parado ou não estiver a ser executado correctamente, os serviços dependentes podem ser afectados.", IDC_STATIC, 8, 7, 238, 34
|
||||
LTEXT "Este serviço depende dos seguintes componentes do sistema:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "Os seguintes componentes do sistema dependem deste serviço:", IDC_DEPEND_SERVICE, 8, 138, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -165,7 +165,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Unele servicii depind de alte servicii sau de module de sistem și de ordinea încărcării în grup. Dacă o componentă de sistem este oprită sau nu rulează corespunzător, serviciile dependente pot fi și ele afectate.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Acest serviciu depinde de următoarele componente", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Acest serviciu depinde de următoarele componente:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Următoarele componente depind de acest serviciu:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -157,6 +157,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Некоторые службы зависят от других. Если служба остановлена или неправильно работает, это отражается на зависимых от нее службах.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Эта служба зависит от следующих компонентов:", IDC_STATIC, 8, 59, 236, 9
|
||||
LTEXT "Следующие компоненты зависят от этой службы:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -161,7 +161,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Some services depend on other services, system drivers and load order groups. If a system component is stopped or it is not running properly, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "This service depends on the following components", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "This service depends on the following components:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -161,7 +161,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Disa shërbime varen nga shërbimet e tjera, driverat e sistemit dhe ngarkimet grupet te renditura. Nëse një komponent sistem është i ndalur ose ajo nuk është në drejtimin e duhur, shërbimet e varur mund të preken.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Ky shërbim varet nga komponentet në vijim", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Ky shërbim varet nga komponentet në vijim:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -163,7 +163,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Några tjänster är beroende av andra tjänster, systemdrivrutiner och laddsystemsgrupper. Om systemkomponenten är stoppad eller inte kör korrekt, kan tjänster som är beroende av den bli påverkade.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Denna tjänsten är beroende av följande komponenter", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Denna tjänsten är beroende av följande komponenter:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -164,7 +164,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "การให้บริการบางอย่างขึ้นกับบริการอื่นๆด้วย, ตัวขับเคลื่อนของระบบ และการดึงข้อมูลตามลำดับกลุ่ม ถ้าส่วนประกอบต่างๆของระบบหยุดทำงานลง หรือไม่ทำงานตามสมควร การให้บริการแบบไม่กำหนดเองจะมีผลทันที", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "การให้บริการนี้ขึ้นอยู่กับส่วนประกอบอื่นๆที่ตามมาด้วย", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "การให้บริการนี้ขึ้นอยู่กับส่วนประกอบอื่นๆที่ตามมาด้วย:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -159,6 +159,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Birtakım hizmetler, başka hizmetlere, sistem sürücülerine ve yükleme sırası bileşenlerine bağımlıdır. Eğer bir sistem bileşeni, durdurulmuşsa ya da düzgün çalışmıyorsa bağımlı hizmetler etkilenebilir.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Bu hizmet aşağıdaki bileşenlere bağımlıdır:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -164,7 +164,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Деякі служби залежать від інших служб, системних драйверів або списку завантаження груп служб. Якщо служба зупинена або неправильно працює, це впливає на залежні від неї служби.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Ця служба залежить від наступних компонентів", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Ця служба залежить від наступних компонентів:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -158,7 +158,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "一些服务依赖于其他服务,系统驱动程序和加载顺序组。如果一个系统组件被停止或者没有正确运行,依赖它的服务也会被影响。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "这个服务依赖于以下的组件", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "这个服务依赖于以下的组件:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -165,6 +165,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "一些服務依賴於其他服務,系統驅動程式和載入順序組。如果一個系統元件被停止或者沒有正確執行,依賴它的服務也會受到影響。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "這個服務依賴於以下的元件:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -165,6 +165,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "一些服務依賴於其他服務,系統驅動程式和載入順序組。如果一個系統元件被停止或者沒有正確運行,被其依賴的服務也會被影響。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "這個服務依賴於以下的元件:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -73,7 +73,8 @@ CBindStatusCallback_UpdateProgress(CBindStatusCallback *This)
|
||||
UINT Percentage;
|
||||
|
||||
Percentage = (UINT)((This->Progress * 100) / This->Size);
|
||||
if (Percentage > 99)
|
||||
// If percentage is greater than 99% but sizes don't match, do a failsafe.
|
||||
if ((Percentage > 99) && (This->Progress != This->Size))
|
||||
Percentage = 99;
|
||||
|
||||
LoadStringW(NULL, IDS_BYTES_DOWNLOADED_FULL, szMessage, ARRAYSIZE(szMessage));
|
||||
@@ -246,6 +247,10 @@ CBindStatusCallback_OnProgress(IBindStatusCallback *iface,
|
||||
break;
|
||||
|
||||
case BINDSTATUS_ENDDOWNLOADDATA:
|
||||
/* Since download is completed, update progress one last time to be at 100% */
|
||||
This->Progress = This->Size; // Ensure progress == total size
|
||||
CBindStatusCallback_UpdateProgress(This); // Show 100% progress now
|
||||
|
||||
ConResPrintf(StdOut, IDS_FILE_SAVED);
|
||||
break;
|
||||
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -38,4 +38,7 @@ Optionen:\n\
|
||||
IDS_HOP_RESPONSE " Antwort: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Zielhost nicht erreichbar.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Zielnetz nicht erreichbar.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options :\n\
|
||||
IDS_HOP_RESPONSE " rapporte : "
|
||||
IDS_DEST_HOST_UNREACHABLE "Hôte de destination inatteignable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Réseau de destination inatteignable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -39,4 +39,7 @@ Opzioni:\n\
|
||||
IDS_HOP_RESPONSE " rapporti: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destinazione ospite irraggiungibile.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destinazione rete irraggiungibile.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Opcje:\n\
|
||||
IDS_HOP_RESPONSE " raporty: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Host docelowy nieosiągalny.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Sieć docelowa nieosiągalna.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user