mirror of
https://github.com/reactos/reactos
synced 2025-10-06 16:32:42 +02:00
Compare commits
167 Commits
powermeter
...
Justin/Ker
Author | SHA1 | Date | |
---|---|---|---|
|
ae82771d43 | ||
|
a775284d21 | ||
|
9438150b2f | ||
|
7477aa5030 | ||
|
edef68afb7 | ||
|
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 |
@@ -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/
|
||||
|
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)
|
||||
|
@@ -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' はコピー先キーに既に存在します。上書きしますか?"
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -2,6 +2,7 @@
|
||||
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)
|
||||
target_link_libraries(kbswitch wine)
|
||||
add_importlibs(kbswitch advapi32 imm32 user32 shell32 shlwapi gdi32 msvcrt kernel32)
|
||||
add_cd_file(TARGET kbswitch DESTINATION reactos/system32 FOR all)
|
||||
|
||||
|
@@ -1,14 +1,17 @@
|
||||
/*
|
||||
* PROJECT: ReactOS Keyboard Layout Switcher
|
||||
* FILE: base/applications/kbswitch/kbsdll/kbsdll.c
|
||||
* PROGRAMMER: Dmitry Chapyshev <dmitry@reactos.org>
|
||||
*
|
||||
* 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;
|
||||
|
||||
@@ -18,77 +21,108 @@ PostMessageToMainWnd(UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||
PostMessage(hKbSwitchWnd, Msg, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
WinHookProc(int code, WPARAM wParam, LPARAM 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, lParam);
|
||||
}
|
||||
PostMessageToMainWnd(WM_WINDOW_ACTIVATE, (WPARAM)hwndFocus, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return CallNextHookEx(hWinHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK
|
||||
ShellHookProc(int code, WPARAM wParam, LPARAM 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;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return CallNextHookEx(hShellHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
BOOL WINAPI
|
||||
KbSwitchSetHooks(VOID)
|
||||
static LRESULT CALLBACK
|
||||
KeyboardLLHook(INT code, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
hWinHook = SetWindowsHookEx(WH_CBT, WinHookProc, hInstance, 0);
|
||||
hShellHook = SetWindowsHookEx(WH_SHELL, ShellHookProc, hInstance, 0);
|
||||
if (code < 0)
|
||||
return CallNextHookEx(hKeyboardLLHook, code, wParam, lParam);
|
||||
|
||||
if (!hWinHook || !hShellHook)
|
||||
if (code == HC_ACTION)
|
||||
{
|
||||
return FALSE;
|
||||
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
|
||||
if ((pKbStruct->vkCode == VK_SHIFT && bAltPressed) ||
|
||||
(pKbStruct->vkCode == VK_MENU && bShiftPressed) ||
|
||||
(pKbStruct->vkCode == VK_SHIFT && bCtrlPressed) ||
|
||||
(pKbStruct->vkCode == VK_CONTROL && bShiftPressed))
|
||||
{
|
||||
PostMessageToMainWnd(WM_LANG_CHANGED, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return CallNextHookEx(hKeyboardLLHook, code, wParam, lParam);
|
||||
}
|
||||
|
||||
VOID WINAPI
|
||||
KbSwitchDeleteHooks(VOID)
|
||||
BOOL APIENTRY
|
||||
KbSwitchSetHooks(_In_ BOOL bDoHook)
|
||||
{
|
||||
if (hWinHook)
|
||||
if (bDoHook)
|
||||
{
|
||||
UnhookWindowsHookEx(hWinHook);
|
||||
hWinHook = NULL;
|
||||
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
|
||||
@@ -103,9 +137,7 @@ DllMain(IN HINSTANCE hinstDLL,
|
||||
hInstance = hinstDLL;
|
||||
hKbSwitchWnd = FindWindow(szKbSwitcherName, NULL);
|
||||
if (!hKbSwitchWnd)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@@ -1,2 +1 @@
|
||||
@ stdcall KbSwitchSetHooks()
|
||||
@ stdcall KbSwitchDeleteHooks()
|
||||
1 stdcall KbSwitchSetHooks(long)
|
||||
|
@@ -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.
|
||||
@@ -29,27 +31,49 @@
|
||||
|
||||
#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;
|
||||
HKL g_ahKLs[64];
|
||||
HMENU g_hPopupMenu = NULL;
|
||||
UINT g_uTaskbarRestartMsg = 0;
|
||||
UINT g_uShellHookMessage = 0;
|
||||
|
||||
typedef struct
|
||||
/* Debug logging */
|
||||
ULONG NTAPI
|
||||
vDbgPrintExWithPrefix(IN PCCH Prefix,
|
||||
IN ULONG ComponentId,
|
||||
IN ULONG Level,
|
||||
IN PCCH Format,
|
||||
IN va_list ap)
|
||||
{
|
||||
CHAR Buffer[512];
|
||||
SIZE_T PrefixLength = strlen(Prefix);
|
||||
strncpy(Buffer, Prefix, PrefixLength);
|
||||
_vsnprintf(Buffer + PrefixLength, _countof(Buffer) - PrefixLength, Format, ap);
|
||||
Buffer[_countof(Buffer) - 1] = ANSI_NULL; /* Avoid buffer overrun */
|
||||
OutputDebugStringA(Buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
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 +93,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 +112,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,18 +157,22 @@ 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;
|
||||
|
||||
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;
|
||||
for (iKL = 0; iKL < g_cKLs; ++iKL)
|
||||
@@ -156,7 +184,7 @@ static VOID UpdateLayoutList(HKL hKL OPTIONAL)
|
||||
}
|
||||
}
|
||||
|
||||
if (g_nCurrentLayoutNum == -1 && g_cKLs < ARRAYSIZE(g_ahKLs))
|
||||
if (g_nCurrentLayoutNum == -1 && g_cKLs < _countof(g_ahKLs))
|
||||
{
|
||||
g_nCurrentLayoutNum = g_cKLs;
|
||||
g_ahKLs[g_cKLs++] = hKL;
|
||||
@@ -166,15 +194,9 @@ static VOID UpdateLayoutList(HKL hKL OPTIONAL)
|
||||
static HKL GetHKLFromLayoutNum(INT nLayoutNum)
|
||||
{
|
||||
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 GetActiveKL();
|
||||
}
|
||||
|
||||
static VOID
|
||||
@@ -202,9 +224,9 @@ GetLayoutName(INT nLayoutNum, LPTSTR szName, SIZE_T NameLength)
|
||||
DWORD dwBufLen;
|
||||
TCHAR szBuf[MAX_PATH], szKLID[CCH_LAYOUT_ID + 1];
|
||||
|
||||
GetKLIDFromLayoutNum(nLayoutNum, szKLID, ARRAYSIZE(szKLID));
|
||||
GetKLIDFromLayoutNum(nLayoutNum, 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 +267,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 +358,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 +367,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 +443,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_nCurrentLayoutNum, szKLID, _countof(szKLID));
|
||||
GetLayoutName(g_nCurrentLayoutNum, 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 +477,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);
|
||||
|
||||
@@ -486,11 +508,11 @@ ActivateLayout(HWND hwnd, ULONG uLayoutNum, HWND hwndTarget OPTIONAL, BOOL bNoAc
|
||||
if (uLayoutNum == 0 || uLayoutNum > 0xFF) /* Invalid */
|
||||
return;
|
||||
|
||||
GetKLIDFromLayoutNum(uLayoutNum, szKLID, ARRAYSIZE(szKLID));
|
||||
GetKLIDFromLayoutNum(uLayoutNum, 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)
|
||||
@@ -525,10 +547,10 @@ BuildLeftPopupMenu(VOID)
|
||||
|
||||
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 + 1, szName, _countof(szName)))
|
||||
continue;
|
||||
|
||||
mii.fMask = MIIM_ID | MIIM_STRING;
|
||||
@@ -561,30 +583,35 @@ SetHooks(VOID)
|
||||
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
|
||||
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)
|
||||
@@ -612,9 +639,9 @@ 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);
|
||||
|
||||
@@ -622,20 +649,12 @@ UpdateLanguageDisplay(HWND hwnd, HKL hKL)
|
||||
}
|
||||
|
||||
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 +669,229 @@ 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_nCurrentLayoutNum, 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();
|
||||
if (g_hPopupMenu)
|
||||
DestroyMenu(g_hPopupMenu);
|
||||
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)
|
||||
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 hLeftPopupMenu = BuildLeftPopupMenu();
|
||||
nID = TrackPopupMenu(hLeftPopupMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwnd, NULL);
|
||||
DestroyMenu(hLeftPopupMenu);
|
||||
}
|
||||
else /* WM_RBUTTONUP */
|
||||
{
|
||||
if (!g_hPopupMenu)
|
||||
g_hPopupMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_POPUP));
|
||||
|
||||
case ID_NEXTLAYOUT:
|
||||
{
|
||||
HWND hwndTarget = (HWND)lParam, hwndTargetSave = NULL;
|
||||
DWORD dwThreadID;
|
||||
HKL hKL;
|
||||
UINT uNum;
|
||||
TCHAR szClass[64];
|
||||
BOOL bCONWND = FALSE;
|
||||
HMENU hSubMenu = GetSubMenu(g_hPopupMenu, 0);
|
||||
nID = TrackPopupMenu(hSubMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwnd, NULL);
|
||||
}
|
||||
|
||||
if (hwndTarget == NULL)
|
||||
hwndTarget = g_hwndLastActive;
|
||||
PostMessage(hwnd, WM_NULL, 0, 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 (nID)
|
||||
PostMessage(hwnd, WM_COMMAND, nID, 0);
|
||||
}
|
||||
|
||||
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 (1 <= nID && nID <= 1000)
|
||||
{
|
||||
UpdateLayoutList(NULL);
|
||||
AddTrayIcon(hwnd);
|
||||
break;
|
||||
if (!IsWindow(g_hwndLastActive))
|
||||
{
|
||||
g_hwndLastActive = NULL;
|
||||
}
|
||||
ActivateLayout(hwnd, nID, 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 kbsdll.dll and this module */
|
||||
return KbSwitch_OnLangChanged(hwnd, (HWND)wParam, (HKL)lParam);
|
||||
|
||||
case WM_WINDOW_ACTIVATE: /* Comes from kbsdll.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 +907,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 +916,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 +942,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"));
|
||||
}
|
||||
|
@@ -9,4 +9,3 @@
|
||||
/* Menu items */
|
||||
#define ID_EXIT 10001
|
||||
#define ID_PREFERENCES 10002
|
||||
#define ID_NEXTLAYOUT 10003
|
||||
|
@@ -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,9 +1112,8 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
pData->scPos.x = pData->scPos.y = 0;
|
||||
|
||||
InitDetailsDlgCtrl(hDlg, pData);
|
||||
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_BYTESRADIO), FALSE);
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_WORDRADIO), FALSE);
|
||||
/* 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;
|
||||
@@ -824,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;
|
||||
}
|
||||
@@ -846,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);
|
||||
}
|
||||
|
||||
@@ -886,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;
|
||||
}
|
||||
|
||||
@@ -903,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;
|
||||
@@ -962,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
|
||||
|
@@ -157,7 +157,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_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;
|
||||
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#include "appdb.h"
|
||||
#include "configparser.h"
|
||||
#include "settings.h"
|
||||
#include "misc.h"
|
||||
|
||||
|
||||
static HKEY g_RootKeyEnum[3] = {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_LOCAL_MACHINE};
|
||||
@@ -34,6 +35,14 @@ CAppDB::CAppDB(const CStringW &path) : m_BasePath(path)
|
||||
m_BasePath.Canonicalize();
|
||||
}
|
||||
|
||||
CStringW
|
||||
CAppDB::GetDefaultPath()
|
||||
{
|
||||
CStringW path;
|
||||
GetStorageDirectory(path);
|
||||
return path;
|
||||
}
|
||||
|
||||
CAvailableApplicationInfo *
|
||||
CAppDB::FindAvailableByPackageName(const CStringW &name)
|
||||
{
|
||||
|
@@ -380,10 +380,11 @@ CAvailableApplicationInfo::GetInstallerType() const
|
||||
{
|
||||
CStringW str;
|
||||
m_Parser->GetString(DB_INSTALLER, str);
|
||||
if (str.CompareNoCase(DB_GENINSTSECTION) == 0)
|
||||
if (str.CompareNoCase(DB_INSTALLER_GENERATE) == 0)
|
||||
return INSTALLER_GENERATE;
|
||||
else
|
||||
return INSTALLER_UNKNOWN;
|
||||
if (str.CompareNoCase(DB_INSTALLER_EXEINZIP) == 0)
|
||||
return INSTALLER_EXEINZIP;
|
||||
return INSTALLER_UNKNOWN;
|
||||
}
|
||||
|
||||
BOOL
|
||||
|
@@ -60,7 +60,7 @@ BOOL IsZipFile(PCWSTR Path)
|
||||
|
||||
static int
|
||||
ExtractFilesFromZip(LPCWSTR Archive, const CStringW &OutputDir,
|
||||
EXTRACTCALLBACK Callback, void *Cookie)
|
||||
EXTRACTCALLBACK Callback, void *Context)
|
||||
{
|
||||
const UINT pkzefsutf8 = 1 << 11; // APPNOTE; APPENDIX D
|
||||
zlib_filefunc64_def zff;
|
||||
@@ -97,7 +97,7 @@ ExtractFilesFromZip(LPCWSTR Archive, const CStringW &OutputDir,
|
||||
fileatt = LOBYTE(fi.external_fa);
|
||||
|
||||
if (!NotifyFileExtractCallback(path, fi.uncompressed_size, fileatt,
|
||||
Callback, Cookie))
|
||||
Callback, Context))
|
||||
continue; // Skip file
|
||||
|
||||
path = BuildPath(OutputDir, path);
|
||||
@@ -136,22 +136,31 @@ ExtractFilesFromZip(LPCWSTR Archive, const CStringW &OutputDir,
|
||||
|
||||
static UINT
|
||||
ExtractZip(LPCWSTR Archive, const CStringW &OutputDir,
|
||||
EXTRACTCALLBACK Callback, void *Cookie)
|
||||
EXTRACTCALLBACK Callback, void *Context)
|
||||
{
|
||||
int zerr = ExtractFilesFromZip(Archive, OutputDir, Callback, Cookie);
|
||||
int zerr = ExtractFilesFromZip(Archive, OutputDir, Callback, Context);
|
||||
return zerr == UNZ_ERRNO ? GetLastError() : zerr ? ERROR_INTERNAL_ERROR : 0;
|
||||
}
|
||||
|
||||
static UINT
|
||||
ExtractCab(LPCWSTR Archive, const CStringW &OutputDir,
|
||||
EXTRACTCALLBACK Callback, void *Cookie)
|
||||
EXTRACTCALLBACK Callback, void *Context)
|
||||
{
|
||||
if (ExtractFilesFromCab(Archive, OutputDir, Callback, Cookie))
|
||||
if (ExtractFilesFromCab(Archive, OutputDir, Callback, Context))
|
||||
return ERROR_SUCCESS;
|
||||
UINT err = GetLastError();
|
||||
return err ? err : ERROR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
static UINT
|
||||
ExtractArchive(LPCWSTR Archive, const CStringW &OutputDir, EXTRACTCALLBACK Callback, void *Context)
|
||||
{
|
||||
BOOL isCab = LOBYTE(ClassifyFile(Archive)) == 'C';
|
||||
return isCab ? ExtractCab(Archive, OutputDir, Callback, Context)
|
||||
: ExtractZip(Archive, OutputDir, Callback, Context);
|
||||
}
|
||||
|
||||
enum { IM_STARTPROGRESS = WM_APP, IM_PROGRESS, IM_END };
|
||||
|
||||
static struct CommonInfo
|
||||
@@ -430,9 +439,9 @@ AddUninstallOperationsFromDB(LPCWSTR Name, WCHAR UnOp, CStringW PathPrefix = CSt
|
||||
}
|
||||
|
||||
static BOOL CALLBACK
|
||||
ExtractCallback(const EXTRACTCALLBACKINFO &, void *Cookie)
|
||||
ExtractCallback(const EXTRACTCALLBACKINFO &, void *Context)
|
||||
{
|
||||
InstallInfo &Info = *(InstallInfo *) Cookie;
|
||||
InstallInfo &Info = *(InstallInfo *)Context;
|
||||
Info.Count += 1;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -501,11 +510,7 @@ ExtractAndInstallThread(LPVOID Parameter)
|
||||
ErrorBox(Info.Error);
|
||||
|
||||
if (!Info.Error)
|
||||
{
|
||||
BOOL isCab = LOBYTE(ClassifyFile(tempdir)) == 'C';
|
||||
Info.Error = isCab ? ExtractCab(Archive, tempdir, ExtractCallback, &Info)
|
||||
: ExtractZip(Archive, tempdir, ExtractCallback, &Info);
|
||||
}
|
||||
Info.Error = ExtractArchive(Archive, tempdir, ExtractCallback, &Info);
|
||||
|
||||
if (!Info.Error)
|
||||
{
|
||||
@@ -835,3 +840,46 @@ UninstallGenerated(CInstalledApplicationInfo &AppInfo, UninstallCommandFlags Fla
|
||||
g_pInfo = &Info;
|
||||
return CreateUI(Info.Silent, UninstallThread) ? !Info.Error : FALSE;
|
||||
}
|
||||
|
||||
HRESULT
|
||||
ExtractArchiveForExecution(PCWSTR pszArchive, const CStringW &PackageName, CStringW &TempDir, CStringW &App)
|
||||
{
|
||||
WCHAR TempDirBuf[MAX_PATH], UniqueDir[MAX_PATH];
|
||||
CAppDB db(CAppDB::GetDefaultPath());
|
||||
db.UpdateAvailable();
|
||||
CAvailableApplicationInfo *pAppInfo = db.FindAvailableByPackageName(PackageName);
|
||||
if (!pAppInfo)
|
||||
return HResultFromWin32(ERROR_NOT_FOUND);
|
||||
CConfigParser *pCfg = pAppInfo->GetConfigParser();
|
||||
|
||||
if (!GetTempPathW(_countof(TempDirBuf), TempDirBuf))
|
||||
return E_FAIL;
|
||||
wsprintfW(UniqueDir, L"~%s-%u", RAPPS_NAME, GetCurrentProcessId());
|
||||
TempDir = BuildPath(TempDirBuf, UniqueDir);
|
||||
HRESULT hr = HResultFromWin32(CreateDirectoryTree(TempDir));
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = HResultFromWin32(ExtractArchive(pszArchive, TempDir, NULL, NULL));
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
CStringW Exe;
|
||||
if (pCfg->GetSectionString(DB_EXEINZIPSECTION, DB_EXEINZIP_EXE, Exe) <= 0)
|
||||
{
|
||||
WIN32_FIND_DATAW wfd;
|
||||
HANDLE hFind = FindFirstFileW(Exe = BuildPath(TempDir, L"*.exe"), &wfd);
|
||||
if (hFind != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
FindClose(hFind);
|
||||
Exe = wfd.cFileName;
|
||||
}
|
||||
}
|
||||
App = BuildPath(TempDir, Exe);
|
||||
if (GetFileAttributesW(App) & FILE_ATTRIBUTE_DIRECTORY)
|
||||
hr = HResultFromWin32(ERROR_FILE_NOT_FOUND);
|
||||
}
|
||||
|
||||
if (FAILED(hr) && !TempDir.IsEmpty())
|
||||
DeleteDirectoryTree(TempDir, hMainWnd);
|
||||
return hr;
|
||||
}
|
||||
|
@@ -23,6 +23,9 @@ class CAppDB
|
||||
public:
|
||||
CAppDB(const CStringW &path);
|
||||
|
||||
static CStringW
|
||||
GetDefaultPath();
|
||||
|
||||
VOID
|
||||
GetApps(CAtlList<CAppInfo *> &List, AppsCategories Type) const;
|
||||
CAvailableApplicationInfo *
|
||||
|
@@ -83,6 +83,7 @@ enum InstallerType
|
||||
{
|
||||
INSTALLER_UNKNOWN,
|
||||
INSTALLER_GENERATE, // .zip file automatically converted to installer by rapps
|
||||
INSTALLER_EXEINZIP,
|
||||
};
|
||||
|
||||
#define DB_VERSION L"Version"
|
||||
@@ -90,12 +91,17 @@ enum InstallerType
|
||||
#define DB_PUBLISHER L"Publisher"
|
||||
#define DB_REGNAME L"RegName"
|
||||
#define DB_INSTALLER L"Installer"
|
||||
#define DB_INSTALLER_GENERATE L"Generate"
|
||||
#define DB_INSTALLER_EXEINZIP L"ExeInZip"
|
||||
#define DB_SCOPE L"Scope" // User or Machine
|
||||
#define DB_SAVEAS L"SaveAs"
|
||||
|
||||
#define DB_GENINSTSECTION L"Generate"
|
||||
#define GENERATE_ARPSUBKEY L"RApps" // Our uninstall data is stored here
|
||||
|
||||
#define DB_EXEINZIPSECTION L"ExeInZip"
|
||||
#define DB_EXEINZIP_EXE L"Exe"
|
||||
|
||||
class CAppRichEdit;
|
||||
class CConfigParser;
|
||||
|
||||
@@ -234,3 +240,5 @@ BOOL
|
||||
UninstallGenerated(CInstalledApplicationInfo &AppInfo, UninstallCommandFlags Flags);
|
||||
BOOL
|
||||
ExtractAndRunGeneratedInstaller(const CAvailableApplicationInfo &AppInfo, LPCWSTR Archive);
|
||||
HRESULT
|
||||
ExtractArchiveForExecution(PCWSTR pszArchive, const CStringW &PackageName, CStringW &TempDir, CStringW &App);
|
||||
|
@@ -16,6 +16,12 @@
|
||||
#define CurrentArchitecture L"ppc"
|
||||
#endif
|
||||
|
||||
static inline HRESULT
|
||||
HResultFromWin32(UINT Error)
|
||||
{
|
||||
return HRESULT_FROM_WIN32(Error);
|
||||
}
|
||||
|
||||
static inline UINT
|
||||
ErrorFromHResult(HRESULT hr)
|
||||
{
|
||||
|
@@ -4,7 +4,7 @@
|
||||
* PURPOSE: Japanese resource file
|
||||
* TRANSLATORS: Copyright 2009 pcds90net <ds200xnet-ros@yahoo.co.jp>
|
||||
* Copyright 2009 Tomoya Kitagawa (sabiki) <jptomoya@yahoo.co.jp>
|
||||
* Copyright 2019-2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||
* Copyright 2019-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
@@ -87,7 +87,7 @@ END
|
||||
|
||||
IDD_DOWNLOAD_DIALOG DIALOGEX 0, 0, 220, 220
|
||||
STYLE DS_SHELLFONT | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION | WS_VISIBLE
|
||||
CAPTION "ダウンロード %ls..."
|
||||
CAPTION "%ls をダウンロード中..."
|
||||
FONT 9, "MS UI Gothic"
|
||||
BEGIN
|
||||
CONTROL "", IDC_DOWNLOAD_PROGRESS, "msctls_progress32", WS_BORDER | PBS_SMOOTH, 10, 10, 200, 12
|
||||
@@ -133,7 +133,7 @@ BEGIN
|
||||
IDS_INFO_UNINSTALLSTR "\nアンインストールに使用する文字列: "
|
||||
IDS_INFO_MODIFYPATH "\n変更に使用するパス: "
|
||||
IDS_INFO_INSTALLDATE "\nインストールした日付: "
|
||||
IDS_AINFO_PACKAGE_NAME "\nPackage Name: "
|
||||
IDS_AINFO_PACKAGE_NAME "\nパッケージ名: "
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
@@ -145,7 +145,7 @@ BEGIN
|
||||
IDS_AINFO_URLSITE "\nホームページ: "
|
||||
IDS_AINFO_LICENSE "\nライセンス: "
|
||||
IDS_AINFO_URLDOWNLOAD "\nダウンロード: "
|
||||
IDS_AINFO_LANGUAGES "\nLanguages: "
|
||||
IDS_AINFO_LANGUAGES "\n言語: "
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
@@ -176,9 +176,9 @@ BEGIN
|
||||
IDS_WELCOME_TEXT "左側からカテゴリを選択し、インストールまたはアンインストールするアプリを選んでください。\nReactOS ウェブ サイト: "
|
||||
IDS_WELCOME_URL "https://reactos.org"
|
||||
|
||||
IDS_APPWIZ_TITLE "Add/Remove Programs"
|
||||
IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system."
|
||||
IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""."
|
||||
IDS_APPWIZ_TITLE "プログラムの追加と削除"
|
||||
IDS_APPWIZ_TEXT1 "「アプリケーション」または「更新」を選択すると、システムにインストールされているアプリケーションまたは更新内容の一覧が表示されます。"
|
||||
IDS_APPWIZ_TEXT2 "プログラムを削除したり、インストールされているコンポーネントを変更するには、リストからプログラムを選択し、「アンインストール」または「変更」をクリックします。"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
@@ -206,7 +206,7 @@ BEGIN
|
||||
IDS_UNABLE_TO_WRITE "ディスクへの書き込みができません。容量を確認して下さい。"
|
||||
IDS_INSTALL_SELECTED "選択をインストール"
|
||||
IDS_SELECTEDFORINST "インストールを選択済み"
|
||||
IDS_MISMATCH_CERT_INFO "証明書は未知のものです:\nSubject: %s\nIssuer: %s\nそれでも続けますか?"
|
||||
IDS_MISMATCH_CERT_INFO "証明書は未知のものです:\n件名: %s\n発行者: %s\nそれでも続けますか?"
|
||||
IDS_UNABLE_PATH "パス形式が正しくありません"
|
||||
IDS_APP_DISPLAY_DETAILS "詳細"
|
||||
IDS_APP_DISPLAY_LIST "リスト"
|
||||
@@ -243,7 +243,7 @@ BEGIN
|
||||
IDS_LANGUAGE_NO_TRANSLATION "他の言語をサポート"
|
||||
IDS_LANGUAGE_ENGLISH_TRANSLATION "英語をサポート"
|
||||
IDS_LANGUAGE_SINGLE "単一言語"
|
||||
IDS_LANGUAGE_MORE_PLACEHOLDER " (+%d more)"
|
||||
IDS_LANGUAGE_MORE_PLACEHOLDER " (+%d 件以上)"
|
||||
IDS_LANGUAGE_AVAILABLE_PLACEHOLDER " (+%d 利用可能)"
|
||||
END
|
||||
|
||||
@@ -268,6 +268,6 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?"
|
||||
IDS_INSTGEN_CONFIRMINSTRUNAPP "Installation complete, run %s now?"
|
||||
IDS_INSTGEN_CONFIRMUNINST "%s をアンインストールしてもよろしいですか?"
|
||||
IDS_INSTGEN_CONFIRMINSTRUNAPP "インストールが完了しました。今すぐ %s を実行しますか?"
|
||||
END
|
||||
|
@@ -1058,10 +1058,8 @@ run:
|
||||
// run it
|
||||
if (Info.DLType == DLTYPE_APPLICATION)
|
||||
{
|
||||
CStringW app, params;
|
||||
SHELLEXECUTEINFOW shExInfo = {0};
|
||||
shExInfo.cbSize = sizeof(shExInfo);
|
||||
shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
|
||||
CStringW app, params, tempdir;
|
||||
SHELLEXECUTEINFOW shExInfo = { sizeof(shExInfo), SEE_MASK_NOCLOSEPROCESS, hDlg };
|
||||
shExInfo.lpVerb = L"open";
|
||||
shExInfo.lpFile = Path;
|
||||
shExInfo.lpParameters = L"";
|
||||
@@ -1077,6 +1075,16 @@ run:
|
||||
GetModuleFileNameW(NULL, const_cast<LPWSTR>(shExInfo.lpFile), MAX_PATH);
|
||||
app.ReleaseBuffer();
|
||||
}
|
||||
else if (Info.IType == INSTALLER_EXEINZIP)
|
||||
{
|
||||
HRESULT hr = ExtractArchiveForExecution(Path, Info.szPackageName, tempdir, app);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
ShowLastError(hDlg, FALSE, hr);
|
||||
goto end;
|
||||
}
|
||||
shExInfo.lpFile = app;
|
||||
}
|
||||
|
||||
/* FIXME: Do we want to log installer status? */
|
||||
WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_INSTALL, Info.szName);
|
||||
@@ -1102,6 +1110,11 @@ run:
|
||||
{
|
||||
ShowLastError(hMainWnd, FALSE, GetLastError());
|
||||
}
|
||||
|
||||
if (!tempdir.IsEmpty())
|
||||
{
|
||||
DeleteDirectoryTree(tempdir, hDlg);
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
@@ -1117,8 +1130,8 @@ end:
|
||||
if (bCancelled || (SettingsInfo.bDelInstaller && Info.DLType == DLTYPE_APPLICATION))
|
||||
{
|
||||
// Don't delete .zip/.cab files so the user can extract from them
|
||||
if (bCancelled || Info.IType == INSTALLER_GENERATE || !OpensWithExplorer(Path) ||
|
||||
HIBYTE(ClassifyFile(Path)) != PERCEIVED_TYPE_COMPRESSED)
|
||||
if (bCancelled || Info.IType == INSTALLER_GENERATE || Info.IType == INSTALLER_EXEINZIP ||
|
||||
!OpensWithExplorer(Path) || HIBYTE(ClassifyFile(Path)) != PERCEIVED_TYPE_COMPRESSED)
|
||||
{
|
||||
DeleteFileW(Path);
|
||||
}
|
||||
|
@@ -331,9 +331,7 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow)
|
||||
if (!argv)
|
||||
return FALSE;
|
||||
|
||||
CStringW Directory;
|
||||
GetStorageDirectory(Directory);
|
||||
CAppDB db(Directory);
|
||||
CAppDB db(CAppDB::GetDefaultPath());
|
||||
|
||||
BOOL bAppwizMode = (argc > 1 && MatchCmdOption(argv[1], CMD_KEY_APPWIZ));
|
||||
if (!bAppwizMode)
|
||||
|
@@ -165,9 +165,32 @@ void SetupStatusBar(HWND hWnd, BOOL bResize)
|
||||
void UpdateStatusBar(void)
|
||||
{
|
||||
HKEY hKeyRoot;
|
||||
LPCWSTR pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
|
||||
LPCWSTR pszKeyPath, pszRootName;
|
||||
LPWSTR pszFullPath;
|
||||
DWORD dwCbFullPath;
|
||||
|
||||
SendMessageW(hStatusBar, SB_SETTEXTW, 0, (LPARAM)pszKeyPath);
|
||||
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
|
||||
if (!pszKeyPath)
|
||||
return;
|
||||
|
||||
pszRootName = get_root_key_name(hKeyRoot);
|
||||
dwCbFullPath = (wcslen(pszRootName) + 1 + wcslen(pszKeyPath) + 1) * sizeof(WCHAR);
|
||||
pszFullPath = malloc(dwCbFullPath);
|
||||
if (!pszFullPath)
|
||||
return;
|
||||
|
||||
if (pszKeyPath[0] != UNICODE_NULL)
|
||||
{
|
||||
StringCbPrintfW(pszFullPath, dwCbFullPath, L"%s%s%s", pszRootName,
|
||||
((pszKeyPath[0] == L'\\') ? L"" : L"\\"), pszKeyPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
StringCbCopyW(pszFullPath, dwCbFullPath, pszRootName);
|
||||
}
|
||||
|
||||
SendMessageW(hStatusBar, SB_SETTEXTW, 0, (LPARAM)pszFullPath);
|
||||
free(pszFullPath);
|
||||
}
|
||||
|
||||
static void toggle_child(HWND hWnd, UINT cmd, HWND hchild)
|
||||
|
@@ -435,6 +435,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Добавя нова низова стойност"
|
||||
ID_EDIT_NEW_BINARYVALUE "Добавя нова двоична стойност"
|
||||
ID_EDIT_NEW_DWORDVALUE "Добавя нова стойност за двойна дума"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Внася се словесен файл в регистъра"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Изнася се целия регистър или части от него в словесен файл"
|
||||
ID_REGISTRY_LOADHIVE "Зарежда се роеви файл в регистъра"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Přidá novou položku ve formě řetězce"
|
||||
ID_EDIT_NEW_BINARYVALUE "Přidá novou položku s binární hodnotou"
|
||||
ID_EDIT_NEW_DWORDVALUE "Přidá novou DWORD položku"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje textový soubor do registru"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exportuje všechny části registru do textového souboru"
|
||||
ID_REGISTRY_LOADHIVE "Načte soubor podregistru"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Fügt eine neue Zeichenkette hinzu"
|
||||
ID_EDIT_NEW_BINARYVALUE "Fügt einen neuen Binärwärt hinzu"
|
||||
ID_EDIT_NEW_DWORDVALUE "Fügt einen neuen DWORD-Wert hinzu"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Fügt eine neue Mehrfachzeichenkette hinzu"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Fügt eine neue erweiterbare Zeichenkette hinzu"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importiert eine Textddatei in die Registry"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exportiert Teile oder die ganze Registry in eine Textdatei"
|
||||
ID_REGISTRY_LOADHIVE "Lädt einen Hive in die Registry"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Προσθέτει μια νέα αλφαριθμητική τιμή"
|
||||
ID_EDIT_NEW_BINARYVALUE "Προσθέτει μια νέα δυαδική τιμή"
|
||||
ID_EDIT_NEW_DWORDVALUE "Προσθέτιε μαι νέα double word τιμή"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Εισάγει ένα αρχείο κειμένου στη registry"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Εξάγωη όλη ή ένα κομμάτι της registry σε ένα αρχείο κειμένου"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
|
||||
ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
|
||||
ID_EDIT_NEW_DWORDVALUE "Adds a new double word value"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exports all or part of the registry to a text file"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -435,6 +435,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Añade un nuevo valor de cadena"
|
||||
ID_EDIT_NEW_BINARYVALUE "Añade un nuevo valor binario"
|
||||
ID_EDIT_NEW_DWORDVALUE "Añade un nuevo valor de doble palabra"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importa un archivo de texto al Registro"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exporta todo o parte del Registro a un archivo de texto"
|
||||
ID_REGISTRY_LOADHIVE "Carga un subárbol en el Registro"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Ajoute une nouvelle valeur chaîne"
|
||||
ID_EDIT_NEW_BINARYVALUE "Ajoute une nouvelle valeur binaire"
|
||||
ID_EDIT_NEW_DWORDVALUE "Ajoute une nouvelle valeur mot double"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importe un fichier texte dans les registres"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exporte tout ou une partie des registres dans un fichier texte"
|
||||
ID_REGISTRY_LOADHIVE "Charge un fichier ruche dans le Registre"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
|
||||
ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
|
||||
ID_EDIT_NEW_DWORDVALUE "Adds a new double word value"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exports all or part of the registry to a text file"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
|
||||
ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
|
||||
ID_EDIT_NEW_DWORDVALUE "Adds a new double word value"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exports all or part of the registry to a text file"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Menambah nilai string baru"
|
||||
ID_EDIT_NEW_BINARYVALUE "Menambah nilai biner baru"
|
||||
ID_EDIT_NEW_DWORDVALUE "Menambah nilai double word baru"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Mengimpor file teks ke dalam registri"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Mengekspor semua atau sebagian registri ke file teks"
|
||||
ID_REGISTRY_LOADHIVE "Memuat berkas hive ke dalam registri"
|
||||
|
@@ -440,6 +440,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Aggiunge un nuovo valore stringa"
|
||||
ID_EDIT_NEW_BINARYVALUE "Aggiunge un nuovo valore binario"
|
||||
ID_EDIT_NEW_DWORDVALUE "Aggiunge un nuovo valore DWORD"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importa un file di testo nel Registro"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Esporta tutto o parte del Registro in un file di testo"
|
||||
ID_REGISTRY_LOADHIVE "Carica un file hive nel Registro di sistema"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "新しい文字列値を追加します"
|
||||
ID_EDIT_NEW_BINARYVALUE "新しいバイナリ値を追加します"
|
||||
ID_EDIT_NEW_DWORDVALUE "新しい DWORD 値を追加します"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "テキスト ファイルをレジストリにインポートします"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "レジストリの一部または全体をテキスト ファイルにエクスポートします"
|
||||
ID_REGISTRY_LOADHIVE "ハイブ ファイルをレジストリに読み込みます"
|
||||
|
@@ -434,6 +434,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "새 문자열 값을 추가합니다"
|
||||
ID_EDIT_NEW_BINARYVALUE "새 바이너리 값을 추가합니다"
|
||||
ID_EDIT_NEW_DWORDVALUE "새 DWORD값을 추가합니다"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "텍스트 파일을 레지스트리로 불러 옵니다"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "텍스트 파일로 레지스트리의 전체나 일부를 내보냅니다"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Een nieuwe tekenreekswaarde toevoegen"
|
||||
ID_EDIT_NEW_BINARYVALUE "Een nieuwe binaire waarde toevoegen"
|
||||
ID_EDIT_NEW_DWORDVALUE "Een nieuwe DWORD-waarde toevoegen"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Een tekstbestand in het register importeren"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Het register of een gedeelte ervan naar een tekstbestand exporteren"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Legger til en ny strengverdi"
|
||||
ID_EDIT_NEW_BINARYVALUE "Legger til en ny binær verdi"
|
||||
ID_EDIT_NEW_DWORDVALUE "Legger til en ny DWORD-verdi"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importerer en tekstfil inn i Registret"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Eksporterer hele eller deler av Registret til en tekstfil"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -440,6 +440,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Dodaje nową wartość ciągu"
|
||||
ID_EDIT_NEW_BINARYVALUE "Dodaje nową wartość binarną"
|
||||
ID_EDIT_NEW_DWORDVALUE "Dodaje nową wartość DWORD"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Dodaje nową wartość wielociągu"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Dodaje nową wartość ciągu rozwijalnego"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importuje plik do rejestru"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Eksportuje całość lub część rejestru do pliku"
|
||||
ID_REGISTRY_LOADHIVE "Ładuje plik Drzewa do rejestru"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Adiciona novo valor string"
|
||||
ID_EDIT_NEW_BINARYVALUE "Adiciona novo valor binário"
|
||||
ID_EDIT_NEW_DWORDVALUE "Adiciona novo valor DWORD"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importa um arquivo de texto para o registro"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exporta todo ou parte do Registro para um arquivo texto"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -442,6 +442,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Adiciona um novo valor texto"
|
||||
ID_EDIT_NEW_BINARYVALUE "Adiciona um novo valor binário"
|
||||
ID_EDIT_NEW_DWORDVALUE "Adiciona um novo valor DWORD"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importa um ficheiro de texto para o registo"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exporta todo ou parte do registo para um ficheiro de texto"
|
||||
ID_REGISTRY_LOADHIVE "Carrega um ficheiro de secção no registo"
|
||||
|
@@ -442,6 +442,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Adaugă o nouă valoare șir"
|
||||
ID_EDIT_NEW_BINARYVALUE "Adaugă o nouă valoare de 1 bit"
|
||||
ID_EDIT_NEW_DWORDVALUE "Adaugă o nouă valoare de 32 de biți"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importă registru dintr-un fișier"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exportă registrul total sau parțial într-un fișier"
|
||||
ID_REGISTRY_LOADHIVE "Încarcă un fișier binar în registru"
|
||||
|
@@ -445,6 +445,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Добавляет новое строковое значение"
|
||||
ID_EDIT_NEW_BINARYVALUE "Добавляет новое бинарное значение"
|
||||
ID_EDIT_NEW_DWORDVALUE "Добавляет новое DWORD-значение"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Добавляет новое многострочное значение"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Добавляет новое расширяемое строковое значение"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Импортирует текстовой файл в реестр"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Экспортирует весь реестр или его часть в текстовой файл"
|
||||
ID_REGISTRY_LOADHIVE "Загрузить файл куста реестра в реестр"
|
||||
|
@@ -435,6 +435,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Pridá novú reťazcovú hodnotu"
|
||||
ID_EDIT_NEW_BINARYVALUE "Pridá novú binárnu hodnotu"
|
||||
ID_EDIT_NEW_DWORDVALUE "Pridá novú double word hodnotu"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exports all or part of the registry to a text file"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Doda nov niz"
|
||||
ID_EDIT_NEW_BINARYVALUE "Doda novo binarno vrednost"
|
||||
ID_EDIT_NEW_DWORDVALUE "Doda novo DWORD vrednost"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "V register uvozi datoteko z besedilom"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Registrsko datoteko ali njen del izvozi v besedilno datoteko"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -435,6 +435,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Shton një vlerë të re string"
|
||||
ID_EDIT_NEW_BINARYVALUE "Shton një vlerë të re binar"
|
||||
ID_EDIT_NEW_DWORDVALUE "ADDS një vlerë të re të dyfishtë fjalën"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importon një file teksti në regjistër"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Eksportet gjitha ose pjesë e regjistrit në një skedar teksti"
|
||||
ID_REGISTRY_LOADHIVE "Ngarkon një dokument në regjistër"
|
||||
|
@@ -432,6 +432,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Lägger till ett nytt strängvärde"
|
||||
ID_EDIT_NEW_BINARYVALUE "Lägger till ett nytt binärt värde"
|
||||
ID_EDIT_NEW_DWORDVALUE "Lägger till ett nytt dubbelordsvärde"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Importerar en textfil till registret"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exporterar hela eller en del av registret till en textfil"
|
||||
ID_REGISTRY_LOADHIVE "Läser in registerdatafil till registret"
|
||||
|
@@ -434,6 +434,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
|
||||
ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
|
||||
ID_EDIT_NEW_DWORDVALUE "Adds a new double word value"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Exports all or part of the registry to a text file"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -434,6 +434,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Yeni bir dizi değeri ekler"
|
||||
ID_EDIT_NEW_BINARYVALUE "Yeni bir ikili değer ekler"
|
||||
ID_EDIT_NEW_DWORDVALUE "Yeni bir DWORD değeri ekler"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Bir metin dosyasını Kayıt Defteri'ne alır"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Kayıt Defteri'nin tümünü ya da bir bölümünü bir metin dosyasına verir"
|
||||
ID_REGISTRY_LOADHIVE "Kayıt Defteri'ne bir yığın dosyasını yükler"
|
||||
|
@@ -434,6 +434,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "Додає нове рядкове значення"
|
||||
ID_EDIT_NEW_BINARYVALUE "Додає нове двійкове значення"
|
||||
ID_EDIT_NEW_DWORDVALUE "Додає нове DWORD-значення"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "Імпортує текстовий файл до реєстру"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "Експортує весь реєстр або його частину в текстовий файл"
|
||||
ID_REGISTRY_LOADHIVE "Loads a hive file into the registry"
|
||||
|
@@ -442,6 +442,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "添加新字符串值"
|
||||
ID_EDIT_NEW_BINARYVALUE "添加新二进制值"
|
||||
ID_EDIT_NEW_DWORDVALUE "添加新 DWORD 值"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "将文本文件导入到注册表中"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "将注册表全部或部分导出到文件中"
|
||||
ID_REGISTRY_LOADHIVE "加載配置单元到注册表中"
|
||||
|
@@ -452,6 +452,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "新增新的字串值"
|
||||
ID_EDIT_NEW_BINARYVALUE "新增新二進制值"
|
||||
ID_EDIT_NEW_DWORDVALUE "新增新 DWORD 值"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "將檔案匯入到登錄中"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "將登錄全部或部分匯出到檔案中"
|
||||
ID_REGISTRY_LOADHIVE "載入 Hive 控制檔到登錄中"
|
||||
|
@@ -441,6 +441,8 @@ BEGIN
|
||||
ID_EDIT_NEW_STRINGVALUE "新增新的字元串值"
|
||||
ID_EDIT_NEW_BINARYVALUE "新增新的二進制值"
|
||||
ID_EDIT_NEW_DWORDVALUE "新增新的 DWORD 值"
|
||||
ID_EDIT_NEW_MULTISTRINGVALUE "Adds a new multi string value"
|
||||
ID_EDIT_NEW_EXPANDABLESTRINGVALUE "Adds a new expandable string value"
|
||||
ID_REGISTRY_IMPORTREGISTRYFILE "將檔案匯入到登錄中"
|
||||
ID_REGISTRY_EXPORTREGISTRYFILE "將登錄全部或部分匯出到檔案中"
|
||||
ID_REGISTRY_LOADHIVE "載入 Hive 控制檔到登錄中"
|
||||
|
@@ -2294,6 +2294,9 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||
tr.chrg.cpMax = nLen;
|
||||
tr.lpstrText = data;
|
||||
SendMessageW(hwndEditor, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
|
||||
#ifdef __REACTOS__
|
||||
data[tr.chrg.cpMax - tr.chrg.cpMin] = UNICODE_NULL;
|
||||
#endif
|
||||
MessageBoxW(NULL, data, wszAppTitle, MB_OK);
|
||||
HeapFree( GetProcessHeap(), 0, data );
|
||||
|
||||
|
5
base/ctf/CMakeLists.txt
Normal file
5
base/ctf/CMakeLists.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
add_subdirectory(ctfmon)
|
||||
add_subdirectory(msctf)
|
||||
add_subdirectory(msctfime)
|
||||
add_subdirectory(msutb)
|
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "precomp.h"
|
||||
#include "CRegWatcher.h"
|
||||
#include <ime/indicml.h>
|
||||
|
||||
// The event handles to use in watching
|
||||
HANDLE CRegWatcher::s_ahWatchEvents[WATCHENTRY_MAX] = { NULL };
|
||||
@@ -206,7 +207,7 @@ CRegWatcher::KillInternat()
|
||||
}
|
||||
|
||||
// Kill the "Indicator" window (that internat.exe creates)
|
||||
HWND hwndInternat = ::FindWindow(TEXT("Indicator"), NULL);
|
||||
HWND hwndInternat = ::FindWindow(INDICATOR_CLASS, NULL);
|
||||
if (hwndInternat)
|
||||
::PostMessage(hwndInternat, WM_CLOSE, 0, 0);
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user