From f43bb8d7df37433ed1ecd387e5ea383ca23a2212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 23 Nov 2014 20:10:15 +0000 Subject: [PATCH] [TASKMGR] - Show programs command line in taskmgr. Patch by Ismael Ferreras Morezuelas with minor modifications by me. - int nMaxCount --> ULONG nMaxCount (that makes everything clearer and removes MSVC warnings). CORE-5467 #resolve #comment Feature committed in revision 65469, cheers ;) svn path=/trunk/; revision=65469 --- reactos/base/applications/taskmgr/column.c | 1 + reactos/base/applications/taskmgr/column.h | 4 +- .../base/applications/taskmgr/lang/bg-BG.rc | 2 + .../base/applications/taskmgr/lang/cs-CZ.rc | 2 + .../base/applications/taskmgr/lang/da-DK.rc | 2 + .../base/applications/taskmgr/lang/de-DE.rc | 2 + .../base/applications/taskmgr/lang/el-GR.rc | 2 + .../base/applications/taskmgr/lang/en-US.rc | 2 + .../base/applications/taskmgr/lang/es-ES.rc | 12 +- .../base/applications/taskmgr/lang/fr-FR.rc | 2 + .../base/applications/taskmgr/lang/he-IL.rc | 2 + .../base/applications/taskmgr/lang/hu-HU.rc | 2 + .../base/applications/taskmgr/lang/id-ID.rc | 2 + .../base/applications/taskmgr/lang/it-IT.rc | 2 + .../base/applications/taskmgr/lang/ja-JP.rc | 2 + .../base/applications/taskmgr/lang/ko-KR.rc | 2 + .../base/applications/taskmgr/lang/nl-NL.rc | 2 + .../base/applications/taskmgr/lang/no-NO.rc | 2 + .../base/applications/taskmgr/lang/pl-PL.rc | 2 + .../base/applications/taskmgr/lang/pt-BR.rc | 2 + .../base/applications/taskmgr/lang/ro-RO.rc | 2 + .../base/applications/taskmgr/lang/ru-RU.rc | 2 + .../base/applications/taskmgr/lang/sk-SK.rc | 2 + .../base/applications/taskmgr/lang/sq-AL.rc | 2 + .../base/applications/taskmgr/lang/sv-SE.rc | 2 + .../base/applications/taskmgr/lang/tr-TR.rc | 2 + .../base/applications/taskmgr/lang/uk-UA.rc | 2 + .../base/applications/taskmgr/lang/zh-CN.rc | 2 + .../base/applications/taskmgr/lang/zh-TW.rc | 2 + reactos/base/applications/taskmgr/perfdata.c | 140 +++++++++++++++++- reactos/base/applications/taskmgr/perfdata.h | 20 ++- reactos/base/applications/taskmgr/procpage.c | 18 ++- reactos/base/applications/taskmgr/resource.h | 2 + reactos/base/applications/taskmgr/taskmgr.c | 4 +- 34 files changed, 232 insertions(+), 21 deletions(-) diff --git a/reactos/base/applications/taskmgr/column.c b/reactos/base/applications/taskmgr/column.c index 093f78327c7..71b8db3426f 100644 --- a/reactos/base/applications/taskmgr/column.c +++ b/reactos/base/applications/taskmgr/column.c @@ -54,6 +54,7 @@ const PresetColumnEntry ColumnPresets[COLUMN_NMAX] = { DECLARE_COLUMN_PRESET(IOREADBYTES, 70, FALSE) DECLARE_COLUMN_PRESET(IOWRITEBYTES, 70, FALSE) DECLARE_COLUMN_PRESET(IOOTHERBYTES, 70, FALSE) + DECLARE_COLUMN_PRESET(COMMANDLINE, 450, FALSE) }; static int InsertColumn(int nCol, LPCWSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem); diff --git a/reactos/base/applications/taskmgr/column.h b/reactos/base/applications/taskmgr/column.h index 9aeb3ec4cfd..a92efa313cf 100644 --- a/reactos/base/applications/taskmgr/column.h +++ b/reactos/base/applications/taskmgr/column.h @@ -47,7 +47,8 @@ #define COLUMN_IOREADBYTES 22 #define COLUMN_IOWRITEBYTES 23 #define COLUMN_IOOTHERBYTES 24 -#define COLUMN_NMAX 25 +#define COLUMN_COMMANDLINE 25 +#define COLUMN_NMAX 26 /* * temporary fix: @@ -104,6 +105,7 @@ extern const PresetColumnEntry ColumnPresets[COLUMN_NMAX]; #define Column_IOWriteBytes Columns[COLUMN_IOWRITEBYTES] #define Column_IOOther Columns[COLUMN_IOOTHER] #define Column_IOOtherBytes Columns[COLUMN_IOOTHERBYTES] +#define Column_CommandLine Columns[COLUMN_COMMANDLINE] void ProcessPage_OnViewSelectColumns(void); void AddColumns(void); diff --git a/reactos/base/applications/taskmgr/lang/bg-BG.rc b/reactos/base/applications/taskmgr/lang/bg-BG.rc index 3d838d9cf64..9a381020513 100644 --- a/reactos/base/applications/taskmgr/lang/bg-BG.rc +++ b/reactos/base/applications/taskmgr/lang/bg-BG.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "В/И байтове за писане", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 125, 127, 65, 10 CONTROL "Други В/И", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 125, 138, 115, 10 CONTROL "Други В/И байтове", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 125, 149, 115, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 125, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "В/И прочетени байтове" IDS_TAB_IOWRITESBYTES "В/И записани байтове" IDS_TAB_IOOTHERBYTES "В/И други байтове" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Избор на стълбове..." IDS_MENU_16BITTASK "&Показване на 16битови задачи" IDS_MENU_WINDOWS "&Прозорци" diff --git a/reactos/base/applications/taskmgr/lang/cs-CZ.rc b/reactos/base/applications/taskmgr/lang/cs-CZ.rc index 79571b80ae1..ac024b8a1f0 100644 --- a/reactos/base/applications/taskmgr/lang/cs-CZ.rc +++ b/reactos/base/applications/taskmgr/lang/cs-CZ.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "I/O zapsané bajty", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 72, 10 CONTROL "I/O ostatní", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 48, 10 CONTROL "I/O ostatní bajty", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O přečtené bajty" IDS_TAB_IOWRITESBYTES "I/O zapsané bajty" IDS_TAB_IOOTHERBYTES "I/O ostatní bajty" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Vybrat sloupce..." IDS_MENU_16BITTASK "&Zobrazit 16-bitové úlohy" IDS_MENU_WINDOWS "&Okna" diff --git a/reactos/base/applications/taskmgr/lang/da-DK.rc b/reactos/base/applications/taskmgr/lang/da-DK.rc index a42d42e6cf7..26dbe41e104 100644 --- a/reactos/base/applications/taskmgr/lang/da-DK.rc +++ b/reactos/base/applications/taskmgr/lang/da-DK.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "I/O Skrevet Bytes", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O Andet", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O Andre Bytes", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Read Bytes" IDS_TAB_IOWRITESBYTES "I/O Write Bytes" IDS_TAB_IOOTHERBYTES "I/O Other Bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Select Columns..." IDS_MENU_16BITTASK "&Show 16-bit tasks" IDS_MENU_WINDOWS "&Windows" diff --git a/reactos/base/applications/taskmgr/lang/de-DE.rc b/reactos/base/applications/taskmgr/lang/de-DE.rc index b1990af826c..bc4cd00169b 100644 --- a/reactos/base/applications/taskmgr/lang/de-DE.rc +++ b/reactos/base/applications/taskmgr/lang/de-DE.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "E/A-Bytes (Schreiben)", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 127, 105, 10 // 107 CONTROL "E/A (Andere)", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 138, 105, 10 // 107 CONTROL "E/A-Bytes (Andere)", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 149, 110, 10 // 107 + CONTROL "Befeh&lszeile", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 160, 65, 10 // 107 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "E/A-Bytes (Lesen)" IDS_TAB_IOWRITESBYTES "E/A-Bytes (Schreiben)" IDS_TAB_IOOTHERBYTES "E/A-Bytes (Andere)" + IDS_TAB_COMMANDLINE "Befehlszeile" IDS_MENU_SELECTCOLUMNS "&Spalten auswählen..." IDS_MENU_16BITTASK "&16-Bit-Tasks anzeigen" IDS_MENU_WINDOWS "&Fenster" diff --git a/reactos/base/applications/taskmgr/lang/el-GR.rc b/reactos/base/applications/taskmgr/lang/el-GR.rc index 2aa31e0a8bb..7a65c88db56 100644 --- a/reactos/base/applications/taskmgr/lang/el-GR.rc +++ b/reactos/base/applications/taskmgr/lang/el-GR.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "I/O Write Bytes", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O Other", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O Other Bytes", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Read Bytes" IDS_TAB_IOWRITESBYTES "I/O Write Bytes" IDS_TAB_IOOTHERBYTES "I/O Other Bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Select Columns..." IDS_MENU_16BITTASK "&Show 16-bit tasks" IDS_MENU_WINDOWS "&Windows" diff --git a/reactos/base/applications/taskmgr/lang/en-US.rc b/reactos/base/applications/taskmgr/lang/en-US.rc index 010d4ea0e0d..d25de52cf73 100644 --- a/reactos/base/applications/taskmgr/lang/en-US.rc +++ b/reactos/base/applications/taskmgr/lang/en-US.rc @@ -313,6 +313,7 @@ BEGIN CONTROL "I/O Write Bytes", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O Other", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O Other Bytes", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -408,6 +409,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Read Bytes" IDS_TAB_IOWRITESBYTES "I/O Write Bytes" IDS_TAB_IOOTHERBYTES "I/O Other Bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Select Columns..." IDS_MENU_16BITTASK "&Show 16-bit tasks" IDS_MENU_WINDOWS "&Windows" diff --git a/reactos/base/applications/taskmgr/lang/es-ES.rc b/reactos/base/applications/taskmgr/lang/es-ES.rc index 5dabd18a8c4..768703c8f20 100644 --- a/reactos/base/applications/taskmgr/lang/es-ES.rc +++ b/reactos/base/applications/taskmgr/lang/es-ES.rc @@ -292,7 +292,7 @@ BEGIN DEFPUSHBUTTON "Aceptar", IDOK, 126, 178, 50, 14 // 84 PUSHBUTTON "Cancelar", IDCANCEL, 180, 178, 50, 14 // 138 LTEXT "Seleccione las columnas que aparecerán en la página de Procesos del Administrador de tareas.", IDC_STATIC, 7, 7, 221, 17 // 181 - CONTROL "Nombre de ruta de la &imagen", IDC_IMAGENAME, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 7, 28, 88, 10 // 56 + CONTROL "Nombre de ruta de la &imagen", IDC_IMAGENAME, "Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP, 7, 28, 105, 10 // 56 CONTROL "Identificador de proceso (&PID)", IDC_PID, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 39, 120, 10 // 88 CONTROL "Uso de &CPU", IDC_CPUUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 50, 53, 10 CONTROL "Ti&empo de CPU", IDC_CPUTIME, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 61, 65, 10 // 48 @@ -301,8 +301,8 @@ BEGIN CONTROL "Uso má&ximo de la memoria", IDC_PEAKMEMORYUSAGE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 94, 120, 10 // 82 CONTROL "Err&ores de página", IDC_PAGEFAULTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 105, 80, 10 // 53 CONTROL "O&bjetos de USUARIO", IDC_USEROBJECTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 116, 80, 10 // 62 - CONTROL "Lecturas de E/S", IDC_IOREADS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 127, 60, 10 // 49 - CONTROL "Bytes de lectura de E/S", IDC_IOREADBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 138, 65, 10 + CONTROL "Lecturas de E/S", IDC_IOREADS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 127, 70, 10 // 49 + CONTROL "Bytes de lectura de E/S", IDC_IOREADBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 138, 85, 10 CONTROL "I&d. de sesión", IDC_SESSIONID, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 149, 65, 10 // 50 CONTROL "&Nombre de usuario", IDC_USERNAME, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 7, 160, 75, 10 // 51 CONTROL "Diferencia de erro&res de página", IDC_PAGEFAULTSDELTA, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 28, 120, 10 // 107, 60 @@ -310,13 +310,14 @@ BEGIN CONTROL "B&loque paginado", IDC_PAGEDPOOL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 50, 67, 10 // 107, 53 CONTROL "Blo&que no paginado", IDC_NONPAGEDPOOL, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 61, 115, 10 // 107 CONTROL "P&rioridad base", IDC_BASEPRIORITY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 72, 80, 10 // 107 - CONTROL "&Recuento de identificadores", IDC_HANDLECOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 83, 59, 10 // 107 - CONTROL "Nú&mero de subprocesos", IDC_THREADCOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 94, 59, 10 // 107 + CONTROL "&Recuento de identificadores", IDC_HANDLECOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 83, 105, 10 // 107 + CONTROL "Nú&mero de subprocesos", IDC_THREADCOUNT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 94, 85, 10 // 107 CONTROL "Objetos &GDI", IDC_GDIOBJECTS, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 105, 55, 10 // 107 CONTROL "Escrituras de E/S", IDC_IOWRITES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 116, 90, 10 // 107 CONTROL "Bytes de escritura de E/S", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 127, 105, 10 // 107 CONTROL "Otros de E/S", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 138, 60, 10 CONTROL "Otros bytes de E/S", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 149, 75, 10 + CONTROL "&Línea de comandos", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 160, 75, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "Bytes de lectura de E/S" IDS_TAB_IOWRITESBYTES "Bytes de escritura de E/S" IDS_TAB_IOOTHERBYTES "Otros bytes de E/S" + IDS_TAB_COMMANDLINE "Línea de comandos" IDS_MENU_SELECTCOLUMNS "&Seleccionar columnas..." IDS_MENU_16BITTASK "Mos&trar tareas de 16-bit" IDS_MENU_WINDOWS "&Ventanas" diff --git a/reactos/base/applications/taskmgr/lang/fr-FR.rc b/reactos/base/applications/taskmgr/lang/fr-FR.rc index 4d8e64b7f1f..94d3c584a92 100644 --- a/reactos/base/applications/taskmgr/lang/fr-FR.rc +++ b/reactos/base/applications/taskmgr/lang/fr-FR.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "Octets d'écriture E/S", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 129, 127, 108, 10 CONTROL "Autres E/S", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 129, 138, 108, 10 CONTROL "Octets d'autres E/S", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 129, 149, 108, 10 + CONTROL "&Ligne de commande", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 129, 160, 95, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "Octets de lecture E/S" IDS_TAB_IOWRITESBYTES "Octets d'écriture E/S" IDS_TAB_IOOTHERBYTES "Octets d'autres E/S" + IDS_TAB_COMMANDLINE "Ligne de commande" IDS_MENU_SELECTCOLUMNS "&Sélectionner les colonnes..." IDS_MENU_16BITTASK "&Afficher les tâches 16 bits" IDS_MENU_WINDOWS "&Fenêtres" diff --git a/reactos/base/applications/taskmgr/lang/he-IL.rc b/reactos/base/applications/taskmgr/lang/he-IL.rc index 6ac0d150129..518e0b8f9f3 100644 --- a/reactos/base/applications/taskmgr/lang/he-IL.rc +++ b/reactos/base/applications/taskmgr/lang/he-IL.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "I/O Write Bytes", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O Other", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O Other Bytes", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Read Bytes" IDS_TAB_IOWRITESBYTES "I/O Write Bytes" IDS_TAB_IOOTHERBYTES "I/O Other Bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Select Columns..." IDS_MENU_16BITTASK "&Show 16-bit tasks" IDS_MENU_WINDOWS "&Windows" diff --git a/reactos/base/applications/taskmgr/lang/hu-HU.rc b/reactos/base/applications/taskmgr/lang/hu-HU.rc index 2fea5c50c1b..9a429414256 100644 --- a/reactos/base/applications/taskmgr/lang/hu-HU.rc +++ b/reactos/base/applications/taskmgr/lang/hu-HU.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "I/O Írott bájtok", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "Egyéb I/O mûveletek", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "Egyéb I/O mûveletek bájtjai", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Olvasott bájtok" IDS_TAB_IOWRITESBYTES "I/O Írott bájtok" IDS_TAB_IOOTHERBYTES "Egyéb I/O bájtok" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Oszlopok kiválasztása..." IDS_MENU_16BITTASK "&16bites feladatok megjelenítése" IDS_MENU_WINDOWS "&Ablak" diff --git a/reactos/base/applications/taskmgr/lang/id-ID.rc b/reactos/base/applications/taskmgr/lang/id-ID.rc index 724c5a2e4c3..ff67ec3d092 100644 --- a/reactos/base/applications/taskmgr/lang/id-ID.rc +++ b/reactos/base/applications/taskmgr/lang/id-ID.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "I/O Write Bytes", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O Other", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O Other Bytes", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Read Bytes" IDS_TAB_IOWRITESBYTES "I/O Write Bytes" IDS_TAB_IOOTHERBYTES "I/O Other Bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Select Columns..." IDS_MENU_16BITTASK "&Show 16-bit tasks" IDS_MENU_WINDOWS "&Windows" diff --git a/reactos/base/applications/taskmgr/lang/it-IT.rc b/reactos/base/applications/taskmgr/lang/it-IT.rc index 31deb63f22d..a3197c4f0ca 100644 --- a/reactos/base/applications/taskmgr/lang/it-IT.rc +++ b/reactos/base/applications/taskmgr/lang/it-IT.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "Scritture I/O Byte", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 69, 10 CONTROL "Altro I/O", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "Altro I/O Bytes", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "&Linea di comando", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Letture Bytes" IDS_TAB_IOWRITESBYTES "I/O Scritture Bytes" IDS_TAB_IOOTHERBYTES "I/O Altro Bytes" + IDS_TAB_COMMANDLINE "Linea di comando" IDS_MENU_SELECTCOLUMNS "&Selezione Colonne..." IDS_MENU_16BITTASK "&Mostra task 16-bit" IDS_MENU_WINDOWS "&Finestre" diff --git a/reactos/base/applications/taskmgr/lang/ja-JP.rc b/reactos/base/applications/taskmgr/lang/ja-JP.rc index 6f78c034bfe..38be0860eab 100644 --- a/reactos/base/applications/taskmgr/lang/ja-JP.rc +++ b/reactos/base/applications/taskmgr/lang/ja-JP.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "I/O 書き込みバイト数", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O その他", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O その他のバイト数", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O 読み取りバイト数" IDS_TAB_IOWRITESBYTES "I/O 書き込みバイト数" IDS_TAB_IOOTHERBYTES "I/O その他のバイト数" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "列の選択(&S)..." IDS_MENU_16BITTASK "16 ビット タスクの表示(&S)" IDS_MENU_WINDOWS "ウィンドウ(&W)" diff --git a/reactos/base/applications/taskmgr/lang/ko-KR.rc b/reactos/base/applications/taskmgr/lang/ko-KR.rc index 88d4ec07ebd..b54eda8a81a 100644 --- a/reactos/base/applications/taskmgr/lang/ko-KR.rc +++ b/reactos/base/applications/taskmgr/lang/ko-KR.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "I/O 쓰기 바이트", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O 기타", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O 기타 바이트", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O 읽기 바이트" IDS_TAB_IOWRITESBYTES "I/O 쓰기 바이트" IDS_TAB_IOOTHERBYTES "I/O 기타 바이트" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "열 선택(&S)" IDS_MENU_16BITTASK "16비트 작업 보이기(&S)" IDS_MENU_WINDOWS "창(&W)" diff --git a/reactos/base/applications/taskmgr/lang/nl-NL.rc b/reactos/base/applications/taskmgr/lang/nl-NL.rc index ac7e845fba4..ddeb52a0616 100644 --- a/reactos/base/applications/taskmgr/lang/nl-NL.rc +++ b/reactos/base/applications/taskmgr/lang/nl-NL.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "I/O: geschreven bytes", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 117, 127, 100, 10 CONTROL "I/O: overig", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 117, 138, 100, 10 CONTROL "I/O: overige bytes", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 117, 149, 100, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 117, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O: gelezen bytes" IDS_TAB_IOWRITESBYTES "I/O: geschreven bytes" IDS_TAB_IOOTHERBYTES "I/O: overige bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Kolommen selecteren..." IDS_MENU_16BITTASK "16-&bits taken weergeven" IDS_MENU_WINDOWS "&Vensters" diff --git a/reactos/base/applications/taskmgr/lang/no-NO.rc b/reactos/base/applications/taskmgr/lang/no-NO.rc index 5e785e71c4b..1e538c93f6a 100644 --- a/reactos/base/applications/taskmgr/lang/no-NO.rc +++ b/reactos/base/applications/taskmgr/lang/no-NO.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "I/O skrevne byte", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 70, 10 CONTROL "I/O Annet", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O Andre byte", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Leser Byte" IDS_TAB_IOWRITESBYTES "I/O Skriver Byte" IDS_TAB_IOOTHERBYTES "I/O Annet Byte" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Velg kolonner..." IDS_MENU_16BITTASK "&Vis 16-biter oppgave" IDS_MENU_WINDOWS "&Vinduer" diff --git a/reactos/base/applications/taskmgr/lang/pl-PL.rc b/reactos/base/applications/taskmgr/lang/pl-PL.rc index 06bf6f4e3b9..a3643c8d086 100644 --- a/reactos/base/applications/taskmgr/lang/pl-PL.rc +++ b/reactos/base/applications/taskmgr/lang/pl-PL.rc @@ -323,6 +323,7 @@ BEGIN CONTROL "Zapisy We/Wy w bajtach", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "Inne We/Wy", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "Inne We/Wy w bajtach", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Linia poleceń", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -418,6 +419,7 @@ BEGIN IDS_TAB_IOREADBYTES "Odczyty We/Wy w bajtach" IDS_TAB_IOWRITESBYTES "Zapisy We/Wy w bajtach" IDS_TAB_IOOTHERBYTES "Inne We/Wy w bajtach" + IDS_TAB_COMMANDLINE "Linia poleceń" IDS_MENU_SELECTCOLUMNS "Wybierz &kolumny..." IDS_MENU_16BITTASK "Pokaż 16-&bitowe zadania" IDS_MENU_WINDOWS "O&kna" diff --git a/reactos/base/applications/taskmgr/lang/pt-BR.rc b/reactos/base/applications/taskmgr/lang/pt-BR.rc index a708bd2cedf..fe940cf563f 100644 --- a/reactos/base/applications/taskmgr/lang/pt-BR.rc +++ b/reactos/base/applications/taskmgr/lang/pt-BR.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "Bytes de gravação de E/S", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 127, 97, 10 CONTROL "Outras E/S", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 138, 47, 10 CONTROL "Outros bytes de E/S", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 149, 77, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 160, 95, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "Bytes de leitura de E/S" IDS_TAB_IOWRITESBYTES "Bytes de gravação de E/S" IDS_TAB_IOOTHERBYTES "Outros Bytes de E/S" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Selecionar colunas..." IDS_MENU_16BITTASK "&Exibir tarefas de 16 bits" IDS_MENU_WINDOWS "&Janelas" diff --git a/reactos/base/applications/taskmgr/lang/ro-RO.rc b/reactos/base/applications/taskmgr/lang/ro-RO.rc index 9362ceb28df..60deced0e79 100644 --- a/reactos/base/applications/taskmgr/lang/ro-RO.rc +++ b/reactos/base/applications/taskmgr/lang/ro-RO.rc @@ -321,6 +321,7 @@ BEGIN CONTROL "In/Ex octeți scriși", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 120, 127, 110, 10 CONTROL "In/Ex altceva", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 120, 138, 110, 10 CONTROL "In/Ex octeți din altceva", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 120, 149, 110, 10 + CONTROL "&Linia de comandă", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 120, 160, 65, 10 END /* String Tables */ @@ -416,6 +417,7 @@ BEGIN IDS_TAB_IOREADBYTES "In/Ex octeți citiți" IDS_TAB_IOWRITESBYTES "In/Ex octeți scriși" IDS_TAB_IOOTHERBYTES "In/Ex octeți din altceva" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Selectare coloane…" IDS_MENU_16BITTASK "Afișează activități pe 16 &biți" IDS_MENU_WINDOWS "F&erestre" diff --git a/reactos/base/applications/taskmgr/lang/ru-RU.rc b/reactos/base/applications/taskmgr/lang/ru-RU.rc index c1341868987..f0018964379 100644 --- a/reactos/base/applications/taskmgr/lang/ru-RU.rc +++ b/reactos/base/applications/taskmgr/lang/ru-RU.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "Записано байт", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "Прочий ввод-вывод", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 90, 10 CONTROL "Прочих байт при вводе-выводе", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 122, 10 + CONTROL "Коммандная строка", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 90, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "Прочитано байт" IDS_TAB_IOWRITESBYTES "Записано байт" IDS_TAB_IOOTHERBYTES "Прочих байт при вводе-выводе" + IDS_TAB_COMMANDLINE "Коммандная строка" IDS_MENU_SELECTCOLUMNS "В&ыбрать столбцы..." IDS_MENU_16BITTASK "&Отображать 16-разрядные задачи" IDS_MENU_WINDOWS "&Окна" diff --git a/reactos/base/applications/taskmgr/lang/sk-SK.rc b/reactos/base/applications/taskmgr/lang/sk-SK.rc index a306b23ce8e..0598c835aa1 100644 --- a/reactos/base/applications/taskmgr/lang/sk-SK.rc +++ b/reactos/base/applications/taskmgr/lang/sk-SK.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "Vstup a výstup - zapísané bajty", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 130, 127, 112, 10 CONTROL "Vstup a výstup - iné", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 130, 138, 77, 10 CONTROL "Vstup a výstup - iné bajty", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 130, 149, 97, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 130, 160, 95, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "Vstup a výstup - prečítané bajty" IDS_TAB_IOWRITESBYTES "Vstup a výstup - zapísané bajty" IDS_TAB_IOOTHERBYTES "Vstup a výstup - iné bajty" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Vybrať stĺpce..." IDS_MENU_16BITTASK "&Zobraziť 16-bitové úlohy" IDS_MENU_WINDOWS "&Okna" diff --git a/reactos/base/applications/taskmgr/lang/sq-AL.rc b/reactos/base/applications/taskmgr/lang/sq-AL.rc index 21b0dae5dfa..5d6196e67d2 100644 --- a/reactos/base/applications/taskmgr/lang/sq-AL.rc +++ b/reactos/base/applications/taskmgr/lang/sq-AL.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "Shkruan I/O Bytes", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O te tjere", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O Byte te tjere", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Lexo Bytes" IDS_TAB_IOWRITESBYTES "I/O Shkruaj Bytes" IDS_TAB_IOOTHERBYTES "I/O te tjere Bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "Zgjidh kolonat..." IDS_MENU_16BITTASK "&Shfaq 16-bit tasks" IDS_MENU_WINDOWS "Dritare" diff --git a/reactos/base/applications/taskmgr/lang/sv-SE.rc b/reactos/base/applications/taskmgr/lang/sv-SE.rc index a20c225b14e..4f854368f1c 100644 --- a/reactos/base/applications/taskmgr/lang/sv-SE.rc +++ b/reactos/base/applications/taskmgr/lang/sv-SE.rc @@ -317,6 +317,7 @@ BEGIN CONTROL "I/O, &antal tecken skrivna", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 133, 127, 113, 10 CONTROL "And&ra I/O åtgärder", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 133, 138, 89, 10 CONTROL "Antal tecken, andra I/O åtgärder", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 133, 149, 141, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 133, 160, 95, 10 END /* String Tables */ @@ -412,6 +413,7 @@ BEGIN IDS_TAB_IOREADBYTES "Antal tecken lästa, andra I/O-åtgärder" IDS_TAB_IOWRITESBYTES "Antal tecken skrivna, andra I/O-åtgärder" IDS_TAB_IOOTHERBYTES "I/O, antal tecken" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Välj kolumner..." IDS_MENU_16BITTASK "&Visa 16-bitsprocesser" IDS_MENU_WINDOWS "&Fönster" diff --git a/reactos/base/applications/taskmgr/lang/tr-TR.rc b/reactos/base/applications/taskmgr/lang/tr-TR.rc index c414f409f0a..41deacebe76 100644 --- a/reactos/base/applications/taskmgr/lang/tr-TR.rc +++ b/reactos/base/applications/taskmgr/lang/tr-TR.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "G/Ç Yazma Çokluları", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "G/Ç Başka", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "G/Ç Başka Çoklular", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "G/Ç Okuma Çokluları" IDS_TAB_IOWRITESBYTES "G/Ç Yazma Çokluları" IDS_TAB_IOOTHERBYTES "G/Ç Başka Çoklular" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "&Dikeçleri Seç..." IDS_MENU_16BITTASK "&16 Bitlik Görevleri Göster" IDS_MENU_WINDOWS "&Pencereler" diff --git a/reactos/base/applications/taskmgr/lang/uk-UA.rc b/reactos/base/applications/taskmgr/lang/uk-UA.rc index 79883af45df..370b382a0aa 100644 --- a/reactos/base/applications/taskmgr/lang/uk-UA.rc +++ b/reactos/base/applications/taskmgr/lang/uk-UA.rc @@ -315,6 +315,7 @@ BEGIN CONTROL "Записано байтів", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 67, 10 CONTROL "Інший ввід-вивід", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 71, 10 CONTROL "Інших байтів при вводі-виводі", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 114, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -410,6 +411,7 @@ BEGIN IDS_TAB_IOREADBYTES "Прочитано байтів" IDS_TAB_IOWRITESBYTES "Записано байтів" IDS_TAB_IOOTHERBYTES "Інших байтів під час вводу-виводу" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "В&ибрати стовпці..." IDS_MENU_16BITTASK "&Відображати 16-розрядні завдання" IDS_MENU_WINDOWS "В&ікна" diff --git a/reactos/base/applications/taskmgr/lang/zh-CN.rc b/reactos/base/applications/taskmgr/lang/zh-CN.rc index ff773f68285..d42e0dd0361 100644 --- a/reactos/base/applications/taskmgr/lang/zh-CN.rc +++ b/reactos/base/applications/taskmgr/lang/zh-CN.rc @@ -321,6 +321,7 @@ BEGIN CONTROL "I/O 写入字节", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "I/O 其他", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "I/O 其他字节", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -416,6 +417,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O Read Bytes" IDS_TAB_IOWRITESBYTES "I/O Write Bytes" IDS_TAB_IOOTHERBYTES "I/O Other Bytes" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "选择列(&S)..." IDS_MENU_16BITTASK "显示 16 位任务(&S)" IDS_MENU_WINDOWS "窗口(&W)" diff --git a/reactos/base/applications/taskmgr/lang/zh-TW.rc b/reactos/base/applications/taskmgr/lang/zh-TW.rc index 6c607ed5db9..eb6ee185bff 100644 --- a/reactos/base/applications/taskmgr/lang/zh-TW.rc +++ b/reactos/base/applications/taskmgr/lang/zh-TW.rc @@ -323,6 +323,7 @@ BEGIN CONTROL "I/O 寫入位元組", IDC_IOWRITEBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 127, 65, 10 CONTROL "其他 I/O", IDC_IOOTHER, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 138, 46, 10 CONTROL "其他 I/O 位元組", IDC_IOOTHERBYTES, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 149, 65, 10 + CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10 END /* String Tables */ @@ -418,6 +419,7 @@ BEGIN IDS_TAB_IOREADBYTES "I/O 讀取位元組" IDS_TAB_IOWRITESBYTES "I/O 寫入位元組" IDS_TAB_IOOTHERBYTES "其他 I/O 位元組" + IDS_TAB_COMMANDLINE "Command Line" IDS_MENU_SELECTCOLUMNS "選擇列(&S)..." IDS_MENU_16BITTASK "顯示 16 位工作(&S)" IDS_MENU_WINDOWS "窗口(&W)" diff --git a/reactos/base/applications/taskmgr/perfdata.c b/reactos/base/applications/taskmgr/perfdata.c index ac23b16c10c..3ecb0d81631 100644 --- a/reactos/base/applications/taskmgr/perfdata.c +++ b/reactos/base/applications/taskmgr/perfdata.c @@ -3,7 +3,8 @@ * * perfdata.c * - * Copyright (C) 1999 - 2001 Brian Palmer + * Copyright (C) 1999 - 2001 Brian Palmer + * Copyright (C) 2014 Ismael Ferreras Morezuelas * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -26,11 +27,12 @@ #include #define NTOS_MODE_USER +#include #include CRITICAL_SECTION PerfDataCriticalSection; PPERFDATA pPerfDataOld = NULL; /* Older perf data (saved to establish delta values) */ -PPERFDATA pPerfData = NULL; /* Most recent copy of perf data */ +PPERFDATA pPerfData = NULL; /* Most recent copy of perf data */ ULONG ProcessCountOld = 0; ULONG ProcessCount = 0; double dbIdleTime; @@ -46,6 +48,10 @@ SYSTEM_HANDLE_INFORMATION SystemHandleInfo; PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION SystemProcessorTimeInfo = NULL; PSID SystemUserSid = NULL; +PCMD_LINE_CACHE global_cache = NULL; + +#define CMD_LINE_MIN(a, b) (a < b ? a - sizeof(WCHAR) : b) + typedef struct _SIDTOUSERNAME { LIST_ENTRY List; @@ -371,7 +377,7 @@ void PerfDataRefresh(void) pPerfData[Idx].HandleCount = pSPI->HandleCount; pPerfData[Idx].ThreadCount = pSPI->NumberOfThreads; pPerfData[Idx].SessionId = pSPI->SessionId; - pPerfData[Idx].UserName[0] = L'\0'; + pPerfData[Idx].UserName[0] = UNICODE_NULL; pPerfData[Idx].USERObjectCount = 0; pPerfData[Idx].GDIObjectCount = 0; ProcessUser = SystemUserSid; @@ -472,7 +478,7 @@ ULONG PerfDataGetProcessorSystemUsage(void) return (ULONG)dbKernelTime; } -BOOL PerfDataGetImageName(ULONG Index, LPWSTR lpImageName, int nMaxCount) +BOOL PerfDataGetImageName(ULONG Index, LPWSTR lpImageName, ULONG nMaxCount) { BOOL bSuccessful; @@ -504,7 +510,7 @@ ULONG PerfDataGetProcessId(ULONG Index) return ProcessId; } -BOOL PerfDataGetUserName(ULONG Index, LPWSTR lpUserName, int nMaxCount) +BOOL PerfDataGetUserName(ULONG Index, LPWSTR lpUserName, ULONG nMaxCount) { BOOL bSuccessful; @@ -522,6 +528,130 @@ BOOL PerfDataGetUserName(ULONG Index, LPWSTR lpUserName, int nMaxCount) return bSuccessful; } +BOOL PerfDataGetCommandLine(ULONG Index, LPWSTR lpCommandLine, ULONG nMaxCount) +{ + static const LPWSTR ellipsis = L"..."; + + PROCESS_BASIC_INFORMATION pbi = {0}; + UNICODE_STRING CommandLineStr = {0}; + + PVOID ProcessParams = NULL; + HANDLE hProcess; + ULONG ProcessId; + + NTSTATUS Status; + BOOL result; + + PCMD_LINE_CACHE new_entry; + LPWSTR new_string; + + PCMD_LINE_CACHE cache = global_cache; + + /* [A] Search for a string already in cache? If so, use it */ + while (cache && cache->pnext != NULL) + { + if (cache->idx == Index && cache->str != NULL) + { + /* Found it. Use it, and add some ellipsis at the very end to make it cute */ + wcsncpy(lpCommandLine, cache->str, CMD_LINE_MIN(nMaxCount, cache->len)); + wcscpy(lpCommandLine + CMD_LINE_MIN(nMaxCount, cache->len) - sizeof(ellipsis)/sizeof(WCHAR), ellipsis); + return TRUE; + } + + cache = cache->pnext; + } + + /* [B] We don't; let's allocate and load a value from the process mem... and cache it */ + ProcessId = PerfDataGetProcessId(Index); + + /* Default blank command line in case things don't work out */ + wcsncpy(lpCommandLine, L"", nMaxCount); + + /* Ask for a handle to the target process so that we can read its memory and query stuff */ + hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessId); + if (!hProcess) + goto cleanup; + + /* First off, get the ProcessEnvironmentBlock location in that process' address space */ + Status = NtQueryInformationProcess(hProcess, 0, &pbi, sizeof(pbi), NULL); + if (!NT_SUCCESS(Status)) + goto cleanup; + + /* Then get the PEB.ProcessParameters member pointer */ + result = ReadProcessMemory(hProcess, + (PVOID)((ULONG_PTR)pbi.PebBaseAddress + FIELD_OFFSET(PEB, ProcessParameters)), + &ProcessParams, + sizeof(ProcessParams), + NULL); + if (!result) + goto cleanup; + + /* Then copy the PEB->ProcessParameters.CommandLine member + to get the pointer to the string buffer and its size */ + result = ReadProcessMemory(hProcess, + (PVOID)((ULONG_PTR)ProcessParams + FIELD_OFFSET(RTL_USER_PROCESS_PARAMETERS, CommandLine)), + &CommandLineStr, + sizeof(CommandLineStr), + NULL); + if (!result) + goto cleanup; + + /* Allocate the next cache entry and its accompanying string in one go */ + new_entry = HeapAlloc(GetProcessHeap(), + HEAP_ZERO_MEMORY, + sizeof(CMD_LINE_CACHE) + CommandLineStr.Length + sizeof(UNICODE_NULL)); + if (!new_entry) + goto cleanup; + + new_string = (LPWSTR)((ULONG_PTR)new_entry + sizeof(CMD_LINE_CACHE)); + + /* Bingo, the command line should be stored there, + copy the string from the other process */ + result = ReadProcessMemory(hProcess, + CommandLineStr.Buffer, + new_string, + CommandLineStr.Length, + NULL); + if (!result) + { + /* Weird, after sucessfully reading the mem of that process + various times it fails now, forget it and bail out */ + HeapFree(GetProcessHeap(), 0, new_entry); + goto cleanup; + } + + /* Add our pointer to the cache... */ + new_entry->idx = Index; + new_entry->str = new_string; + new_entry->len = CommandLineStr.Length; + + if (!global_cache) + global_cache = new_entry; + else + cache->pnext = new_entry; + + /* ... and print the buffer for the first time */ + wcsncpy(lpCommandLine, new_string, CMD_LINE_MIN(nMaxCount, CommandLineStr.Length)); + +cleanup: + if (hProcess) CloseHandle(hProcess); + return TRUE; +} + +void PerfDataDeallocCommandLineCache() +{ + PCMD_LINE_CACHE cache = global_cache; + PCMD_LINE_CACHE cache_old; + + while (cache && cache->pnext != NULL) + { + cache_old = cache; + cache = cache->pnext; + + HeapFree(GetProcessHeap(), 0, cache_old); + } +} + ULONG PerfDataGetSessionId(ULONG Index) { ULONG SessionId; diff --git a/reactos/base/applications/taskmgr/perfdata.h b/reactos/base/applications/taskmgr/perfdata.h index 6bb7005ceaa..51e11f47b2e 100644 --- a/reactos/base/applications/taskmgr/perfdata.h +++ b/reactos/base/applications/taskmgr/perfdata.h @@ -55,19 +55,31 @@ typedef struct _PERFDATA LARGE_INTEGER KernelTime; } PERFDATA, *PPERFDATA; +typedef struct _CMD_LINE_CACHE +{ + DWORD idx; + LPWSTR str; + ULONG len; + struct _CMD_LINE_CACHE* pnext; +} CMD_LINE_CACHE, *PCMD_LINE_CACHE; + BOOL PerfDataInitialize(void); void PerfDataUninitialize(void); void PerfDataRefresh(void); -BOOL PerfDataGet(ULONG Index, PPERFDATA *lppData); -ULONG PerfDataGetProcessIndex(ULONG pid); +BOOL PerfDataGet(ULONG Index, PPERFDATA *lppData); +ULONG PerfDataGetProcessIndex(ULONG pid); ULONG PerfDataGetProcessCount(void); ULONG PerfDataGetProcessorUsage(void); ULONG PerfDataGetProcessorSystemUsage(void); -BOOL PerfDataGetImageName(ULONG Index, LPTSTR lpImageName, int nMaxCount); +BOOL PerfDataGetImageName(ULONG Index, LPWSTR lpImageName, ULONG nMaxCount); ULONG PerfDataGetProcessId(ULONG Index); -BOOL PerfDataGetUserName(ULONG Index, LPTSTR lpUserName, int nMaxCount); +BOOL PerfDataGetUserName(ULONG Index, LPWSTR lpUserName, ULONG nMaxCount); + +BOOL PerfDataGetCommandLine(ULONG Index, LPWSTR lpCommandLine, ULONG nMaxCount); +void PerfDataDeallocCommandLineCache(); + ULONG PerfDataGetSessionId(ULONG Index); ULONG PerfDataGetCPUUsage(ULONG Index); LARGE_INTEGER PerfDataGetCPUTime(ULONG Index); diff --git a/reactos/base/applications/taskmgr/procpage.c b/reactos/base/applications/taskmgr/procpage.c index 40739e31f5b..35a7b32f0b3 100644 --- a/reactos/base/applications/taskmgr/procpage.c +++ b/reactos/base/applications/taskmgr/procpage.c @@ -52,9 +52,9 @@ void AddProcess(ULONG Index); void UpdateProcesses(); void gethmsfromlargeint(LARGE_INTEGER largeint, DWORD *dwHours, DWORD *dwMinutes, DWORD *dwSeconds); void ProcessPageOnNotify(WPARAM wParam, LPARAM lParam); -void CommaSeparateNumberString(LPWSTR strNumber, int nMaxCount); +void CommaSeparateNumberString(LPWSTR strNumber, ULONG nMaxCount); void ProcessPageShowContextMenu(DWORD dwProcessId); -BOOL PerfDataGetText(ULONG Index, ULONG ColumnIndex, LPTSTR lpText, int nMaxCount); +BOOL PerfDataGetText(ULONG Index, ULONG ColumnIndex, LPTSTR lpText, ULONG nMaxCount); DWORD WINAPI ProcessPageRefreshThread(void *lpParameter); int ProcessRunning(ULONG ProcessId); @@ -245,7 +245,7 @@ void ProcessPageOnNotify(WPARAM wParam, LPARAM lParam) Index = PerfDataGetProcessIndex(pData->ProcessId); ColumnIndex = pnmdi->item.iSubItem; - PerfDataGetText(Index, ColumnIndex, pnmdi->item.pszText, pnmdi->item.cchTextMax); + PerfDataGetText(Index, ColumnIndex, pnmdi->item.pszText, (ULONG)pnmdi->item.cchTextMax); break; @@ -290,7 +290,7 @@ void ProcessPageOnNotify(WPARAM wParam, LPARAM lParam) } } -void CommaSeparateNumberString(LPWSTR strNumber, int nMaxCount) +void CommaSeparateNumberString(LPWSTR strNumber, ULONG nMaxCount) { WCHAR temp[260]; UINT i, j, k; @@ -530,7 +530,7 @@ void AddProcess(ULONG Index) } } -BOOL PerfDataGetText(ULONG Index, ULONG ColumnIndex, LPTSTR lpText, int nMaxCount) +BOOL PerfDataGetText(ULONG Index, ULONG ColumnIndex, LPTSTR lpText, ULONG nMaxCount) { IO_COUNTERS iocounters; LARGE_INTEGER time; @@ -541,6 +541,8 @@ BOOL PerfDataGetText(ULONG Index, ULONG ColumnIndex, LPTSTR lpText, int nMaxCoun wsprintfW(lpText, L"%lu", PerfDataGetProcessId(Index)); if (ColumnDataHints[ColumnIndex] == COLUMN_USERNAME) PerfDataGetUserName(Index, lpText, nMaxCount); + if (ColumnDataHints[ColumnIndex] == COLUMN_COMMANDLINE) + PerfDataGetCommandLine(Index, lpText, nMaxCount); if (ColumnDataHints[ColumnIndex] == COLUMN_SESSIONID) wsprintfW(lpText, L"%lu", PerfDataGetSessionId(Index)); if (ColumnDataHints[ColumnIndex] == COLUMN_CPUUSAGE) @@ -753,6 +755,12 @@ int CALLBACK ProcessPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lPara PerfDataGetUserName(IndexParam2, text2, sizeof (text2) / sizeof (*text2)); ret = _wcsicmp(text1, text2); } + else if (TaskManagerSettings.SortColumn == COLUMN_COMMANDLINE) + { + PerfDataGetCommandLine(IndexParam1, text1, sizeof (text1) / sizeof (*text1)); + PerfDataGetCommandLine(IndexParam2, text2, sizeof (text2) / sizeof (*text2)); + ret = _wcsicmp(text1, text2); + } else if (TaskManagerSettings.SortColumn == COLUMN_SESSIONID) { l1 = PerfDataGetSessionId(IndexParam1); diff --git a/reactos/base/applications/taskmgr/resource.h b/reactos/base/applications/taskmgr/resource.h index 785193b62ab..8aca1bde315 100644 --- a/reactos/base/applications/taskmgr/resource.h +++ b/reactos/base/applications/taskmgr/resource.h @@ -113,6 +113,7 @@ #define IDC_IOOTHERBYTES 1047 #define IDC_CPU_USAGE_GRAPH 1047 #define IDC_CPU29 1048 +#define IDC_COMMANDLINE 1048 #define IDC_MEM_USAGE_GRAPH2 1048 #define IDC_MEM_USAGE_GRAPH 1048 #define IDC_CPU30 1049 @@ -222,6 +223,7 @@ #define IDS_TAB_IOREADBYTES 337 #define IDS_TAB_IOWRITESBYTES 338 #define IDS_TAB_IOOTHERBYTES 339 +#define IDS_TAB_COMMANDLINE 368 #define IDS_MENU_SELECTCOLUMNS 340 #define IDS_MENU_16BITTASK 341 diff --git a/reactos/base/applications/taskmgr/taskmgr.c b/reactos/base/applications/taskmgr/taskmgr.c index 2eb384b6af9..1b8a4b01ff6 100644 --- a/reactos/base/applications/taskmgr/taskmgr.c +++ b/reactos/base/applications/taskmgr/taskmgr.c @@ -480,6 +480,8 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) TaskManagerSettings.Maximized = TRUE; else TaskManagerSettings.Maximized = FALSE; + /* Get rid of the allocated command line cache, if any */ + PerfDataDeallocCommandLineCache(); return DefWindowProcW(hDlg, message, wParam, lParam); case WM_TIMER: @@ -1140,7 +1142,7 @@ LPWSTR GetLastErrorText(LPWSTR lpszBuf, DWORD dwSize) DWORD dwRet; LPWSTR lpszTemp = NULL; - dwRet = FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY, + dwRet = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, GetLastError(), LANG_NEUTRAL,