From 34576c7015d74929070f0e765b6ce8c82108c58b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 25 Mar 2024 20:57:41 +0200 Subject: [PATCH 01/44] [NTOS:KE/x64] Implement KiUserCallbackExit This is used in KiUserModeCallout instead of KiServiceExit2. The latter is broken, leaks non-volatile registers and will need to be modified to handle an exception frame, which we don't need/have here. It will also use sysret instead of iret and is generally simpler/faster. Eventually it would be desirable to skip the entire trap frame setup and do everything in KiCallUserMode. This requires some cleanup and special handling for user APC delivery. --- ntoskrnl/include/internal/amd64/ke.h | 6 +++ ntoskrnl/ke/amd64/usercall.c | 2 +- ntoskrnl/ke/amd64/usercall_asm.S | 76 ++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/ntoskrnl/include/internal/amd64/ke.h b/ntoskrnl/include/internal/amd64/ke.h index d55bd302510..7caf2b10d9a 100644 --- a/ntoskrnl/include/internal/amd64/ke.h +++ b/ntoskrnl/include/internal/amd64/ke.h @@ -474,6 +474,12 @@ KiSetTrapContext( _In_ PCONTEXT Context, _In_ KPROCESSOR_MODE RequestorMode); +// Exits to user mode, only restores the trap frame, zeroes the non-volatile registers +DECLSPEC_NORETURN +VOID +KiUserCallbackExit( + _In_ PKTRAP_FRAME TrapFrame); + #ifdef __cplusplus } // extern "C" #endif diff --git a/ntoskrnl/ke/amd64/usercall.c b/ntoskrnl/ke/amd64/usercall.c index 8eb059ccd54..9bcc81384b4 100644 --- a/ntoskrnl/ke/amd64/usercall.c +++ b/ntoskrnl/ke/amd64/usercall.c @@ -197,7 +197,7 @@ KiUserModeCallout( _enable(); /* Exit to user-mode */ - KiServiceExit(&CallbackTrapFrame, 0); + KiUserCallbackExit(&CallbackTrapFrame); } VOID diff --git a/ntoskrnl/ke/amd64/usercall_asm.S b/ntoskrnl/ke/amd64/usercall_asm.S index 8962f2470e0..7dc5bf1f6b8 100644 --- a/ntoskrnl/ke/amd64/usercall_asm.S +++ b/ntoskrnl/ke/amd64/usercall_asm.S @@ -6,6 +6,10 @@ */ #include +#include + +EXTERN KiInitiateUserApc:PROC +EXTERN KeUserCallbackDispatcher:QWORD /* * NTSTATUS @@ -45,6 +49,78 @@ PUBLIC KiCallUserMode .ENDP + +/*! + * \brief Exits to user mode, restores only rsp and rip, zeroes the rest. + * + * \todo Merge this with KiCallUserMode + KiUserModeCallout and skip the trap frame. + * + * DECLSPEC_NORETURN + * VOID + * KiUserCallbackExit( + * _In_ PKTRAP_FRAME TrapFrame@); + */ + PUBLIC KiUserCallbackExit +KiUserCallbackExit: + + /* Point rsp to the trap frame */ + mov rsp, rcx + + /* Zero non-volatile registers for KiUserCallbackDispatcher. + This must be done before dispatching a pending user APC. */ + xor rbx, rbx + xor rdi, rdi + xor rsi, rsi + xor rbp, rbp + xor r12, r12 + xor r13, r13 + xor r14, r14 + xor r15, r15 + pxor xmm6, xmm6 + pxor xmm7, xmm7 + pxor xmm8, xmm8 + pxor xmm9, xmm9 + pxor xmm10, xmm10 + pxor xmm11, xmm11 + pxor xmm12, xmm12 + pxor xmm13, xmm13 + pxor xmm14, xmm14 + pxor xmm15, xmm15 + + /* Check for pending user APC */ + mov rdx, gs:[PcCurrentThread] + HANDLE_USER_APCS rdx, rsp + + /* Zero volatile registers */ + xor rax, rax + xor rdx, rdx + xor r8, r8 + xor r9, r9 + xor r10, r10 + pxor xmm0, xmm0 + pxor xmm1, xmm1 + pxor xmm2, xmm2 + pxor xmm3, xmm3 + pxor xmm4, xmm4 + pxor xmm5, xmm5 + + /* Disable interrupts for return */ + cli + + /* Prepare user mode return address (rcx) and eflags (r11) for sysret */ + mov rcx, qword ptr KeUserCallbackDispatcher[rip] + mov r11, EFLAGS_IF_MASK + + /* Load user mode stack (It was copied to the trap frame) */ + mov rsp, [rsp + KTRAP_FRAME_Rsp] + + /* Swap gs back to user */ + swapgs + + /* return to user mode */ + sysretq + + /* * DECLSPEC_NORETURN * VOID From 43b181309e04a3a0764fa12f128700a5b58093ee Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 2 Apr 2024 21:49:52 +0300 Subject: [PATCH 02/44] [NTOS:KE] Fix calculation of timer expiration Both due-times and interrupt time are unsigned, but were treated as signed in KiInsertTimerTable, which led to very long (e.g. INFINITE) waits being interpreted as having a negative due-time and being completed instantly. Mostly fixes kernel32_apitest QueueUserAPC --- ntoskrnl/ke/timerobj.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ntoskrnl/ke/timerobj.c b/ntoskrnl/ke/timerobj.c index 35892c8875c..1c19d03b46e 100644 --- a/ntoskrnl/ke/timerobj.c +++ b/ntoskrnl/ke/timerobj.c @@ -63,8 +63,8 @@ FASTCALL KiInsertTimerTable(IN PKTIMER Timer, IN ULONG Hand) { - LARGE_INTEGER InterruptTime; - LONGLONG DueTime = Timer->DueTime.QuadPart; + ULONGLONG InterruptTime; + ULONGLONG DueTime = Timer->DueTime.QuadPart; BOOLEAN Expired = FALSE; PLIST_ENTRY ListHead, NextEntry; PKTIMER CurrentTimer; @@ -101,8 +101,8 @@ KiInsertTimerTable(IN PKTIMER Timer, KiTimerTableListHead[Hand].Time.QuadPart = DueTime; /* Make sure it hasn't expired already */ - InterruptTime.QuadPart = KeQueryInterruptTime(); - if (DueTime <= InterruptTime.QuadPart) Expired = TRUE; + InterruptTime = KeQueryInterruptTime(); + if (DueTime <= InterruptTime) Expired = TRUE; } /* Return expired state */ From 85fc290bb77d9fa3c4e9352d7aa0b317e4736def Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 2 Apr 2024 22:08:30 +0300 Subject: [PATCH 03/44] [KERNEL32_APITEST] Use InterlockedIncrement for proper synchronization --- modules/rostests/apitests/kernel32/QueueUserAPC.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/rostests/apitests/kernel32/QueueUserAPC.c b/modules/rostests/apitests/kernel32/QueueUserAPC.c index 72435209eae..46b6f1c94c5 100644 --- a/modules/rostests/apitests/kernel32/QueueUserAPC.c +++ b/modules/rostests/apitests/kernel32/QueueUserAPC.c @@ -8,7 +8,7 @@ #define MAX_RECORD 30 -static DWORD s_record_count = 0; +static LONG s_record_count = 0; static DWORD s_record[MAX_RECORD + 1] = { 0 }; static BOOL s_terminate_all = FALSE; @@ -24,9 +24,9 @@ static const SIZE_T s_expected_count = _countof(s_expected); static void AddValueToRecord(DWORD dwValue) { - s_record[s_record_count] = dwValue; - if (s_record_count < MAX_RECORD) - s_record_count++; + LONG next = InterlockedIncrement(&s_record_count) - 1; + if (next < MAX_RECORD) + s_record[next] = dwValue; } static VOID CheckRecord(void) From c4498d751d323febe245d1e8d95f35908465cedd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 2 Apr 2024 22:51:40 +0300 Subject: [PATCH 04/44] [KERNEL32_APITEST] Add test for multiple queued user APCs --- .../rostests/apitests/kernel32/QueueUserAPC.c | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/modules/rostests/apitests/kernel32/QueueUserAPC.c b/modules/rostests/apitests/kernel32/QueueUserAPC.c index 46b6f1c94c5..2e54350d76a 100644 --- a/modules/rostests/apitests/kernel32/QueueUserAPC.c +++ b/modules/rostests/apitests/kernel32/QueueUserAPC.c @@ -145,8 +145,41 @@ static void TestForWaitForSingleObjectEx(void) JustDoIt(ThreadFunc2); } +static DWORD WINAPI ThreadFunc3(LPVOID arg) +{ + return 0; +} + +static void TestMultipleUserAPCs(void) +{ + HANDLE hThread; + DWORD dwThreadId; + + s_record_count = 0; + + hThread = CreateThread(NULL, 0, ThreadFunc3, NULL, CREATE_SUSPENDED, &dwThreadId); + ok(hThread != NULL, "hThread was NULL\n"); + + ok_long(QueueUserAPC(DoUserAPC1, hThread, 1), 1); + ok_long(QueueUserAPC(DoUserAPC2, hThread, 2), 1); + ok_long(QueueUserAPC(DoUserAPC3, hThread, 3), 1); + + ok_long(s_record_count, 0); + + ResumeThread(hThread); + + ok_long(WaitForSingleObject(hThread, 5 * 1000), WAIT_OBJECT_0); + ok_int(CloseHandle(hThread), TRUE); + + ok_long(s_record_count, 3); + ok_long(s_record[0], 4); + ok_long(s_record[1], 5); + ok_long(s_record[2], 6); +} + START_TEST(QueueUserAPC) { TestForSleepEx(); TestForWaitForSingleObjectEx(); + TestMultipleUserAPCs(); } From 7589238b68c75f3b045dad1a480f18ec05b50c12 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 2 Apr 2024 22:55:54 +0300 Subject: [PATCH 05/44] [NTOS:KE/x64] Fix user APC delivery on syscall exit We need to save the missing registers in the trap frame before calling KiInitiateUserApc, because they will be used to create the CONTEXT that is saved on the user mode stack, where KiUserApcDispatcher returns back to using NtContinue. This fixes remaining failures in kernel32_apitest QueueUserAPC. --- ntoskrnl/ke/amd64/trap.S | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/ntoskrnl/ke/amd64/trap.S b/ntoskrnl/ke/amd64/trap.S index 79b58559129..0b3da84312b 100644 --- a/ntoskrnl/ke/amd64/trap.S +++ b/ntoskrnl/ke/amd64/trap.S @@ -852,8 +852,34 @@ GLOBAL_LABEL KiSystemServiceExit /* Check for pending user APCs */ mov rcx, gs:[PcCurrentThread] - HANDLE_USER_APCS rcx, rsp + MAX_SYSCALL_PARAM_SIZE + cmp byte ptr [rcx + ThApcState + AsUserApcPending], 0 + jz NoUserApcPending + /* Save missing regs in the trap frame */ + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rax], rax + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rbp], rbp + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_R9], rbp + mov rax, [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rsp] + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_R8], rax + mov rax, [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rip] + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rcx], rax + mov rax, [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_EFlags] + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_R11], rax + xor rax, rax + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rdx], rax + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_R10], rax + pxor xmm0, xmm0 + movdqa [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Xmm0], xmm0 + movdqa [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Xmm1], xmm0 + movdqa [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Xmm2], xmm0 + movdqa [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Xmm3], xmm0 + movdqa [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Xmm4], xmm0 + movdqa [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Xmm5], xmm0 + + lea rcx, [rsp + MAX_SYSCALL_PARAM_SIZE] + call KiInitiateUserApc + +NoUserApcPending: /* Disable interrupts for return */ cli @@ -1148,9 +1174,6 @@ PUBLIC KiInitiateUserApc /* Generate a KEXCEPTION_FRAME on the stack */ GENERATE_EXCEPTION_FRAME - /* Save rax to not clobber the return for the system call handler */ - mov [rsp + ExP1Home], rax - /* Raise IRQL to APC_LEVEL */ mov rax, APC_LEVEL mov cr8, rax @@ -1184,7 +1207,6 @@ deliver_apcs: mov cr8, rax /* Restore the registers from the KEXCEPTION_FRAME */ - mov rax, [rsp + ExP1Home] RESTORE_EXCEPTION_STATE /* Return */ From 713a360c74088bd277ac42b2891ad63a727cec63 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 2 Apr 2024 23:05:26 +0300 Subject: [PATCH 06/44] [NTOS:KE/x64] Remove pointless loop in KiInitiateUserApc Only one user APC can be delivered here. The next one can only be delivered, when KiUserApcDispatcher returns to the previous context with NtContinue. --- ntoskrnl/ke/amd64/trap.S | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ntoskrnl/ke/amd64/trap.S b/ntoskrnl/ke/amd64/trap.S index 0b3da84312b..a2cbd4ab013 100644 --- a/ntoskrnl/ke/amd64/trap.S +++ b/ntoskrnl/ke/amd64/trap.S @@ -1184,8 +1184,6 @@ PUBLIC KiInitiateUserApc /* Save the trap frame in rsi */ mov rsi, rcx -deliver_apcs: - /* Enable interrupts */ sti @@ -1198,10 +1196,6 @@ deliver_apcs: /* Disable interrupts again */ cli - /* Check if there are more APCs to deliver */ - cmp byte ptr [rbp + ThApcState + AsUserApcPending], 0 - jne deliver_apcs - /* Go back to PASSIVE_LEVEL */ mov rax, PASSIVE_LEVEL mov cr8, rax From 5eea72f61b7cad36bd34296380177140fe0eaf79 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sun, 7 Apr 2024 20:34:50 +0900 Subject: [PATCH 07/44] [SHELL32] Use Uppercase in SHELL32_GUIDToStringA/W (#6719) Improve consistency. JIRA issue: CORE-19495 Reduced 4 failures in shell32:SHParseDisplayName. --- dll/win32/shell32/shfldr.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dll/win32/shell32/shfldr.h b/dll/win32/shell32/shfldr.h index bb67f1f2bee..46878c28a0c 100644 --- a/dll/win32/shell32/shfldr.h +++ b/dll/win32/shell32/shfldr.h @@ -72,7 +72,7 @@ HRESULT SH_GetApidlFromDataObject(IDataObject *pDataObject, PIDLIST_ABSOLUTE* pp static __inline int SHELL32_GUIDToStringA (REFGUID guid, LPSTR str) { - return sprintf(str, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + return sprintf(str, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); @@ -81,10 +81,10 @@ static __inline int SHELL32_GUIDToStringA (REFGUID guid, LPSTR str) static __inline int SHELL32_GUIDToStringW (REFGUID guid, LPWSTR str) { static const WCHAR fmtW[] = - { '{','%','0','8','l','x','-','%','0','4','x','-','%','0','4','x','-', - '%','0','2','x','%','0','2','x','-', - '%','0','2','x','%','0','2','x','%','0','2','x','%','0','2','x', - '%','0','2','x','%','0','2','x','}',0 }; + { '{','%','0','8','l','X','-','%','0','4','X','-','%','0','4','X','-', + '%','0','2','X','%','0','2','X','-', + '%','0','2','X','%','0','2','X','%','0','2','X','%','0','2','X', + '%','0','2','X','%','0','2','X','}',0 }; return swprintf(str, fmtW, guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], From 3e4d8e6f6c72f890151bc14c3d8186dec559ad98 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Sun, 7 Apr 2024 21:34:38 +0300 Subject: [PATCH 08/44] [UMANDLG] Update Romanian (ro-RO) translation (#6699) --- base/applications/utilman/umandlg/lang/ro-RO.rc | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/base/applications/utilman/umandlg/lang/ro-RO.rc b/base/applications/utilman/umandlg/lang/ro-RO.rc index b3c9cf3edfd..3dd840fdd49 100644 --- a/base/applications/utilman/umandlg/lang/ro-RO.rc +++ b/base/applications/utilman/umandlg/lang/ro-RO.rc @@ -2,7 +2,8 @@ * PROJECT: ReactOS Utility Manager Resources DLL (UManDlg.dll) * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: Romanian resource file - * TRANSLATOR: Copyright 2019 George Bișoc + * TRANSLATORS: Copyright 2019 George Bișoc + * Copyright 2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -17,12 +18,12 @@ BEGIN CONTROL "", IDC_GROUPBOX, "Button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 62, 275, 92 CONTROL "Start", IDC_START, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 14, 76, 45, 16 CONTROL "Oprire", IDC_STOP, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 69, 76, 45, 16 - CONTROL "Pornire automată la Log in", IDC_START_LOG_IN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 101, 206, 14 - CONTROL "Pornire automată la blocarea spațiului de lucru", IDC_START_DESKTOP, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 118, 212, 14 - CONTROL "Pornire automată la pornirea Managerului utilități", IDC_START_UTILMAN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 134, 212, 13 - CONTROL "&OK", IDC_OK, "Button", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 160, 161, 50, 14 - CONTROL "&Revocare", IDC_CANCEL, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 221, 161, 50, 14 - CONTROL "&Ajutor", IDC_HELP_TOPICS, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 98, 161, 50, 14 + CONTROL "Pornire automată la &Log in", IDC_START_LOG_IN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 101, 206, 14 + CONTROL "Pornire automată la blocarea &desktopului", IDC_START_DESKTOP, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 118, 212, 14 + CONTROL "Pornire automată la pornirea Managerului &utilităţi", IDC_START_UTILMAN, "Button", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 12, 134, 212, 13 + CONTROL "OK", IDC_OK, "Button", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 160, 161, 50, 14 + CONTROL "Revocare", IDC_CANCEL, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 221, 161, 50, 14 + CONTROL "Ajutor", IDC_HELP_TOPICS, "Button", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_TABSTOP, 98, 161, 50, 14 END STRINGTABLE @@ -40,7 +41,7 @@ END STRINGTABLE BEGIN - IDM_ABOUT "Despre Managerul utilitare..." + IDM_ABOUT "Despre Managerul utilitare" IDS_APP_NAME "Manager utilitare" IDS_AUTHORS "Drept de autor 2019 George Bișoc, Hermes Belusca-Maito" END From 608ed5619f162aaeb4c31152f9579c8c1631c72a Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Sun, 7 Apr 2024 21:36:23 +0300 Subject: [PATCH 09/44] [SHLWAPI] Update Romanian (ro-RO) translation (#6702) --- dll/win32/shlwapi/lang/ro-RO.rc | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/dll/win32/shlwapi/lang/ro-RO.rc b/dll/win32/shlwapi/lang/ro-RO.rc index 86a2684a913..d31911ba7ec 100644 --- a/dll/win32/shlwapi/lang/ro-RO.rc +++ b/dll/win32/shlwapi/lang/ro-RO.rc @@ -4,6 +4,7 @@ * Copyright 2004 Jon Griffiths * Copyright 2008 Michael Stefaniuc * 2011 Ștefan Fulea + * 2024 Andrei Miloiu * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -31,12 +32,12 @@ STRINGTABLE IDS_TIME_INTERVAL_MINUTES " min" IDS_TIME_INTERVAL_SECONDS " sec" #ifdef __REACTOS__ - IDS_KB_FORMAT "%s KB" - IDS_MB_FORMAT "%s MB" - IDS_GB_FORMAT "%s GB" - IDS_TB_FORMAT "%s TB" - IDS_PB_FORMAT "%s PB" - IDS_EB_FORMAT "%s EB" + IDS_KB_FORMAT "%s KO" + IDS_MB_FORMAT "%s MO" + IDS_GB_FORMAT "%s GO" + IDS_TB_FORMAT "%s TO" + IDS_PB_FORMAT "%s PO" + IDS_EB_FORMAT "%s EO" #endif } @@ -47,9 +48,9 @@ FONT 8, "MS Shell Dlg" { LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 - CHECKBOX "Nu dor&esc recurența acestui mesaj", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Con&firmă", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "A&nulează", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "D&a", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "N&u", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "&În viitor, nu se va afişa această casetă de dialog", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Revocare", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Da", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Nu", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } From 0cfc9aba0593315ada2a73173e42746765c75432 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Sun, 7 Apr 2024 21:40:38 +0300 Subject: [PATCH 10/44] [STOBJECT] Update Romanian (ro-RO) translation (#6695) --- dll/shellext/stobject/lang/ro-RO.rc | 50 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/dll/shellext/stobject/lang/ro-RO.rc b/dll/shellext/stobject/lang/ro-RO.rc index bd381a077ac..a98f894e493 100644 --- a/dll/shellext/stobject/lang/ro-RO.rc +++ b/dll/shellext/stobject/lang/ro-RO.rc @@ -3,7 +3,7 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2018 Ștefan Fulea - * Copyright 2023 Andrei Miloiu + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT @@ -11,50 +11,50 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT IDD_POWER_METER DIALOGEX 0, 0, 252, 218 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Consum de energie" +CAPTION "Contor" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Stare", 1001, "Button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 9, 20, 234, 189 - CONTROL "&Afișează pictogramă în bara de activități.", 1002, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 6, 6, 120, 10 - CONTROL "Afișează detalii pentru fiecare &baterie.", 1003, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 135, 6, 120, 8 + CONTROL "Stare încărcare", 1001, "Button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 9, 20, 234, 189 + CONTROL "&Afişare pictograme pe bara de activităţi.", 1002, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 6, 6, 120, 10 + CONTROL "Se afişează detalii pentru fiecare &baterie.", 1003, "Button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 135, 6, 120, 8 CONTROL "", 1000, "Static", SS_LEFT | WS_CHILD | WS_GROUP, 11, 29, 229, 178 END STRINGTABLE BEGIN //Power related strings - IDS_PWR_PROPERTIES "&Ajustare proprietăți de consum energie" - IDS_PWR_METER "&Deschide Contor de energie" + IDS_PWR_PROPERTIES "&Reglare proprietăţi alimentare" + IDS_PWR_METER "&Deschidere Contor" IDS_PWR_RUN "shell32.dll,Control_RunDLL PowerCfg.cpl" - IDS_PWR_PERCENT_REMAINING "Au mai rămas %u%%" - IDS_PWR_CHARGING "%u%% and charging" - IDS_PWR_UNKNOWN_REMAINING "Nu este disponibil cât a mai rămas" - IDS_PWR_AC "În rețea de CA" - IDS_PWR_HOURS_REMAINING "Au mai rămas %1!u!:%2!02u! ore (%3!u!%%)" - IDS_PWR_MINUTES_REMAINING "Au mai rămas %1!u! min (%2!u!%%)" + IDS_PWR_PERCENT_REMAINING "%u%% rămase" + IDS_PWR_CHARGING "%u%% și se încarcă" + IDS_PWR_UNKNOWN_REMAINING "Nu se ştie cât a mai rămas" + IDS_PWR_AC "Când există sursă CA" + IDS_PWR_HOURS_REMAINING "%1!u!:%2!02u! ore (%3!u!%%) rămase" + IDS_PWR_MINUTES_REMAINING "%1!u! minute (%2!u!%%) rămase" //Hotplug related strings - IDS_HOTPLUG_REMOVE_1 "Scoate în siguranță acest dispozitiv" - IDS_HOTPLUG_REMOVE_2 "S&coate în siguranță acest dispozitiv" - IDS_HOTPLUG_REMOVE_3 "Scoate în siguranță %s" + IDS_HOTPLUG_REMOVE_1 "Eliminarea în siguranţă a unui dispozitiv hardware" + IDS_HOTPLUG_REMOVE_2 "&Eliminarea în siguranţă a unui dispozitiv hardware" + IDS_HOTPLUG_REMOVE_3 "Eliminare în siguranţă a %s" IDS_HOTPLUG_RUN "shell32.dll,Control_RunDLL hotplug.dll" IDS_HOTPLUG_COMMA ", " - IDS_HOTPLUG_DRIVE " - unitate (%s)" - IDS_HOTPLUG_DRIVES " - unități (%s)" + IDS_HOTPLUG_DRIVE " - Unitatea(%s)" + IDS_HOTPLUG_DRIVES " - Unităţile(%s)" IDS_HOTPLUG_A "A:" - IDS_HOTPLUG_REQUIRES "Acest dispozitiv necesită „Scoatere în siguranță”" - IDS_HOTPLUG_CLICK "Înainte de a scoate acest dispozitiv, apăsați pe această pictogramă și selectați dispozitivul pe care doriți să-l scoateți." + IDS_HOTPLUG_REQUIRES "Acest dispozitiv hardware necesită ""Eliminare în siguranţă""" + IDS_HOTPLUG_CLICK "Înainte de a elimina acest dispozitiv hardware, faceţi clic pe această pictogramă şi selectaţi dispozitivul hardware pe care îl eliminaţi." //Volume related strings IDS_VOL_VOLUME "Volum" - IDS_VOL_ADJUST "&Ajustează proprietăți audio" - IDS_VOL_OPEN "&Deschide control de volum" + IDS_VOL_ADJUST "&Reglare proprietăţi audio" + IDS_VOL_OPEN "&Deschidere control volum" IDS_VOL_RUN "SNDVOL32.EXE" IDS_VOL_MUTED "Volum (mut)" //Keyboard-Mouse related strings - IDS_KEYS_STICKY "TasteLipicioase" - IDS_KEYS_MOUSE "TasteMouse" - IDS_KEYS_FILTER "FiltruTaste" + IDS_KEYS_STICKY "TasteAdezive" + IDS_KEYS_MOUSE "TasteMaus" + IDS_KEYS_FILTER "TasteFiltrare" END From ff531eaade5506a75397af93bc00024a0d3bec64 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 8 Apr 2024 09:17:08 +0900 Subject: [PATCH 11/44] [SHLWAPI][SHLWAPI_APITEST] Fix NULL behavior of StrDupA/W (#6720) Fix wrong behavior of shlwapi!StrDupA and shlwapi!StrDupW functions. JIRA issue: CORE-19495 Return NULL when lpszStr == NULL. --- dll/win32/shlwapi/string.c | 8 ++++ .../rostests/apitests/shlwapi/CMakeLists.txt | 1 + modules/rostests/apitests/shlwapi/StrDup.c | 46 +++++++++++++++++++ modules/rostests/apitests/shlwapi/testlist.c | 2 + 4 files changed, 57 insertions(+) create mode 100644 modules/rostests/apitests/shlwapi/StrDup.c diff --git a/dll/win32/shlwapi/string.c b/dll/win32/shlwapi/string.c index 6dc9ff8e59d..0285f6cd58a 100644 --- a/dll/win32/shlwapi/string.c +++ b/dll/win32/shlwapi/string.c @@ -1068,6 +1068,10 @@ LPSTR WINAPI StrDupA(LPCSTR lpszStr) TRACE("(%s)\n",debugstr_a(lpszStr)); +#ifdef __REACTOS__ + if (!lpszStr) + return NULL; +#endif iLen = lpszStr ? strlen(lpszStr) + 1 : 1; lpszRet = LocalAlloc(LMEM_FIXED, iLen); @@ -1093,6 +1097,10 @@ LPWSTR WINAPI StrDupW(LPCWSTR lpszStr) TRACE("(%s)\n",debugstr_w(lpszStr)); +#ifdef __REACTOS__ + if (!lpszStr) + return NULL; +#endif iLen = (lpszStr ? strlenW(lpszStr) + 1 : 1) * sizeof(WCHAR); lpszRet = LocalAlloc(LMEM_FIXED, iLen); diff --git a/modules/rostests/apitests/shlwapi/CMakeLists.txt b/modules/rostests/apitests/shlwapi/CMakeLists.txt index 4000fd26775..7a9a57e40aa 100644 --- a/modules/rostests/apitests/shlwapi/CMakeLists.txt +++ b/modules/rostests/apitests/shlwapi/CMakeLists.txt @@ -17,6 +17,7 @@ list(APPEND SOURCE SHLoadIndirectString.c SHLoadRegUIString.c SHPropertyBag.cpp + StrDup.c StrFormatByteSizeW.c testdata.rc testlist.c) diff --git a/modules/rostests/apitests/shlwapi/StrDup.c b/modules/rostests/apitests/shlwapi/StrDup.c new file mode 100644 index 00000000000..4872b77948d --- /dev/null +++ b/modules/rostests/apitests/shlwapi/StrDup.c @@ -0,0 +1,46 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Tests for StrDupA/W + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ + */ + +#include +#include +#include + +static void TEST_StrDupA(void) +{ + LPSTR ptrA; + + ptrA = StrDupA(NULL); + + if (IsWindowsXPOrGreater()) + ok_ptr(ptrA, NULL); + else + ok(ptrA && !*ptrA, "ptrA: '%s'\n", wine_dbgstr_a(ptrA)); + + if (ptrA) + LocalFree(ptrA); +} + +static void TEST_StrDupW(void) +{ + LPWSTR ptrW; + + ptrW = StrDupW(NULL); + + if (IsWindowsXPOrGreater()) + ok_ptr(ptrW, NULL); + else + ok(ptrW && !*ptrW, "ptrW: '%s'\n", wine_dbgstr_w(ptrW)); + + if (ptrW) + LocalFree(ptrW); +} + +START_TEST(StrDup) +{ + TEST_StrDupA(); + TEST_StrDupW(); +} diff --git a/modules/rostests/apitests/shlwapi/testlist.c b/modules/rostests/apitests/shlwapi/testlist.c index b497fc8836a..9f94155cf15 100644 --- a/modules/rostests/apitests/shlwapi/testlist.c +++ b/modules/rostests/apitests/shlwapi/testlist.c @@ -13,6 +13,7 @@ extern void func_SHGetRestriction(void); extern void func_SHLoadIndirectString(void); extern void func_SHLoadRegUIString(void); extern void func_SHPropertyBag(void); +extern void func_StrDup(void); extern void func_StrFormatByteSizeW(void); const struct test winetest_testlist[] = @@ -29,6 +30,7 @@ const struct test winetest_testlist[] = { "SHLoadIndirectString", func_SHLoadIndirectString }, { "SHLoadRegUIString", func_SHLoadRegUIString }, { "SHPropertyBag", func_SHPropertyBag }, + { "StrDup", func_StrDup }, { "StrFormatByteSizeW", func_StrFormatByteSizeW }, { 0, 0 } }; From 2d79b751a454c5ab89b2ad936ea299872d5dfe70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maj=20Sokli=C4=8D?= Date: Tue, 9 Apr 2024 11:46:52 +0200 Subject: [PATCH 12/44] [NOTEPAD] Fix english STRING_PRINTFAILED translation (#6722) --- base/applications/notepad/lang/bg-BG.rc | 2 +- base/applications/notepad/lang/cs-CZ.rc | 2 +- base/applications/notepad/lang/da-DK.rc | 2 +- base/applications/notepad/lang/de-DE.rc | 2 +- base/applications/notepad/lang/el-GR.rc | 2 +- base/applications/notepad/lang/en-US.rc | 2 +- base/applications/notepad/lang/es-ES.rc | 2 +- base/applications/notepad/lang/et-EE.rc | 2 +- base/applications/notepad/lang/eu-ES.rc | 2 +- base/applications/notepad/lang/fi-FI.rc | 2 +- base/applications/notepad/lang/fr-FR.rc | 2 +- base/applications/notepad/lang/he-IL.rc | 2 +- base/applications/notepad/lang/hi-IN.rc | 2 +- base/applications/notepad/lang/hr-HR.rc | 2 +- base/applications/notepad/lang/hy-AM.rc | 2 +- base/applications/notepad/lang/id-ID.rc | 2 +- base/applications/notepad/lang/it-IT.rc | 2 +- base/applications/notepad/lang/lt-LT.rc | 2 +- base/applications/notepad/lang/ms-MY.rc | 2 +- base/applications/notepad/lang/nl-NL.rc | 2 +- base/applications/notepad/lang/no-NO.rc | 2 +- base/applications/notepad/lang/pl-PL.rc | 2 +- base/applications/notepad/lang/pt-BR.rc | 2 +- base/applications/notepad/lang/pt-PT.rc | 2 +- base/applications/notepad/lang/sk-SK.rc | 2 +- base/applications/notepad/lang/sq-AL.rc | 2 +- base/applications/notepad/lang/sv-SE.rc | 2 +- base/applications/notepad/lang/th-TH.rc | 2 +- base/applications/notepad/lang/tr-TR.rc | 2 +- base/applications/notepad/lang/uk-UA.rc | 2 +- base/applications/notepad/lang/uz-UZ.rc | 2 +- base/applications/notepad/lang/zh-CN.rc | 2 +- base/applications/notepad/lang/zh-HK.rc | 2 +- base/applications/notepad/lang/zh-TW.rc | 2 +- 34 files changed, 34 insertions(+), 34 deletions(-) diff --git a/base/applications/notepad/lang/bg-BG.rc b/base/applications/notepad/lang/bg-BG.rc index 478f854596b..339f5751bc5 100644 --- a/base/applications/notepad/lang/bg-BG.rc +++ b/base/applications/notepad/lang/bg-BG.rc @@ -180,7 +180,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Възпроизводствено право 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/cs-CZ.rc b/base/applications/notepad/lang/cs-CZ.rc index 11cf195af20..bbc8dfe1be8 100644 --- a/base/applications/notepad/lang/cs-CZ.rc +++ b/base/applications/notepad/lang/cs-CZ.rc @@ -181,7 +181,7 @@ paměti." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Textový dokument" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/da-DK.rc b/base/applications/notepad/lang/da-DK.rc index c632169f151..f2c11dcdcab 100644 --- a/base/applications/notepad/lang/da-DK.rc +++ b/base/applications/notepad/lang/da-DK.rc @@ -181,7 +181,7 @@ hukommelse, og prøv så igen." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/de-DE.rc b/base/applications/notepad/lang/de-DE.rc index 24bc433fbf4..69563a41a2c 100644 --- a/base/applications/notepad/lang/de-DE.rc +++ b/base/applications/notepad/lang/de-DE.rc @@ -181,7 +181,7 @@ Anwendungen, um den verfügbaren Arbeitsspeicher zu\nerhöhen." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Textdokument" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/el-GR.rc b/base/applications/notepad/lang/el-GR.rc index 86e75214323..2c39b8f1a07 100644 --- a/base/applications/notepad/lang/el-GR.rc +++ b/base/applications/notepad/lang/el-GR.rc @@ -181,7 +181,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/en-US.rc b/base/applications/notepad/lang/en-US.rc index 64b250ba8dd..e3ac960f3f8 100644 --- a/base/applications/notepad/lang/en-US.rc +++ b/base/applications/notepad/lang/en-US.rc @@ -180,7 +180,7 @@ Close one or more applications to increase the amount of\nfree memory." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/es-ES.rc b/base/applications/notepad/lang/es-ES.rc index b6e7f3b3c27..b71b53fe284 100644 --- a/base/applications/notepad/lang/es-ES.rc +++ b/base/applications/notepad/lang/es-ES.rc @@ -183,7 +183,7 @@ aumentar la cantidad\nde memoria libre." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Documento de texto" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/et-EE.rc b/base/applications/notepad/lang/et-EE.rc index 7d31ceb9ec6..abd43863800 100644 --- a/base/applications/notepad/lang/et-EE.rc +++ b/base/applications/notepad/lang/et-EE.rc @@ -187,7 +187,7 @@ käsu lõpetamiseks.\nSulge üks või enam rakendust, et suurendada\nvaba mälu STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Tekstidokument" STRING_NOTEPAD_AUTHORS "Autoriõigus 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/eu-ES.rc b/base/applications/notepad/lang/eu-ES.rc index c9719f4fbc6..9f37499c78e 100644 --- a/base/applications/notepad/lang/eu-ES.rc +++ b/base/applications/notepad/lang/eu-ES.rc @@ -181,7 +181,7 @@ memoria librearen\nkopurua handitzeko." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/fi-FI.rc b/base/applications/notepad/lang/fi-FI.rc index 6b4a58d4878..964cba37694 100644 --- a/base/applications/notepad/lang/fi-FI.rc +++ b/base/applications/notepad/lang/fi-FI.rc @@ -181,7 +181,7 @@ muistia." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/fr-FR.rc b/base/applications/notepad/lang/fr-FR.rc index 6216cd8804b..0a7a23365d2 100644 --- a/base/applications/notepad/lang/fr-FR.rc +++ b/base/applications/notepad/lang/fr-FR.rc @@ -181,7 +181,7 @@ de la mémoire." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Document Texte" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/he-IL.rc b/base/applications/notepad/lang/he-IL.rc index c3312dfa326..dc7bfe0682d 100644 --- a/base/applications/notepad/lang/he-IL.rc +++ b/base/applications/notepad/lang/he-IL.rc @@ -183,7 +183,7 @@ task.\nClose one or more applications to increase the amount of\nfree memory." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/hi-IN.rc b/base/applications/notepad/lang/hi-IN.rc index 59b16bb6cc6..451aea4be73 100644 --- a/base/applications/notepad/lang/hi-IN.rc +++ b/base/applications/notepad/lang/hi-IN.rc @@ -187,7 +187,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "टेक्स्ट डॉक्यूमॅन्ट" STRING_NOTEPAD_AUTHORS "कॉपीराइट 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/hr-HR.rc b/base/applications/notepad/lang/hr-HR.rc index e316cb2354f..e108390ff4d 100644 --- a/base/applications/notepad/lang/hr-HR.rc +++ b/base/applications/notepad/lang/hr-HR.rc @@ -187,7 +187,7 @@ zadatak.\nZatvorite jednu ili više aplikacija da povećate\nslobodnu memoriju." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Tekstni dokument" STRING_NOTEPAD_AUTHORS "Copyright 1997, 98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/hy-AM.rc b/base/applications/notepad/lang/hy-AM.rc index b273e56cbbf..f6f7d9d08d1 100644 --- a/base/applications/notepad/lang/hy-AM.rc +++ b/base/applications/notepad/lang/hy-AM.rc @@ -180,7 +180,7 @@ Would you like to save the changes?" STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/id-ID.rc b/base/applications/notepad/lang/id-ID.rc index bbd4256c956..c5eb6ac4dfc 100644 --- a/base/applications/notepad/lang/id-ID.rc +++ b/base/applications/notepad/lang/id-ID.rc @@ -180,7 +180,7 @@ ini.\nTutup satu atau lebih aplikasi untuk meningkatkan jumlah\nmemori bebas." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Teks Dokumen" STRING_NOTEPAD_AUTHORS "Hak Cipta 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/it-IT.rc b/base/applications/notepad/lang/it-IT.rc index 1402e2cca32..ebf7177fc03 100644 --- a/base/applications/notepad/lang/it-IT.rc +++ b/base/applications/notepad/lang/it-IT.rc @@ -181,7 +181,7 @@ di memoria libera." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Documento di testo" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/lt-LT.rc b/base/applications/notepad/lang/lt-LT.rc index 08f847765b0..4f9cd7eee36 100644 --- a/base/applications/notepad/lang/lt-LT.rc +++ b/base/applications/notepad/lang/lt-LT.rc @@ -180,7 +180,7 @@ Ar norite išsaugoti pakeitimus?" STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "(C) 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/ms-MY.rc b/base/applications/notepad/lang/ms-MY.rc index 23d34acde83..e661e2fbfc2 100644 --- a/base/applications/notepad/lang/ms-MY.rc +++ b/base/applications/notepad/lang/ms-MY.rc @@ -182,7 +182,7 @@ tugas ini.\nTutup satu atau lebih aplikasi untuk menambah jumlah\ningatan kosong STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/nl-NL.rc b/base/applications/notepad/lang/nl-NL.rc index 2a41af6b02c..7690b9a827e 100644 --- a/base/applications/notepad/lang/nl-NL.rc +++ b/base/applications/notepad/lang/nl-NL.rc @@ -180,7 +180,7 @@ Wilt u de wijzigingen opslaan?" STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/no-NO.rc b/base/applications/notepad/lang/no-NO.rc index fc907a5a743..bde57272672 100644 --- a/base/applications/notepad/lang/no-NO.rc +++ b/base/applications/notepad/lang/no-NO.rc @@ -180,7 +180,7 @@ Avslutt en eller mere applikasjoner for øke mengden av\nledig minne." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Enerett 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/pl-PL.rc b/base/applications/notepad/lang/pl-PL.rc index 883f661e0e5..99392fe8a2d 100644 --- a/base/applications/notepad/lang/pl-PL.rc +++ b/base/applications/notepad/lang/pl-PL.rc @@ -175,7 +175,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Dokument tekstowy" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/pt-BR.rc b/base/applications/notepad/lang/pt-BR.rc index 202130aa474..7fe97b63d27 100644 --- a/base/applications/notepad/lang/pt-BR.rc +++ b/base/applications/notepad/lang/pt-BR.rc @@ -180,7 +180,7 @@ tarefa.\nFeche uma ou mais aplicações para aumentar a quantidade de memória l STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/pt-PT.rc b/base/applications/notepad/lang/pt-PT.rc index adc7ab342c6..fe92f9c3794 100644 --- a/base/applications/notepad/lang/pt-PT.rc +++ b/base/applications/notepad/lang/pt-PT.rc @@ -180,7 +180,7 @@ tarefa.\nFeche uma ou mais aplicações para aumentar a quantidade de memória l STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Documento de texto" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/sk-SK.rc b/base/applications/notepad/lang/sk-SK.rc index 45084fe8061..8adcfb1dda2 100644 --- a/base/applications/notepad/lang/sk-SK.rc +++ b/base/applications/notepad/lang/sk-SK.rc @@ -182,7 +182,7 @@ alebo viac aplikácií, aby sa uvoľnila pamäť a skúste to znova." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/sq-AL.rc b/base/applications/notepad/lang/sq-AL.rc index 79340ced5ad..cae2455f552 100644 --- a/base/applications/notepad/lang/sq-AL.rc +++ b/base/applications/notepad/lang/sq-AL.rc @@ -182,7 +182,7 @@ detyrë.\nMbyll nje ose me shume programe te rrisesh shumën e\nmemories." STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/sv-SE.rc b/base/applications/notepad/lang/sv-SE.rc index 55ed5312c5a..f54b27c163e 100644 --- a/base/applications/notepad/lang/sv-SE.rc +++ b/base/applications/notepad/lang/sv-SE.rc @@ -180,7 +180,7 @@ den här åtgärden.\nAvsluta ett eller flera program för att frigöra mer minn STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/th-TH.rc b/base/applications/notepad/lang/th-TH.rc index 3bf2b721583..6dad84fe384 100644 --- a/base/applications/notepad/lang/th-TH.rc +++ b/base/applications/notepad/lang/th-TH.rc @@ -175,7 +175,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/tr-TR.rc b/base/applications/notepad/lang/tr-TR.rc index be2ee95dc73..184a04a442e 100644 --- a/base/applications/notepad/lang/tr-TR.rc +++ b/base/applications/notepad/lang/tr-TR.rc @@ -178,7 +178,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Metin Belgesi" STRING_NOTEPAD_AUTHORS "Telif Hakları: 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/uk-UA.rc b/base/applications/notepad/lang/uk-UA.rc index 06afd58c11a..3e7e356f2a9 100644 --- a/base/applications/notepad/lang/uk-UA.rc +++ b/base/applications/notepad/lang/uk-UA.rc @@ -180,7 +180,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Текстовий документ" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/uz-UZ.rc b/base/applications/notepad/lang/uz-UZ.rc index 4ea02231662..e10af5f70e9 100644 --- a/base/applications/notepad/lang/uz-UZ.rc +++ b/base/applications/notepad/lang/uz-UZ.rc @@ -180,7 +180,7 @@ O‘zgarishlarni saqlashni istaysizmi?" STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "Text Document" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/zh-CN.rc b/base/applications/notepad/lang/zh-CN.rc index 12879a31dd8..eeac996579d 100644 --- a/base/applications/notepad/lang/zh-CN.rc +++ b/base/applications/notepad/lang/zh-CN.rc @@ -188,7 +188,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "文本文档" STRING_NOTEPAD_AUTHORS "版权所有 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/zh-HK.rc b/base/applications/notepad/lang/zh-HK.rc index 7a2c9f23331..9f794180538 100644 --- a/base/applications/notepad/lang/zh-HK.rc +++ b/base/applications/notepad/lang/zh-HK.rc @@ -189,7 +189,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "純文字檔案" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" diff --git a/base/applications/notepad/lang/zh-TW.rc b/base/applications/notepad/lang/zh-TW.rc index 4d64ad1ea94..0fecf13119c 100644 --- a/base/applications/notepad/lang/zh-TW.rc +++ b/base/applications/notepad/lang/zh-TW.rc @@ -188,7 +188,7 @@ BEGIN STRING_PRINTCANCELING "The print job is being canceled..." STRING_PRINTCOMPLETE "Printing is successfully done." STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing is failed." + STRING_PRINTFAILED "Printing failed." STRING_TEXT_DOCUMENT "純文字檔案" STRING_NOTEPAD_AUTHORS "Copyright 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" From e85ef799fe90c9cd82193537ebf453e3aee24fb9 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Tue, 9 Apr 2024 13:41:54 +0300 Subject: [PATCH 13/44] [SHELL32] Update Romanian (ro-RO) translation (#6657) Co-authored-by: Joachim Henze --- dll/win32/shell32/lang/ro-RO.rc | 766 ++++++++++++++++---------------- 1 file changed, 383 insertions(+), 383 deletions(-) diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc index aeae40bc174..3169ac4b532 100644 --- a/dll/win32/shell32/lang/ro-RO.rc +++ b/dll/win32/shell32/lang/ro-RO.rc @@ -10,16 +10,16 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT MENU_001 MENUEX BEGIN - MENUITEM "Picto&grame mari", FCIDM_SHVIEW_BIGICON - MENUITEM "&Pictograme mici", FCIDM_SHVIEW_SMALLICON - MENUITEM "&Listă", FCIDM_SHVIEW_LISTVIEW + MENUITEM "Dal&e", FCIDM_SHVIEW_BIGICON + MENUITEM "&Miniaturi", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Listare", FCIDM_SHVIEW_LISTVIEW MENUITEM "&Detalii", FCIDM_SHVIEW_REPORTVIEW MENUITEM "", -1, MFT_SEPARATOR - POPUP "&Ordonare după", FCIDM_SHVIEW_ARRANGE + POPUP "Aranjare &Miniaturi după", FCIDM_SHVIEW_ARRANGE BEGIN MENUITEM "", -1, MFT_SEPARATOR - MENUITEM "Criteriu &automat", FCIDM_SHVIEW_AUTOARRANGE - MENUITEM "Aliniază la &grilă", FCIDM_SHVIEW_ALIGNTOGRID + MENUITEM "&Aranjare automată", FCIDM_SHVIEW_AUTOARRANGE + MENUITEM "Aliniere la &grilă", FCIDM_SHVIEW_ALIGNTOGRID END END @@ -28,42 +28,42 @@ MENU_002 MENUEX BEGIN POPUP "" BEGIN - POPUP "&Afișare", FCIDM_SHVIEW_VIEW + POPUP "&Vizualizare", FCIDM_SHVIEW_VIEW BEGIN - MENUITEM "D&ale", FCIDM_SHVIEW_BIGICON - MENUITEM "&Pictograme", FCIDM_SHVIEW_SMALLICON - MENUITEM "&Listă", FCIDM_SHVIEW_LISTVIEW - MENUITEM "&Detailii", FCIDM_SHVIEW_REPORTVIEW + MENUITEM "Dal&e", FCIDM_SHVIEW_BIGICON + MENUITEM "&Miniaturi", FCIDM_SHVIEW_SMALLICON + MENUITEM "&Listare", FCIDM_SHVIEW_LISTVIEW + MENUITEM "&Detalii", FCIDM_SHVIEW_REPORTVIEW END MENUITEM "", -1, MFT_SEPARATOR - POPUP "&Ordonare după", FCIDM_SHVIEW_ARRANGE + POPUP "Aranjare &Miniaturi după", FCIDM_SHVIEW_ARRANGE BEGIN MENUITEM "", -1, MFT_SEPARATOR - MENUITEM "Criteriu &automat", FCIDM_SHVIEW_AUTOARRANGE - MENUITEM "Aliniază la &grilă", FCIDM_SHVIEW_ALIGNTOGRID + MENUITEM "&Aranjare automată", FCIDM_SHVIEW_AUTOARRANGE + MENUITEM "Aliniere la &grilă", FCIDM_SHVIEW_ALIGNTOGRID END - MENUITEM "Împ&rospătează", FCIDM_SHVIEW_REFRESH + MENUITEM "&Reîmprospătare", FCIDM_SHVIEW_REFRESH MENUITEM "", -1, MFT_SEPARATOR - MENUITEM "&Lipește", FCIDM_SHVIEW_INSERT - MENUITEM "Lipește ca sc&urtătură", FCIDM_SHVIEW_INSERTLINK + MENUITEM "&Lipire", FCIDM_SHVIEW_INSERT + MENUITEM "Lipire c&omandă rapidă", FCIDM_SHVIEW_INSERTLINK END END /* menubar EDIT menu */ MENU_003 MENU BEGIN - MENUITEM "&Revocare\tCtrl+Z", FCIDM_SHVIEW_UNDO + MENUITEM "&Anulare\tCtrl+Z", FCIDM_SHVIEW_UNDO MENUITEM SEPARATOR - MENUITEM "&Decupează\tCtrl+X", FCIDM_SHVIEW_CUT - MENUITEM "&Copie\tCtrl+C", FCIDM_SHVIEW_COPY - MENUITEM "&Lipește\tCtrl+V", FCIDM_SHVIEW_INSERT - MENUITEM "Lipește sc&urtătură", FCIDM_SHVIEW_INSERTLINK + MENUITEM "&Decupare\tCtrl+X", FCIDM_SHVIEW_CUT + MENUITEM "&Copiere\tCtrl+C", FCIDM_SHVIEW_COPY + MENUITEM "&Lipire\tCtrl+V", FCIDM_SHVIEW_INSERT + MENUITEM "Lipire c&omandă rapidă", FCIDM_SHVIEW_INSERTLINK MENUITEM SEPARATOR - MENUITEM "Copi&ere în folderul…", FCIDM_SHVIEW_COPYTO - MENUITEM "&Mutare în folderul…", FCIDM_SHVIEW_MOVETO + MENUITEM "Copiere în &folderul…", FCIDM_SHVIEW_COPYTO + MENUITEM "M&utare în folderul…", FCIDM_SHVIEW_MOVETO MENUITEM SEPARATOR - MENUITEM "Selectează t&ot\tCtrl+A", FCIDM_SHVIEW_SELECTALL - MENUITEM "Inversea&ză selecția", FCIDM_SHVIEW_INVERTSELECTION + MENUITEM "Selectare &totală\tCtrl+A", FCIDM_SHVIEW_SELECTALL + MENUITEM "In&versare selecţie", FCIDM_SHVIEW_INVERTSELECTION END /* shellview item menu */ @@ -72,15 +72,15 @@ BEGIN POPUP "" BEGIN MENUITEM SEPARATOR - MENUITEM "&Decupează", IDM_CUT - MENUITEM "&Copiază", IDM_COPY - MENUITEM "&Lipește", IDM_INSERT + MENUITEM "&Decupare", IDM_CUT + MENUITEM "&Copiere", IDM_COPY + MENUITEM "&Lipire", IDM_INSERT MENUITEM SEPARATOR - MENUITEM "Crează sc&urtătură", IDM_CREATELINK - MENUITEM "Șt&erge", IDM_DELETE - MENUITEM "&Redenumește", IDM_RENAME + MENUITEM "Creare c&omandă rapidă", IDM_CREATELINK + MENUITEM "Ş&tergere", IDM_DELETE + MENUITEM "Redenu&mire", IDM_RENAME MENUITEM SEPARATOR - MENUITEM "&Proprietăți", IDM_PROPERTIES + MENUITEM "Prop&rietăţi", IDM_PROPERTIES END END @@ -88,8 +88,8 @@ IDM_DRAGFILE MENU BEGIN POPUP "" BEGIN - MENUITEM "&Copiază aici", IDM_COPYHERE - MENUITEM "&Mută aici", IDM_MOVEHERE + MENUITEM "&Copiere în acest loc", IDM_COPYHERE + MENUITEM "&Mutare în acest loc", IDM_MOVEHERE MENUITEM "Crea&ză scurtătură aici", IDM_LINKHERE MENUITEM SEPARATOR MENUITEM "Revocare", 0 @@ -101,8 +101,8 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "Specificare folder" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "Con&firmă", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Re&vocare", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Revocare", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 24 LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 @@ -118,8 +118,8 @@ BEGIN EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 12, 38, 194, 14, ES_AUTOHSCROLL | WS_GROUP CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_LINESATROOT | TVS_HASLINES | TVS_HASBUTTONS | WS_BORDER | WS_TABSTOP, 12, 58, 194, 105 PUSHBUTTON "&Creare folder nou", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "Con&firmă", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Re&vocare", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Revocare", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP END IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 @@ -127,10 +127,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Mesaj" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "D&a", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Da pentru t&oate", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "N&u", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "A&nulează", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "&Da", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "D&a pentru tot", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Nu", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Revocare", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 END @@ -147,13 +147,13 @@ BEGIN LTEXT COPYRIGHT_YEAR, IDC_STATIC, 103, 75, 17, 10 LTEXT " Echipa ReactOS\0", IDC_STATIC, 120, 75, 53, 10 LTEXT "", IDC_ABOUT_OTHERSTUFF, 35, 90, 180, 20, SS_NOPREFIX - LTEXT "Versiune înregistrată pentru:", IDC_ABOUT_REG_TO, 35, 115, 180, 10 + LTEXT "Această versiune ReactOS este înregistrată pentru:", IDC_ABOUT_REG_TO, 35, 115, 180, 10 LTEXT "", IDC_ABOUT_REG_USERNAME, 45, 125, 180, 10, SS_NOPREFIX LTEXT "", IDC_ABOUT_REG_ORGNAME, 45, 135, 180, 10, SS_NOPREFIX LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ LTEXT "Memorie fizică instalată:", IDC_STATIC, 35, 152, 130, 10 LTEXT "", IDC_ABOUT_PHYSMEM, 167, 152, 88, 10 - DEFPUSHBUTTON "Î&nchide", IDOK, 220, 178, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 PUSHBUTTON "", IDC_ABOUT_AUTHORS, 5, 178, 70, 14 END @@ -171,71 +171,71 @@ CAPTION "Executare" FONT 8, "MS Shell Dlg" BEGIN ICON "", IDC_RUNDLG_ICON, 7, 11, 18, 20, WS_VISIBLE - LTEXT "Tastați numele unui program, folder, document, sau a unei resurse de Internet, în vederea deschiderii în ReactOS.", 12289, 36, 4, 185, 26 - LTEXT "&Deschide:", 12305, 7, 39, 33, 10 + LTEXT "Tastaţi numele unui program, folder, document sau al unei resurse Internet, iar ReactOS îl va deschide.", 12289, 36, 4, 185, 26 + LTEXT "&Deschidere:", 12305, 7, 39, 33, 10 CONTROL "", IDC_RUNDLG_EDITPATH, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 41, 37, 179, 100 - DEFPUSHBUTTON "Con&firmă", IDOK, 36, 70, 59, 14, WS_TABSTOP - PUSHBUTTON "A&nulează", IDCANCEL, 98, 70, 59, 14, WS_TABSTOP - PUSHBUTTON "Spe&cificare…", 12288, 160, 70, 59, 14, WS_TABSTOP + DEFPUSHBUTTON "OK", IDOK, 36, 70, 59, 14, WS_TABSTOP + PUSHBUTTON "Revocare", IDCANCEL, 98, 70, 59, 14, WS_TABSTOP + PUSHBUTTON "&Răsfoire…", 12288, 160, 70, 59, 14, WS_TABSTOP END IDD_SHORTCUT_PROPERTIES DIALOGEX 0, 0, 235, 215 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Scurtătură" +CAPTION "Comandă rapidă" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", IDC_SHORTCUT_ICON, 8, 8, 21, 20, WS_VISIBLE EDITTEXT IDC_SHORTCUT_TEXT, 49, 10, 180, 14, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "", -1, 8, 31, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE - LTEXT "Tipul destinației:", IDC_SHORTCUT_TYPE, 8, 38, 68, 10 + LTEXT "Tip ţintă:", IDC_SHORTCUT_TYPE, 8, 38, 68, 10 EDITTEXT IDC_SHORTCUT_TYPE_EDIT, 79, 37, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Locația destinației:", IDC_SHORTCUT_LOCATION, 8, 55, 68, 10 + LTEXT "Amplasare ţintă:", IDC_SHORTCUT_LOCATION, 8, 55, 68, 10 EDITTEXT IDC_SHORTCUT_LOCATION_EDIT, 79, 53, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "D&estinația:", IDC_SHORTCUT_TARGET, 8, 71, 68, 10 + LTEXT "Ţi&ntă:", IDC_SHORTCUT_TARGET, 8, 71, 68, 10 EDITTEXT IDC_SHORTCUT_TARGET_TEXT, 79, 69, 150, 14, ES_AUTOHSCROLL LTEXT "", -1, 8, 88, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE - LTEXT "C&alea de lansare:", IDC_SHORTCUT_START_IN, 8, 98, 68, 10 + LTEXT "&Start în:", IDC_SHORTCUT_START_IN, 8, 98, 68, 10 EDITTEXT IDC_SHORTCUT_START_IN_EDIT, 79, 96, 150, 14, ES_AUTOHSCROLL - LTEXT "Taste &rapide:", IDC_SHORTCUT_KEY, 8, 117, 68, 10 + LTEXT "&Tastă de comandă rapidă:", IDC_SHORTCUT_KEY, 8, 117, 68, 10 CONTROL "", IDC_SHORTCUT_KEY_HOTKEY, "msctls_hotkey32", WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP, 79, 115, 150, 14 - LTEXT "E&xecuție:", IDC_SHORTCUT_RUN, 8, 136, 68, 10 + LTEXT "E&xecutare:", IDC_SHORTCUT_RUN, 8, 136, 68, 10 COMBOBOX IDC_SHORTCUT_RUN_COMBO, 79, 134, 150, 54, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP - LTEXT "&Comentariu:", IDC_SHORTCUT_COMMENT, 8, 154, 68, 10 + LTEXT "C&omentariu:", IDC_SHORTCUT_COMMENT, 8, 154, 68, 10 EDITTEXT IDC_SHORTCUT_COMMENT_EDIT, 79, 152, 150, 14, ES_AUTOHSCROLL - PUSHBUTTON "&Locul țintei", IDC_SHORTCUT_FIND, 9, 172, 70, 14, ES_LEFT - PUSHBUTTON "&Pictogramă…", IDC_SHORTCUT_CHANGE_ICON, 84, 172, 70, 14, ES_LEFT - PUSHBUTTON "A&vansate…", IDC_SHORTCUT_ADVANCED, 159, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Găsire ţintă…", IDC_SHORTCUT_FIND, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "Sc&himbare pictogramă…", IDC_SHORTCUT_CHANGE_ICON, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "&Complex", IDC_SHORTCUT_ADVANCED, 159, 172, 70, 14, ES_LEFT END IDD_SHORTCUT_EXTENDED_PROPERTIES DIALOGEX 0, 0, 230, 150 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION -CAPTION "Proprietăți avansate" +CAPTION "Proprietăţi complexe" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_EXTENDED_PROPERTIES, IDI_SHELL_EXTENDED_PROPERTIES, 5, 5, 21, 20, SS_ICON - LTEXT "Specificați proprietăți avansate pentru această scurtătură.", -1, 5, 30, 210, 10 - CHECKBOX "Execută sub o i&dentitate explicită", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 - LTEXT "Această opțiune vă permite execuția scurtăturii sub autoritatea unui alt utilizator sau continuarea folosirii scurtăturii în mod securizat, protejând astfel calculatorul de activități neautorizate.", -1, 50, 60, 175, 40 - CHECKBOX "Execută în sp&ațiu de memorie separat", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED - PUSHBUTTON "Con&firmă", IDOK, 63, 124, 50, 15, WS_VISIBLE - PUSHBUTTON "A&nulează", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE + LTEXT "Alegeţi proprietăţile complexe pentru această comandă rapidă.", -1, 5, 30, 210, 10 + CHECKBOX "&Executare cu alte acreditări", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 + LTEXT "Această opţiune permite executarea acestei comenzi rapide ca alt utilizator sau continuarea folosirii contului personal, protejând totodată computerul şi datele faţă de programe neautorizate.", -1, 50, 60, 175, 40 + CHECKBOX "Executare într-un spaţiu separat de &memorie", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "Revocare", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END IDD_FOLDER_PROPERTIES DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Generale" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE EDITTEXT 14001, 58, 9, 170, 14, ES_LEFT - LTEXT "Tip fișier:", 14004, 8, 40, 55, 10 + LTEXT "Tip fişier:", 14004, 8, 40, 55, 10 CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 58, 40, 170, 10 LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE - LTEXT "Locație:", 14008, 8, 56, 55, 10 + LTEXT "Amplasare:", 14008, 8, 56, 55, 10 EDITTEXT 14009, 58, 56, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | ES_AUTOHSCROLL | NOT WS_TABSTOP LTEXT "Dimensiune:", 14010, 8, 72, 55, 10 EDITTEXT 14011, 58, 72, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Spațiu ocupat:", 140101, 8, 88, 55, 10 + LTEXT "Dimensiune pe disc:", 140101, 8, 88, 55, 10 EDITTEXT 14012, 58, 88, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "Conține:", 14026, 8, 104, 55, 10 EDITTEXT 14027, 58, 104, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL @@ -244,15 +244,15 @@ BEGIN EDITTEXT 14015, 58, 128, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "", -1, 8, 144, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Atribute:", 14020, 8, 152, 46, 10 - AUTOCHECKBOX "Nem&odificabil", 14021, 58, 151, 68, 10 + AUTOCHECKBOX "&Doar în citire", 14021, 58, 151, 68, 10 AUTOCHECKBOX "Asc&uns", 14022, 126, 151, 55, 10 - AUTOCHECKBOX "Ar&hivabil", 14023, 181, 151, 59, 10 - PUSHBUTTON "A&vansate…", 14028, 158, 170, 70, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTOCHECKBOX "Ar&hivare", 14023, 181, 151, 59, 10 + PUSHBUTTON "&Complex", 14028, 158, 170, 70, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP END IDD_FILE_PROPERTIES DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Generale" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 16, 7, 32, 32, WS_VISIBLE @@ -260,16 +260,16 @@ BEGIN LTEXT "", -1, 8, 29, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Tip fișier:", 14004, 8, 35, 50, 10 CONTROL "Fișier", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP, 58, 35, 170, 10 - LTEXT "Va fi deschis cu:", 14006, 8, 53, 50, 10 + LTEXT "Se deschide cu:", 14006, 8, 53, 50, 10 ICON "", 14025, 58, 52, 11, 10, NOT WS_VISIBLE - PUSHBUTTON "Spe&cificare…", 14024, 168, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "&Răsfoire…", 14024, 168, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP EDITTEXT 14007, 58, 53, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | ES_AUTOHSCROLL | NOT WS_TABSTOP LTEXT "", -1, 8, 68, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE - LTEXT "Locație:", 14008, 8, 75, 45, 10 + LTEXT "Amplasare:", 14008, 8, 75, 45, 10 EDITTEXT 14009, 58, 75, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | ES_AUTOHSCROLL | NOT WS_TABSTOP LTEXT "Dimensiune:", 14010, 8, 91, 45, 10 EDITTEXT 14011, 58, 91, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "Spațiu ocupat:", 140112, 8, 107, 55, 10 + LTEXT "Dimensiune pe disc:", 140112, 8, 107, 55, 10 EDITTEXT 14012, 58, 107, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP LTEXT "", -1, 8, 123, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Creat:", 14014, 8, 131, 45, 10 @@ -280,10 +280,10 @@ BEGIN EDITTEXT 14019, 58, 163, 170, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP LTEXT "", -1, 8, 179, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Atribute:", 14020, 8, 189, 45, 10 - AUTOCHECKBOX "Nem&odificabil", 14021, 58, 188, 67, 10 - AUTOCHECKBOX "Asc&uns", 14022, 126, 188, 50, 10 - AUTOCHECKBOX "Ar&hivabil", 14023, 181, 188, 49, 10 - PUSHBUTTON "A&vansate…", 14028, 180, 185, 50, 15, WS_TABSTOP + AUTOCHECKBOX "&Doar în citire", 14021, 58, 188, 67, 10 + AUTOCHECKBOX "&Ascuns", 14022, 126, 188, 50, 10 + AUTOCHECKBOX "Ar&hivare", 14023, 181, 188, 49, 10 + PUSHBUTTON "&Complex", 14028, 180, 185, 50, 15, WS_TABSTOP END IDD_FILE_VERSION DIALOGEX 0, 0, 235, 215 @@ -291,13 +291,13 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Versiune" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Versiune fișier:", 14000, 10, 10, 55, 10 + LTEXT "Versiune fişier:", 14000, 10, 10, 55, 10 EDITTEXT 14001, 77, 10, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER LTEXT "Descriere:", 14002, 10, 27, 45, 10 EDITTEXT 14003, 77, 27, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER LTEXT "Drept de autor:", 14004, 10, 46, 66, 10 EDITTEXT 14005, 77, 46, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER - GROUPBOX "Alte informații", 14006, 6, 70, 222, 115 + GROUPBOX "Alte informaţii despre versiune", 14006, 6, 70, 222, 115 LTEXT "Nume element:", 14007, 13, 82, 50, 10 LTEXT "Valoare:", 14008, 112, 82, 45, 10 LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY @@ -306,7 +306,7 @@ END IDD_DRIVE_PROPERTIES DIALOGEX 0, 0, 240, 220 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Generale" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14016, 10, 9, 32, 32, WS_VISIBLE @@ -318,11 +318,11 @@ BEGIN EDITTEXT 14002, 110, 51, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP LTEXT "", -1, 8, 64, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE CONTROL "", 14013, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 69, 10, 10 - LTEXT "Spațiu folosit:", -1, 25, 69, 80, 10 + LTEXT "Spaţiu utilizat:", -1, 25, 69, 80, 10 EDITTEXT 14003, 110, 69, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14004, 197, 69, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL CONTROL "", 14014, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 82, 10, 10 - LTEXT "Spațiu liber:", -1, 25, 82, 80, 10 + LTEXT "Spaţiu liber:", -1, 25, 82, 80, 10 EDITTEXT 14005, 110, 82, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14006, 197, 82, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "", -1, 8, 97, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE @@ -330,11 +330,11 @@ BEGIN EDITTEXT 14007, 110, 103, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL EDITTEXT 14008, 197, 103, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL CONTROL "", 14015, "Static", SS_OWNERDRAW, 70, 116, 100, 40 - CTEXT "Partiție %c", 14009, 95, 162, 50, 10 - PUSHBUTTON "Curățare &disc…", 14010, 160, 159, 70, 15, WS_TABSTOP + CTEXT "Disc %c", 14009, 95, 162, 50, 10 + PUSHBUTTON "Curăţare &disc", 14010, 160, 159, 70, 15, WS_TABSTOP LTEXT "", -1, 8, 176, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE - CHECKBOX "&Comprimă volumul pentru a economisi spațiu", 14011, 8, 190, 222, 10, WS_DISABLED - CHECKBOX "Permite „Serviciu de inde&xare” pentru accelerarea căutărilor", 14012, 8, 204, 222, 10, WS_DISABLED + CHECKBOX "&Comprimare unitate pentru economie de spaţiu-disc", 14011, 8, 190, 222, 10, WS_DISABLED + CHECKBOX "Serviciul de Indexare va &indexa acest disc pentru căutare rapidă", 14012, 8, 204, 222, 10, WS_DISABLED END IDD_DRIVE_TOOLS DIALOGEX 0, 0, 240, 220 @@ -342,23 +342,23 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Instrumente" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Verificarea erorilor", -1, 5, 5, 230, 60 + GROUPBOX "Verificare erori", -1, 5, 5, 230, 60 ICON IDI_SHELL_TOOLS_CHKDSK, IDC_STATIC, 13, 25, 21, 20 - LTEXT "Această opțiune va verifica acest volum pentru eventuale erori în sistemul de fișiere.", -1, 40, 25, 180, 20 - PUSHBUTTON "&Verificare…", 14000, 130, 45, 90, 15, WS_TABSTOP - GROUPBOX "&Defragmentare", -1, 5, 65, 230, 60 + LTEXT "Această opţiune va verifica volumul pentru erori.", -1, 40, 25, 180, 20 + PUSHBUTTON "&Verificare acum…", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentare", -1, 5, 65, 230, 60 ICON IDI_SHELL_TOOLS_DEFRAG, IDC_STATIC, 13, 85, 21, 20 - LTEXT "Această opțiune presupune ordonarea fragmentelor de fișiere pentru a îmbunătăți viteza de citire.", -1, 40, 85, 180, 20 - PUSHBUTTON "Defragmentare…", 14001, 130, 105, 90, 15, WS_TABSTOP + LTEXT "Această opţiune va defragmenta fişierele din volum.", -1, 40, 85, 180, 20 + PUSHBUTTON "&Defragmentare acum…", 14001, 130, 105, 90, 15, WS_TABSTOP GROUPBOX "Copie de rezervă", -1, 5, 130, 230, 60 ICON IDI_SHELL_TOOLS_BACKUP, IDC_STATIC, 13, 150, 21, 20 - LTEXT "Această opțiune va crea o copie de siguranță a fișierelor de pe această partiție.", -1, 40, 150, 180, 20 - PUSHBUTTON "&Creare rezervă…", 14002, 130, 170, 90, 15, WS_TABSTOP + LTEXT "Această opţiune va efectua copii de rezervă ale fişierelor din volum.", -1, 40, 150, 180, 20 + PUSHBUTTON "&Copiere de rezervă acum…", 14002, 130, 170, 90, 15, WS_TABSTOP END IDD_DRIVE_HARDWARE DIALOGEX 0, 0, 240, 220 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Componente fizice" +CAPTION "Hardware" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN END @@ -368,33 +368,33 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Executare ca" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Ce cont de utilizator este folosit pentru a executa?", -1, 10, 20, 220, 20 - CHECKBOX "Utilizator curent: %s", 14000, 10, 45, 150, 10 - LTEXT "Protejare calculator de activiăți neautorizate", -1, 25, 57, 200, 10, WS_DISABLED - CHECKBOX "Această opțiune vă poate proteja calculatorul de activități care pot fi dăunătoare dar poate de asemenea duce la funcționarea incorectă a programului.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE - CHECKBOX "Următorul utilizator:", 14002, 10, 100, 90, 10 + LTEXT "Ce cont de utilizator alegeţi pentru a executa acest program?", -1, 10, 20, 220, 20 + CHECKBOX "Utilizatorul &curent (%s)", 14000, 10, 45, 150, 10 + LTEXT "&Protejează computerul şi datele faţă de programe neautorizate", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Această opţiune poate preveni daunele provocate computerului şi datelor personale de către viruşi, dar selectarea acesteia poate cauza funcţionarea necorespunzătoare a programului.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "&Acest utilizator:", 14002, 10, 100, 90, 10 LTEXT "Nume utilizator:", -1, 20, 118, 54, 10 COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP PUSHBUTTON "…", 14004, 180, 115, 30, 14, WS_TABSTOP LTEXT "Parolă:", -1, 20, 143, 53, 10 EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP PUSHBUTTON "…", 14006, 180, 140, 30, 14, WS_TABSTOP - PUSHBUTTON "Con&firmă", 14007, 57, 170, 60, 14, WS_TABSTOP - PUSHBUTTON "A&nulează", 14008, 122, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Revocare", 14008, 122, 170, 60, 14, WS_TABSTOP END IDD_RECYCLE_BIN_PROPERTIES DIALOGEX 0, 0, 240, 190 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Generale" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 GROUPBOX "Preferințe pentru locația aleasă", -1, 10, 72, 220, 70 RADIOBUTTON "&Dimensiune specificată:", 14001, 20, 90, 88, 10, WS_TABSTOP EDITTEXT 14002, 116, 103, 50, 14, WS_TABSTOP | ES_NUMBER - LTEXT "Dimensiune maximă (Mo):", -1, 20, 105, 84, 10 - RADIOBUTTON "N&u arunca fișierele în Coșul de reciclare, elimină-le direct.", 14003, 20, 117, 200, 20, BS_MULTILINE | WS_TABSTOP - AUTOCHECKBOX "Afișea&ză dialog de confirmare pentru ștergeri", 14004, 20, 155, 140, 10, WS_TABSTOP + LTEXT "Dimensiune maximă (MO):", -1, 20, 105, 84, 10 + RADIOBUTTON "&Nu se aruncă fișierele în Coșul de reciclare, elimină-le direct.", 14003, 20, 117, 200, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Afișare casetă de dialog pentru ștergeri", 14004, 20, 155, 140, 10, WS_TABSTOP END IDD_OPEN_WITH DIALOGEX 0, 0, 264, 256 @@ -403,100 +403,100 @@ CAPTION "Deschidere cu" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 - LTEXT "Specificați programul folosit pentru deschiderea acestui fișier:", -1, 44, 12, 211, 10 + LTEXT "Alegeţi programul pentru a deschide acest fişier:", -1, 44, 12, 211, 10 LTEXT "Fișier: ", 14001, 44, 25, 188, 20 GROUPBOX "&Programe", -1, 7, 42, 249, 187 - CONTROL "Programs", 14002, WC_TREEVIEW, WS_BORDER | WS_TABSTOP | TVS_SHOWSELALWAYS, 16 ,57, 230, 130 - AUTOCHECKBOX "&Utilizează întotdeauna această aplicație", 14003, 16, 193, 232, 10 - PUSHBUTTON "Spe&cificare…", 14004, 188, 207, 60, 14 - DEFPUSHBUTTON "Con&firmă", IDOK, 150, 236, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 206, 236, 50, 14 + CONTROL "Programe", 14002, WC_TREEVIEW, WS_BORDER | WS_TABSTOP | TVS_SHOWSELALWAYS, 16 ,57, 230, 130 + AUTOCHECKBOX "Pr&ogramul selectat va deschide întotdeauna acest tip de fişier", 14003, 16, 193, 232, 10 + PUSHBUTTON "&Răsfoire…", 14004, 188, 207, 60, 14 + DEFPUSHBUTTON "OK", IDOK, 150, 236, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 206, 236, 50, 14 END IDD_FOLDER_OPTIONS_GENERAL DIALOGEX 0, 0, 264, 220 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Generale" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Activități", -1, 7, 10, 249, 40 CONTROL "", IDC_FOLDER_OPTIONS_TASKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 20, 21, 20 - AUTORADIOBUTTON "Incl&ude în ferestrele folderelor și activiățile comune", IDC_FOLDER_OPTIONS_COMMONTASKS, 40, 20, 210, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "Prefer aspectul &clasic pentru foldere", IDC_FOLDER_OPTIONS_CLASSICFOLDERS, 40, 32, 210, 10 - GROUPBOX "Parcurgere foldere", -1, 7, 60, 249, 40, WS_TABSTOP + AUTORADIOBUTTON "&Afişare activităţi comune în foldere", IDC_FOLDER_OPTIONS_COMMONTASKS, 40, 20, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Utilizare foldere ReactOS clasice", IDC_FOLDER_OPTIONS_CLASSICFOLDERS, 40, 32, 210, 10 + GROUPBOX "Răsfoire foldere", -1, 7, 60, 249, 40, WS_TABSTOP CONTROL "", IDC_FOLDER_OPTIONS_FOLDERICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 70, 21, 20 - AUTORADIOBUTTON "&Parcurge folderele în aceiași fereastră", IDC_FOLDER_OPTIONS_SAMEWINDOW, 40, 70, 210, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "D&eschide fiecare folder în fereastră proprie", IDC_FOLDER_OPTIONS_OWNWINDOW, 40, 82, 210, 10 - GROUPBOX "Interacțiune elemente", -1, 7, 110, 249, 64 + AUTORADIOBUTTON "Se &deschide fiecare folder în aceeaşi fereastră", IDC_FOLDER_OPTIONS_SAMEWINDOW, 40, 70, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Se deschide &fiecare folder în propria sa fereastră", IDC_FOLDER_OPTIONS_OWNWINDOW, 40, 82, 210, 10 + GROUPBOX "Comportament clic", -1, 7, 110, 249, 64 CONTROL "", IDC_FOLDER_OPTIONS_CLICKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 120, 21, 20 - AUTORADIOBUTTON "Deschide prin acțiune si&mplă (selecare prin indicare)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "Deschide prin acțiune &dublă (selectare prin una simplă)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 - AUTORADIOBUTTON "Subliniază titlurile la fel ca adresele &web", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "Subliniază titlurile doar la pre&zența indicatorului", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 - PUSHBUTTON "&Restabilește opțiunile implicite", IDC_FOLDER_OPTIONS_RESTORE, 147, 178, 110, 14, WS_TABSTOP + AUTORADIOBUTTON "&Se face un singur clic pentru deschiderea unui element (se indică selectare)", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Se face du&blu clic pentru deschiderea unui element (un singur clic pentru selectare)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 + AUTORADIOBUTTON "Sublinierea titlurilor de pictograme consistentă cu bro&wserul", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 200, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Sublinierea titlurilor de pictograme numai când se &indică", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 + PUSHBUTTON "R&estabilire valori implicite", IDC_FOLDER_OPTIONS_RESTORE, 147, 178, 110, 14, WS_TABSTOP END IDD_FOLDER_OPTIONS_VIEW DIALOGEX 0, 0, 264, 220 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Afișare" +CAPTION "Vizualizare" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Afișare foldere", -1, 7, 10, 249, 60 + GROUPBOX "Vizualizări folder", -1, 7, 10, 249, 60 ICON IDI_SHELL_PROGRAMS_FOLDER2, IDC_STATIC, 14, 20, 21, 20 - LTEXT "Puteți aplica afișarea curentă (ce include Detalii sau Pictograme mari) pentru toate folderele.", -1, 40, 20, 213, 20 - PUSHBUTTON "Apli&că pentru toate", IDC_VIEW_APPLY_TO_ALL, 15, 50, 115, 14, WS_TABSTOP - PUSHBUTTON "Restabilește t&oate", IDC_VIEW_RESET_ALL, 135, 50, 115, 14, WS_TABSTOP - LTEXT "Opțiuni avansate:", -1, 7, 80, 100, 10 + LTEXT "Aveţi posibilitatea să aplicaţi vizualizarea utilizată pentru acest folder (ca Detalii sau Dale), la toate folderele.", -1, 40, 20, 213, 20 + PUSHBUTTON "Se aplică la t&oate folderele", IDC_VIEW_APPLY_TO_ALL, 15, 50, 115, 14, WS_TABSTOP + PUSHBUTTON "&Resetare toate folderele", IDC_VIEW_RESET_ALL, 135, 50, 115, 14, WS_TABSTOP + LTEXT "Setări complexe:", -1, 7, 80, 100, 10 CONTROL "", IDC_VIEW_TREEVIEW, "SysTreeView32", WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | TVS_DISABLEDRAGDROP | TVS_LINESATROOT, 7, 90, 249, 111 - PUSHBUTTON "&Restabilește opțiunile implicite", IDC_VIEW_RESTORE_DEFAULTS, 147, 204, 110, 14, WS_TABSTOP + PUSHBUTTON "R&estabilire valori implicite", IDC_VIEW_RESTORE_DEFAULTS, 147, 204, 110, 14, WS_TABSTOP END IDD_FOLDER_OPTIONS_FILETYPES DIALOGEX 0, 0, 264, 220 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Tipuri de fișiere" +CAPTION "Tipuri de fişier" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Tipurile de fișiere înregistrate:", -1, 7, 10, 180, 10 + LTEXT "&Tipuri de fişier înregistrate:", -1, 7, 10, 180, 10 CONTROL "", IDC_FILETYPES_LISTVIEW, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 99 - PUSHBUTTON "N&ou…", IDC_FILETYPES_NEW, 140, 123, 55, 14, WS_TABSTOP - PUSHBUTTON "&Elimină", IDC_FILETYPES_DELETE, 200, 123, 55, 14, WS_TABSTOP - GROUPBOX "Detalii pentru extensia „%s”", IDC_FILETYPES_DETAILS_GROUPBOX, 7, 143, 249, 70 - LTEXT "Va fi deschis cu:", -1, 12, 153, 55, 10 + PUSHBUTTON "No&u", IDC_FILETYPES_NEW, 140, 123, 55, 14, WS_TABSTOP + PUSHBUTTON "Şt&ergere", IDC_FILETYPES_DELETE, 200, 123, 55, 14, WS_TABSTOP + GROUPBOX "Detalii pentru extensia '%s'", IDC_FILETYPES_DETAILS_GROUPBOX, 7, 143, 249, 70 + LTEXT "Se deschide cu:", -1, 12, 153, 55, 10 CONTROL "", IDC_FILETYPES_ICON, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 85, 153, 10, 10 LTEXT "", IDC_FILETYPES_APPNAME, 100, 153, 80, 10 - PUSHBUTTON "Spe&cificare", IDC_FILETYPES_CHANGE, 200, 153, 50, 14, WS_TABSTOP + PUSHBUTTON "&Răsfoire", IDC_FILETYPES_CHANGE, 200, 153, 50, 14, WS_TABSTOP LTEXT "", IDC_FILETYPES_DESCRIPTION, 12, 168, 160, 40 - PUSHBUTTON "A&vansate…", IDC_FILETYPES_ADVANCED, 200, 188, 50, 14, WS_TABSTOP + PUSHBUTTON "&Complex", IDC_FILETYPES_ADVANCED, 200, 188, 50, 14, WS_TABSTOP END IDD_CONFIRM_FILE_REPLACE DIALOGEX 0, 0, 282, 143 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Confirmare înlocuire fișier" +CAPTION "Confirmare înlocuire fişier" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "D&a", IDYES, 20, 122, 60, 14 - PUSHBUTTON "Da pentru t&oate", 12807, 85, 122, 60, 14 - PUSHBUTTON "N&u", IDNO, 150, 122, 60, 14 - PUSHBUTTON "Re&vocare", IDCANCEL, 215, 122, 60, 14 + DEFPUSHBUTTON "&Da", IDYES, 20, 122, 60, 14 + PUSHBUTTON "D&a pentru tot", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nu", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Revocare", IDCANCEL, 215, 122, 60, 14 ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL - LTEXT "Folderul curent deja conține un fișier cu numele „%2”.", 12291, 44, 10, 231, 22, SS_NOPREFIX - LTEXT "Folderul curent deja conține un fișier nemodificabil cu numele „%2”.", 12292, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "Folderul curent deja conține un fișier de sistem cu numele „%2”.", 12293, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "Doriți să înlocuiți acest fișier?", -1, 44, 35, 228, 10, SS_NOPREFIX - LTEXT "(mărime/dată necunoscută)", 12302, 79, 51, 198, 20, SS_NOPREFIX + LTEXT "Acest folder conţine deja un fişier de sistem cu numele '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Folderul curent deja conține un fișier Doar în citire cu numele '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Folderul curent deja conține un fișier de sistem cu numele '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Înlocuiţi fişierul existent", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(dată şi mărime necunoscute)", 12302, 79, 51, 198, 20, SS_NOPREFIX ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL LTEXT "cu acesta?", -1, 44, 75, 228, 10, SS_NOPREFIX - LTEXT "(mărime/dată necunoscută)", 12303, 79, 91, 198, 20, SS_NOPREFIX + LTEXT "(dată şi mărime necunoscute)", 12303, 79, 91, 198, 20, SS_NOPREFIX ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL END IDD_LOG_OFF DIALOGEX 0, 0, 188, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Deautentificare" +CAPTION "Log Off" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_SHELL_LOGOFF, IDC_STATIC, 8, 6, 21, 20 - LTEXT "Sigur doriți să vă deautentificați?", -1, 49, 15, 132, 8 - DEFPUSHBUTTON "&Deautentifică", IDOK, 49, 38, 53, 14 + LTEXT "Sigur faceţi Log Off?", -1, 49, 15, 132, 8 + DEFPUSHBUTTON "&Log Off", IDOK, 49, 38, 53, 14 PUSHBUTTON "Revocare", IDCANCEL, 109, 38, 53, 14 END @@ -506,23 +506,23 @@ FONT 8, "MS Shell Dlg" BEGIN CONTROL IDB_DLG_BG, IDC_STATIC, "STATIC", SS_BITMAP | SS_REALSIZECONTROL, 0, 0, 208, 122 CONTROL IDB_REACTOS_FLAG, IDC_STATIC, "STATIC", SS_BITMAP, 176, 1, 32, 26 - PUSHBUTTON "&Schimbă utilizatorul", IDC_SWITCH_USER_BUTTON, 55, 46, 22, 20, BS_OWNERDRAW | WS_DISABLED | WS_GROUP - PUSHBUTTON "&Deautentifică", IDC_LOG_OFF_BUTTON, 132, 46, 22, 20, BS_OWNERDRAW - PUSHBUTTON "A&nulează", IDCANCEL, 162, 103, 40, 12, WS_GROUP | BS_FLAT - LTEXT "Deautentificare", IDC_LOG_OFF_TEXT_STATIC, 4, 7, 130, 19 - CTEXT "Schimbă utilizatorul", IDC_SWITCH_USER_STATIC, 11, 70, 82, 11 - CTEXT "Deautentifică", IDC_LOG_OFF_STATIC, 118, 70, 51, 11 + PUSHBUTTON "&Comutare utilizatori", IDC_SWITCH_USER_BUTTON, 55, 46, 22, 20, BS_OWNERDRAW | WS_DISABLED | WS_GROUP + PUSHBUTTON "&Log Off", IDC_LOG_OFF_BUTTON, 132, 46, 22, 20, BS_OWNERDRAW + PUSHBUTTON "Revocare", IDCANCEL, 162, 103, 40, 12, WS_GROUP | BS_FLAT + LTEXT "Log Off din ReactOS", IDC_LOG_OFF_TEXT_STATIC, 4, 7, 130, 19 + CTEXT "Comutare utilizatori", IDC_SWITCH_USER_STATIC, 11, 70, 82, 11 + CTEXT "Log Off", IDC_LOG_OFF_STATIC, 118, 70, 51, 11 END IDD_DISCONNECT DIALOGEX 0, 0, 188, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Deconectare" +CAPTION "Deconectare ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_SHELL_DISCONN, IDC_STATIC, 8, 6, 21, 20 - LTEXT "Sigur doriți să vă deconectați?", -1, 49, 15, 131, 8 - DEFPUSHBUTTON "&Deconectează", IDOK, 47, 38, 47, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 99, 38, 47, 14 + LTEXT "Sigur vă deconectaţi?", -1, 49, 15, 131, 8 + DEFPUSHBUTTON "&Deconectare", IDOK, 47, 38, 47, 14 + PUSHBUTTON "Revocare", IDCANCEL, 99, 38, 47, 14 END IDD_AUTOPLAY1 DIALOGEX 0, 0, 227, 218 @@ -530,13 +530,13 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLIN CAPTION "Autolansare" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "&Alegeți un tip de conținut și acțiunea executată automat în cazul tipului respectiv utilizat în acest dispozitiv:", 1000, 7, 7, 215, 20 + LTEXT "&Selectaţi un tip de conţinut, apoi alegeţi o acţiune pe care ReactOS o va efectua automat când tipul respectiv este utilizat în acest dispozitiv:", 1000, 7, 7, 215, 20 CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 - GROUPBOX "Acțiuni", -1, 7, 45, 212, 146 - AUTORADIOBUTTON "Înt&otdeauna o anume acțiune bine specificată:", 1005, 14, 54, 202, 10, WS_GROUP + GROUPBOX "Acţiuni", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "S&e selectează o acţiune de efectuat:", 1005, 14, 54, 202, 10, WS_GROUP CONTROL "", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 - AUTORADIOBUTTON "&Doresc să fiu consultat la moment în vederea acțiunilor întreprinse", 1006, 14, 177, 202, 10 - PUSHBUTTON "&Restabilește implicite", 1008, 108, 197, 110, 14, WS_DISABLED + AUTORADIOBUTTON "Se întreabă &de fiecare dată pentru alegerea unei acţiuni", 1006, 14, 177, 202, 10 + PUSHBUTTON "Resta&bilire valori implicite", 1008, 108, 197, 110, 14, WS_DISABLED END IDD_MIXED_CONTENT1 DIALOGEX 0, 0, 227, 207 @@ -545,11 +545,11 @@ CAPTION "Conținut mixt" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "Acest disc sau dispozitiv conține mai mult de un singur tip de conținut.", 1001, 32, 7, 191, 20 - LTEXT "Ce acțiune doriți să fie îndeplinită?", 1002, 32, 31, 188, 8 + LTEXT "Acest disc sau dispozitiv prezintă mai multe tipuri de conţinut.", 1001, 32, 7, 191, 20 + LTEXT "Ce să facă ReactOS?", 1002, 32, 31, 188, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 - DEFPUSHBUTTON "Con&firmă", IDOK, 96, 186, 60, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 160, 186, 60, 14 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Revocare", IDCANCEL, 160, 186, 60, 14 END IDD_MIXED_CONTENT2 DIALOGEX 0, 0, 227, 206 @@ -558,28 +558,28 @@ CAPTION "Conținut mixt" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "Specificați acțiunea ce va fi executată de fiecare dată la introducerea unui disc sau conectarea unui dispozitiv cu acest conținut:", 1001, 30, 7, 193, 20 + LTEXT "ReactOS poate să efectueze aceeaşi acţiune de fiecare dată când se inserează un disc sau se conectează un dispozitiv la acest tip de fişier:", 1001, 30, 7, 193, 20 ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "Ce acțiune doriți să fie îndeplinită?", 1002, 32, 41, 190, 8 + LTEXT "Ce să facă ReactOS?", 1002, 32, 41, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 - AUTOCHECKBOX "&Efectuează mereu aceeși acțiune", 1004, 32, 171, 190, 10 - DEFPUSHBUTTON "Con&firmă", IDOK, 96, 185, 60, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 160, 185, 60, 14 + AUTOCHECKBOX "Întotdeauna se efectuează acţiunea selectată.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Revocare", IDCANCEL, 160, 185, 60, 14 END IDD_AUTOPLAY2 DIALOGEX 0, 0, 227, 181 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION -CAPTION "Autolansare" +CAPTION "Redare automată" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "Puteți specifica o acțiune pentru a fi executată de fiecare dată când conectați acest dispozitiv.", 1001, 32, 7, 190, 22 - LTEXT "&Ce acțiune doriți să fie îndeplinită?", 1002, 32, 31, 190, 8 + LTEXT "ReactOS poate să efectueze această acţiune de fiecare dată când conectaţi acest dispozitiv.", 1001, 32, 7, 190, 22 + LTEXT "&Ce să facă ReactOS?", 1002, 32, 31, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 AUTOCHECKBOX "&Efectuează mereu aceeași acțiune", 1004, 32, 143, 190, 8 - DEFPUSHBUTTON "Con&firmă", IDOK, 94, 160, 60, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 159, 160, 60, 14 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Revocare", IDCANCEL, 159, 160, 60, 14 END IDD_SHUTDOWN DIALOGEX 0, 0, 211, 103 @@ -588,61 +588,61 @@ CAPTION "Închidere ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP - LTEXT "Ce doriți să se întâmple?", -1, 39, 7, 167, 10 + LTEXT "Ce acţiune va face computerul?", -1, 39, 7, 167, 10 COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL - LTEXT "Aceasta va menține sesiunea de lucru, păstrând calculatorul pe consum redus, cu toate datele în memorie. Calculatorul își va reveni când veți apăsa o tastă sau veți acționa dispozitivul de indicare.", 8225, 39, 40, 167, 37 - DEFPUSHBUTTON "Con&firmă", 1, 7, 82, 60, 14, WS_GROUP - PUSHBUTTON "A&nulează", IDCANCEL, 75, 82, 60, 14 - PUSHBUTTON "&Manual…", IDHELP, 144, 82, 60, 14 + LTEXT "Menţine sesiunea deschisă, lăsând computerul să funcţioneze la un nivel de energie scăzut, datele rămânând în memorie. Computerul se reactivează când se apasă o tastă sau când se acţionează mausul.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Revocare", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "Aj&utor", IDHELP, 144, 82, 60, 14 END IDD_FORMAT_DRIVE DIALOGEX 50, 50, 184, 218 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Formatare unitate de stocare" +CAPTION "Format" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "&Formatează", IDOK, 53, 198, 60, 14 - PUSHBUTTON "Î&nchide", IDCANCEL, 118, 198, 60, 14 + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "Î&nchidere", IDCANCEL, 118, 198, 60, 14 LTEXT "&Capacitate:", -1, 7, 6, 169, 9 COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "Sist&em de fișiere", -1, 7, 35, 170, 9 + LTEXT "Sistem de &fişiere", -1, 7, 35, 170, 9 COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 - LTEXT "&Dimensiunea unității de alocare", -1, 7, 64, 170, 9 + LTEXT "Mărime &unitate de alocare", -1, 7, 64, 170, 9 COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "N&ume volum", -1, 7, 93, 170, 9 + LTEXT "&Etichetă volum", -1, 7, 93, 170, 9 EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL - GROUPBOX "Opțiuni formatare", 4610, 7, 121, 170, 49 + GROUPBOX "&Opţiuni de formatare", 4610, 7, 121, 170, 49 AUTOCHECKBOX "Formatare &rapidă", 28674, 16, 135, 155, 10 - AUTOCHECKBOX "Co&mpresie", 28675, 16, 152, 155, 10 + AUTOCHECKBOX "&Activare comprimare", 28675, 16, 152, 155, 10 END IDD_CHECK_DISK DIALOGEX 50, 50, 194, 115 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Verificare unitate de stocare" +CAPTION "Verificare disc" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "&Pornește", IDOK, 63, 95, 60, 14 - GROUPBOX "Opțiuni de verificare", -1, 7, 6, 179, 40 - PUSHBUTTON "A&nulează", IDCANCEL, 128, 95, 60, 14 - AUTOCHECKBOX "&Repară erorile în mod automat", 14000, 12, 15, 155, 10 - AUTOCHECKBOX "&Analizează și repară înregistrările eronate", 14001, 12, 30, 165, 10 + DEFPUSHBUTTON "&Start", IDOK, 63, 95, 60, 14 + GROUPBOX "Opţiuni verificare disc", -1, 7, 6, 179, 40 + PUSHBUTTON "Revocare", IDCANCEL, 128, 95, 60, 14 + AUTOCHECKBOX "Reparare &automată a erorilor de sistem", 14000, 12, 15, 155, 10 + AUTOCHECKBOX "Sca&nare şi recuperare sectoare defecte", 14001, 12, 30, 165, 10 CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 50, 179, 8 LTEXT "", 14003, 60, 80, 170, 10 END IDD_PICK_ICON DIALOGEX 0, 0, 193, 200 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Schimbare pictogramă" +CAPTION "Modificare pictogramă" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - LTEXT "Caută pictograme în fișierul:", -1, 7, 7, 179, 10 - PUSHBUTTON "Spe&cificare…", IDC_BUTTON_PATH, 135, 17, 50, 14 + LTEXT "Căutare pictograme în fișierul:", -1, 7, 7, 179, 10 + PUSHBUTTON "&Răsfoire…", IDC_BUTTON_PATH, 135, 17, 50, 14 EDITTEXT IDC_EDIT_PATH, 7, 17, 123, 14, ES_AUTOHSCROLL LTEXT "Selectați o pictogramă din lista de mai jos:", -1, 7, 36, 179, 10 LISTBOX IDC_PICKICON_LIST, 7, 47, 181, 122, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | LBS_DISABLENOSCROLL | WS_HSCROLL | WS_TABSTOP - DEFPUSHBUTTON "Con&firmă", IDOK, 81, 179, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 135, 179, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 81, 179, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 135, 179, 50, 14 END IDD_NOOPEN DIALOGEX 0, 0, 240, 75 @@ -655,22 +655,22 @@ BEGIN operare sau de o oarecare aplicație. Modificând acest fișier\n\ riscați să cauzați daune în sistem.\n\n\ Sigur doriți să deschideți acest fișier?", IDC_STATIC, 35, 5, 230, 60 - DEFPUSHBUTTON "D&a", IDYES, 125, 55, 50, 14 - PUSHBUTTON "N&u", IDNO, 180, 55, 50, 14 + DEFPUSHBUTTON "&Da", IDYES, 125, 55, 50, 14 + PUSHBUTTON "&Nu", IDNO, 180, 55, 50, 14 END IDD_NEWEXTENSION DIALOGEX 0, 0, 260, 75 -CAPTION "Crează o nouă extensie" +CAPTION "Creare extensie nouă" STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" BEGIN LTEXT "E&xtensie fișier:", -1, 10, 10, 85, 14 EDITTEXT IDC_NEWEXT_EDIT, 105, 8, 60, 14 - PUSHBUTTON "<< A&vansate", IDC_NEWEXT_ADVANCED, 185, 8, 65, 15 + PUSHBUTTON "<< &Complex", IDC_NEWEXT_ADVANCED, 185, 8, 65, 15 LTEXT "Tip de fișier &asociat:", IDC_NEWEXT_ASSOC, 10, 34, 85, 14 COMBOBOX IDC_NEWEXT_COMBOBOX, 105, 32, 145, 120, CBS_AUTOHSCROLL | CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP - DEFPUSHBUTTON "Con&firmă", IDOK, 125, 55, 60, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 190, 55, 60, 14 + DEFPUSHBUTTON "OK", IDOK, 125, 55, 60, 14 + PUSHBUTTON "Revocare", IDCANCEL, 190, 55, 60, 14 END IDD_EDITTYPE DIALOG 0, 0, 225, 190 @@ -683,15 +683,15 @@ BEGIN PUSHBUTTON "S&chimbare pictogramă…", IDC_EDITTYPE_CHANGE_ICON, 150, 10, 70, 14 LTEXT "&Acțiuni:", -1, 5, 37, 70, 10 LISTBOX IDC_EDITTYPE_LISTBOX, 5, 50, 140, 60, LBS_NOINTEGRALHEIGHT | LBS_HASSTRINGS | LBS_OWNERDRAWFIXED | LBS_NOTIFY | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "N&ou…", IDC_EDITTYPE_NEW, 150, 50, 70, 14 + PUSHBUTTON "No&u", IDC_EDITTYPE_NEW, 150, 50, 70, 14 PUSHBUTTON "&Editare…", IDC_EDITTYPE_EDIT_BUTTON, 150, 65, 70, 14 - PUSHBUTTON "Eli&mină", IDC_EDITTYPE_REMOVE, 150, 80, 70, 14 + PUSHBUTTON "Eli&minare", IDC_EDITTYPE_REMOVE, 150, 80, 70, 14 PUSHBUTTON "&Implicit", IDC_EDITTYPE_SET_DEFAULT, 150, 95, 70, 14 - AUTOCHECKBOX "Consimte &deschidere după descărcare", IDC_EDITTYPE_CONFIRM_OPEN, 5, 115, 150, 14 - AUTOCHECKBOX "Afișează e&xtensiea întotdeauna", IDC_EDITTYPE_SHOW_EXT, 5, 130, 150, 14 - AUTOCHECKBOX "Ca&ută în aceeași fereastră", IDC_EDITTYPE_SAME_WINDOW, 5, 145, 150, 14 - DEFPUSHBUTTON "Con&firmă", IDOK, 95, 170, 60, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 160, 170, 60, 14 + AUTOCHECKBOX "Confirmare &deschiderere după descărcare", IDC_EDITTYPE_CONFIRM_OPEN, 5, 115, 150, 14 + AUTOCHECKBOX "Se afișează întotdeauna extensia", IDC_EDITTYPE_SHOW_EXT, 5, 130, 150, 14 + AUTOCHECKBOX "Căuta&re în aceeași fereastră", IDC_EDITTYPE_SAME_WINDOW, 5, 145, 150, 14 + DEFPUSHBUTTON "OK", IDOK, 95, 170, 60, 14 + PUSHBUTTON "Revocare", IDCANCEL, 160, 170, 60, 14 END IDD_ACTION DIALOG 0, 0, 225, 95 @@ -704,9 +704,9 @@ BEGIN LTEXT "Apli&cația utilizată pentru efectuarea acțiunii:", -1, 5, 42, 150, 10 EDITTEXT IDC_ACTION_APP, 5, 55, 150, 14, ES_AUTOHSCROLL PUSHBUTTON "Sp&ecificare…", IDC_ACTION_BROWSE, 160, 60, 60, 14 - AUTOCHECKBOX "Folosește &DDE", IDC_ACTION_USE_DDE, 10, 75, 103, 14 - DEFPUSHBUTTON "Con&firmă", IDOK, 160, 20, 60, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 160, 40, 60, 14 + AUTOCHECKBOX "Folosire &DDE", IDC_ACTION_USE_DDE, 10, 75, 103, 14 + DEFPUSHBUTTON "OK", IDOK, 160, 20, 60, 14 + PUSHBUTTON "Revocare", IDCANCEL, 160, 40, 60, 14 END IDD_FOLDER_CUSTOMIZE DIALOGEX 0, 0, 240, 220 @@ -720,12 +720,12 @@ BEGIN AUTOCHECKBOX "Aplică acest șa&blon pentru toate subfolderele sale", IDC_FOLDERCUST_CHECKBOX, 15, 50, 210, 15 GROUPBOX "Folder de imagini", IDC_STATIC, 5, 75, 230, 85, WS_TABSTOP LTEXT "Pentru aspect cu miniaturi puteți pune o imagine în acest folder care să vă amintească de conținutul său.", IDC_STATIC, 15, 87, 115, 33 - PUSHBUTTON "Spe&cificare imagine…", IDC_FOLDERCUST_CHOOSE_PIC, 15, 120, 115, 15 - PUSHBUTTON "&Restabilește implicite", IDC_FOLDERCUST_RESTORE_DEFAULTS, 15, 139, 115, 15 + PUSHBUTTON "&Răsfoire imagine…", IDC_FOLDERCUST_CHOOSE_PIC, 15, 120, 115, 15 + PUSHBUTTON "Resta&bilire valori implicite", IDC_FOLDERCUST_RESTORE_DEFAULTS, 15, 139, 115, 15 LTEXT "Previzualizare:", IDC_STATIC, 139, 85, 81, 11 CONTROL "", IDC_FOLDERCUST_PREVIEW_BITMAP, "STATIC", SS_BITMAP | WS_GROUP, 150, 100, 60, 60 GROUPBOX "Pictograme de folder", IDC_STATIC, 5, 165, 230, 50, WS_TABSTOP - LTEXT "Pentru alte aspecte în afara miniaturilor, puteți schimba pictograma „folder” cu altceva.", IDC_STATIC, 15, 175, 210, 25 + LTEXT "Pentru alte aspecte în afara miniaturilor, puteți schimba pictograma folder cu altceva.", IDC_STATIC, 15, 175, 210, 25 ICON 0, IDC_FOLDERCUST_ICON, 175, 194, 32, 30 PUSHBUTTON "Schi&mbare pictogramă…", IDC_FOLDERCUST_CHANGE_ICON, 15, 195, 75, 15 END @@ -736,11 +736,11 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" BEGIN ICON 0, IDC_LINK_PROBLEM_ICON, 5, 5, 0, 0 - LTEXT "Elementul „%s” la care această scurtătură face referire a fost schimbată sau mutată, așa că scurtătura nu va mai funcționa corect.", IDC_LINK_PROBLEM_LABEL1, 35, 5, 210, 35 + LTEXT "Elementul '%s' la care această scurtătură face referire a fost schimbată sau mutată, așa că scurtătura nu va mai funcționa corect.", IDC_LINK_PROBLEM_LABEL1, 35, 5, 210, 35 LTEXT "Cea mai apropiată potrivire, bazată pe nume, tip, mărime și dată:", IDC_LINK_PROBLEM_LABEL2, 35, 45, 210, 35 - LTEXT "Vreți să reparați scurtătura pentru a atinge ținta sau doar vreți să o ștergeți?", -1, 35, 85, 210, 30 - DEFPUSHBUTTON "&Repar-o", IDOK, 55, 120, 60, 15, WS_DISABLED - PUSHBUTTON "&Șterge-o", IDYES, 120, 120, 60, 15 + LTEXT "Reparați scurtătura pentru a atinge ținta sau doar vreți să o ștergeți?", -1, 35, 85, 210, 30 + DEFPUSHBUTTON "&Reparare", IDOK, 55, 120, 60, 15, WS_DISABLED + PUSHBUTTON "&Ștergere", IDYES, 120, 120, 60, 15 PUSHBUTTON "Revocare", IDCANCEL, 185, 120, 60, 15 END @@ -749,8 +749,8 @@ BEGIN /* columns in the shellview */ IDS_SHV_COLUMN_NAME "Nume" IDS_SHV_COLUMN_SIZE "Dimensiune" - IDS_SHV_COLUMN_TYPE "Tip obiect" - IDS_SHV_COLUMN_MODIFIED "Dată modificare" + IDS_SHV_COLUMN_TYPE "Tip" + IDS_SHV_COLUMN_MODIFIED "Data modificării" IDS_SHV_COLUMN_ATTRIBUTES "Atribute" IDS_SHV_COLUMN_DISK_CAPACITY "Capacitate" IDS_SHV_COLUMN_DISK_AVAILABLE "Disponibil" @@ -758,7 +758,7 @@ BEGIN IDS_SHV_COLUMN_GROUP "Grup" IDS_SHV_COLUMN_FILENAME "Nume fișier" IDS_SHV_COLUMN_CATEGORY "Categorie" - IDS_SHV_COLUMN_DELFROM "Locație originală" + IDS_SHV_COLUMN_DELFROM "Amplasare iniţială" IDS_SHV_COLUMN_DELDATE "Data ștergerii" IDS_SHV_COLUMN_FONTTYPE "Tip font" IDS_SHV_COLUMN_WORKGROUP "Grup de lucru" @@ -771,68 +771,68 @@ BEGIN /* special folders */ IDS_DESKTOP "Desktop" - IDS_MYCOMPUTER "Calculatorul meu" + IDS_MYCOMPUTER "Computerul meu" IDS_RECYCLEBIN_FOLDER_NAME "Coș de reciclare" - IDS_CONTROLPANEL "Panoul de control" - IDS_ADMINISTRATIVETOOLS "Instrumente administrative" + IDS_CONTROLPANEL "Panou de control" + IDS_ADMINISTRATIVETOOLS "Instrumente de administrare" /* special folders descriptions */ - IDS_ADMINISTRATIVETOOLS_DESCRIPTION "Configurarea administrativă a calculatorului." - IDS_FOLDER_OPTIONS_DESCRIPTION "Particularizarea afișării de fișiere și foldere și definirea asocierilor tipurilor de fișiere." - IDS_FONTS_DESCRIPTION "Adăugarea, modificarea, și gestiunea fonturilor din calculator." - IDS_PRINTERS_DESCRIPTION "Prezentarea imprimantelor și faxurilor, precum și asistență la instalarea unora noi." + IDS_ADMINISTRATIVETOOLS_DESCRIPTION "Configurare setări de administrare pe acest computer." + IDS_FOLDER_OPTIONS_DESCRIPTION "Se particularizează afişarea fişierelor şi folderelor, se modifică asocierile de fişiere şi se pun la dispoziţie fişiere din reţea în mod neconectat." + IDS_FONTS_DESCRIPTION "Adăugare, modificare şi gestionare fonturi pe computer." + IDS_PRINTERS_DESCRIPTION "Se vizualizează lista imprimantelor şi imprimantelor fax instalate." /* About shell dialog version string */ IDS_ABOUT_VERSION_STRING "Versiune %S (%S)" /* context menus */ - IDS_VIEW_LARGE "D&ale" - IDS_VIEW_SMALL "&Pictograme" - IDS_VIEW_LIST "&Listă" - IDS_VIEW_DETAILS "&Detalii" - IDS_SELECT "Selectea&ză" - IDS_OPEN "&Deschide" - IDS_CREATELINK "Creează sc&urtătură" - IDS_COPY "&Copiază" - IDS_DELETE "Șt&erge" - IDS_PROPERTIES "&Proprietăți" - IDS_CUT "&Decupează" - IDS_RESTORE "&Restabilește" + IDS_VIEW_LARGE "Pictograme mari" + IDS_VIEW_SMALL "Pictograme mici" + IDS_VIEW_LIST "Listare" + IDS_VIEW_DETAILS "Detalii" + IDS_SELECT "&Selectare" + IDS_OPEN "&Deschidere" + IDS_CREATELINK "C&reare comandă rapidă" + IDS_COPY "&Copiere" + IDS_DELETE "Ş&tergere" + IDS_PROPERTIES "Prop&rietăţi" + IDS_CUT "&Decupare" + IDS_RESTORE "Resta&bilire" IDS_FORMATDRIVE "F&ormatare…" - IDS_RENAME "Rede&numește" - IDS_PASTE "&Lipește" - IDS_EJECT "S&coate" - IDS_DISCONNECT "Deconectea&ză" - IDS_OPENFILELOCATION "&Deschide locația fișierului" - IDS_SENDTO_MENU "T&rimitere la" - IDS_COPYASPATHMENU "Copy as path" - - IDS_MOVEERRORTITLE "Nu s-a putut muta fișierul sau folderul" - IDS_COPYERRORTITLE "Nu s-a putut copia fișierul sau folderul" - IDS_MOVEERRORSAMEFOLDER "Nu se poate muta „%s”: Folderul destinație este identic cu folderul sursă." - IDS_MOVEERRORSAME "Nu se poate muta „%s”: Numele de fișier al sursei și destinației sunt identice." - IDS_COPYERRORSAME "Nu se poate copia „%s”: Numele de fișier al sursei și destinației sunt identice." - IDS_MOVEERRORSUBFOLDER "Nu se poate muta „%s”: Folderul destinație este un subfolder al folderului sursă." - IDS_COPYERRORSUBFOLDER "Nu se poate copia „%s”: Folderul destinație este un subfolder al folderului sursă." - IDS_MOVEERROR "Nu se poate muta „%s”: %s" - IDS_COPYERROR "Nu se poate copia „%s”: %s" - - IDS_CREATEFILE_DENIED "Nu s-a putut crea fișierul %1" - IDS_CREATEFILE_CAPTION "Nu s-a putut crea fișierul" - IDS_CREATEFOLDER_DENIED "Nu poate fi creat un folder cu numele „%1”" - IDS_CREATEFOLDER_CAPTION "Nu poate fi creat folder" - IDS_DELETEITEM_CAPTION "Confirmarea ștergerii fișierului" - IDS_DELETEFOLDER_CAPTION "Confirmarea ștergerii folderului" - IDS_DELETEITEM_TEXT "Sigur doriți să ștergeți „%1”?" + IDS_RENAME "Redenu&mire" + IDS_PASTE "&Lipire" + IDS_EJECT "S&coatere" + IDS_DISCONNECT "&Deconectare" + IDS_OPENFILELOCATION "&Deschidere locație fișier" + IDS_SENDTO_MENU "Trimitere &la" + IDS_COPYASPATHMENU "Copiere ca țintă" + + IDS_MOVEERRORTITLE "Imposibil de mutat fișierul sau folderul" + IDS_COPYERRORTITLE "Imposibil de copiat fișierul sau folderul" + IDS_MOVEERRORSAMEFOLDER "Imposibil de mutat '%s': Folderul destinație este identic cu folderul sursă." + IDS_MOVEERRORSAME "Imposibil de mutat '%s': Numele de fişier al sursei şi destinaţiei sunt identice." + IDS_COPYERRORSAME "Imposibil de copiat '%s': Numele de fișier al sursei și destinației sunt identice." + IDS_MOVEERRORSUBFOLDER "Imposibil de mutat '%s': Folderul destinație este un subfolder al folderului sursă." + IDS_COPYERRORSUBFOLDER "Imposibil de copiat '%s': Folderul destinație este un subfolder al folderului sursă." + IDS_MOVEERROR "Imposibil de mutat '%s': %s" + IDS_COPYERROR "Imposibil de copiat '%s': %s" + + IDS_CREATEFILE_DENIED "Imposibil de creat fișierul %1" + IDS_CREATEFILE_CAPTION "Imposibil de creat fișierul" + IDS_CREATEFOLDER_DENIED "Imposibil de creat un folder cu numele '%1'" + IDS_CREATEFOLDER_CAPTION "Imposibil de creat folder" + IDS_DELETEITEM_CAPTION "Confirmare ştergere fişier" + IDS_DELETEFOLDER_CAPTION "Confirmare ştergere folder" + IDS_DELETEITEM_TEXT "Sigur doriți să ștergeți '%1'?" IDS_DELETEMULTIPLE_TEXT "Sigur doriți să ștergeți aceste %1 elemente?" IDS_DELETESELECTED_TEXT "Sigur doriți să ștergeți acest(e) element(e) selectat(e)?" - IDS_TRASHITEM_TEXT "Sigur doriți să aruncați „%1” în Coșul de reciclare?" - IDS_TRASHFOLDER_TEXT "Sigur doriți să aruncați folderul „%1” cu tot conținutul său la Coșul de reciclare?" - IDS_TRASHMULTIPLE_TEXT "Sigur doriți să aruncați aceste %1 elemente la Coșul de reciclare?" - IDS_CANTTRASH_TEXT "Elementul „%1” nu poate fi aruncat la reciclare. Doriți să-l ștergeți definitiv?" - IDS_OVERWRITEFILE_TEXT "Acest folder deja conține un fișier numit „%1”.\n\nDoriți să îl înlocuiți" - IDS_OVERWRITEFILE_CAPTION "Confirmarea înlocuirii fișierului" - IDS_OVERWRITEFOLDER_TEXT "Acest folder deja conține un sub-folder cu numele „%1”.\n\nDacă fișierele din folderul de destinație au același nume ca cele din\nfolderul selectat, ele vor fi înlocuite. Sigur doriți să copiați sau\nsă mutați folderul?" + IDS_TRASHITEM_TEXT "Sigur doriți să aruncați '%1' în Coșul de reciclare?" + IDS_TRASHFOLDER_TEXT "Sigur trimiteţi folderul '%1' cu tot conținutul său la Coșul de reciclare?" + IDS_TRASHMULTIPLE_TEXT "Sigur trimiteţi %1 elemente la Coșul de reciclare?" + IDS_CANTTRASH_TEXT "Elementul '%1' nu poate fi aruncat la reciclare. Doriți să-l ștergeți definitiv?" + IDS_OVERWRITEFILE_TEXT "Acest folder deja conține un fișier numit '%1'.\n\nDoriți să îl înlocuiți" + IDS_OVERWRITEFILE_CAPTION "Confirmarea înlocuire fișier" + IDS_OVERWRITEFOLDER_TEXT "Acest folder deja conține un sub-folder cu numele '%1'.\n\nDacă fișierele din folderul de destinație au același nume ca cele din\nfolderul selectat, ele vor fi înlocuite. Sigur doriți să copiați sau\nsă mutați folderul?" IDS_FILEOOP_COPYING "În curs de copiere…" IDS_FILEOOP_MOVING "În curs de mutare…" @@ -843,24 +843,24 @@ BEGIN /* message box strings */ IDS_RESTART_TITLE "Repornire" - IDS_RESTART_PROMPT "Doriți să reporniți sistemul?" + IDS_RESTART_PROMPT "Reporniți sistemul?" IDS_SHUTDOWN_TITLE "Închidere" - IDS_SHUTDOWN_PROMPT "Doriți să închideți calculatorul?" + IDS_SHUTDOWN_PROMPT "Închideți calculatorul?" /* Format Dialog Strings */ IDS_FORMAT_TITLE "Formatare disc local" - IDS_FORMAT_WARNING "AVERTISMENT: Formatarea va șterge TOATE datele de pe acest disc.\nConfirmați pentru a formata, anulați pentru a ieși." - IDS_FORMAT_COMPLETE "Formatare completă." + IDS_FORMAT_WARNING "AVERTISMENT: Formatarea va şterge TOATE datele de pe acest disc.\nPentru a formata discul, faceţi clic pe OK. Pentru a ieşi, faceţi clic pe REVOCARE." + IDS_FORMAT_COMPLETE "Formatare terminată." /* Warning format system drive dialog strings */ - IDS_NO_FORMAT_TITLE "Nu a putut fi formatat volumul" - IDS_NO_FORMAT "Nu a putut fi formatat acest volum! Conține fișiere de sistem importante care să facă ReactOS să meargă." + IDS_NO_FORMAT_TITLE "Imposibil de formatat volumul" + IDS_NO_FORMAT "Imposibil de formatat acest volum! Conține fișiere de sistem importante care fac ReactOS să funcționeze." /* Run File dialog */ - IDS_RUNDLG_ERROR "„Executare fișier” nu a putut fi deschis (eroare internă)" - IDS_RUNDLG_BROWSE_ERROR "„Specificare fișiere” nu a putut fi deschisă (eroare internă)" + IDS_RUNDLG_ERROR "Imposibil de mutat acest folder (eroare internă)." + IDS_RUNDLG_BROWSE_ERROR "Imposibil de mutat acest fișier (eroare internă)" IDS_RUNDLG_BROWSE_CAPTION "Specificare fișiere" - IDS_RUNDLG_BROWSE_FILTER "Fișiere executabile (*.exe)\0*.exe\0Orice fișier (*.*)\0*.*\0" + IDS_RUNDLG_BROWSE_FILTER "Programe (*.exe)\0*.exe\0Toate fişier (*.*)\0*.*\0" /* Shortcut property sheet */ IDS_SHORTCUT_RUN_NORMAL "Fereastră normală" @@ -875,7 +875,7 @@ BEGIN IDS_RECENT "Recente" IDS_SENDTO "Trimitere" IDS_STARTMENU "Meniul Pornire" - IDS_MYMUSIC "Audio" + IDS_MYMUSIC "Muzică" IDS_MYVIDEO "Video" IDS_DESKTOPDIRECTORY "Desktop" IDS_NETHOOD "Rețele" @@ -891,7 +891,7 @@ BEGIN IDS_PROGRAM_FILES_COMMON "Fișiere de program\\Fișiere comune" IDS_COMMON_DOCUMENTS "Documentele mele" IDS_ADMINTOOLS "Meniul Pornire\\Programe\\Administrative" - IDS_COMMON_MUSIC "Documentele mele\\Audio" + IDS_COMMON_MUSIC "Documentele mele\\Muzică" IDS_COMMON_PICTURES "Documentele mele\\Imagini" IDS_COMMON_VIDEO "Documentele mele\\Video" IDS_CDBURN_AREA "Preferințe locale\\Date de aplicație\\Microsoft\\Inscripționare CD" @@ -902,9 +902,9 @@ BEGIN IDS_DRIVE_FIXED "Disc local" IDS_DRIVE_CDROM "Unitate CD" - IDS_DRIVE_NETWORK "Disc din rețea" + IDS_DRIVE_NETWORK "Unitate de reţea" IDS_DRIVE_FLOPPY "Dischetă de 3,5" - IDS_DRIVE_REMOVABLE "Disc detașabil" + IDS_DRIVE_REMOVABLE "Disc amovibil" IDS_FS_UNKNOWN "Nespecificat" /* Open With */ @@ -917,20 +917,20 @@ BEGIN IDS_SHELL_ABOUT_BACK "< Înap&oi" FCIDM_SHVIEW_NEW "&Crează" /* A menu item with an ampersand */ FCIDM_SHVIEW_NEWFOLDER "&Folder" - FCIDM_SHVIEW_NEWLINK "Sc&urtătură" + FCIDM_SHVIEW_NEWLINK "&Comandă rapidă" IDS_FOLDER_OPTIONS "Opțiuni foldere" IDS_RECYCLEBIN_LOCATION "Locația pentru Coșul de reciclare" IDS_RECYCLEBIN_DISKSPACE "Spațiul disponibil" - IDS_EMPTY_BITBUCKET "Golește Coșul de reciclare" - IDS_PICK_ICON_TITLE "Alegerea pictogramei" + IDS_EMPTY_BITBUCKET "Golire Coş de reciclare" + IDS_PICK_ICON_TITLE "Alegere pictogramă" IDS_PICK_ICON_FILTER "Fișiere pictogramă (*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0Orice fișier (*.*)\0*.*\0" - IDS_OPEN_WITH_FILTER "Fișiere executabile (*.exe)\0*.exe\0Orice fișier (*.*)\0*.*\0" + IDS_OPEN_WITH_FILTER "Programe (*.exe)\0*.exe\0Toate fișier (*.*)\0*.*\0" - IDS_CANTLOCKVOLUME "Eșec la prinderea volumului (Cod de eroare: %lu)." - IDS_CANTDISMOUNTVOLUME "Eșec la eliberarea volumului (Cod de eroare: %lu)." - IDS_CANTEJECTMEDIA "Eșec la scoaterea mediului de stocare (Cod de eroare: %lu)." - IDS_CANTSHOWPROPERTIES "Eșec la inspecția proprietăților (Cod de eroare: %lu)." - IDS_CANTDISCONNECT "Eșec la deconectare (Cod de eroare: %lu)." + IDS_CANTLOCKVOLUME "Imposibil de blocat volumul (Cod de eroare: %lu)." + IDS_CANTDISMOUNTVOLUME "Imposibil de demontat volumul (Cod de eroare: %lu)." + IDS_CANTEJECTMEDIA "Imposibil de scos mediului de stocare (Cod de eroare: %lu)." + IDS_CANTSHOWPROPERTIES "Imposibil de afișat proprietățile (Cod de eroare: %lu)." + IDS_CANTDISCONNECT "Imposibil de deconectat (Cod de eroare: %lu)." IDS_NONE "(Nimic)" /* Friendly File Type Names */ @@ -962,13 +962,13 @@ BEGIN IDS_VXD_FILE "Driver de dispozitiv virtual" IDS_ANY_FILE "Fișier-%s" - IDS_OPEN_VERB "Deschide" - IDS_EXPLORE_VERB "Explorează" + IDS_OPEN_VERB "Deschidere" + IDS_EXPLORE_VERB "Explorare" IDS_RUNAS_VERB "Executare ca…" - IDS_EDIT_VERB "Editează" - IDS_FIND_VERB "Caută" - IDS_PRINT_VERB "Imprimă" - IDS_CMD_VERB "Deschide Panoul de control aici" + IDS_EDIT_VERB "Editare" + IDS_FIND_VERB "Căutare" + IDS_PRINT_VERB "Imprimare" + IDS_CMD_VERB "Deschidere Panou de control aici" IDS_FILE_FOLDER "%u fișiere, %u foldere" IDS_PRINTERS "Imprimante" @@ -980,8 +980,8 @@ BEGIN IDS_SHLEXEC_NOASSOC "Nu există nici un program configurat pentru a deschide acest tip de fișier." - IDS_FILE_DETAILS "Detalii pentru extensia „%s”" - IDS_FILE_DETAILSADV "Fișierele cu extensia „%s” sunt de tipul „%s”. Pentru a modifica opțiunile care vor afecta toate fișierele „%s”, apăsați „Avansate”." + IDS_FILE_DETAILS "Detalii pentru extensia '%s'" + IDS_FILE_DETAILSADV "Fișierele cu extensia '%s' sunt de tipul '%s'. Pentru a modifica opțiunile care vor afecta toate fișierele '%s', apăsați Complex." IDS_FILE_TYPES "Tipuri" IDS_COLUMN_EXTENSION "Extensii" @@ -997,72 +997,72 @@ BEGIN IDS_OBJECTS "%d Obiecte" IDS_OBJECTS_SELECTED "%d Obiecte selectate" - IDS_TITLE_MYCOMP "Calculatorul meu" + IDS_TITLE_MYCOMP "Computerul meu" IDS_TITLE_MYNET "Locații în rețea" - IDS_TITLE_BIN_1 "Coșul de reciclare (plin)" - IDS_TITLE_BIN_0 "Coșul de reciclare (gol)" - - IDS_ADVANCED_FOLDER "Fișiere și Foldere" - IDS_ADVANCED_NET_CRAWLER "Caută automat în rețea foldere și imprimante" - IDS_ADVANCED_FOLDER_SIZE_TIP "Afișează dimensiunea fișierulor la indicii de folder" - IDS_ADVANCED_FRIENDLY_TREE "Permite afișare simplă de foldere pentru lista folderelor în Explorator" - IDS_ADVANCED_WEB_VIEW_BARRICADE "Afișează conținutul folderelor de sistem" - IDS_ADVANCED_SHOW_FULL_PATH_ADDRESS "Afișează cale completă în bara de adrese" - IDS_ADVANCED_SHOW_FULL_PATH "Afișează cale completă în bara de titlu" - IDS_ADVANCED_DISABLE_THUMB_CACHE "Nu prememora miniaturi" - IDS_ADVANCED_HIDDEN "Fișiere și foldere ascunse" - IDS_ADVANCED_DONT_SHOW_HIDDEN "Nu afișa fișierele și folderele ascunse" - IDS_ADVANCED_SHOW_HIDDEN "Afișează fișierele și folderele ascunse" - IDS_ADVANCED_HIDE_FILE_EXT "Ascunde extensiile pentru tipurile cunoscute de fișiere" - IDS_ADVANCED_SUPER_HIDDEN "Ascunde fișierele protejate ale sistemului de operare (este recomandat)" - IDS_ADVANCED_DESKTOP_PROCESS "Lansează ferestrele de folder în procese separate" - IDS_ADVANCED_CLASSIC_VIEW_STATE "Păstrează particularitățile fiecărei afișări de folder" - IDS_ADVANCED_PERSIST_BROWSERS "Redeschide la autentificare folderele precedente" - IDS_ADVANCED_CONTROL_PANEL_IN_MY_COMPUTER "Afișează Panoul de control în Calculatorul meu" - IDS_ADVANCED_SHOW_COMP_COLOR "Afișează în culori fișierele NTFS criptate sau comprimate" - IDS_ADVANCED_SHOW_INFO_TIP "Permite descriere prin indicii pentru foldere și elemente de desktop" - IDS_ADVANCED_DISPLAY_FAVORITES "Display Favorites" - IDS_ADVANCED_DISPLAY_LOG_OFF "Display Log Off" - IDS_ADVANCED_EXPAND_CONTROL_PANEL "Expand Control Panel" - IDS_ADVANCED_EXPAND_MY_DOCUMENTS "Expand My Documents" - IDS_ADVANCED_EXPAND_PRINTERS "Expand Printers" - IDS_ADVANCED_EXPAND_MY_PICTURES "Expand My Pictures" - IDS_ADVANCED_EXPAND_NET_CONNECTIONS "Expand Network Connections" - IDS_ADVANCED_DISPLAY_RUN "Display Run" - IDS_ADVANCED_DISPLAY_ADMINTOOLS "Display Administrative Tools" - IDS_ADVANCED_SMALL_START_MENU "Show Small Icons in Start menu" - - IDS_NEWEXT_ADVANCED_LEFT "<< A&vansate" - IDS_NEWEXT_ADVANCED_RIGHT "A&vansate >>" - IDS_NEWEXT_NEW "" - IDS_NEWEXT_SPECIFY_EXT "Trebuie să specificați o extensie." - IDS_NEWEXT_ALREADY_ASSOC "Extensia %s este deja asoiată cu tipul de fișier %s. Doriți disasocierea %s cu %s și crearea unui nou tip de fișier pentru ea?" - IDS_NEWEXT_EXT_IN_USE "Extensia este în uz" - - IDS_REMOVE_EXT "Dacă eliminați o extensie înregistrată a unui nume de fișier, nu veți mai putea deschide fișiere cu această extensie prin dublu-clic pe pictograma lor.\n\nSigur doriți eliminarea acestei extensii?" - IDS_SPECIFY_ACTION "Trebuie să specificați o acțiune." - IDS_INVALID_PROGRAM "Programul specificat nu poate fi găsit. Asigurați-vă că numele și calea sunt corecte." - IDS_REMOVE_ACTION "Sigur doriți eliminarea acestei acțiuni?" - IDS_ACTION_EXISTS "Acțiunea „%s” este deja înregistrată pentru acest tip de fișier. Reîncercați cu nume diferit." - IDS_EXE_FILTER "Programe\0*.exe\0Orice fișier\0*.*\0" - IDS_EDITING_ACTION "Editează acțiune pentru tipul: " - IDS_NO_ICONS "Fișierul „%s” nu conține pictograme.\n\nAlegeți o pictogramă din listă sau specificați un alt fișier." - IDS_FILE_NOT_FOUND "Fișierul „%s” nu a fost găsit." - IDS_LINK_INVALID "Elementul „%s” ca această scurtătură face referire la faptul ca a fost schimbat sau mutat, deci această scurtătură nu va mai funcționa în mod corespunzător." - IDS_COPYTOMENU "Copiază în &folderul..." - IDS_COPYTOTITLE "Selectați locul unde vreți să copiați „%s”. Apoi, apăsați pe butonul Copiază." - IDS_COPYITEMS "Copiază elementele" - IDS_COPYBUTTON "Copiază" - IDS_MOVETOMENU "Mu&tă în folderul..." - IDS_MOVETOTITLE "Selectați locul în care vreți să mutați „%s”. Apoi, apăsați butonul Mută." - IDS_MOVEITEMS "Mută elementele" - IDS_MOVEBUTTON "Mută" + IDS_TITLE_BIN_1 "Coş de reciclare (plin)" + IDS_TITLE_BIN_0 "Coş de reciclare (gol)" + + IDS_ADVANCED_FOLDER "Fişiere şi foldere" + IDS_ADVANCED_NET_CRAWLER "Căutare automată foldere şi imprimante în reţea" + IDS_ADVANCED_FOLDER_SIZE_TIP "Se afişează informaţii privind dimensiunea fişierului în sfaturile pentru folder" + IDS_ADVANCED_FRIENDLY_TREE "Afişare vizualizare simplă pentru folder în lista de foldere Explorer" + IDS_ADVANCED_WEB_VIEW_BARRICADE "Afişare conţinut foldere de sistem" + IDS_ADVANCED_SHOW_FULL_PATH_ADDRESS "Se afişează calea completă în bara de adrese" + IDS_ADVANCED_SHOW_FULL_PATH "Afișare cale completă în bara de titlu" + IDS_ADVANCED_DISABLE_THUMB_CACHE "Nu se păstrează în cache miniaturile" + IDS_ADVANCED_HIDDEN "Fişiere şi foldere ascunse" + IDS_ADVANCED_DONT_SHOW_HIDDEN "Nu se afişează fişierele şi folderele ascunse" + IDS_ADVANCED_SHOW_HIDDEN "Se afişează fişierele şi folderele ascunse" + IDS_ADVANCED_HIDE_FILE_EXT "Se ascund extensiile pentru tipurile de fişiere cunoscute" + IDS_ADVANCED_SUPER_HIDDEN "Ascundere fişiere protejate ale sistemului de operare (recomandat)" + IDS_ADVANCED_DESKTOP_PROCESS "Lansare ferestre foldere într-un proces separat" + IDS_ADVANCED_CLASSIC_VIEW_STATE "Se rememorează fiecare setare de vizualizare foldere" + IDS_ADVANCED_PERSIST_BROWSERS "Se restaurează fereastra folderului precedent la deschiderea sesiunii" + IDS_ADVANCED_CONTROL_PANEL_IN_MY_COMPUTER "Afişare Panou de control în Computerul meu" + IDS_ADVANCED_SHOW_COMP_COLOR "Afişare în culori a fişierelor NTFS criptate sau comprimate" + IDS_ADVANCED_SHOW_INFO_TIP "Se afişează descrieri pop-up pentru elemente din folder şi desktop" + IDS_ADVANCED_DISPLAY_FAVORITES "Afișare Favorite" + IDS_ADVANCED_DISPLAY_LOG_OFF "Afișare Log Off" + IDS_ADVANCED_EXPAND_CONTROL_PANEL "Se extinde Panou de control" + IDS_ADVANCED_EXPAND_MY_DOCUMENTS "Se extind Documentele mele" + IDS_ADVANCED_EXPAND_PRINTERS "Se extind Imprimante" + IDS_ADVANCED_EXPAND_MY_PICTURES "Se extind Imaginile mele" + IDS_ADVANCED_EXPAND_NET_CONNECTIONS "Se extind Conexiuni de rețea" + IDS_ADVANCED_DISPLAY_RUN "Se afișează Executare" + IDS_ADVANCED_DISPLAY_ADMINTOOLS "Se afișează Instrumente de administrare" + IDS_ADVANCED_SMALL_START_MENU "Se afișează Pictograme mici în Meniul Start" + + IDS_NEWEXT_ADVANCED_LEFT "<< &Complex" + IDS_NEWEXT_ADVANCED_RIGHT "&Complex >>" + IDS_NEWEXT_NEW "" + IDS_NEWEXT_SPECIFY_EXT "Specificaţi o extensie." + IDS_NEWEXT_ALREADY_ASSOC "Extensia %s este deja utilizată de tipul de fişier %s. Asociaţi %s cu %s și creați unui nou tip de fișier pentru ea?" + IDS_NEWEXT_EXT_IN_USE "Extensia este utilizată" + + IDS_REMOVE_EXT "Dacă eliminaţi o extensie de fişier înregistrată, nu veţi avea posibilitatea să deschideţi\nfişierele cu această extensie efectuând dublu clic pe pictogramele lor.\n\nSigur eliminaţi această extensie?" + IDS_SPECIFY_ACTION "Trebuie să specificaţi o acţiune." + IDS_INVALID_PROGRAM "Programul specificat nu s-a găsit. Verificaţi dacă numele şi calea fişierului sunt corecte." + IDS_REMOVE_ACTION "Sigur eliminaţi această acţiune?" + IDS_ACTION_EXISTS "Acțiunea '%s' este deja înregistrată pentru a cest tip de fişier. Introduceţi un nume nou, apoi încercaţi din nou." + IDS_EXE_FILTER "Programe\0*.exe\0Toate fişierel\0*.*\0" + IDS_EDITING_ACTION "Editare acţiune pentru tipul:" + IDS_NO_ICONS "Fișierul '%s' nu conţine pictograme.\n\nAlegeţi o pictogramă din listă sau specificaţi un alt fişier." + IDS_FILE_NOT_FOUND "Fișierul '%s' nu a fost găsit." + IDS_LINK_INVALID "Elementul '%s' la care se referă această comandă rapidă s-a modificat sau s-a mutat, astfel încât această comandă rapidă nu va mai funcţiona corespunzător.\n\nŞtergeţi această comandă rapidă?" + IDS_COPYTOMENU "Copiere în &folderul…" + IDS_COPYTOTITLE "Selectaţi locul unde se va copia '%s'. Apoi faceţi clic pe butonul Copiere." + IDS_COPYITEMS "Copiere elemente" + IDS_COPYBUTTON "Copiere" + IDS_MOVETOMENU "Mu&tare în folderul…" + IDS_MOVETOTITLE "Selectaţi locul unde se va muta '%s'. Apoi faceţi clic pe butonul Mutare." + IDS_MOVEITEMS "Mutare elemente" + IDS_MOVEBUTTON "Mutare" IDS_SYSTEMFOLDER "Folder de sistem" /* For IDD_LOG_OFF_FANCY */ - IDS_LOG_OFF_DESC "Vă închide programele și vă încheie sesiunea ReactOS." - IDS_SWITCH_USER_DESC "Permite altui utilizator să fie logat, în timp ce programele dumneavoastră rămân deschise.\r\n\r\n(Puteți de asemenea, să schimbați utilizatorii apăsând tasta cu sigla Windows + L.)" - IDS_LOG_OFF_TITLE "Deautentifică" - IDS_SWITCH_USER_TITLE "Schimbă utilizatorul" + IDS_LOG_OFF_DESC "Închide programele şi încheie sesiunea ReactOS." + IDS_SWITCH_USER_DESC "Permite unui alt utilizator să facă Log on în timp ce programele şi fişierele vă rămân deschise.\r\n\r\n(De asemenea, este posibil să comutaţi între utilizatori apăsând tasta Windows logo + L.)" + IDS_LOG_OFF_TITLE "&Log Off" + IDS_SWITCH_USER_TITLE "Comutare utilizatori" END From d05dcf6a0227e6a4f9598b72ff54cc6f999b553e Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Wed, 10 Apr 2024 09:32:13 +0900 Subject: [PATCH 14/44] [SHELL32][SDK] Fix ParseDisplayName Part 1 (#6721) JIRA issue: CORE-19495 - Implement SHParseDisplayName and CDesktopFolder::ParseDisplayName. - Add CStubFolderBase, CShellUrlStub, CFileUrlStub, CIDListUrlStub, and CHttpUrlStub helper classes. - Add SHGetSpecialFolderID and Shell_ParseSpecialFolder helper functions. - Add BindCtx_ContainsObject, BindCtx_GetUIWindow, BindCtx_RegisterObjectParam, SHBindToObject, SHBindToObjectEx, SHCoInitializeAnyApartment, SHGetAttributes, SHGetNameAndFlagsW, SHIsFileSysBindCtx, SHSkipJunctionBinding, Shell_DisplayNameOf, and Shell_FailForceReturn helper functions. - Modify CSIDL data. --- dll/win32/shell32/folders/CDesktopFolder.cpp | 356 +++++++++++++++---- dll/win32/shell32/folders/CDesktopFolder.h | 93 +++++ dll/win32/shell32/precomp.h | 58 +++ dll/win32/shell32/utils.cpp | 310 ++++++++++++++++ dll/win32/shell32/wine/pidl.c | 65 +++- dll/win32/shell32/wine/shellpath.c | 61 +++- sdk/include/psdk/shobjidl.idl | 6 + sdk/include/reactos/shlwapi_undoc.h | 2 + 8 files changed, 859 insertions(+), 92 deletions(-) diff --git a/dll/win32/shell32/folders/CDesktopFolder.cpp b/dll/win32/shell32/folders/CDesktopFolder.cpp index 37dc4cb6118..51695e196f4 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -24,6 +24,223 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); +STDMETHODIMP +CShellUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) +{ + LPWSTR pch; + INT cch, csidl; + HRESULT hr = HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND); + PARSEDURLW ParsedURL = { sizeof(ParsedURL) }; + + ::ParseURLW(lpszDisplayName, &ParsedURL); + + DWORD attrs = (pdwAttributes ? *pdwAttributes : 0) | SFGAO_STREAM; + if (ParsedURL.pszSuffix[0] == L':' && ParsedURL.pszSuffix[1] == L':') + { + CComPtr psfDesktop; + hr = SHGetDesktopFolder(&psfDesktop); + if (SUCCEEDED(hr)) + { + CComPtr pBindCtx; + hr = ::CreateBindCtx(0, &pBindCtx); + if (SUCCEEDED(hr)) + { + BIND_OPTS BindOps = { sizeof(BindOps) }; + BindOps.grfMode = STGM_CREATE; + pBindCtx->SetBindOptions(&BindOps); + hr = psfDesktop->ParseDisplayName(hwndOwner, pBindCtx, + (LPWSTR)ParsedURL.pszSuffix, + pchEaten, ppidl, &attrs); + } + } + } + else + { + csidl = Shell_ParseSpecialFolder(ParsedURL.pszSuffix, &pch, &cch); + if (csidl == -1) + { + ERR("\n"); + return hr; + } + + CComHeapPtr pidlLocation; + hr = SHGetFolderLocation(hwndOwner, (csidl | CSIDL_FLAG_CREATE), NULL, 0, &pidlLocation); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + if (pch && *pch) + { + CComPtr psfFolder; + hr = SHBindToObject(NULL, pidlLocation, IID_PPV_ARG(IShellFolder, &psfFolder)); + if (SUCCEEDED(hr)) + { + CComHeapPtr pidlNew; + hr = psfFolder->ParseDisplayName(hwndOwner, pbc, pch, pchEaten, &pidlNew, &attrs); + if (SUCCEEDED(hr)) + { + hr = SHILCombine(pidlLocation, pidlNew, ppidl); + if (pchEaten) + *pchEaten += cch; + } + } + } + else + { + if (attrs) + hr = SHGetNameAndFlagsW(pidlLocation, 0, NULL, 0, &attrs); + + if (SUCCEEDED(hr)) + { + if (pchEaten) + *pchEaten = cch; + *ppidl = pidlLocation.Detach(); + } + } + } + + // FIXME: SHWindowsPolicy + if (SUCCEEDED(hr) && (attrs & SFGAO_STREAM) && + !BindCtx_ContainsObject(pbc, STR_PARSE_SHELL_PROTOCOL_TO_FILE_OBJECTS)) + { + ILFree(*ppidl); + *ppidl = NULL; + hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + } + + if (pdwAttributes) + *pdwAttributes = attrs; + + // FIXME: SHWindowsPolicy + if (FAILED(hr) && !Shell_FailForceReturn(hr)) + hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + + return hr; +} + +STDMETHODIMP +CFileUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) +{ + WCHAR szPath[MAX_PATH]; + DWORD cchPath = _countof(szPath); + HRESULT hr = PathCreateFromUrlW(lpszDisplayName, szPath, &cchPath, 0); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + CComPtr psfDesktop; + hr = SHGetDesktopFolder(&psfDesktop); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + return psfDesktop->ParseDisplayName(hwndOwner, pbc, szPath, pchEaten, ppidl, pdwAttributes); +} + +STDMETHODIMP +CIDListUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) +{ + return E_NOTIMPL; // FIXME +} + +STDMETHODIMP +CHttpUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) +{ + return E_NOTIMPL; // FIXME +} + +BOOL CDesktopFolder::_TryUrlJunctions( + LPCWSTR pcszURL, + IBindCtx *pBindCtx, + IShellFolder **ppShellFolder, + LPITEMIDLIST *ppidl) +{ + PARSEDURLW ParsedURL = { sizeof(ParsedURL) }; + ::ParseURLW(pcszURL, &ParsedURL); + + *ppShellFolder = NULL; + switch (ParsedURL.nScheme) + { + case URL_SCHEME_FILE: + *ppShellFolder = &m_FileUrlStub; + break; + + case URL_SCHEME_HTTP: + case URL_SCHEME_HTTPS: + if (!BindCtx_ContainsObject(pBindCtx, STR_PARSE_PREFER_FOLDER_BROWSING)) + break; + *ppShellFolder = &m_HttpUrlStub; + break; + + case URL_SCHEME_SHELL: + *ppShellFolder = &m_ShellUrlStub; + break; + + case URL_SCHEME_MSSHELLROOTED: + *ppShellFolder = NULL; // FIXME + break; + + case URL_SCHEME_MSSHELLIDLIST: + *ppShellFolder = &m_IDListUrlStub; + break; + + default: + break; + } + + return !!*ppShellFolder; +} + +BOOL CDesktopFolder::_GetParentForParsing( + LPCWSTR pszPath, + IBindCtx *pbc, + IShellFolder **ppParentFolder, + LPITEMIDLIST *ppidlParent) +{ + WCHAR wch = *pszPath; + if (((L'A' <= wch && wch <= L'Z') || (L'a' <= wch && wch <= L'z')) && (pszPath[1] == ':')) + *ppidlParent = _ILCreateMyComputer(); + else if (PathIsUNCW(pszPath)) + *ppidlParent = _ILCreateNetwork(); + else if (UrlIsW(pszPath, URLIS_URL) && !SHSkipJunctionBinding(pbc, NULL)) + _TryUrlJunctions(pszPath, pbc, ppParentFolder, ppidlParent); + + if (!*ppParentFolder && *ppidlParent) + SHBindToObject(NULL, *ppidlParent, IID_PPV_ARG(IShellFolder, ppParentFolder)); + + return *ppParentFolder != NULL; +} + +HRESULT CDesktopFolder::_ChildParseDisplayName( + IShellFolder *pParentFolder, + LPCITEMIDLIST pidlParent, + HWND hwndOwner, + IBindCtx *pBindCtx, + LPWSTR lpszDisplayName, + DWORD *pchEaten, + LPITEMIDLIST *ppidl, + DWORD *pdwAttributes) +{ + LPITEMIDLIST pidlChild; + HRESULT hr = pParentFolder->ParseDisplayName(hwndOwner, pBindCtx, lpszDisplayName, + pchEaten, &pidlChild, pdwAttributes); + if (FAILED(hr)) + return hr; + + if (pidlParent) + { + *ppidl = ILCombine(pidlParent, pidlChild); + ILFree(pidlChild); + } + else + { + *ppidl = pidlChild; + } + + return (*ppidl ? S_OK : E_OUTOFMEMORY); +} + /* CDesktopFolder should create two file system folders internally, one representing the user's desktop folder, and the other representing the common desktop folder. It should @@ -285,11 +502,6 @@ HRESULT WINAPI CDesktopFolder::ParseDisplayName( PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) { - LPCWSTR szNext = NULL; - LPITEMIDLIST pidlTemp = NULL; - PARSEDURLW urldata; - HRESULT hr = S_OK; - TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), pchEaten, ppidl, pdwAttributes); @@ -302,78 +514,98 @@ HRESULT WINAPI CDesktopFolder::ParseDisplayName( if (!lpszDisplayName) return E_INVALIDARG; - if (pchEaten) - *pchEaten = 0; /* strange but like the original */ - - urldata.cbSize = sizeof(urldata); - - if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':') - { - return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes); - } - else if (PathGetDriveNumberW (lpszDisplayName) >= 0) - { - /* it's a filesystem path with a drive. Let MyComputer/UnixDosFolder parse it */ - pidlTemp = _ILCreateMyComputer (); - szNext = lpszDisplayName; - } - else if (PathIsUNCW(lpszDisplayName)) + if (!*lpszDisplayName) { - pidlTemp = _ILCreateNetwork(); - szNext = lpszDisplayName; + *ppidl = _ILCreateMyComputer(); + return (*ppidl ? S_OK : E_OUTOFMEMORY); } - else if( (pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, lpszDisplayName)) ) + + if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':') { - *ppidl = pidlTemp; - return S_OK; + return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, + pdwAttributes); } - else if (SUCCEEDED(ParseURLW(lpszDisplayName, &urldata))) + + HRESULT hr = E_INVALIDARG; + CComHeapPtr pidlParent; + CComPtr pParentFolder; + if (_GetParentForParsing(lpszDisplayName, pbc, &pParentFolder, &pidlParent)) { - if (urldata.nScheme == URL_SCHEME_SHELL) /* handle shell: urls */ + if (pchEaten) + *pchEaten = 0; + + hr = _ChildParseDisplayName(pParentFolder, + pidlParent, + hwndOwner, + pbc, + lpszDisplayName, + pchEaten, + ppidl, + pdwAttributes); + if (SUCCEEDED(hr)) { - TRACE ("-- shell url: %s\n", debugstr_w(urldata.pszSuffix)); - pidlTemp = _ILCreateGuidFromStrW(urldata.pszSuffix + 2); + if (BindCtx_ContainsObject(pbc, STR_PARSE_TRANSLATE_ALIASES)) + { + LPITEMIDLIST pidlAlias; + if (SUCCEEDED(Shell_TranslateIDListAlias(*ppidl, NULL, &pidlAlias, 0xFFFF))) + { + ILFree(*ppidl); + *ppidl = pidlAlias; + } + } + return hr; } - else - return IEParseDisplayNameWithBCW(CP_ACP, lpszDisplayName, pbc, ppidl); } - else - { - if (*lpszDisplayName) - { - /* it's a filesystem path on the desktop. Let a FSFolder parse it */ - hr = m_DesktopFSFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes); - if (SUCCEEDED(hr)) - return hr; - return m_SharedDesktopFSFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes); - } - else - pidlTemp = _ILCreateMyComputer(); + if (Shell_FailForceReturn(hr)) + return hr; + + if (BindCtx_ContainsObject(pbc, STR_DONT_PARSE_RELATIVE)) + return E_INVALIDARG; + + if (SHIsFileSysBindCtx(pbc, NULL) == S_OK) + return hr; - szNext = NULL; + BIND_OPTS BindOps = { sizeof(BindOps) }; + BOOL bCreate = FALSE; + if (pbc && SUCCEEDED(pbc->GetBindOptions(&BindOps)) && (BindOps.grfMode & STGM_CREATE)) + { + BindOps.grfMode &= ~STGM_CREATE; + bCreate = TRUE; + pbc->SetBindOptions(&BindOps); } - if (SUCCEEDED(hr) && pidlTemp) + if (m_DesktopFSFolder) { - if (szNext && *szNext) - { - hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, - &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes); - } - else - { - if (pdwAttributes && *pdwAttributes) - { - GetAttributesOf(1, &pidlTemp, pdwAttributes); - } - } + hr = m_DesktopFSFolder->ParseDisplayName(hwndOwner, + pbc, + lpszDisplayName, + pchEaten, + ppidl, + pdwAttributes); } - if (SUCCEEDED(hr)) - *ppidl = pidlTemp; - else - *ppidl = NULL; + if (FAILED(hr) && m_SharedDesktopFSFolder) + { + hr = m_SharedDesktopFSFolder->ParseDisplayName(hwndOwner, + pbc, + lpszDisplayName, + pchEaten, + ppidl, + pdwAttributes); + } + + if (FAILED(hr) && bCreate && m_DesktopFSFolder) + { + BindOps.grfMode |= STGM_CREATE; + pbc->SetBindOptions(&BindOps); + hr = m_DesktopFSFolder->ParseDisplayName(hwndOwner, + pbc, + lpszDisplayName, + pchEaten, + ppidl, + pdwAttributes); + } TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); diff --git a/dll/win32/shell32/folders/CDesktopFolder.h b/dll/win32/shell32/folders/CDesktopFolder.h index 4d77cb672f8..ea68c0c0315 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.h +++ b/dll/win32/shell32/folders/CDesktopFolder.h @@ -23,6 +23,73 @@ #ifndef _CDESKTOPFOLDER_H_ #define _CDESKTOPFOLDER_H_ +class CStubFolderBase : public IShellFolder +{ +public: + CStubFolderBase() { } + + STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override { return E_NOTIMPL; } + STDMETHODIMP_(ULONG) AddRef() override { return 3; } + STDMETHODIMP_(ULONG) Release() override { return 2; } + + // IShellFolder methods + STDMETHODIMP ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override + { return E_NOTIMPL; } + STDMETHODIMP EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override + { return E_NOTIMPL; } + STDMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override + { return E_NOTIMPL; } + STDMETHODIMP BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override + { return E_NOTIMPL; } + STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override + { return E_NOTIMPL; } + STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override + { return E_NOTIMPL; } + STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override + { return E_NOTIMPL; } + STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, + REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) override + { return E_NOTIMPL; } + STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override + { return E_NOTIMPL; } + STDMETHODIMP SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, + DWORD dwFlags, PITEMID_CHILD *pPidlOut) override + { return E_NOTIMPL; } +}; + +class CShellUrlStub : public CStubFolderBase +{ +public: + STDMETHODIMP + ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; +}; + +class CFileUrlStub : public CStubFolderBase +{ +public: + STDMETHODIMP + ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; +}; + +class CIDListUrlStub : public CStubFolderBase +{ +public: + STDMETHODIMP + ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; +}; + +class CHttpUrlStub : public CStubFolderBase +{ +public: + STDMETHODIMP + ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; +}; + class CDesktopFolder : public CComCoClass, public CComObjectRootEx, @@ -37,11 +104,37 @@ class CDesktopFolder : CComPtr m_SharedDesktopFSFolder; CComPtr m_regFolder; + // Stub URL objects + CShellUrlStub m_ShellUrlStub; + CFileUrlStub m_FileUrlStub; + CIDListUrlStub m_IDListUrlStub; + CHttpUrlStub m_HttpUrlStub; + LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */ LPITEMIDLIST pidlRoot; /* absolute pidl */ HRESULT _GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2** psf); + BOOL _TryUrlJunctions( + LPCWSTR pcszURL, + IBindCtx *pBindCtx, + IShellFolder **ppShellFolder, + LPITEMIDLIST *ppidl); + BOOL _GetParentForParsing( + LPCWSTR pszPath, + IBindCtx *pbc, + IShellFolder **ppParentFolder, + LPITEMIDLIST *ppidlParent); + HRESULT _ChildParseDisplayName( + IShellFolder *pParentFolder, + LPCITEMIDLIST pidlParent, + HWND hwndOwner, + IBindCtx *pBindCtx, + LPWSTR lpszDisplayName, + DWORD *pchEaten, + LPITEMIDLIST *ppidl, + DWORD *pdwAttributes); + public: CDesktopFolder(); ~CDesktopFolder(); diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index 393693885ac..74765c7c2e9 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -153,4 +153,62 @@ class CStubWindow32 : public CWindowImpl END_MSG_MAP() }; +HRESULT +Shell_TranslateIDListAlias( + _In_ LPCITEMIDLIST pidl, + _In_ HANDLE hToken, + _Out_ LPITEMIDLIST *ppidlAlias, + _In_ DWORD dwFlags); + +BOOL BindCtx_ContainsObject(_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName); +BOOL SHSkipJunctionBinding(_In_ IBindCtx *pbc, _In_ CLSID *pclsid); +HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW **ppFindData); +BOOL Shell_FailForceReturn(_In_ HRESULT hr); + +EXTERN_C INT +Shell_ParseSpecialFolder(_In_ LPCWSTR pszStart, _Out_ LPWSTR *ppch, _Out_ INT *pcch); + +HRESULT +Shell_DisplayNameOf( + _In_ IShellFolder *psf, + _In_ LPCITEMIDLIST pidl, + _In_ DWORD dwFlags, + _Out_ LPWSTR pszBuf, + _In_ UINT cchBuf); + +HRESULT SHBindToObject( + _In_opt_ IShellFolder *psf, + _In_ LPCITEMIDLIST pidl, + _In_ REFIID riid, + _Out_ void **ppvObj); + +HRESULT +SHBindToObjectEx( + _In_opt_ IShellFolder *pShellFolder, + _In_ LPCITEMIDLIST pidl, + _In_opt_ IBindCtx *pBindCtx, + _In_ REFIID riid, + _Out_ void **ppvObj); + +DWORD +SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes); +HRESULT SHCoInitializeAnyApartment(VOID); + +HRESULT +SHGetNameAndFlagsW( + _In_ LPCITEMIDLIST pidl, + _In_ DWORD dwFlags, + _Out_opt_ LPWSTR pszText, + _In_ UINT cchBuf, + _Inout_opt_ DWORD *pdwAttributes); + +EXTERN_C HWND BindCtx_GetUIWindow(_In_ IBindCtx *pBindCtx); + +EXTERN_C HRESULT +BindCtx_RegisterObjectParam( + _In_ IBindCtx *pBindCtx, + _In_ LPOLESTR pszKey, + _In_opt_ IUnknown *punk, + _Out_ LPBC *ppbc); + #endif /* _PRECOMP_H__ */ diff --git a/dll/win32/shell32/utils.cpp b/dll/win32/shell32/utils.cpp index 9f9309b645c..0909b235573 100644 --- a/dll/win32/shell32/utils.cpp +++ b/dll/win32/shell32/utils.cpp @@ -31,6 +31,316 @@ OpenEffectiveToken( return ret; } +HRESULT +Shell_TranslateIDListAlias( + _In_ LPCITEMIDLIST pidl, + _In_ HANDLE hToken, + _Out_ LPITEMIDLIST *ppidlAlias, + _In_ DWORD dwFlags) +{ + return E_FAIL; //FIXME +} + +BOOL BindCtx_ContainsObject(_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName) +{ + CComPtr punk; + if (!pBindCtx || FAILED(pBindCtx->GetObjectParam(const_cast(pszName), &punk))) + return FALSE; + return TRUE; +} + +BOOL SHSkipJunctionBinding(_In_ IBindCtx *pbc, _In_ CLSID *pclsid) +{ + if (!pbc) + return FALSE; + + BIND_OPTS BindOps = { sizeof(BindOps) }; + if (SUCCEEDED(pbc->GetBindOptions(&BindOps)) && BindOps.grfFlags == OLECONTF_LINKS) + return TRUE; + + return pclsid && SHSkipJunction(pbc, pclsid); +} + +HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW **ppFindData) +{ + CComPtr punk; + CComPtr pBindData; + + if (!pBindCtx || FAILED(pBindCtx->GetObjectParam((LPWSTR)STR_FILE_SYS_BIND_DATA, &punk))) + return S_FALSE; + + if (FAILED(punk->QueryInterface(IID_PPV_ARG(IFileSystemBindData, &pBindData)))) + return S_FALSE; + + HRESULT hr = S_OK; + if (ppFindData) + { + *ppFindData = (WIN32_FIND_DATAW*)LocalAlloc(LPTR, sizeof(WIN32_FIND_DATAW)); + if (*ppFindData) + pBindData->GetFindData(*ppFindData); + else + hr = E_OUTOFMEMORY; + } + + return hr; +} + +BOOL Shell_FailForceReturn(_In_ HRESULT hr) +{ + DWORD code = HRESULT_CODE(hr); + + switch (code) + { + case ERROR_BAD_NETPATH: + case ERROR_BAD_NET_NAME: + case ERROR_CANCELLED: + return TRUE; + + default: + return (ERROR_FILE_NOT_FOUND <= code && code <= ERROR_PATH_NOT_FOUND); + } +} + +HRESULT +SHBindToObjectEx( + _In_opt_ IShellFolder *pShellFolder, + _In_ LPCITEMIDLIST pidl, + _In_opt_ IBindCtx *pBindCtx, + _In_ REFIID riid, + _Out_ void **ppvObj) +{ + CComPtr psfDesktop; + + *ppvObj = NULL; + + if (!pShellFolder) + { + SHGetDesktopFolder(&psfDesktop); + if (!psfDesktop) + return E_FAIL; + + pShellFolder = psfDesktop; + } + + HRESULT hr; + if (_ILIsDesktop(pidl)) + hr = pShellFolder->QueryInterface(riid, ppvObj); + else + hr = pShellFolder->BindToObject(pidl, pBindCtx, riid, ppvObj); + + if (SUCCEEDED(hr) && !*ppvObj) + hr = E_FAIL; + + return hr; +} + +HRESULT SHBindToObject( + _In_opt_ IShellFolder *psf, + _In_ LPCITEMIDLIST pidl, + _In_ REFIID riid, + _Out_ void **ppvObj) +{ + return SHBindToObjectEx(psf, pidl, NULL, riid, ppvObj); +} + +HRESULT +Shell_DisplayNameOf( + _In_ IShellFolder *psf, + _In_ LPCITEMIDLIST pidl, + _In_ DWORD dwFlags, + _Out_ LPWSTR pszBuf, + _In_ UINT cchBuf) +{ + *pszBuf = UNICODE_NULL; + STRRET sr; + HRESULT hr = psf->GetDisplayNameOf(pidl, dwFlags, &sr); + if (FAILED(hr)) + return hr; + return StrRetToBufW(&sr, pidl, pszBuf, cchBuf); +} + +DWORD +SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes) +{ + LPCITEMIDLIST pidlLast; + + if (psf) + { + psf->AddRef(); + pidlLast = pidl; + } + else + { + SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast); + } + + if (!psf) + return 0; + + DWORD oldAttrs = dwAttributes; + if (FAILED(psf->GetAttributesOf(1, &pidlLast, &dwAttributes))) + dwAttributes = 0; + else + dwAttributes &= oldAttrs; + + if ((dwAttributes & SFGAO_FOLDER) && + (dwAttributes & SFGAO_STREAM) && + !(dwAttributes & SFGAO_STORAGEANCESTOR) && + (oldAttrs & SFGAO_STORAGEANCESTOR) && + (SHGetObjectCompatFlags(psf, NULL) & 0x200)) + { + dwAttributes &= ~(SFGAO_STREAM | SFGAO_STORAGEANCESTOR); + dwAttributes |= SFGAO_STORAGEANCESTOR; + } + + if (psf) + psf->Release(); + + return dwAttributes; +} + +HRESULT SHCoInitializeAnyApartment(VOID) +{ + HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); + if (FAILED(hr)) + hr = CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE); + return hr; +} + +HRESULT +SHGetNameAndFlagsW( + _In_ LPCITEMIDLIST pidl, + _In_ DWORD dwFlags, + _Out_opt_ LPWSTR pszText, + _In_ UINT cchBuf, + _Inout_opt_ DWORD *pdwAttributes) +{ + if (pszText) + *pszText = UNICODE_NULL; + + HRESULT hrCoInit = SHCoInitializeAnyApartment(); + + CComPtr psfFolder; + LPCITEMIDLIST ppidlLast; + HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psfFolder), &ppidlLast); + if (SUCCEEDED(hr)) + { + if (pszText) + hr = Shell_DisplayNameOf(psfFolder, ppidlLast, dwFlags, pszText, cchBuf); + + if (SUCCEEDED(hr)) + { + if (pdwAttributes) + *pdwAttributes = SHGetAttributes(psfFolder, ppidlLast, *pdwAttributes); + } + } + + if (SUCCEEDED(hrCoInit)) + CoUninitialize(); + + return hr; +} + +EXTERN_C HWND +BindCtx_GetUIWindow(_In_ IBindCtx *pBindCtx) +{ + HWND hWnd = NULL; + + CComPtr punk; + if (pBindCtx && SUCCEEDED(pBindCtx->GetObjectParam((LPWSTR)L"UI During Binding", &punk))) + IUnknown_GetWindow(punk, &hWnd); + + return hWnd; +} + +class CDummyOleWindow : public IOleWindow +{ +protected: + LONG m_cRefs; + HWND m_hWnd; + +public: + CDummyOleWindow() : m_cRefs(1), m_hWnd(NULL) { } + virtual ~CDummyOleWindow() { } + + // IUnknown methods + STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObj) override + { + static const QITAB c_tab[] = + { + QITABENT(CDummyOleWindow, IOleWindow), + { NULL } + }; + return ::QISearch(this, c_tab, riid, ppvObj); + } + STDMETHODIMP_(ULONG) AddRef() override + { + return ++m_cRefs; + } + STDMETHODIMP_(ULONG) Release() override + { + if (--m_cRefs == 0) + { + delete this; + return 0; + } + return m_cRefs; + } + + // IOleWindow methods + STDMETHODIMP GetWindow(HWND *phWnd) override + { + *phWnd = m_hWnd; + if (!m_hWnd) + return E_NOTIMPL; + return S_OK; + } + STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override + { + return E_NOTIMPL; + } +}; + +EXTERN_C HRESULT +BindCtx_RegisterObjectParam( + _In_ IBindCtx *pBindCtx, + _In_ LPOLESTR pszKey, + _In_opt_ IUnknown *punk, + _Out_ LPBC *ppbc) +{ + HRESULT hr = S_OK; + CDummyOleWindow *pUnknown = NULL; + + *ppbc = pBindCtx; + + if (pBindCtx) + { + pBindCtx->AddRef(); + } + else + { + hr = CreateBindCtx(0, ppbc); + if (FAILED(hr)) + return hr; + } + + if (!punk) + punk = pUnknown = new CDummyOleWindow(); + + hr = (*ppbc)->RegisterObjectParam(pszKey, punk); + + if (pUnknown) + pUnknown->Release(); + + if (FAILED(hr)) + { + (*ppbc)->Release(); + *ppbc = NULL; + } + + return hr; +} + /************************************************************************* * SHSetFolderPathA (SHELL32.231) * diff --git a/dll/win32/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index 7279737c8eb..824af18984a 100644 --- a/dll/win32/shell32/wine/pidl.c +++ b/dll/win32/shell32/wine/pidl.c @@ -54,6 +54,15 @@ extern BOOL WINAPI Free(LPVOID); static LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl); static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl); +EXTERN_C HWND BindCtx_GetUIWindow(_In_ IBindCtx *pBindCtx); + +EXTERN_C HRESULT +BindCtx_RegisterObjectParam( + _In_ IBindCtx *pBindCtx, + _In_ LPOLESTR pszKey, + _In_opt_ IUnknown *punk, + _Out_ LPBC *ppbc); + /************************************************************************* * ILGetDisplayNameExA * @@ -1396,39 +1405,59 @@ HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCI HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut) { + HRESULT hr; + LPWSTR pszNameDup; IShellFolder *psfDesktop; - HRESULT hr=E_FAIL; - ULONG dwAttr=sfgaoIn; + IBindCtx *pBindCtx = NULL; - if(!ppidl) - return E_INVALIDARG; + TRACE("(%s, %p, %p, 0x%X, %p)\n", pszName, pbc, ppidl, sfgaoIn, psfgaoOut); - if (!pszName) - { - *ppidl = NULL; - return E_INVALIDARG; - } + *ppidl = NULL; + + if (psfgaoOut) + *psfgaoOut = 0; + + pszNameDup = StrDupW(pszName); + if (!pszNameDup) + return E_OUTOFMEMORY; + psfDesktop = NULL; hr = SHGetDesktopFolder(&psfDesktop); if (FAILED(hr)) { - *ppidl = NULL; + LocalFree(pszNameDup); return hr; } - hr = IShellFolder_ParseDisplayName(psfDesktop, (HWND)NULL, pbc, (LPOLESTR)pszName, (ULONG *)NULL, ppidl, &dwAttr); - - IShellFolder_Release(psfDesktop); - - if (SUCCEEDED(hr)) + if (!pbc) { - if (psfgaoOut) *psfgaoOut = dwAttr; + hr = BindCtx_RegisterObjectParam(NULL, STR_PARSE_TRANSLATE_ALIASES, NULL, &pBindCtx); + pbc = pBindCtx; } - else + + if (SUCCEEDED(hr)) { - *ppidl = NULL; + ULONG sfgao = sfgaoIn, cchEaten; + HWND hwndUI = BindCtx_GetUIWindow(pbc); + hr = psfDesktop->lpVtbl->ParseDisplayName(psfDesktop, + hwndUI, + pbc, + pszNameDup, + &cchEaten, + ppidl, + (psfgaoOut ? &sfgao : NULL)); + if (SUCCEEDED(hr) && psfgaoOut) + *psfgaoOut = (sfgao & sfgaoIn); } + LocalFree(pszNameDup); + + if (psfDesktop) + psfDesktop->lpVtbl->Release(psfDesktop); + + if (pBindCtx) + pBindCtx->lpVtbl->Release(pBindCtx); + return hr; } diff --git a/dll/win32/shell32/wine/shellpath.c b/dll/win32/shell32/wine/shellpath.c index 160e25c03d1..dc4e94e2716 100644 --- a/dll/win32/shell32/wine/shellpath.c +++ b/dll/win32/shell32/wine/shellpath.c @@ -1104,14 +1104,14 @@ static const CSIDL_DATA CSIDL_Data[] = { /* 0x03 - CSIDL_CONTROLS (.CPL files) */ &FOLDERID_ControlPanelFolder, CSIDL_Type_SystemPath, - NULL, + L"ControlPanelFolder", NULL, -IDI_SHELL_CONTROL_PANEL }, { /* 0x04 - CSIDL_PRINTERS */ &FOLDERID_PrintersFolder, CSIDL_Type_SystemPath, - NULL, + L"PrintersFolder", NULL, -IDI_SHELL_PRINTERS_FOLDER }, @@ -1151,7 +1151,7 @@ static const CSIDL_DATA CSIDL_Data[] = { /* 0x0a - CSIDL_BITBUCKET - Recycle Bin */ &FOLDERID_RecycleBinFolder, CSIDL_Type_Disallowed, - NULL, + L"RecycleBinFolder", NULL }, { /* 0x0b - CSIDL_STARTMENU */ @@ -1210,14 +1210,14 @@ static const CSIDL_DATA CSIDL_Data[] = { /* 0x11 - CSIDL_DRIVES */ &FOLDERID_ComputerFolder, CSIDL_Type_Disallowed, - NULL, + L"MyComputerFolder", NULL, -IDI_SHELL_COMPUTER_FOLDER }, { /* 0x12 - CSIDL_NETWORK */ &FOLDERID_NetworkFolder, CSIDL_Type_Disallowed, - NULL, + L"NetworkPlacesFolder", NULL, -IDI_SHELL_NETWORK_FOLDER }, @@ -1341,21 +1341,21 @@ static const CSIDL_DATA CSIDL_Data[] = { /* 0x24 - CSIDL_WINDOWS */ &FOLDERID_Windows, CSIDL_Type_WindowsPath, - NULL, + L"Windows", NULL, -IDI_SHELL_SYSTEM_GEAR }, { /* 0x25 - CSIDL_SYSTEM */ &FOLDERID_System, CSIDL_Type_SystemPath, - NULL, + L"System", NULL, -IDI_SHELL_SYSTEM_GEAR }, { /* 0x26 - CSIDL_PROGRAM_FILES */ &FOLDERID_ProgramFiles, CSIDL_Type_CurrVer, - L"ProgramFilesDir", + L"ProgramFiles", MAKEINTRESOURCEW(IDS_PROGRAM_FILES), #ifdef __REACTOS__ 0 @@ -1390,21 +1390,21 @@ static const CSIDL_DATA CSIDL_Data[] = { /* 0x2a - CSIDL_PROGRAM_FILESX86 */ &FOLDERID_ProgramFilesX86, CSIDL_Type_CurrVer, - L"ProgramFilesDir (x86)", + L"ProgramFilesX86", L"Program Files (x86)", -IDI_SHELL_PROGRAMS_FOLDER }, { /* 0x2b - CSIDL_PROGRAM_FILES_COMMON */ &FOLDERID_ProgramFilesCommon, CSIDL_Type_CurrVer, - L"CommonFilesDir", + L"ProgramFilesCommon", MAKEINTRESOURCEW(IDS_PROGRAM_FILES_COMMON), -IDI_SHELL_PROGRAMS_FOLDER }, { /* 0x2c - CSIDL_PROGRAM_FILES_COMMONX86 */ &FOLDERID_ProgramFilesCommonX86, CSIDL_Type_CurrVer, - L"CommonFilesDir (x86)", + L"ProgramFilesCommonX86", L"Program Files (x86)\\Common Files", -IDI_SHELL_PROGRAMS_FOLDER }, @@ -1436,7 +1436,7 @@ static const CSIDL_DATA CSIDL_Data[] = { /* 0x31 - CSIDL_CONNECTIONS */ &FOLDERID_ConnectionsFolder, CSIDL_Type_Disallowed, - NULL, + L"ConnectionsFolder", NULL, -IDI_SHELL_NETWORK_CONNECTIONS }, @@ -1842,6 +1842,43 @@ static const CSIDL_DATA CSIDL_Data[] = #endif }; +INT SHGetSpecialFolderID(_In_ LPCWSTR pszName) +{ + UINT csidl; + + for (csidl = 0; csidl < _countof(CSIDL_Data); ++csidl) + { + const CSIDL_DATA *pData = &CSIDL_Data[csidl]; + if (pData->szValueName && lstrcmpiW(pszName, pData->szValueName) == 0) + return csidl; + } + + return -1; +} + +INT Shell_ParseSpecialFolder(_In_ LPCWSTR pszStart, _Out_ LPWSTR *ppch, _Out_ INT *pcch) +{ + LPCWSTR pszPath, pchBackslash; + WCHAR szPath[MAX_PATH]; + + pchBackslash = StrChrW(pszStart, L'\\'); + if (pchBackslash) + { + *ppch = (LPWSTR)(pchBackslash + 1); + *pcch = (pchBackslash - pszStart) + 1; + StrCpyNW(szPath, pszStart, max(*pcch, _countof(szPath))); + pszPath = szPath; + } + else + { + *ppch = NULL; + *pcch = lstrlenW(pszStart); + pszPath = pszStart; + } + + return SHGetSpecialFolderID(pszPath); +} + #ifndef __REACTOS__ static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest); #else diff --git a/sdk/include/psdk/shobjidl.idl b/sdk/include/psdk/shobjidl.idl index 7a75dff0f09..6b4bdadffc9 100644 --- a/sdk/include/psdk/shobjidl.idl +++ b/sdk/include/psdk/shobjidl.idl @@ -219,6 +219,12 @@ interface IShellFolder : IUnknown cpp_quote("#define SFGAO_STORAGECAPMASK 0x70C50008L") cpp_quote("#define SFGAO_PKEYSFGAOMASK 0x81044000L") + cpp_quote("#define STR_PARSE_SHELL_PROTOCOL_TO_FILE_OBJECTS L\"Parse Shell Protocol To File Objects\"") + cpp_quote("#define STR_FILE_SYS_BIND_DATA L\"File System Bind Data\"") + cpp_quote("#define STR_PARSE_PREFER_FOLDER_BROWSING L\"Parse Prefer Folder Browsing\"") + cpp_quote("#define STR_PARSE_TRANSLATE_ALIASES L\"Parse Translate Aliases\"") + cpp_quote("#define STR_DONT_PARSE_RELATIVE L\"Don't Parse Relative\"") + typedef ULONG SFGAOF; HRESULT ParseDisplayName( diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index ff2f81f9e04..fd1ac3f3c82 100644 --- a/sdk/include/reactos/shlwapi_undoc.h +++ b/sdk/include/reactos/shlwapi_undoc.h @@ -322,6 +322,8 @@ IContextMenu_Invoke( _In_ LPCSTR lpVerb, _In_ UINT uFlags); +DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid); + #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ From 109b84826e8fbb905239083a4c1ab41bb467c885 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 12 Mar 2024 18:52:36 +0200 Subject: [PATCH 15/44] [UDFS] Remove packing around include of ntifs.h This is not just wrong, it is criminal. --- drivers/filesystems/udfs/udffs.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/filesystems/udfs/udffs.h b/drivers/filesystems/udfs/udffs.h index fd310f25fb5..e51a2cfef51 100644 --- a/drivers/filesystems/udfs/udffs.h +++ b/drivers/filesystems/udfs/udffs.h @@ -107,10 +107,8 @@ // Common include files - should be in the include dir of the MS supplied IFS Kit #ifndef _CONSOLE extern "C" { -#pragma pack(push, 8) #include "ntifs.h" #include "ntifs_ex.h" -#pragma pack(pop) } #endif //_CONSOLE From f5e54015ee8617e729814ba22c4a3eda1e19b66d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 14 Mar 2024 20:07:38 +0200 Subject: [PATCH 16/44] [KS] Fix a bug found by GCC 13 --- drivers/ksfilter/ks/filter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ksfilter/ks/filter.c b/drivers/ksfilter/ks/filter.c index 59bc676745d..7dc344680ee 100644 --- a/drivers/ksfilter/ks/filter.c +++ b/drivers/ksfilter/ks/filter.c @@ -168,7 +168,7 @@ IKsProcessingObject_fnProcessingObjectWork( { /* check if the and-gate has been enabled again */ - if (&This->Gate.Count != 0) + if (This->Gate.Count != 0) { /* gate is open */ DPRINT1("processing object gate open\n"); From bedc16d46d3f64cd368aa2fcc60d5e17981c6990 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 9 Mar 2024 18:32:08 +0200 Subject: [PATCH 17/44] [DEVMGR] Add DYNAMIC_FIELD_OFFSET macro This replaces the usage of FIELD_OFFSET for dynamic indexing into array fields. Sadly GCC has broken __builtin_offsetof and they don't seem to intend to fix it. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95942 --- dll/win32/devmgr/precomp.h | 4 +++- dll/win32/devmgr/properties/hwpage.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dll/win32/devmgr/precomp.h b/dll/win32/devmgr/precomp.h index 1ca2f4b1111..2165d4bf12b 100644 --- a/dll/win32/devmgr/precomp.h +++ b/dll/win32/devmgr/precomp.h @@ -76,6 +76,8 @@ OUT LPDWORD lpReboot); #include #include +#define DYNAMIC_FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field)) + //WINE_DEFAULT_DEBUG_CHANNEL(devmgr); -#endif \ No newline at end of file +#endif diff --git a/dll/win32/devmgr/properties/hwpage.cpp b/dll/win32/devmgr/properties/hwpage.cpp index 8fb4161c910..9bd2c7ab05a 100644 --- a/dll/win32/devmgr/properties/hwpage.cpp +++ b/dll/win32/devmgr/properties/hwpage.cpp @@ -1030,8 +1030,8 @@ DeviceCreateHardwarePageEx(IN HWND hWndParent, failure cases! */ hpd = (PHARDWARE_PAGE_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, - FIELD_OFFSET(HARDWARE_PAGE_DATA, - ClassDevInfo[uNumberOfGuids])); + DYNAMIC_FIELD_OFFSET(HARDWARE_PAGE_DATA, + ClassDevInfo[uNumberOfGuids])); if (hpd != NULL) { HWND hWnd; From c69371cced3c7518efb30b7d0106d50d05b2636f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 9 Apr 2024 22:18:07 +0300 Subject: [PATCH 18/44] [NTOS:KE/x64] Improve KeGetTrapFrame --- ntoskrnl/include/internal/amd64/ke.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/include/internal/amd64/ke.h b/ntoskrnl/include/internal/amd64/ke.h index 7caf2b10d9a..b14e3eee840 100644 --- a/ntoskrnl/include/internal/amd64/ke.h +++ b/ntoskrnl/include/internal/amd64/ke.h @@ -206,8 +206,8 @@ KeGetTrapFrameFrameRegister(PKTRAP_FRAME TrapFrame) // Macro to get trap and exception frame from a thread stack // #define KeGetTrapFrame(Thread) \ - (PKTRAP_FRAME)((ULONG_PTR)((Thread)->InitialStack) - \ - sizeof(KTRAP_FRAME)) + ((PKTRAP_FRAME)((ULONG_PTR)((Thread)->InitialStack) - \ + sizeof(KTRAP_FRAME))) // // Macro to get context switches from the PRCB From 7a810c17e7f7da09a75b47c8cd7bfd973083f730 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 10 Apr 2024 23:29:26 +0200 Subject: [PATCH 19/44] [SHELL32] Implement several ShellDispatch methods (#6145) * Implement most of the methods * Some suggested changes and better error handling (that I then mask like Windows) --- dll/win32/shell32/CShellDispatch.cpp | 232 +++++++++++++++++++++++---- sdk/include/reactos/shellutils.h | 6 + 2 files changed, 204 insertions(+), 34 deletions(-) diff --git a/dll/win32/shell32/CShellDispatch.cpp b/dll/win32/shell32/CShellDispatch.cpp index 7df94e0ae04..848318b7d35 100644 --- a/dll/win32/shell32/CShellDispatch.cpp +++ b/dll/win32/shell32/CShellDispatch.cpp @@ -4,6 +4,7 @@ * PURPOSE: IShellDispatch implementation * COPYRIGHT: Copyright 2015-2018 Mark Jansen (mark.jansen@reactos.org) * Copyright 2018 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) + * Copyright 2023 Whindmar Saksit (whindsaks@proton.me) */ #include "precomp.h" @@ -12,6 +13,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); +EXTERN_C DWORD WINAPI SHGetRestriction(LPCWSTR lpSubKey, LPCWSTR lpSubName, LPCWSTR lpValue); + +static HRESULT PostTrayCommand(UINT cmd) +{ + HWND hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL); + return hTrayWnd && PostMessageW(hTrayWnd, WM_COMMAND, cmd, 0) ? S_OK : S_FALSE; +} + CShellDispatch::CShellDispatch() { } @@ -54,7 +63,7 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::get_Parent(IDispatch **ppid) HRESULT VariantToIdlist(VARIANT* var, LPITEMIDLIST* idlist) { - HRESULT hr = S_FALSE; + HRESULT hr = E_FAIL; if(V_VT(var) == VT_I4) { hr = SHGetSpecialFolderLocation(NULL, V_I4(var), idlist); @@ -83,7 +92,7 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::NameSpace(VARIANT vDir, Folder **ppsdf CComHeapPtr idlist; hr = VariantToIdlist(&vDir, &idlist); - if (!SUCCEEDED(hr) || !idlist) + if (!SUCCEEDED(hr)) return S_FALSE; return ShellObjectCreatorInit(static_cast(idlist), IID_PPV_ARG(Folder, ppsdf)); @@ -100,13 +109,14 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::BrowseForFolder(LONG Hwnd, BSTR Title, *ppsdf = NULL; - if (!is_optional_argument(&RootFolder)) - FIXME("root folder is ignored\n"); - BROWSEINFOW bi = { 0 }; bi.hwndOwner = reinterpret_cast(LongToHandle(Hwnd)); bi.lpszTitle = Title; - bi.ulFlags = Options; + bi.ulFlags = Options | BIF_NEWDIALOGSTYLE; + + CComHeapPtr idlist; + if (!is_optional_argument(&RootFolder) && VariantToIdlist(&RootFolder, &idlist) == S_OK) + bi.pidlRoot = idlist; CComHeapPtr selection; selection.Attach(SHBrowseForFolderW(&bi)); @@ -119,58 +129,82 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::BrowseForFolder(LONG Hwnd, BSTR Title, HRESULT STDMETHODCALLTYPE CShellDispatch::Windows(IDispatch **ppid) { TRACE("(%p, %p)\n", this, ppid); + return CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARG(IDispatch, ppid)); +} - *ppid = NULL; +static HRESULT SHELL_OpenFolder(LPCITEMIDLIST pidl, LPCWSTR verb = NULL) +{ + SHELLEXECUTEINFOW sei; + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_IDLIST | SEE_MASK_FLAG_DDEWAIT; + sei.hwnd = NULL; + sei.lpVerb = verb; + sei.lpFile = sei.lpParameters = sei.lpDirectory = NULL; + sei.nShow = SW_SHOW; + sei.lpIDList = const_cast(pidl); + if (ShellExecuteExW(&sei)) + return S_OK; + DWORD error = GetLastError(); + return HRESULT_FROM_WIN32(error); +} - return E_NOTIMPL; +static HRESULT OpenFolder(VARIANT vDir, LPCWSTR verb = NULL) +{ + CComHeapPtr idlist; + HRESULT hr = VariantToIdlist(&vDir, &idlist); + if (hr == S_OK && SHELL_OpenFolder(idlist, verb) == S_OK) + { + return S_OK; + } + return S_FALSE; } HRESULT STDMETHODCALLTYPE CShellDispatch::Open(VARIANT vDir) { TRACE("(%p, %s)\n", this, debugstr_variant(&vDir)); - return E_NOTIMPL; + return OpenFolder(vDir); } HRESULT STDMETHODCALLTYPE CShellDispatch::Explore(VARIANT vDir) { TRACE("(%p, %s)\n", this, debugstr_variant(&vDir)); - return E_NOTIMPL; + return OpenFolder(vDir, L"explore"); } HRESULT STDMETHODCALLTYPE CShellDispatch::MinimizeAll() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_MINIMIZE_ALL); } HRESULT STDMETHODCALLTYPE CShellDispatch::UndoMinimizeALL() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_RESTORE_ALL); } HRESULT STDMETHODCALLTYPE CShellDispatch::FileRun() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_RUN_DIALOG); } HRESULT STDMETHODCALLTYPE CShellDispatch::CascadeWindows() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_CASCADE); } HRESULT STDMETHODCALLTYPE CShellDispatch::TileVertically() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_TILE_V); } HRESULT STDMETHODCALLTYPE CShellDispatch::TileHorizontally() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_TILE_H); } HRESULT STDMETHODCALLTYPE CShellDispatch::ShutdownWindows() @@ -194,31 +228,31 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::EjectPC() HRESULT STDMETHODCALLTYPE CShellDispatch::SetTime() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_DATE_AND_TIME); } HRESULT STDMETHODCALLTYPE CShellDispatch::TrayProperties() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_TASKBAR_PROPERTIES); } HRESULT STDMETHODCALLTYPE CShellDispatch::Help() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_HELP_AND_SUPPORT); } HRESULT STDMETHODCALLTYPE CShellDispatch::FindFiles() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_SEARCH_FILES); } HRESULT STDMETHODCALLTYPE CShellDispatch::FindComputer() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(TRAYCMD_SEARCH_COMPUTERS); } HRESULT STDMETHODCALLTYPE CShellDispatch::RefreshMenu() @@ -230,7 +264,7 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::RefreshMenu() HRESULT STDMETHODCALLTYPE CShellDispatch::ControlPanelItem(BSTR szDir) { TRACE("(%p, %ls)\n", this, szDir); - return E_NOTIMPL; + return SHRunControlPanel(szDir, NULL) ? S_OK : S_FALSE; } @@ -238,7 +272,11 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::ControlPanelItem(BSTR szDir) HRESULT STDMETHODCALLTYPE CShellDispatch::IsRestricted(BSTR group, BSTR restriction, LONG *value) { TRACE("(%p, %ls, %ls, %p)\n", this, group, restriction, value); - return E_NOTIMPL; + + if (!value) + return E_INVALIDARG; + *value = SHGetRestriction(NULL, group, restriction); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellDispatch::ShellExecute(BSTR file, VARIANT v_args, VARIANT v_dir, VARIANT v_op, VARIANT v_show) @@ -281,19 +319,109 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::FindPrinter(BSTR name, BSTR location, HRESULT STDMETHODCALLTYPE CShellDispatch::GetSystemInformation(BSTR name, VARIANT *ret) { TRACE("(%p, %ls, %p)\n", this, name, ret); + + if (!lstrcmpiW(name, L"ProcessorArchitecture")) + { + SYSTEM_INFO si; + GetSystemInfo(&si); + V_VT(ret) = VT_I4; + V_UI4(ret) = si.wProcessorArchitecture; + return S_OK; + } + + UINT os = 0; + if (!lstrcmpiW(name, L"IsOS_Professional")) + os = OS_PROFESSIONAL; + else if (!lstrcmpiW(name, L"IsOS_Personal")) + os = OS_HOME; + else if (!lstrcmpiW(name, L"IsOS_DomainMember")) + os = OS_DOMAINMEMBER; + if (os) + { + V_VT(ret) = VT_BOOL; + V_BOOL(ret) = IsOS(os) ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; + } + return E_NOTIMPL; } +static HRESULT OpenServiceHelper(LPCWSTR name, DWORD access, SC_HANDLE &hSvc) +{ + hSvc = NULL; + SC_HANDLE hScm = OpenSCManagerW(NULL, NULL, SC_MANAGER_CONNECT); + if (!hScm) + return HResultFromWin32(GetLastError()); + HRESULT hr = S_OK; + hSvc = OpenServiceW(hScm, name, access); + if (!hSvc) + hr = HResultFromWin32(GetLastError()); + CloseServiceHandle(hScm); + return hr; +} + +static HRESULT SHELL32_ControlService(BSTR name, DWORD control, VARIANT &persistent) +{ + BOOL persist = V_VT(&persistent) == VT_BOOL && V_BOOL(&persistent); + DWORD access = persist ? SERVICE_CHANGE_CONFIG : 0; + switch (control) + { + case 0: + access |= SERVICE_START; + break; + case SERVICE_CONTROL_STOP: + access |= SERVICE_STOP; + break; + } + SC_HANDLE hSvc; + HRESULT hr = OpenServiceHelper(name, access, hSvc); + if (SUCCEEDED(hr)) + { + BOOL success; + DWORD error, already; + if (control) + { + SERVICE_STATUS ss; + success = ControlService(hSvc, control, &ss); + error = GetLastError(); + already = ERROR_SERVICE_NOT_ACTIVE; + } + else + { + success = StartService(hSvc, 0, NULL); + error = GetLastError(); + already = ERROR_SERVICE_ALREADY_RUNNING; + } + hr = success ? S_OK : error == already ? S_FALSE : HRESULT_FROM_WIN32(error); + if (SUCCEEDED(hr) && persist) + { + ChangeServiceConfigW(hSvc, SERVICE_NO_CHANGE, + control ? SERVICE_DEMAND_START : SERVICE_AUTO_START, + SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + } + CloseServiceHandle(hSvc); + } + return hr; +} + HRESULT STDMETHODCALLTYPE CShellDispatch::ServiceStart(BSTR service, VARIANT persistent, VARIANT *ret) { TRACE("(%p, %ls, %s, %p)\n", this, service, wine_dbgstr_variant(&persistent), ret); - return E_NOTIMPL; + + HRESULT hr = SHELL32_ControlService(service, 0, persistent); + V_VT(ret) = VT_BOOL; + V_BOOL(ret) = (hr == S_OK ? VARIANT_TRUE : VARIANT_FALSE); + return hr == S_OK ? S_OK : S_FALSE; } HRESULT STDMETHODCALLTYPE CShellDispatch::ServiceStop(BSTR service, VARIANT persistent, VARIANT *ret) { TRACE("(%p, %ls, %s, %p)\n", this, service, wine_dbgstr_variant(&persistent), ret); - return E_NOTIMPL; + + HRESULT hr = SHELL32_ControlService(service, SERVICE_CONTROL_STOP, persistent); + V_VT(ret) = VT_BOOL; + V_BOOL(ret) = (hr == S_OK ? VARIANT_TRUE : VARIANT_FALSE); + return hr == S_OK ? S_OK : S_FALSE; } HRESULT STDMETHODCALLTYPE CShellDispatch::IsServiceRunning(BSTR name, VARIANT *running) @@ -343,7 +471,14 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::IsServiceRunning(BSTR name, VARIANT *r HRESULT STDMETHODCALLTYPE CShellDispatch::CanStartStopService(BSTR service, VARIANT *ret) { TRACE("(%p, %ls, %p)\n", this, service, ret); - return E_NOTIMPL; + + SC_HANDLE hSvc; + HRESULT hr = OpenServiceHelper(service, SERVICE_START | SERVICE_STOP, hSvc); + if (SUCCEEDED(hr)) + CloseServiceHandle(hSvc); + V_VT(ret) = VT_BOOL; + V_BOOL(ret) = (hr == S_OK ? VARIANT_TRUE : VARIANT_FALSE); + return S_OK; } HRESULT STDMETHODCALLTYPE CShellDispatch::ShowBrowserBar(BSTR clsid, VARIANT show, VARIANT *ret) @@ -357,25 +492,29 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::ShowBrowserBar(BSTR clsid, VARIANT sho HRESULT STDMETHODCALLTYPE CShellDispatch::AddToRecent(VARIANT file, BSTR category) { TRACE("(%p, %s, %ls)\n", this, wine_dbgstr_variant(&file), category); - return E_NOTIMPL; + + CComHeapPtr idlist; + HRESULT hr = VariantToIdlist(&file, &idlist); + if (hr == S_OK) + SHAddToRecentDocs(SHARD_PIDL, (LPCITEMIDLIST)idlist); + else + hr = S_FALSE; + return hr; } // *** IShellDispatch4 methods *** +#define IDM_SECURITY 5001 // From base/shell/explorer/resource.h HRESULT STDMETHODCALLTYPE CShellDispatch::WindowsSecurity() { TRACE("(%p)\n", this); - return E_NOTIMPL; + return PostTrayCommand(IDM_SECURITY); } HRESULT STDMETHODCALLTYPE CShellDispatch::ToggleDesktop() { TRACE("(%p)\n", this); - - HWND hTrayWnd = FindWindowW(L"Shell_TrayWnd", NULL); - PostMessageW(hTrayWnd, WM_COMMAND, TRAYCMD_TOGGLE_DESKTOP, 0); - - return S_OK; + return PostTrayCommand(TRAYCMD_TOGGLE_DESKTOP); } HRESULT STDMETHODCALLTYPE CShellDispatch::ExplorerPolicy(BSTR policy, VARIANT *value) @@ -384,10 +523,35 @@ HRESULT STDMETHODCALLTYPE CShellDispatch::ExplorerPolicy(BSTR policy, VARIANT *v return E_NOTIMPL; } +#ifndef SSF_SERVERADMINUI +#define SSF_SERVERADMINUI 4 +#endif HRESULT STDMETHODCALLTYPE CShellDispatch::GetSetting(LONG setting, VARIANT_BOOL *result) { TRACE("(%p, %lu, %p)\n", this, setting, result); - return E_NOTIMPL; + + int flag = -1; + SHELLSTATE ss = { }; + SHGetSetSettings(&ss, setting, FALSE); + switch (setting) + { + case SSF_SHOWALLOBJECTS: flag = ss.fShowAllObjects; break; + case SSF_SHOWEXTENSIONS: flag = ss.fShowExtensions; break; + case SSF_SHOWSYSFILES: flag = ss.fShowSysFiles; break; + case SSF_DONTPRETTYPATH: flag = ss.fDontPrettyPath; break; + case SSF_NOCONFIRMRECYCLE: flag = ss.fNoConfirmRecycle; break; + case SSF_SHOWSUPERHIDDEN: flag = ss.fShowSuperHidden; break; + case SSF_SEPPROCESS: flag = ss.fSepProcess; break; + case SSF_STARTPANELON: flag = ss.fStartPanelOn; break; + case SSF_SERVERADMINUI: flag = IsOS(OS_SERVERADMINUI); break; + } + if (flag >= 0) + { + *result = flag ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; + } + + return S_FALSE; } diff --git a/sdk/include/reactos/shellutils.h b/sdk/include/reactos/shellutils.h index 674221fc106..c678e3382c4 100644 --- a/sdk/include/reactos/shellutils.h +++ b/sdk/include/reactos/shellutils.h @@ -67,6 +67,12 @@ Win32DbgPrint(const char *filename, int line, const char *lpFormat, ...) # define IID_NULL_PPV_ARG(Itype, ppType) IID_##Itype, NULL, (void**)(ppType) #endif +inline HRESULT HResultFromWin32(DWORD hr) +{ + // HRESULT_FROM_WIN32 will evaluate its parameter twice, this function will not. + return HRESULT_FROM_WIN32(hr); +} + #if 1 inline BOOL _ROS_FAILED_HELPER(HRESULT hr, const char* expr, const char* filename, int line) From d72d61fe475bc1419d1bd98a4cfacc15bc8b67d1 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Thu, 11 Apr 2024 00:56:04 +0200 Subject: [PATCH 20/44] [COMDLG32] *.rc Improve translations (#6729) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First an foremost this fixes "the copies-icon in the print-dlg not showing" for Taiwan as well. That part is an addendum to 0.4.15-dev-3493-g a36cc8054d266b75ad3bb53cf0a5ab8d72a412c9 (#2831) Taiwan is untypically placed in cdlg_Zh.rc as well for comdlg, next to the traditional chinese version and therefore was forgotten. Furthermore improve many translations a little bit, where strings could be stolen from neighbor controls. This part focuses mostly on the NEWFILEOPENV2ORD. Then add many FIXMEs for existing accelerator collisions, many of them were introduced by adding the "Help"-button retrospectively, when other translations existed already. Let the native speakers handle them later. Strip accelerators from some "Cancel" buttons, e.g. in cdlg_Pt.rc, and the "Save as" button, e.g. within cdlg_Es.rc as those should not exist, which most languages did properly respect already. Also fix a few text truncations and a few accelerators, e.g. for de-DE: stc3 was cutoff, and "Öffnen" had the wrong accelerator. --- dll/win32/comdlg32/lang/cdlg_Bg.rc | 18 +++++------ dll/win32/comdlg32/lang/cdlg_Cs.rc | 20 ++++++------ dll/win32/comdlg32/lang/cdlg_Da.rc | 14 ++++---- dll/win32/comdlg32/lang/cdlg_De.rc | 28 ++++++++-------- dll/win32/comdlg32/lang/cdlg_Eo.rc | 12 +++---- dll/win32/comdlg32/lang/cdlg_Es.rc | 10 +++--- dll/win32/comdlg32/lang/cdlg_Et.rc | 8 ++--- dll/win32/comdlg32/lang/cdlg_Fi.rc | 34 +++++++++---------- dll/win32/comdlg32/lang/cdlg_Hi.rc | 2 +- dll/win32/comdlg32/lang/cdlg_It.rc | 12 +++---- dll/win32/comdlg32/lang/cdlg_Ko.rc | 18 +++++------ dll/win32/comdlg32/lang/cdlg_Lt.rc | 16 ++++----- dll/win32/comdlg32/lang/cdlg_Nl.rc | 4 +-- dll/win32/comdlg32/lang/cdlg_No.rc | 14 ++++---- dll/win32/comdlg32/lang/cdlg_Pl.rc | 4 +-- dll/win32/comdlg32/lang/cdlg_Pt.rc | 52 +++++++++++++++--------------- dll/win32/comdlg32/lang/cdlg_Ro.rc | 6 ++-- dll/win32/comdlg32/lang/cdlg_Si.rc | 14 ++++---- dll/win32/comdlg32/lang/cdlg_Sk.rc | 30 ++++++++--------- dll/win32/comdlg32/lang/cdlg_Sq.rc | 12 +++---- dll/win32/comdlg32/lang/cdlg_Sr.rc | 16 ++++----- dll/win32/comdlg32/lang/cdlg_Sv.rc | 18 +++++------ dll/win32/comdlg32/lang/cdlg_Th.rc | 4 +-- dll/win32/comdlg32/lang/cdlg_Tr.rc | 16 ++++----- dll/win32/comdlg32/lang/cdlg_Uk.rc | 12 +++---- dll/win32/comdlg32/lang/cdlg_Zh.rc | 2 +- 26 files changed, 198 insertions(+), 198 deletions(-) diff --git a/dll/win32/comdlg32/lang/cdlg_Bg.rc b/dll/win32/comdlg32/lang/cdlg_Bg.rc index 16ad5b98878..61b4b651c27 100644 --- a/dll/win32/comdlg32/lang/cdlg_Bg.rc +++ b/dll/win32/comdlg32/lang/cdlg_Bg.rc @@ -458,7 +458,7 @@ FONT 8, "MS Shell Dlg" LTEXT "" , IDC_TOOLBARSTATIC, 181, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "&Име на файл:",IDC_FILENAMESTATIC,5,112,56,16, SS_NOTIFY + LTEXT "&Файл:",IDC_FILENAMESTATIC,5,112,56,16, SS_NOTIFY EDITTEXT IDC_FILENAME,63,110,150,12,ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 63,110,150,150 @@ -474,28 +474,28 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Отвори" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "М&ясто:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "&Файл:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "&Тип файлове:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "Само за &четене", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "&Отвори", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Отмени", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Помощ", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Cs.rc b/dll/win32/comdlg32/lang/cdlg_Cs.rc index d2af78bd5de..d09f79a18eb 100644 --- a/dll/win32/comdlg32/lang/cdlg_Cs.rc +++ b/dll/win32/comdlg32/lang/cdlg_Cs.rc @@ -458,7 +458,7 @@ FONT 8, "MS Shell Dlg" LTEXT "" , IDC_TOOLBARSTATIC, 181, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "&Název souboru:",IDC_FILENAMESTATIC,5,112,56,16, SS_NOTIFY + LTEXT "&Název souboru:",IDC_FILENAMESTATIC,5,112,56,16, SS_NOTIFY //FIXME: accelerator collision &N EDITTEXT IDC_FILENAME,63,110,150,12,ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 63,110,150,150 @@ -469,15 +469,15 @@ FONT 8, "MS Shell Dlg" DEFPUSHBUTTON "&Otevřít", IDOK,222,110,54,14 PUSHBUTTON "Storno", IDCANCEL,222,128,54,14 - PUSHBUTTON "&Nápověda", pshHelp,222,145,54,14 + PUSHBUTTON "&Nápověda", pshHelp,222,145,54,14 //FIXME: accelerator collision &N } NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Otevřít" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "Náh&led:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE @@ -488,13 +488,13 @@ FONT 8, "MS Shell Dlg" EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "Soubory &typu:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "Jen ke čt&ení", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 + DEFPUSHBUTTON "&Otevřít", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Storno", IDCANCEL, 310, 198, 54, 14 PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 } @@ -504,7 +504,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS CAPTION "Otevřít" FONT 8, "MS Shell Dlg" { - LTEXT "&Název souboru:", IDC_FILENAMESTATIC, 160, 240, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS + LTEXT "&Název souboru:", IDC_FILENAMESTATIC, 160, 240, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS //FIXME: accelerator collision &N EDITTEXT IDC_FILENAME, 226, 240, 100, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS | ES_AUTOHSCROLL LTEXT "Soubory &typu:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS @@ -518,5 +518,5 @@ FONT 8, "MS Shell Dlg" BS_CHECKBOX | BS_PUSHLIKE, 342, 240, 8, 14 PUSHBUTTON "Storno", IDCANCEL, 395, 240, 40, 14, WS_CLIPSIBLINGS - PUSHBUTTON "&Nápověda", pshHelp, 350, 272, 40, 14, WS_CLIPSIBLINGS + PUSHBUTTON "&Nápověda", pshHelp, 350, 272, 40, 14, WS_CLIPSIBLINGS //FIXME: accelerator collision &N } diff --git a/dll/win32/comdlg32/lang/cdlg_Da.rc b/dll/win32/comdlg32/lang/cdlg_Da.rc index 6d25889524b..0a7c8e39951 100644 --- a/dll/win32/comdlg32/lang/cdlg_Da.rc +++ b/dll/win32/comdlg32/lang/cdlg_Da.rc @@ -474,28 +474,28 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Åben" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "Kig &i:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "&Filnavn:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "Fil&type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "&Åbn", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Annuller", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Hjælp", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_De.rc b/dll/win32/comdlg32/lang/cdlg_De.rc index 25c3ab0fc39..8e972e4db37 100644 --- a/dll/win32/comdlg32/lang/cdlg_De.rc +++ b/dll/win32/comdlg32/lang/cdlg_De.rc @@ -160,7 +160,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP LTEXT "&Laufwerke:", stc4, 110, 104, 92, 9 COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "Öffnen", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Ö&ffnen", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Abbrechen", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Hilfe", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP CHECKBOX "&Schreibgeschützt", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP @@ -232,7 +232,7 @@ FONT 8, "MS Shell Dlg" ICON "PORTRAIT", stc11, 10, 95, 32, 32 GROUPBOX "Papier", grp3, 116, 82, 178, 50, BS_GROUPBOX LTEXT "&Größe", stc2, 126, 95, 35, 9 - LTEXT "P&apierquelle", stc3, 126, 110, 35, 9 + LTEXT "&Zufuhr", stc3, 126, 110, 35, 9 COMBOBOX cmb2, 155, 95, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP COMBOBOX cmb3, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP } @@ -467,35 +467,35 @@ FONT 8, "MS Shell Dlg" CONTROL "Schreibgeschüt&zt",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,63,148,150,10 - DEFPUSHBUTTON "&Öffnen", IDOK,222,110,54,14 + DEFPUSHBUTTON "Ö&ffnen", IDOK,222,110,54,14 PUSHBUTTON "Abbrechen", IDCANCEL,222,128,54,14 PUSHBUTTON "&Hilfe", pshHelp,222,145,54,14 } NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Öffnen" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "&Suche in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "Datei&name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "Datei&typen:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "Schreibgeschüt&zt", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "Ö&ffnen", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Abbrechen", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Hilfe", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 @@ -504,14 +504,14 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS CAPTION "Öffnen" FONT 8, "MS Shell Dlg" { - LTEXT "Dateiname:", IDC_FILENAMESTATIC, 160, 240, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS + LTEXT "Datei&name:", IDC_FILENAMESTATIC, 160, 240, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS EDITTEXT IDC_FILENAME, 226, 240, 100, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS | ES_AUTOHSCROLL - LTEXT "Dateien vom Typ:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS + LTEXT "Datei&typen:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS COMBOBOX IDC_FILETYPE, 226, 256, 100, 60, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | WS_CLIPSIBLINGS | CBS_HASSTRINGS | CBS_DROPDOWNLIST - DEFPUSHBUTTON "&Öffnen", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS + DEFPUSHBUTTON "Ö&ffnen", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS /* drop-down menu for open button */ CONTROL "6", psh1, "Button", WS_CHILD | WS_CLIPSIBLINGS | WS_GROUP | WS_TABSTOP | diff --git a/dll/win32/comdlg32/lang/cdlg_Eo.rc b/dll/win32/comdlg32/lang/cdlg_Eo.rc index 10f42bc3def..b96f4f16a41 100644 --- a/dll/win32/comdlg32/lang/cdlg_Eo.rc +++ b/dll/win32/comdlg32/lang/cdlg_Eo.rc @@ -477,25 +477,25 @@ STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPC CAPTION "Open" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "Serĉu &en:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "Dosier&nomo:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "Dosier&speco:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "Nur &legebla", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + PUSHBUTTON "Rezigni", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Helpo", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Es.rc b/dll/win32/comdlg32/lang/cdlg_Es.rc index e9f4c6dabfd..cbd7a9dc8ca 100644 --- a/dll/win32/comdlg32/lang/cdlg_Es.rc +++ b/dll/win32/comdlg32/lang/cdlg_Es.rc @@ -156,7 +156,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Abrir" FONT 8, "MS Shell Dlg" { - LTEXT "&Nombre de archivo:", stc3, 6, 6, 76, 9 + LTEXT "&Nombre de archivo:", stc3, 6, 6, 76, 9 //FIXME: accelerator collision &N EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP LISTBOX lst1, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "&Directorios:", -1, 110, 6, 92, 9 @@ -164,7 +164,7 @@ FONT 8, "MS Shell Dlg" LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "Mostrar archivos de &tipo:", stc2, 6, 104, 90, 9 COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - LTEXT "U&nidades:", stc4, 110, 104, 92, 9 + LTEXT "U&nidades:", stc4, 110, 104, 92, 9 //FIXME: accelerator collision &N COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "&Abrir", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP @@ -188,7 +188,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP LTEXT "U&nidades:", stc4, 110, 104, 92, 9 COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "&Guardar como", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Guardar como", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "A&yuda", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP CHECKBOX "Sólo &lectura", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP @@ -324,7 +324,7 @@ FONT 8, "MS Shell Dlg" CONTROL "A&bajo", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 151, 44, 48, 12 DEFPUSHBUTTON "Buscar &siguiente", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "&Cancelar", IDCANCEL , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "A&yuda", pshHelp , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP } @@ -344,7 +344,7 @@ FONT 8, "MS Shell Dlg" DEFPUSHBUTTON "Buscar &siguiente", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "&Reemplazar", psh1 , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Reemplazar &todo", psh2 , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL , 212, 60, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL , 212, 60, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "A&yuda", pshHelp , 212, 78, 60, 14, WS_GROUP | WS_TABSTOP } diff --git a/dll/win32/comdlg32/lang/cdlg_Et.rc b/dll/win32/comdlg32/lang/cdlg_Et.rc index a937d200232..8edf1a25918 100644 --- a/dll/win32/comdlg32/lang/cdlg_Et.rc +++ b/dll/win32/comdlg32/lang/cdlg_Et.rc @@ -390,7 +390,7 @@ CAPTION "Printimise seadistus" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK",IDOK,176,156,50,14,WS_GROUP - PUSHBUTTON "Cancel",IDCANCEL,230,156,50,14 + PUSHBUTTON "Loobu",IDCANCEL,230,156,50,14 /* PUSHBUTTON "Network...", psh5, 284,156,48,14 */ GROUPBOX "Printer", grp4, 8, 4, 272,84, WS_GROUP @@ -475,7 +475,7 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Ava" FONT 8, "MS Shell Dlg" { LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY @@ -495,8 +495,8 @@ FONT 8, "MS Shell Dlg" CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + PUSHBUTTON "Loobu", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Abi", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Fi.rc b/dll/win32/comdlg32/lang/cdlg_Fi.rc index da2e258a7c7..e95da5c83da 100644 --- a/dll/win32/comdlg32/lang/cdlg_Fi.rc +++ b/dll/win32/comdlg32/lang/cdlg_Fi.rc @@ -158,11 +158,11 @@ FONT 8, "MS Shell Dlg" LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "&Luettele tiedostot tyypeittäin:", stc2, 6, 104, 90, 9 COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - LTEXT "&Asemat:", stc4, 110, 104, 92, 9 + LTEXT "&Asemat:", stc4, 110, 104, 92, 9 //FIXME: accelerator collision &A COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Avaa", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Peruuta", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Apua", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Apua", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A CHECKBOX "&Vain luku", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } @@ -180,11 +180,11 @@ FONT 8, "MS Shell Dlg" LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "&Luettele tiedostot tyypeittäin:", stc2, 6, 104, 90, 9 COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - LTEXT "&Asemat:", stc4, 110, 104, 92, 9 + LTEXT "&Asemat:", stc4, 110, 104, 92, 9 //FIXME: accelerator collision &A COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Tallenna nimellä", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Peruuta", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Apua", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Apua", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A CHECKBOX "&Vain luku", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } @@ -315,11 +315,11 @@ FONT 8, "MS Shell Dlg" CHECKBOX "Kirjaink&oko", chx2, 4, 42, 140, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "Suunta", grp1, 147, 21, 58, 38 CONTROL "&Ylös", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 151, 30, 48, 12 - CONTROL "&Alas", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 151, 44, 48, 12 + CONTROL "&Alas", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 151, 44, 48, 12 //FIXME: accelerator collision &A DEFPUSHBUTTON "Etsi &seuraava", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "Peruuta", IDCANCEL , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Apua", pshHelp , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Apua", pshHelp , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A } @@ -336,10 +336,10 @@ FONT 8, "MS Shell Dlg" CHECKBOX "Kirjaink&oko", chx2, 5, 62, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP DEFPUSHBUTTON "Etsi &seuraava", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "Korv&aa", psh1 , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Korv&aa", psh1 , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A PUSHBUTTON "Korvaa ka&ikki", psh2 , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Peruuta", IDCANCEL , 212, 60, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Apua", pshHelp , 212, 78, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Apua", pshHelp , 212, 78, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A } @@ -467,9 +467,9 @@ FONT 8, "MS Shell Dlg" CONTROL "Avaa vain &lukuoikeuksilla",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,63,148,150,10 - DEFPUSHBUTTON "&Avaa", IDOK,222,110,54,14 + DEFPUSHBUTTON "&Avaa", IDOK,222,110,54,14 //FIXME: accelerator collision &A PUSHBUTTON "Peruuta", IDCANCEL,222,128,54,14 - PUSHBUTTON "&Apua", pshHelp,222,145,54,14 + PUSHBUTTON "&Apua", pshHelp,222,145,54,14 //FIXME: accelerator collision &A } NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 @@ -484,18 +484,18 @@ FONT 8, "MS Shell Dlg" CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "&Nimi:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "&Tyyppi:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + PUSHBUTTON "Peruuta", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Apua", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 @@ -504,19 +504,19 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS CAPTION "Avaa" FONT 8, "MS Shell Dlg" { - LTEXT "&Tiedosto", IDC_FILENAMESTATIC, 160, 240, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS + LTEXT "&Nimi", IDC_FILENAMESTATIC, 160, 240, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS EDITTEXT IDC_FILENAME, 226, 240, 100, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS | ES_AUTOHSCROLL LTEXT "&Tyyppi:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS COMBOBOX IDC_FILETYPE, 226, 256, 100, 60, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | WS_CLIPSIBLINGS | CBS_HASSTRINGS | CBS_DROPDOWNLIST - DEFPUSHBUTTON "&Avaa", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS + DEFPUSHBUTTON "&Avaa", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS //FIXME: accelerator collision &A /* drop-down menu for open button */ CONTROL "6", psh1, "Button", WS_CHILD | WS_CLIPSIBLINGS | WS_GROUP | WS_TABSTOP | BS_CHECKBOX | BS_PUSHLIKE, 342, 240, 8, 14 PUSHBUTTON "Peruuta", IDCANCEL, 395, 240, 40, 14, WS_CLIPSIBLINGS - PUSHBUTTON "&Apua", pshHelp, 350, 272, 40, 14, WS_CLIPSIBLINGS + PUSHBUTTON "&Apua", pshHelp, 350, 272, 40, 14, WS_CLIPSIBLINGS //FIXME: accelerator collision &A } diff --git a/dll/win32/comdlg32/lang/cdlg_Hi.rc b/dll/win32/comdlg32/lang/cdlg_Hi.rc index 891ee7f3f6c..f0233199bbf 100644 --- a/dll/win32/comdlg32/lang/cdlg_Hi.rc +++ b/dll/win32/comdlg32/lang/cdlg_Hi.rc @@ -2,7 +2,7 @@ * PROJECT: Comdlg32 Hindi Translation * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: Hindi translation of Comdlg32 - * COPYRIGHT: Copyright 2019 Arnav Bhatt (arnavbhatt2004@gmail.com) + * COPYRIGHT: Copyright 2019 Arnav Bhatt */ LANGUAGE LANG_HINDI, SUBLANG_HINDI_INDIA diff --git a/dll/win32/comdlg32/lang/cdlg_It.rc b/dll/win32/comdlg32/lang/cdlg_It.rc index 88fde82524e..2281263c40c 100644 --- a/dll/win32/comdlg32/lang/cdlg_It.rc +++ b/dll/win32/comdlg32/lang/cdlg_It.rc @@ -254,8 +254,8 @@ FONT 8, "MS Shell Dlg" WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT DEFPUSHBUTTON "Ok",IDOK,218,6,50,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "Annulla",IDCANCEL,218,23,50,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Applica", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Aiuto" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Applica", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A + PUSHBUTTON "&Aiuto" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A GROUPBOX "Effetti",grp1,6,92,84,36,WS_GROUP CHECKBOX "&Barrato", chx1, 10,102,78,10, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "S&ottolineato", chx2, 10,114,78,10, BS_AUTOCHECKBOX @@ -351,7 +351,7 @@ FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "Ok", IDOK, 176,164, 50,14, WS_GROUP | BS_DEFPUSHBUTTON PUSHBUTTON "Annulla", IDCANCEL, 230,164, 50,14, WS_GROUP - PUSHBUTTON "&Aiuto", pshHelp, 50, 161, 50,14, WS_GROUP + PUSHBUTTON "&Aiuto", pshHelp, 50, 161, 50,14, WS_GROUP //FIXME: accelerator collision &A GROUPBOX "Stampante", grp4, 8, 4, 272,84, WS_GROUP CONTROL "Stampa su fi&le", chx1, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,185,36,90,16 @@ -380,7 +380,7 @@ FONT 8, "MS Shell Dlg" EDITTEXT edt1, 73,122, 26,12, WS_GROUP | ES_NUMBER EDITTEXT edt2, 120,122, 26,12, WS_GROUP | ES_NUMBER RTEXT "&da:", stc2, 52,124, 20,8 - RTEXT "&a:", stc3, 99,124, 20,8 + RTEXT "&a:", stc3, 99,124, 20,8 //FIXME: accelerator collision &A } PRINT32_SETUP DIALOG 32, 32, 288, 178 @@ -467,9 +467,9 @@ FONT 8, "MS Shell Dlg" CONTROL "Apri in &sola lettura",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,63,148,150,10 - DEFPUSHBUTTON "&Apri", IDOK,222,110,54,14 + DEFPUSHBUTTON "&Apri", IDOK,222,110,54,14 //FIXME: acclerator collision &A PUSHBUTTON "Annulla", IDCANCEL,222,128,54,14 - PUSHBUTTON "&Aiuto", pshHelp,222,145,54,14 + PUSHBUTTON "&Aiuto", pshHelp,222,145,54,14 //FIXME: accelerator collision &A } NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 diff --git a/dll/win32/comdlg32/lang/cdlg_Ko.rc b/dll/win32/comdlg32/lang/cdlg_Ko.rc index 2b474f48789..55e7deb434c 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ko.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ko.rc @@ -474,28 +474,28 @@ FONT 9, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" -FONT 8, "MS Shell Dlg" +CAPTION "열기" +FONT 9, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "보기(&I):", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "파일 이름(&N):", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "파일 형식(&T):", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "읽기 전용으로 열기(&R)", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "열기(&O)", IDOK, 310, 180, 54, 14 + PUSHBUTTON "취소", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "도움말(&H)", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Lt.rc b/dll/win32/comdlg32/lang/cdlg_Lt.rc index b713e2fab33..8e1da9ee7fa 100644 --- a/dll/win32/comdlg32/lang/cdlg_Lt.rc +++ b/dll/win32/comdlg32/lang/cdlg_Lt.rc @@ -314,12 +314,12 @@ FONT 8, "MS Shell Dlg" CHECKBOX "Tenkina tik &visas žodis", chx1, 4, 26, 140, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP CHECKBOX "Skirti raidžių &dydį", chx2, 4, 42, 140, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "Kryptis", grp1, 147, 21, 58, 38 - CONTROL "&Žemyn", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 151, 30, 48, 12 + CONTROL "&Žemyn", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 151, 30, 48, 12 //FIXME: accelerator collision &Z CONTROL "&Aukštyn", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 151, 44, 48, 12 DEFPUSHBUTTON "Ieškoti &kito", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "Atsisakyti", IDCANCEL , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Žinynas", pshHelp , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Žinynas", pshHelp , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision } @@ -474,7 +474,7 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Atverti" FONT 8, "MS Shell Dlg" { LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY @@ -484,17 +484,17 @@ FONT 8, "MS Shell Dlg" CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "&Failo vardas:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "Failų &tipai:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "Atverti tik &skaitymui", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 + DEFPUSHBUTTON "&Atverti", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Atsisakyti", IDCANCEL, 310, 198, 54, 14 PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 } diff --git a/dll/win32/comdlg32/lang/cdlg_Nl.rc b/dll/win32/comdlg32/lang/cdlg_Nl.rc index 8b4809206cf..35ad4f4aa72 100644 --- a/dll/win32/comdlg32/lang/cdlg_Nl.rc +++ b/dll/win32/comdlg32/lang/cdlg_Nl.rc @@ -181,7 +181,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP LTEXT "Schij&ven:", stc4, 110, 104, 92, 9 COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "&Opslaan als", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Opslaan als", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Annuleren", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Help", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP CHECKBOX "A&lleen-lezen", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP @@ -506,7 +506,7 @@ FONT 8, "MS Shell Dlg" LTEXT "Bestandsnaam:", IDC_FILENAMESTATIC, 160, 240, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS EDITTEXT IDC_FILENAME, 226, 240, 100, 12, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPSIBLINGS | ES_AUTOHSCROLL - LTEXT "Bestanden van het type:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS + LTEXT "Bestands&typen:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS COMBOBOX IDC_FILETYPE, 226, 256, 100, 60, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | WS_CLIPSIBLINGS | CBS_HASSTRINGS | CBS_DROPDOWNLIST diff --git a/dll/win32/comdlg32/lang/cdlg_No.rc b/dll/win32/comdlg32/lang/cdlg_No.rc index c543f7fc5e3..4be6c2b1176 100644 --- a/dll/win32/comdlg32/lang/cdlg_No.rc +++ b/dll/win32/comdlg32/lang/cdlg_No.rc @@ -474,28 +474,28 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Åpne" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "Se &i:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "Fil&navn:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "Fil&type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "&Åpne", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Hjelp", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Pl.rc b/dll/win32/comdlg32/lang/cdlg_Pl.rc index fb1091b4b32..9ede78a8b18 100644 --- a/dll/win32/comdlg32/lang/cdlg_Pl.rc +++ b/dll/win32/comdlg32/lang/cdlg_Pl.rc @@ -148,7 +148,7 @@ STRINGTABLE OPEN_FILE DIALOG 36, 24, 285, 135 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Otwieranie" +CAPTION "Otwórz" FONT 8, "MS Shell Dlg" { LTEXT "&Nazwa pliku:", stc3, 6, 6, 76, 9 @@ -462,7 +462,7 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Otwieranie" +CAPTION "Otwórz" FONT 8, "MS Shell Dlg" { LTEXT "&Szukaj w:", IDC_LOOKINSTATIC, 4, 6, 57, 8, SS_NOTIFY diff --git a/dll/win32/comdlg32/lang/cdlg_Pt.rc b/dll/win32/comdlg32/lang/cdlg_Pt.rc index 8f5cba17dce..65858d51d12 100644 --- a/dll/win32/comdlg32/lang/cdlg_Pt.rc +++ b/dll/win32/comdlg32/lang/cdlg_Pt.rc @@ -159,8 +159,8 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Abrir", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ajuda", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP - CHECKBOX "&Apenas de leitura", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Ajuda", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A, I guess this should be &j + CHECKBOX "&Apenas de leitura", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A } SAVE_FILE DIALOG 36, 24, 275, 134 @@ -179,7 +179,7 @@ FONT 8, "MS Shell Dlg" LTEXT "Con&troladores:", stc4, 110, 104, 92, 9 COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Guardar Como", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Ajuda", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP CHECKBOX "Apenas de &leitura", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } @@ -196,7 +196,7 @@ FONT 8, "MS Shell Dlg" RADIOBUTTON "S&elecção", rad2, 16, 60, 60, 12 RADIOBUTTON "&Páginas", rad3, 16, 75, 60, 12 DEFPUSHBUTTON "&Imprimir", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Con&figurar", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP LTEXT "De:", stc3, 60, 80, 30, 9 LTEXT "Até:", stc4, 120, 80, 30, 9 @@ -217,7 +217,7 @@ FONT 8, "MS Shell Dlg" RADIOBUTTON "Impressora &específica", rad2, 16, 44, 150, 12 COMBOBOX cmb1, 35, 58, 145, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "&OK", IDOK, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Con&figurar", psh1, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP GROUPBOX "Orientação", grp2, 6, 82, 100, 50, BS_GROUPBOX RADIOBUTTON "&Retrato", rad3, 50, 95, 50, 12 @@ -246,7 +246,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb3, 179, 13, 32, 76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT DEFPUSHBUTTON "&OK", IDOK, 218, 6, 50, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON - PUSHBUTTON "&Cancelar", IDCANCEL, 218, 23, 50, 14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancelar", IDCANCEL, 218, 23, 50, 14,WS_GROUP | WS_TABSTOP PUSHBUTTON "&Aplicar", psh3, 218, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "A&juda" , pshHelp, 218, 57, 50, 14, WS_GROUP | WS_TABSTOP GROUPBOX "Efeitos", grp1, 6, 92, 84, 36, WS_GROUP @@ -269,7 +269,7 @@ FONT 8, "MS Shell Dlg" { LTEXT "Cores &básicas:", stc1, 4, 4, 140, 10 LTEXT "&Cores do utilizador:", stc2, 4, 106, 140, 10 - LTEXT "Colorido|sólid&o", stc3, 150, 151, 48, 10 + LTEXT "Colorido|sólid&o", stc3, 150, 151, 48, 10 //FIXME: accelerator collision &O LTEXT "Ver&melho:", IDC_COLOR_RL /*1094*/, 247, 126, 27, 10 EDITTEXT IDC_COLOR_EDIT_R, 275, 124, 21, 12, WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "&Verde:", IDC_COLOR_GL /*1095*/, 247, 140, 27, 10 @@ -287,8 +287,8 @@ FONT 8, "MS Shell Dlg" CONTROL "", IDC_COLOR_GRAPH, "STATIC", WS_BORDER | SS_SIMPLE | WS_TABSTOP | WS_GROUP, 152, 4, 118, 116 CONTROL "", IDC_COLOR_LUMBAR, "STATIC", SS_SIMPLE | WS_TABSTOP | WS_GROUP, 278, 4, 8, 116 CONTROL "", IDC_COLOR_RESULT, "STATIC", SS_SIMPLE | WS_TABSTOP | WS_GROUP, 152, 124, 40, 26 - DEFPUSHBUTTON "&OK", IDOK, 4, 167, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Cancelar", IDCANCEL, 58, 167, 50, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "&OK", IDOK, 4, 167, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP //FIXME:accelerator collision &O + PUSHBUTTON "Cancelar", IDCANCEL, 58, 167, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "A&juda", pshHelp, 100, 166, 44, 14 PUSHBUTTON "&Adicionar cor personalizada", IDC_COLOR_ADD /*1024*/, 152, 167, 144, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Definir cores personalizadas >>", IDC_COLOR_DEFINE /*1025*/, 4, 149, 142, 14, WS_GROUP | WS_TABSTOP @@ -300,16 +300,16 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Procurar" FONT 8, "MS Shell Dlg" { - LTEXT "&Procurar:", -1, 4, 8, 52, 8 + LTEXT "&Procurar:", -1, 4, 8, 52, 8 //FIXME: accelerator collision &P EDITTEXT edt1, 57, 7, 148, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP CHECKBOX "Palavra &inteira", chx1, 4, 26, 140, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP CHECKBOX "&Maiúsculas/minúsculas", chx2, 4, 42, 140, 12, BS_AUTOCHECKBOX | WS_TABSTOP GROUPBOX "Direcção", grp1, 147, 21, 58, 38 - CONTROL "&Acima", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 151, 30, 48, 12 + CONTROL "&Acima", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 151, 30, 48, 12 //FIXME: accelerator collision &A CONTROL "A&baixo", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 151, 44, 48, 12 - DEFPUSHBUTTON "&Procurar", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + DEFPUSHBUTTON "&Procurar", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON //FIXME: accelerator collision &P PUSHBUTTON "Cancelar", IDCANCEL, 212, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Ajuda", pshHelp, 212, 42, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Ajuda", pshHelp, 212, 42, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &A } REPLACEDLGORD DIALOG 36, 24, 276, 94 @@ -317,13 +317,13 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Substituir" FONT 8, "MS Shell Dlg" { - LTEXT "&Procurar:", -1, 4, 8, 52, 8 + LTEXT "&Procurar:", -1, 4, 8, 52, 8 //FIXME: accelerator collision &P EDITTEXT edt1, 57, 7, 148, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "Substituir po&r:", -1, 4, 26, 52, 8 EDITTEXT edt2, 57, 24, 148, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP CHECKBOX "Palavra &inteira", chx1, 5, 46, 120, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP CHECKBOX "&Maiúsculas/minúsculas", chx2, 5, 62, 120, 12, BS_AUTOCHECKBOX | WS_TABSTOP - DEFPUSHBUTTON "&Procurar", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + DEFPUSHBUTTON "&Procurar", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON //FIXME: accelerator collision &P PUSHBUTTON "&Substituir", psh1, 212, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Substituir &tudo", psh2 , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Cancelar", IDCANCEL, 212, 60, 60, 14, WS_GROUP | WS_TABSTOP @@ -337,7 +337,7 @@ FONT 8, "MS Shell Dlg" { DEFPUSHBUTTON "OK", IDOK, 176, 164, 50, 14, WS_GROUP | BS_DEFPUSHBUTTON PUSHBUTTON "Cancelar", IDCANCEL, 230, 164, 50, 14, WS_GROUP - PUSHBUTTON "&Ajuda", pshHelp, 50, 161, 50,14, WS_GROUP + PUSHBUTTON "&Ajuda", pshHelp, 50, 161, 50,14, WS_GROUP //FIXME: accelerator collision &A. Should this be &j? GROUPBOX "Impressora", grp4, 8, 4, 272, 84, WS_GROUP CONTROL "Para &ficheiro", chx1, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 185, 36, 90, 16 PUSHBUTTON "&Propriedades", psh2, 212, 17, 60,14, WS_GROUP @@ -354,7 +354,7 @@ FONT 8, "MS Shell Dlg" GROUPBOX "Cópias", grp2, 160, 92, 120, 64, WS_GROUP LTEXT "Número de &cópias:", stc5, 168, 105, 68, 8 ICON "", ico3, 210, 131, 76, 24, WS_GROUP - CONTROL "&Agrupar", chx2, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 168, 118, 100, 12 + CONTROL "&Agrupar", chx2, "Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 168, 118, 100, 12 //FIXME: accelerator collision &A EDITTEXT edt3, 240, 103, 32, 12, WS_GROUP | ES_NUMBER GROUPBOX "Faixa de impressão", grp1, 8, 92, 144, 64, WS_GROUP CONTROL "&Todos", rad1,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 16, 106, 64, 12 @@ -363,7 +363,7 @@ FONT 8, "MS Shell Dlg" EDITTEXT edt1, 73, 122, 26, 12, WS_GROUP | ES_NUMBER EDITTEXT edt2, 120, 122, 26, 12, WS_GROUP | ES_NUMBER RTEXT "&de:", stc2, 52, 124, 20, 8 - RTEXT "&até", stc3, 99, 124, 20, 8 + RTEXT "&até", stc3, 99, 124, 20, 8 //FIXME: accelerator collision &A } PRINT32_SETUP DIALOG 32, 32, 288, 178 @@ -375,7 +375,7 @@ BEGIN PUSHBUTTON "Cancelar", IDCANCEL, 230, 156, 50, 14 /* PUSHBUTTON "Network...", psh5, 284,156,48,14 */ GROUPBOX "Impressora", grp4, 8, 4, 272, 84, WS_GROUP - PUSHBUTTON "&Propriedades", psh2, 212, 17, 60, 14, WS_GROUP + PUSHBUTTON "&Propriedades", psh2, 212, 17, 60, 14, WS_GROUP //FIXME: accelerator collision &P LTEXT "&Nome:", stc6, 16, 20, 36, 8 COMBOBOX cmb1, 52, 18, 152, 152, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_GROUP | WS_TABSTOP LTEXT "Status:", stc8, 16, 36, 47, 10, SS_NOPREFIX @@ -394,7 +394,7 @@ BEGIN GROUPBOX "Orientação", grp1, 180, 92, 100, 56, WS_GROUP ICON "", ico1, 195, 112, 18, 20, WS_GROUP CONTROL "&Retrato", rad1,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 224, 106, 52, 12 - CONTROL "&Paisagem", rad2,"Button", BS_AUTORADIOBUTTON, 224, 126, 52, 12 + CONTROL "&Paisagem", rad2,"Button", BS_AUTORADIOBUTTON, 224, 126, 52, 12 //FIXME: accelerator collision &P END PAGESETUPDLGORD DIALOG 32, 32, 240, 240 @@ -432,7 +432,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS CAPTION "Abrir" FONT 8, "MS Shell Dlg" { - LTEXT "&Examinar:", IDC_LOOKINSTATIC, 4, 6, 43, 8, SS_NOTIFY + LTEXT "Ver &em:", IDC_LOOKINSTATIC, 4, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 49, 3, 132, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "", IDC_TOOLBARSTATIC, 181, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE LISTBOX IDC_SHELLSTATIC, 4, 20, 272, 85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE @@ -441,10 +441,10 @@ FONT 8, "MS Shell Dlg" CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 63, 110, 150, 150 LTEXT "Ficheiros do &tipo:", IDC_FILETYPESTATIC, 5, 130, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 63, 128, 150, 53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Abrir como &apenas-leitura", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 63, 148, 150, 10 - DEFPUSHBUTTON "&Abrir", IDOK, 222, 110, 54, 14 + CONTROL "Abrir como &apenas-leitura", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 63, 148, 150, 10 //FIXME: accelerator collision &A + DEFPUSHBUTTON "&Abrir", IDOK, 222, 110, 54, 14 //FIXME: accelerator collision &A PUSHBUTTON "Cancelar", IDCANCEL, 222, 128, 54, 14 - PUSHBUTTON "&Ajuda", pshHelp, 222, 145, 54, 14 + PUSHBUTTON "&Ajuda", pshHelp, 222, 145, 54, 14 //FIXME: accelerator collision &A, I do guess this one should have &j } NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 @@ -478,10 +478,10 @@ FONT 8, "MS Shell Dlg" LTEXT "Ficheiros do &tipo:", IDC_FILETYPESTATIC, 160, 256, 60, 9, SS_RIGHT | WS_CLIPSIBLINGS COMBOBOX IDC_FILETYPE, 226, 256, 100, 60, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | WS_CLIPSIBLINGS | CBS_HASSTRINGS | CBS_DROPDOWNLIST - DEFPUSHBUTTON "&Abrir", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS + DEFPUSHBUTTON "&Abrir", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS //FIXME: accelerator collision &A /* drop-down menu for open button */ CONTROL "6", psh1, "Button", WS_CHILD | WS_CLIPSIBLINGS | WS_GROUP | WS_TABSTOP | BS_CHECKBOX | BS_PUSHLIKE, 342, 240, 8, 14 PUSHBUTTON "Cancelar", IDCANCEL, 395, 240, 40, 14, WS_CLIPSIBLINGS - PUSHBUTTON "&Ajuda", pshHelp, 350, 272, 40, 14, WS_CLIPSIBLINGS + PUSHBUTTON "&Ajuda", pshHelp, 350, 272, 40, 14, WS_CLIPSIBLINGS //FIXME: accelerator collision &A, I do guess this one should have &j } diff --git a/dll/win32/comdlg32/lang/cdlg_Ro.rc b/dll/win32/comdlg32/lang/cdlg_Ro.rc index 8aae6419ac9..99ec3de6038 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ro.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ro.rc @@ -150,7 +150,7 @@ STRINGTABLE OPEN_FILE DIALOG 36, 24, 275, 134 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Deschidere fișier" +CAPTION "Deschide" FONT 8, "MS Shell Dlg" { LTEXT "N&ume fișier:", stc3, 6, 6, 76, 9 @@ -185,7 +185,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP LTEXT "Dis&curi:", stc4, 110, 104, 92, 9 COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP - DEFPUSHBUTTON "&Salvează", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "Salvează", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "A&nulează", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Manual…", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP CHECKBOX "Nem&odificabil", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP @@ -452,7 +452,7 @@ END NEWFILEOPENORD DIALOG 0, 0, 280, 164 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Deschidere fișier" +CAPTION "Deschide" FONT 8, "MS Shell Dlg" { LTEXT "&Caută în:",IDC_LOOKINSTATIC,4,6,43,8, SS_NOTIFY diff --git a/dll/win32/comdlg32/lang/cdlg_Si.rc b/dll/win32/comdlg32/lang/cdlg_Si.rc index 0a2d7193c06..5771d53a1d2 100644 --- a/dll/win32/comdlg32/lang/cdlg_Si.rc +++ b/dll/win32/comdlg32/lang/cdlg_Si.rc @@ -474,10 +474,10 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Odpri" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "&Išči v:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE @@ -488,14 +488,14 @@ FONT 8, "MS Shell Dlg" EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "Vrsta da&totek:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "&Samo za branje", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "&Odpri", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Prekliči", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "Pomo&č", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Sk.rc b/dll/win32/comdlg32/lang/cdlg_Sk.rc index f7f0d13b287..024b80249ed 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sk.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sk.rc @@ -243,7 +243,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Písmo" FONT 8, "MS Shell Dlg" { - LTEXT "&Písmo:",stc1 ,6,3,90,9 + LTEXT "&Písmo:",stc1 ,6,3,90,9 //FIXME: accelerator collision &P COMBOBOX cmb1, 6,13,94,76, CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE LTEXT "Š&týl písma:",stc2 ,108,3,60,9 @@ -254,11 +254,11 @@ FONT 8, "MS Shell Dlg" WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT DEFPUSHBUTTON "OK",IDOK,218,6,50,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "Zrušiť",IDCANCEL,218,23,50,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Použiť", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Pomoc" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Použiť", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &P + PUSHBUTTON "&Pomoc" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &P GROUPBOX "Efekty",grp1,6,92,84,36,WS_GROUP CHECKBOX "P&rečiarknuté", chx1, 10,102,78,10, BS_AUTOCHECKBOX | WS_TABSTOP - CHECKBOX "&Podčiarknuté", chx2, 10,114,78,10, BS_AUTOCHECKBOX + CHECKBOX "&Podčiarknuté", chx2, 10,114,78,10, BS_AUTOCHECKBOX //FIXME: accelerator collision &P LTEXT "&Farba:", stc4 ,6,134,80,9 COMBOBOX cmb4,6,144,84,100,CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP @@ -297,7 +297,7 @@ FONT 8, "MS Shell Dlg" CONTROL "" , IDC_COLOR_RESULT, "STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26 DEFPUSHBUTTON "OK", IDOK, 4, 167, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Zrušiť", IDCANCEL, 58, 167, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Pomocník", pshHelp,100,166, 44, 14 + PUSHBUTTON "Pomoc", pshHelp,100,166, 44, 14 PUSHBUTTON "Prid&ať medzi vlastné farby", IDC_COLOR_ADD /*1024*/, 152, 167, 144, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Definovať vlastné farby >>", IDC_COLOR_DEFINE /*1025*/, 4, 149, 142, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Farba | Pl&ná", IDC_COLOR_RES, 300,200,4,14 /* just a dummy */ @@ -458,7 +458,7 @@ FONT 8, "MS Shell Dlg" LTEXT "" , IDC_TOOLBARSTATIC, 181, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE LISTBOX IDC_SHELLSTATIC,4,20,272,85, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "&Názov súboru:",IDC_FILENAMESTATIC,5,112,56,16, SS_NOTIFY + LTEXT "&Súbor:",IDC_FILENAMESTATIC,5,112,56,16, SS_NOTIFY EDITTEXT IDC_FILENAME,63,110,150,12,ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 63,110,150,150 @@ -467,35 +467,35 @@ FONT 8, "MS Shell Dlg" CONTROL "Otvo&riť iba na čítanie",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,63,148,150,10 - DEFPUSHBUTTON "&Otvoriť...", IDOK,222,110,54,14 + DEFPUSHBUTTON "&Otvoriť", IDOK,222,110,54,14 PUSHBUTTON "Zrušiť", IDCANCEL,222,128,54,14 PUSHBUTTON "&Pomoc", pshHelp,222,145,54,14 } NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Otvoriť" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "Hľadať &v:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "&Súbor:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "&Typ súborov:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "&Otvoriť", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Zrušiť", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Pomoc", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 @@ -511,7 +511,7 @@ FONT 8, "MS Shell Dlg" COMBOBOX IDC_FILETYPE, 226, 256, 100, 60, WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | WS_CLIPSIBLINGS | CBS_HASSTRINGS | CBS_DROPDOWNLIST - DEFPUSHBUTTON "&Otvoriť...", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS + DEFPUSHBUTTON "&Otvoriť", IDOK, 350, 240, 40, 14, WS_GROUP | WS_CLIPSIBLINGS /* drop-down menu for open button */ CONTROL "6", psh1, "Button", WS_CHILD | WS_CLIPSIBLINGS | WS_GROUP | WS_TABSTOP | diff --git a/dll/win32/comdlg32/lang/cdlg_Sq.rc b/dll/win32/comdlg32/lang/cdlg_Sq.rc index 46d2a67924f..ea0a817ebac 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sq.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sq.rc @@ -466,7 +466,7 @@ FONT 8, "MS Shell Dlg" EDITTEXT IDC_FILENAME,63,110,150,12,ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 63,110,150,150 - LTEXT "Dokumenta te &tipit:",IDC_FILETYPESTATIC,5,130,56,16, SS_NOTIFY + LTEXT "&Tipe dokumenti:",IDC_FILETYPESTATIC,5,130,56,16, SS_NOTIFY COMBOBOX IDC_FILETYPE,63,128,150,53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Hap si &read-only",IDC_OPENREADONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,63,148,150,10 @@ -478,7 +478,7 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Hap" FONT 8, "MS Shell Dlg" { LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY @@ -495,11 +495,11 @@ FONT 8, "MS Shell Dlg" LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 + CONTROL "Hap si &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 //FIXME: should be "Hap". Actually it must be "&Hap", but that needs a better translation for "&Help" to frees the &H accelerator + PUSHBUTTON "Anulo", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 //FIXME: should be "Ndihmë" but I don't know which accelerator to use here } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Sr.rc b/dll/win32/comdlg32/lang/cdlg_Sr.rc index a1bcf4c6200..2844f61aaaf 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sr.rc @@ -254,8 +254,8 @@ FONT 8, "MS Shell Dlg" WS_VSCROLL | WS_TABSTOP | CBS_SIMPLE | CBS_SORT DEFPUSHBUTTON "U redu",IDOK,218,6,50,14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON PUSHBUTTON "Otkaži",IDCANCEL,218,23,50,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Primeni", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Pomoć" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Primeni", psh3,218,40,50,14,WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &P + PUSHBUTTON "&Pomoć" , pshHelp,218,57,50,14,WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &P GROUPBOX "Effects",grp1,6,92,84,36,WS_GROUP CHECKBOX "Stri&keout", chx1, 10,102,78,10, BS_AUTOCHECKBOX | WS_TABSTOP CHECKBOX "&Underline", chx2, 10,114,78,10, BS_AUTOCHECKBOX @@ -474,7 +474,7 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Otvori" FONT 8, "MS Shell Dlg" { LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY @@ -484,18 +484,18 @@ FONT 8, "MS Shell Dlg" CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "&Datoteka:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "&Fajl:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 - PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 + DEFPUSHBUTTON "&Otvori", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Otkaži", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "&Pomoć", pshHelp, 310, 215, 54, 14 } NEWFILEOPENV3ORD DIALOG 0, 0, 440, 300 diff --git a/dll/win32/comdlg32/lang/cdlg_Sv.rc b/dll/win32/comdlg32/lang/cdlg_Sv.rc index d3f11956a78..ad29c5a2cf0 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sv.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sv.rc @@ -308,15 +308,15 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sök" FONT 8, "MS Shell Dlg" { - LTEXT "&Sök efter:", -1, 4, 8, 52, 8 + LTEXT "&Sök efter:", -1, 4, 8, 52, 8 //FIXME: accelerator collision &S EDITTEXT edt1, 57, 7, 148, 12, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP CHECKBOX "&Bara hela ord", chx1, 4, 26, 140, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - CHECKBOX "&Skillnad på stora/små bokstäver", chx2, 4, 42, 140, 12, BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "&Skillnad på stora/små bokstäver", chx2, 4, 42, 140, 12, BS_AUTOCHECKBOX | WS_TABSTOP //FIXME: accelerator collision &S GROUPBOX "Riktning", grp1, 147, 21, 58, 38 CONTROL "&Upp", rad1, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 151, 30, 48, 12 CONTROL "&Ner", rad2, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 151, 44, 48, 12 - DEFPUSHBUTTON "&Sök efter nästa", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON + DEFPUSHBUTTON "&Sök efter nästa", IDOK, 212, 6, 60, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON //FIXME: accelerator collision &S PUSHBUTTON "Avbryt", IDCANCEL , 212, 24, 60, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Hjälp", pshHelp , 212, 42, 60, 14, WS_GROUP | WS_TABSTOP } @@ -473,27 +473,27 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "Öppna" FONT 8, "MS Shell Dlg" { - LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY + LTEXT "Leta &i:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY COMBOBOX IDC_LOOKIN, 64, 3, 150, 100, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP LTEXT "" , IDC_TOOLBARSTATIC, 209, 2, 102, 17, NOT WS_GROUP | NOT WS_VISIBLE CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "File &name:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "Fil&namn:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 - LTEXT "Files of &type:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY + LTEXT "&Filformat:", IDC_FILETYPESTATIC, 65, 200, 56, 16, SS_NOTIFY COMBOBOX IDC_FILETYPE, 123, 198, 180, 53, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 + DEFPUSHBUTTON "&Öppna", IDOK, 310, 180, 54, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 310, 198, 54, 14 PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 } diff --git a/dll/win32/comdlg32/lang/cdlg_Th.rc b/dll/win32/comdlg32/lang/cdlg_Th.rc index a38e73eb5a9..69d04dd7600 100644 --- a/dll/win32/comdlg32/lang/cdlg_Th.rc +++ b/dll/win32/comdlg32/lang/cdlg_Th.rc @@ -473,7 +473,7 @@ FONT 8, "MS Shell Dlg" NEWFILEOPENV2ORD DIALOG 0, 0, 370, 237 STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_CLIPCHILDREN -CAPTION "Open" +CAPTION "เปิด" FONT 8, "MS Shell Dlg" { LTEXT "Look &in:", IDC_LOOKINSTATIC, 28, 6, 43, 8, SS_NOTIFY @@ -493,7 +493,7 @@ FONT 8, "MS Shell Dlg" CONTROL "Open as &read-only", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 DEFPUSHBUTTON "&Open", IDOK, 310, 180, 54, 14 - PUSHBUTTON "Cancel", IDCANCEL, 310, 198, 54, 14 + PUSHBUTTON "ยกเลิก", IDCANCEL, 310, 198, 54, 14 PUSHBUTTON "&Help", pshHelp, 310, 215, 54, 14 } diff --git a/dll/win32/comdlg32/lang/cdlg_Tr.rc b/dll/win32/comdlg32/lang/cdlg_Tr.rc index 7819d2a1767..b4f722da58b 100644 --- a/dll/win32/comdlg32/lang/cdlg_Tr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Tr.rc @@ -149,10 +149,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Aç" FONT 8, "MS Shell Dlg" { - LTEXT "&Dosya Adı:", stc3, 6, 6, 76, 9 + LTEXT "&Dosya Adı:", stc3, 6, 6, 76, 9 //FIXME: accelerator collision &D EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP LISTBOX lst1, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP - LTEXT "&Dizinler:", -1, 110, 6, 92, 9 + LTEXT "&Dizinler:", -1, 110, 6, 92, 9 //FIXME: accelerator collision &D LTEXT "", stc1, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "Şu Türden D&osyaları Listele:", stc2, 6, 104, 90, 9 @@ -171,10 +171,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Farklı Kaydet" FONT 8, "MS Shell Dlg" { - LTEXT "&Dosya Adı:", stc3, 6, 6, 76, 9 + LTEXT "&Dosya Adı:", stc3, 6, 6, 76, 9 //FIXME: accelerator collision &D EDITTEXT edt1, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP LISTBOX lst1, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP - LTEXT "&Dizinler:", -1, 110, 6, 92, 9 + LTEXT "&Dizinler:", -1, 110, 6, 92, 9 //FIXME: accelerator collision &D LTEXT "", stc1, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "Şu türden D&osyaları Listele:", stc2, 6, 104, 90, 9 @@ -279,7 +279,7 @@ FONT 8, "MS Shell Dlg" LTEXT "Renk | D&üz", stc3, 150, 151, 48, 10 LTEXT "&Kırmızı:", IDC_COLOR_RL /*1094*/,247,126,27,10 EDITTEXT IDC_COLOR_EDIT_R, 275,124,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP - LTEXT "Y&eşil:", IDC_COLOR_GL /*1095*/,247,140,27,10 + LTEXT "Y&eşil:", IDC_COLOR_GL /*1095*/,247,140,27,10 //FIXME: accelerator collision &E EDITTEXT IDC_COLOR_EDIT_G, 275,138,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP LTEXT "&Mavi:", IDC_COLOR_BL /*1096*/,247,154,27,10 EDITTEXT IDC_COLOR_EDIT_B, 275,152,21,12, WS_BORDER | WS_GROUP | WS_TABSTOP @@ -298,7 +298,7 @@ FONT 8, "MS Shell Dlg" PUSHBUTTON "İptal", IDCANCEL, 58, 167, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "&Yardım", pshHelp,100,166, 44, 14 PUSHBUTTON "Ö&zel Renklere Ekle", IDC_COLOR_ADD /*1024*/, 152, 167, 144, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "Öz&el Renkleri Belirle >>", IDC_COLOR_DEFINE /*1025*/, 4, 149, 142, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Öz&el Renkleri Belirle >>", IDC_COLOR_DEFINE /*1025*/, 4, 149, 142, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &E PUSHBUTTON "Renk | Düz", IDC_COLOR_RES, 300,200,4,14 /* just a dummy */ } @@ -483,7 +483,7 @@ FONT 8, "MS Shell Dlg" CONTROL "", IDC_TOOLBARPLACES, "ToolbarWindow32", 0x800 | CCS_NORESIZE | CCS_TOP | CCS_NOPARENTALIGN | CCS_NODIVIDER, 4, 20, 56, 192 LISTBOX IDC_SHELLSTATIC, 64, 20, 300, 155, LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_HSCROLL | NOT WS_VISIBLE - LTEXT "Dosya &adı:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY + LTEXT "Dosya &adı:", IDC_FILENAMESTATIC, 65, 182, 56, 16, SS_NOTIFY //FIXME: accelerator collision &A EDITTEXT IDC_FILENAME, 123, 180, 180, 12, ES_AUTOHSCROLL CONTROL "", cmb13, "ComboBoxEx32", CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, 123, 180, 180, 150 @@ -492,7 +492,7 @@ FONT 8, "MS Shell Dlg" CONTROL "&Salt okunur olarak aç", IDC_OPENREADONLY, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 218, 150, 10 - DEFPUSHBUTTON "&Aç", IDOK, 310, 180, 54, 14 + DEFPUSHBUTTON "&Aç", IDOK, 310, 180, 54, 14 //FIXME: accelerator collision &A PUSHBUTTON "İptal", IDCANCEL, 310, 198, 54, 14 PUSHBUTTON "&Yardım", pshHelp, 310, 215, 54, 14 } diff --git a/dll/win32/comdlg32/lang/cdlg_Uk.rc b/dll/win32/comdlg32/lang/cdlg_Uk.rc index f462d7e0185..a372795ca92 100644 --- a/dll/win32/comdlg32/lang/cdlg_Uk.rc +++ b/dll/win32/comdlg32/lang/cdlg_Uk.rc @@ -158,11 +158,11 @@ FONT 8, "MS Shell Dlg" LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "Показувати файли &типу:", stc2, 6, 104, 90, 9 COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - LTEXT "&Диски:", stc4, 110, 104, 92, 9 + LTEXT "&Диски:", stc4, 110, 104, 92, 9 //FIXME: accelerator collision &Д COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Відкрити", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Скасувати", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Довідка", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Довідка", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &Д CHECKBOX "&Лише для читання", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } @@ -180,11 +180,11 @@ FONT 8, "MS Shell Dlg" LISTBOX lst2, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP LTEXT "Показувати файли &типу:", stc2, 6, 104, 90, 9 COMBOBOX cmb1, 6, 114, 90, 60, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP - LTEXT "&Диски:", stc4, 110, 104, 92, 9 + LTEXT "&Диски:", stc4, 110, 104, 92, 9 //FIXME: accelerator collision &Д COMBOBOX cmb2, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP DEFPUSHBUTTON "Зберегти як", IDOK, 208, 6, 60, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Скасувати", IDCANCEL, 208, 24, 60, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Довідка", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Довідка", pshHelp, 208, 46, 60, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &Д CHECKBOX "&Лише для читання", chx1, 208, 68, 65, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP } @@ -297,8 +297,8 @@ FONT 8, "MS Shell Dlg" CONTROL "" , IDC_COLOR_RESULT, "STATIC",SS_SIMPLE|WS_TABSTOP|WS_GROUP, 152,124,40,26 DEFPUSHBUTTON "OK", IDOK, 4, 167, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP PUSHBUTTON "Скасувати", IDCANCEL, 58, 167, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Довідка", pshHelp,100,166, 44, 14 - PUSHBUTTON "&Додати до набору", IDC_COLOR_ADD /*1024*/, 152, 167, 144, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Довідка", pshHelp,100,166, 44, 14 //FIXME: accelerator collision &Д + PUSHBUTTON "&Додати до набору", IDC_COLOR_ADD /*1024*/, 152, 167, 144, 14, WS_GROUP | WS_TABSTOP //FIXME: accelerator collision &Д PUSHBUTTON "&Визначити колір >>", IDC_COLOR_DEFINE /*1025*/, 4, 149, 142, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON "Колір|За&ливка", IDC_COLOR_RES, 300,200,4,14 /* just a dummy */ } diff --git a/dll/win32/comdlg32/lang/cdlg_Zh.rc b/dll/win32/comdlg32/lang/cdlg_Zh.rc index b859934b5d6..18bf2c599d9 100644 --- a/dll/win32/comdlg32/lang/cdlg_Zh.rc +++ b/dll/win32/comdlg32/lang/cdlg_Zh.rc @@ -875,7 +875,7 @@ FONT 9, "新細明體" GROUPBOX "份數", grp2, 160, 92, 120,64, WS_GROUP LTEXT "份數(&C):",stc5,168,105,68,8 - ICON "", ico3, 170,131, 76,24, WS_GROUP | SS_CENTERIMAGE + ICON "", ico3, 210,131, 76,24, WS_GROUP CONTROL "自動分頁(&O)", chx2,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,168,118,100,12 EDITTEXT edt3, 240,103, 32,12, WS_GROUP | ES_NUMBER From 12b3272d9e6b2810985516ebad0ce545e5601d59 Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Thu, 11 Apr 2024 11:59:14 +0200 Subject: [PATCH 21/44] [AUDIO] Implement support for WAVE_FORMAT_EXTENSIBLE audio format (#6686) [MMIXER] Implement hadling WAVE_FORMAT_EXTENSIBLE audio format Fix opening audio device error when trying to open it with WAVE_FORMAT_EXTENSIBLE format tag set in wFormatTag member of WAVEFORMATEX: - Pass additional data size from WAVEFORMATEX.cbSize to pin data format. - Append it to the whole size of pin data format (KSDATAFORMAT.FormatSize). - Set additional fields in WAVEFORMATEXTENSIBLE structure (data format, BPS and channel mask) when WAVE_FORMAT_EXTENSIBLE is used. They are used by our inbuilt Intel AC97 miniport driver at least. It simply fails when these members are not set. - Fix pin connect allocation size by appending an additional data size from WAVEFORMATEX.cbSize to KSPIN_CONNECT + KSDATAFORMAT + WAVEFORMATEX. This allows to proerly initialize additional extensible data and avoids kernel memory leakage when using extensible audio format. - Remove format tag check which allowed WAVE_FORMAT_PCM to be opened correctly. So now all possible audio formats can be opened properly at least (although it does not mean they may work correctly). This fixes the audio playback for all apps those are supporting extensible audio data and use it by default (e. g. AIMP 5.30, QMMP 0.12.17, all Chrome/Chromium-based browsers, GameDev Tycoon Demo game etc.). CORE-10907, CORE-14783 * [KS] Allow passing additional extensible audio data when extensible audio format is used - Append additional data size from WAVEFORMATEX.cbSize to pin connect size passed to KsCreatePin. If the tag is WAVE_FORMAT_PCM, then this member should always be zero. So in that case, no any additional data is passed to creation request, and the passed data size is correct for PCM too (KSDATAFORMAT + WAVEFORMATEX). This fixes audio playback in several apps those are supporting extensibble audio and use it by default (e. g. AIMP 5.30, QMMP 0.12.17, all Chrome/Chromium based browsers, GameDev Tycoon Demo game etc.). CORE-10907, CORE-14783. * [WDMAUD.DRV] Pass the correct additional data size to I/O control request Store a correct size of additional data in WAVEFORMATEX.cbSize when performing open of audio device, when WAVE_FORMAT_EXTENSIBLE audio format is used. It allows to properly open audio device with Legacy APIs enabled too. This fixes audio playback in several apps those are using extensible audio data (e. g. AIMP 5.30, QMMP 0.12.17, all Chrome/Chromium based browsers, GameDevTycoon Demo game etc.). CORE-10907, CORE-14783 --- dll/win32/wdmaud.drv/legacy.c | 4 ++-- drivers/ksfilter/ks/connectivity.c | 2 +- sdk/lib/drivers/sound/mmixer/wave.c | 34 +++++++++++++++++++---------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/dll/win32/wdmaud.drv/legacy.c b/dll/win32/wdmaud.drv/legacy.c index 00c9507341d..f1ada7cdd3b 100644 --- a/dll/win32/wdmaud.drv/legacy.c +++ b/dll/win32/wdmaud.drv/legacy.c @@ -506,7 +506,7 @@ WdmAudSetWaveDeviceFormatByLegacy( ZeroMemory(&DeviceInfo, sizeof(WDMAUD_DEVICE_INFO)); DeviceInfo.DeviceType = DeviceType; DeviceInfo.DeviceIndex = DeviceId; - DeviceInfo.u.WaveFormatEx.cbSize = sizeof(WAVEFORMATEX); //WaveFormat->cbSize; + DeviceInfo.u.WaveFormatEx.cbSize = WaveFormat->cbSize; DeviceInfo.u.WaveFormatEx.wFormatTag = WaveFormat->wFormatTag; #ifdef USERMODE_MIXER DeviceInfo.u.WaveFormatEx.nChannels = 2; @@ -546,7 +546,7 @@ WdmAudSetWaveDeviceFormatByLegacy( } /* store details */ - Instance->WaveFormatEx.cbSize = sizeof(WAVEFORMATEX); + Instance->WaveFormatEx.cbSize = WaveFormat->cbSize; Instance->WaveFormatEx.wBitsPerSample = (DeviceInfo.u.WaveFormatEx.nAvgBytesPerSec * 8) / (DeviceInfo.u.WaveFormatEx.nSamplesPerSec * DeviceInfo.u.WaveFormatEx.nChannels); /* Store sound device handle instance handle */ diff --git a/drivers/ksfilter/ks/connectivity.c b/drivers/ksfilter/ks/connectivity.c index ba7db56d8b5..395d5b53d63 100644 --- a/drivers/ksfilter/ks/connectivity.c +++ b/drivers/ksfilter/ks/connectivity.c @@ -43,7 +43,7 @@ KsCreatePin( PKSDATAFORMAT_WAVEFORMATEX Format = (PKSDATAFORMAT_WAVEFORMATEX)(Connect + 1); if (Format->DataFormat.FormatSize == sizeof(KSDATAFORMAT) || - Format->DataFormat.FormatSize == sizeof(KSDATAFORMAT) + sizeof(WAVEFORMATEX)) + Format->DataFormat.FormatSize == sizeof(KSDATAFORMAT) + sizeof(WAVEFORMATEX) + Format->WaveFormatEx.cbSize) { ConnectSize += Format->DataFormat.FormatSize; } diff --git a/sdk/lib/drivers/sound/mmixer/wave.c b/sdk/lib/drivers/sound/mmixer/wave.c index e049ca485bd..7c48f0bc827 100644 --- a/sdk/lib/drivers/sound/mmixer/wave.c +++ b/sdk/lib/drivers/sound/mmixer/wave.c @@ -116,22 +116,40 @@ MMixerInitializeDataFormat( IN PKSDATAFORMAT_WAVEFORMATEX DataFormat, LPWAVEFORMATEX WaveFormatEx) { - DataFormat->WaveFormatEx.wFormatTag = WaveFormatEx->wFormatTag; DataFormat->WaveFormatEx.nChannels = WaveFormatEx->nChannels; DataFormat->WaveFormatEx.nSamplesPerSec = WaveFormatEx->nSamplesPerSec; DataFormat->WaveFormatEx.nBlockAlign = WaveFormatEx->nBlockAlign; DataFormat->WaveFormatEx.nAvgBytesPerSec = WaveFormatEx->nAvgBytesPerSec; DataFormat->WaveFormatEx.wBitsPerSample = WaveFormatEx->wBitsPerSample; - DataFormat->WaveFormatEx.cbSize = 0; - DataFormat->DataFormat.FormatSize = sizeof(KSDATAFORMAT) + sizeof(WAVEFORMATEX); + DataFormat->WaveFormatEx.cbSize = WaveFormatEx->cbSize; + DataFormat->DataFormat.FormatSize = sizeof(KSDATAFORMAT) + sizeof(WAVEFORMATEX) + WaveFormatEx->cbSize; DataFormat->DataFormat.Flags = 0; DataFormat->DataFormat.Reserved = 0; DataFormat->DataFormat.MajorFormat = KSDATAFORMAT_TYPE_AUDIO; - DataFormat->DataFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; DataFormat->DataFormat.Specifier = KSDATAFORMAT_SPECIFIER_WAVEFORMATEX; DataFormat->DataFormat.SampleSize = 4; + + /* Write additional fields for Extensible audio format */ + if (WaveFormatEx->wFormatTag == WAVE_FORMAT_EXTENSIBLE) + { + PWAVEFORMATEXTENSIBLE WaveFormatExt = (PWAVEFORMATEXTENSIBLE)&DataFormat->WaveFormatEx; + WaveFormatExt->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; + WaveFormatExt->Samples.wValidBitsPerSample = WaveFormatEx->wBitsPerSample; + if (WaveFormatEx->nChannels == 0) + WaveFormatExt->dwChannelMask = KSAUDIO_SPEAKER_DIRECTOUT; + else if (WaveFormatEx->nChannels == 1) + WaveFormatExt->dwChannelMask = KSAUDIO_SPEAKER_MONO; + else if (WaveFormatEx->nChannels == 2) + WaveFormatExt->dwChannelMask = KSAUDIO_SPEAKER_STEREO; + else if (WaveFormatEx->nChannels == 4) + WaveFormatExt->dwChannelMask = KSAUDIO_SPEAKER_QUAD; + else if (WaveFormatEx->nChannels == 5) + WaveFormatExt->dwChannelMask = KSAUDIO_SPEAKER_5POINT1; + else if (WaveFormatEx->nChannels == 7) + WaveFormatExt->dwChannelMask = KSAUDIO_SPEAKER_7POINT1; + } } MIXER_STATUS @@ -232,7 +250,7 @@ MMixerOpenWavePin( return MM_STATUS_INVALID_PARAMETER; /* allocate pin connect */ - PinConnect = MMixerAllocatePinConnect(MixerContext, sizeof(KSDATAFORMAT_WAVEFORMATEX)); + PinConnect = MMixerAllocatePinConnect(MixerContext, sizeof(KSDATAFORMAT_WAVEFORMATEX) + WaveFormatEx->cbSize); if (!PinConnect) { /* no memory */ @@ -453,12 +471,6 @@ MMixerOpenWave( /* grab mixer list */ MixerList = (PMIXER_LIST)MixerContext->MixerContext; - if (WaveFormat->wFormatTag != WAVE_FORMAT_PCM) - { - /* not implemented */ - return MM_STATUS_NOT_IMPLEMENTED; - } - /* find destination wave */ Status = MMixerGetWaveInfoByIndexAndType(MixerList, DeviceIndex, bWaveIn, &WaveInfo); if (Status != MM_STATUS_SUCCESS) From 938a39aee969bfff2c17f9a384a58868e6d60722 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Thu, 11 Apr 2024 19:54:11 +0200 Subject: [PATCH 22/44] [COMDLG32] cdlg_Sq.rc: Strip 2 includes (#6730) They do look weird/wrong and no other rcs do have them. Builds fine on all bots. I do have no clue, why they were added here historically. --- dll/win32/comdlg32/lang/cdlg_Sq.rc | 3 --- 1 file changed, 3 deletions(-) diff --git a/dll/win32/comdlg32/lang/cdlg_Sq.rc b/dll/win32/comdlg32/lang/cdlg_Sq.rc index ea0a817ebac..ea49c077405 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sq.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sq.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cdlg.h" -#include "filedlgbrowser.h" - LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL STRINGTABLE From 64a59a17b5e2828adb1a81e24647e5ec1266e78e Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Fri, 12 Apr 2024 06:31:24 +0200 Subject: [PATCH 23/44] [REGEDIT] RC: it-IT: Strip spaces, hu-HU,pt-PT,tr-TR: add FIXMEs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The it-IT.rc thingy I spotted when I wanted to port back the regedit-changes from 0.4.15-dev-6592-g 995d2559623380857ce5f371c2401cd8a8ff2913 The line definitely got improved by that commit, but it was still inferior. In the other 3 langs it is just some stuff where master head is inferior to older branches, I spotted them while porting back other things. So I placed the FIXMEs to protect myself from porting it back accidentally, and to help the native speakers with seeing them on master head. The tr-TR.rc: "D&izi Değeri" -> "D&ize Değeri" was done for consistency, because we do have that item 3 times, and 2 of them were using "D&ize Değeri" already. --- base/applications/regedit/lang/hu-HU.rc | 4 ++-- base/applications/regedit/lang/it-IT.rc | 2 +- base/applications/regedit/lang/pt-PT.rc | 12 ++++++------ base/applications/regedit/lang/tr-TR.rc | 10 +++++----- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/base/applications/regedit/lang/hu-HU.rc b/base/applications/regedit/lang/hu-HU.rc index 082423cda65..d520872bf7a 100644 --- a/base/applications/regedit/lang/hu-HU.rc +++ b/base/applications/regedit/lang/hu-HU.rc @@ -80,7 +80,7 @@ END IDR_REGEDIT_MENU MENU BEGIN - POPUP "&File" + POPUP "&File" //FIXME: accelerator collision &F BEGIN MENUITEM "&Import Registry File...", ID_REGISTRY_IMPORTREGISTRYFILE MENUITEM "&Export Registry File...", ID_REGISTRY_EXPORTREGISTRYFILE @@ -128,7 +128,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Refresh\tF5", ID_VIEW_REFRESH END - POPUP "&Favorites" + POPUP "&Favorites" //FIXME: accelerator collision &F BEGIN MENUITEM "&Add to Favorites", ID_FAVOURITES_ADDTOFAVOURITES, GRAYED MENUITEM "&Remove Favorite", ID_FAVOURITES_REMOVEFAVOURITE, GRAYED diff --git a/base/applications/regedit/lang/it-IT.rc b/base/applications/regedit/lang/it-IT.rc index 358758dcfe0..006df7a8438 100644 --- a/base/applications/regedit/lang/it-IT.rc +++ b/base/applications/regedit/lang/it-IT.rc @@ -565,7 +565,7 @@ END STRINGTABLE BEGIN - IDS_IMPORT_PROMPT "Aggiungendo informazioni si possono involontariamente modificare o eliminare i valori e causare il giusto funzionamente dei componenti.\n Se non si considera attendibile la fonte di queste informazioni in '%s', non aggiungere al Registro di sistema.\n\n Si desidera continuare? " + IDS_IMPORT_PROMPT "Aggiungendo informazioni si possono involontariamente modificare o eliminare i valori e causare il giusto funzionamente dei componenti.\nSe non si considera attendibile la fonte di queste informazioni in '%s', non aggiungere al Registro di sistema.\n\nSi desidera continuare?" IDS_IMPORT_OK "Le chiavi e i valori contenuti in '%s' sono stati correttamente aggiunti al Registro di sistema." IDS_IMPORT_ERROR "Impossibile importare '%s': Errore durante l'apertura del file. Ci può essere un disco, file cdanneggiati o il file non esiste." IDS_EXPORT_ERROR "Impossibile esportare '%s': Errore durante la creazione o la scrittura del file. Ci può essere un disco o un file di sistema danneggiato." diff --git a/base/applications/regedit/lang/pt-PT.rc b/base/applications/regedit/lang/pt-PT.rc index b162805e7d3..74bcb698eb1 100644 --- a/base/applications/regedit/lang/pt-PT.rc +++ b/base/applications/regedit/lang/pt-PT.rc @@ -145,11 +145,11 @@ IDR_POPUP_MENUS MENU BEGIN POPUP "" BEGIN - MENUITEM "&Modificar", ID_EDIT_MODIFY + MENUITEM "&Modificar", ID_EDIT_MODIFY //FIXME: accelerator collision &M MENUITEM "Modificar dados binários", ID_EDIT_MODIFY_BIN MENUITEM SEPARATOR MENUITEM "&Excluir\tDel", ID_EDIT_DELETE - MENUITEM "&Mudar o nome", ID_EDIT_RENAME + MENUITEM "&Mudar o nome", ID_EDIT_RENAME //FIXME: accelerator collision &M END POPUP "" BEGIN @@ -179,10 +179,10 @@ BEGIN END MENUITEM "&Localizar...", ID_EDIT_FIND MENUITEM SEPARATOR - MENUITEM "&Eliminar", ID_TREE_DELETE + MENUITEM "&Eliminar", ID_TREE_DELETE //FIXME: accelerator collision &E MENUITEM "&Mudar o nome", ID_TREE_RENAME MENUITEM SEPARATOR - MENUITEM "&Exportar", ID_TREE_EXPORT + MENUITEM "&Exportar", ID_TREE_EXPORT //FIXME: accelerator collision &E MENUITEM "&Permissões...", ID_TREE_PERMISSIONS MENUITEM SEPARATOR MENUITEM "&Copiar chave 'Nome'", ID_EDIT_COPYKEYNAME @@ -198,8 +198,8 @@ BEGIN POPUP "" BEGIN MENUITEM "C&ortar", ID_HEXEDIT_CUT - MENUITEM "&Copiar", ID_HEXEDIT_COPY - MENUITEM "&Colar", ID_HEXEDIT_PASTE + MENUITEM "&Copiar", ID_HEXEDIT_COPY //FIXME: accelerator collision &C + MENUITEM "&Colar", ID_HEXEDIT_PASTE //FIXME: accelerator collision &C MENUITEM "&Excluir", ID_HEXEDIT_DELETE MENUITEM SEPARATOR MENUITEM "Seleccionar &Tudo", ID_HEXEDIT_SELECT_ALL diff --git a/base/applications/regedit/lang/tr-TR.rc b/base/applications/regedit/lang/tr-TR.rc index a512828a3f3..64a6c13b886 100644 --- a/base/applications/regedit/lang/tr-TR.rc +++ b/base/applications/regedit/lang/tr-TR.rc @@ -82,7 +82,7 @@ END IDR_REGEDIT_MENU MENU BEGIN - POPUP "&Dosya" + POPUP "&Dosya" //FIXME: accelerator collision &D. If you decide to change this then please keep it in sync with the "&Dosya" in IDC_REGEDIT MENU BEGIN MENUITEM "&Al...", ID_REGISTRY_IMPORTREGISTRYFILE MENUITEM "&Ver...", ID_REGISTRY_EXPORTREGISTRYFILE @@ -97,7 +97,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "&Çıkış", ID_REGISTRY_EXIT END - POPUP "&Düzen" + POPUP "&Düzen" //FIXME: accelerator collision &D BEGIN MENUITEM "&Değiştir...", ID_EDIT_MODIFY MENUITEM SEPARATOR @@ -159,7 +159,7 @@ BEGIN BEGIN MENUITEM "&Anahtar", ID_EDIT_NEW_KEY MENUITEM SEPARATOR - MENUITEM "D&izi Değeri", ID_EDIT_NEW_STRINGVALUE + MENUITEM "D&ize Değeri", ID_EDIT_NEW_STRINGVALUE MENUITEM "İ&kili Değer", ID_EDIT_NEW_BINARYVALUE MENUITEM "&DWORD Değeri", ID_EDIT_NEW_DWORDVALUE MENUITEM "&Çoklu Dize Değeri", ID_EDIT_NEW_MULTISTRINGVALUE @@ -199,8 +199,8 @@ BEGIN END POPUP "" BEGIN - MENUITEM "&Kes", ID_HEXEDIT_CUT - MENUITEM "&Kopyala", ID_HEXEDIT_COPY + MENUITEM "&Kes", ID_HEXEDIT_CUT //FIXME: accelerator collision &K + MENUITEM "&Kopyala", ID_HEXEDIT_COPY //FIXME: accelerator collision &K MENUITEM "&Yapıştır", ID_HEXEDIT_PASTE MENUITEM "&Sil", ID_HEXEDIT_DELETE MENUITEM SEPARATOR From 31ce37da2ace6cf1c3fc35c1dd6ce138263f65f7 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Fri, 12 Apr 2024 21:29:07 +0900 Subject: [PATCH 24/44] [SHELL32][SHELL32_APITEST][SDK] Implement GUIDFromStringA (#6734) Implementing missing features... JIRA issue: CORE-19278 - Add GUIDFromString testcase. - Implement GUIDFromStringA function. - Add NULL check to GUIDFromStringW. - Add GUIDFromStringA prototype to "undocshell.h". --- dll/win32/shell32/wine/shellord.c | 13 +- .../rostests/apitests/shell32/CMakeLists.txt | 1 + .../apitests/shell32/GUIDFromString.cpp | 119 ++++++++++++++++++ modules/rostests/apitests/shell32/testlist.c | 2 + sdk/include/reactos/undocshell.h | 6 +- 5 files changed, 136 insertions(+), 5 deletions(-) create mode 100644 modules/rostests/apitests/shell32/GUIDFromString.cpp diff --git a/dll/win32/shell32/wine/shellord.c b/dll/win32/shell32/wine/shellord.c index 3779b2e7e56..b02da92b1bf 100644 --- a/dll/win32/shell32/wine/shellord.c +++ b/dll/win32/shell32/wine/shellord.c @@ -1889,8 +1889,14 @@ DWORD WINAPI DoEnvironmentSubstAW(LPVOID x, UINT y) */ BOOL WINAPI GUIDFromStringA(LPCSTR str, LPGUID guid) { - TRACE("GUIDFromStringA() stub\n"); - return FALSE; + ANSI_STRING ansi_str; + WCHAR szWide[40]; + UNICODE_STRING guid_str = { 0, sizeof(szWide), szWide }; + if (*str != '{') + return FALSE; + RtlInitAnsiString(&ansi_str, str); + return !RtlAnsiStringToUnicodeString(&guid_str, &ansi_str, FALSE) && + !RtlGUIDFromString(&guid_str, guid); } /************************************************************************* @@ -1899,7 +1905,8 @@ BOOL WINAPI GUIDFromStringA(LPCSTR str, LPGUID guid) BOOL WINAPI GUIDFromStringW(LPCWSTR str, LPGUID guid) { UNICODE_STRING guid_str; - + if (!str || *str != L'{') + return FALSE; RtlInitUnicodeString(&guid_str, str); return !RtlGUIDFromString(&guid_str, guid); } diff --git a/modules/rostests/apitests/shell32/CMakeLists.txt b/modules/rostests/apitests/shell32/CMakeLists.txt index 62cbc898ee6..acd85a23c3f 100644 --- a/modules/rostests/apitests/shell32/CMakeLists.txt +++ b/modules/rostests/apitests/shell32/CMakeLists.txt @@ -17,6 +17,7 @@ list(APPEND SOURCE ExtractIconEx.cpp FindExecutable.cpp GetDisplayNameOf.cpp + GUIDFromString.cpp Int64ToString.cpp IShellFolderViewCB.cpp OpenAs_RunDLL.cpp diff --git a/modules/rostests/apitests/shell32/GUIDFromString.cpp b/modules/rostests/apitests/shell32/GUIDFromString.cpp new file mode 100644 index 00000000000..597892c755d --- /dev/null +++ b/modules/rostests/apitests/shell32/GUIDFromString.cpp @@ -0,0 +1,119 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Tests for GUIDFromStringA/W + * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ + */ + +#include +#include +#include +#include + +DEFINE_GUID(invalid_guid, 0xDEADDEAD, 0xDEAD, 0xDEAD, 0xED, 0xED, 0xED, 0xED, + 0xED, 0xED, 0xED, 0xED); + +//DEFINE_GUID(IID_IShellLinkW, 0x000214F9, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, +// 0x00, 0x00, 0x00, 0x46); +//DEFINE_GUID(IID_IShellLinkW_Invalid, 0x000214F9, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, +// 0x00, 0x00, 0x00, 0xED); + +static void TEST_GUIDFromStringA(void) +{ + GUID guid; + BOOL ret; + + guid = invalid_guid; + _SEH2_TRY + { + ret = GUIDFromStringA(NULL, &guid); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + ret = 0xDEADBEEF; + } + _SEH2_END; + + if (IsWindowsVistaOrGreater()) + ok_int(ret, FALSE); + else + ok_int(ret, 0xDEADBEEF); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringA("", &guid), FALSE); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringA("{", &guid), FALSE); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046", &guid), FALSE); + //ok_int(memcmp(&guid, &IID_IShellLinkW_Invalid, sizeof(guid)) == 0, TRUE); // Ignorable corner case + + guid = invalid_guid; + ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046}", &guid), TRUE); + ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringA("{000214F9-0000-0000-C000-000000000046}g", &guid), TRUE); + ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringA(" {000214F9-0000-0000-C000-000000000046}", &guid), FALSE); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); +} + +static void TEST_GUIDFromStringW(void) +{ + GUID guid; + BOOL ret; + + guid = invalid_guid; + _SEH2_TRY + { + ret = GUIDFromStringW(NULL, &guid); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + ret = 0xDEADBEEF; + } + _SEH2_END; + + if (IsWindowsVistaOrGreater()) + ok_int(ret, 0xDEADBEEF); + else + ok_int(ret, FALSE); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringW(L"", &guid), FALSE); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringW(L"{", &guid), FALSE); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046", &guid), FALSE); + //ok_int(memcmp(&guid, &IID_IShellLinkW_Invalid, sizeof(guid)) == 0, TRUE); // Ignorable corner case + + guid = invalid_guid; + ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046}", &guid), TRUE); + ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringW(L"{000214F9-0000-0000-C000-000000000046}g", &guid), TRUE); + ok_int(memcmp(&guid, &IID_IShellLinkW, sizeof(guid)) == 0, TRUE); + + guid = invalid_guid; + ok_int(GUIDFromStringW(L" {000214F9-0000-0000-C000-000000000046}", &guid), FALSE); + ok_int(memcmp(&guid, &invalid_guid, sizeof(guid)) == 0, TRUE); +} + +START_TEST(GUIDFromString) +{ + TEST_GUIDFromStringA(); + TEST_GUIDFromStringW(); +} diff --git a/modules/rostests/apitests/shell32/testlist.c b/modules/rostests/apitests/shell32/testlist.c index e3a83c19106..7e42b733569 100644 --- a/modules/rostests/apitests/shell32/testlist.c +++ b/modules/rostests/apitests/shell32/testlist.c @@ -17,6 +17,7 @@ extern void func_DragDrop(void); extern void func_ExtractIconEx(void); extern void func_FindExecutable(void); extern void func_GetDisplayNameOf(void); +extern void func_GUIDFromString(void); extern void func_Int64ToString(void); extern void func_IShellFolderViewCB(void); extern void func_menu(void); @@ -57,6 +58,7 @@ const struct test winetest_testlist[] = { "ExtractIconEx", func_ExtractIconEx }, { "FindExecutable", func_FindExecutable }, { "GetDisplayNameOf", func_GetDisplayNameOf }, + { "GUIDFromString", func_GUIDFromString }, { "Int64ToString", func_Int64ToString }, { "IShellFolderViewCB", func_IShellFolderViewCB }, { "menu", func_menu }, diff --git a/sdk/include/reactos/undocshell.h b/sdk/include/reactos/undocshell.h index bb216df8ad8..0460a261cb7 100644 --- a/sdk/include/reactos/undocshell.h +++ b/sdk/include/reactos/undocshell.h @@ -727,10 +727,12 @@ HRESULT WINAPI SHCreatePropertyBag(_In_ REFIID riid, _Out_ void **ppvObj); HRESULT WINAPI SHLimitInputCombo(HWND hWnd, IShellFolder *psf); HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv); +BOOL WINAPI GUIDFromStringA( + _In_ PCSTR psz, + _Out_ LPGUID pguid); BOOL WINAPI GUIDFromStringW( _In_ PCWSTR psz, - _Out_ LPGUID pguid - ); + _Out_ LPGUID pguid); LPSTR WINAPI SheRemoveQuotesA(LPSTR psz); LPWSTR WINAPI SheRemoveQuotesW(LPWSTR psz); From 76290a6696f30f144100482ec02d4eb88057b2af Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Fri, 12 Apr 2024 15:58:52 -0500 Subject: [PATCH 25/44] [NTUSER] Avoid sending superfluous WM_MOUSEMOVE messages (#6397) Add a check so that mouse move messages are not generated unless the mouse cursor X or Y position is changed. This fixes extra mouse moves generated when clicking. Patch by I_Kill_Bugs. CORE-8394 CORE-18529 CORE-19422 CORE-19423 --- win32ss/user/ntuser/cursoricon.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/win32ss/user/ntuser/cursoricon.c b/win32ss/user/ntuser/cursoricon.c index 6560a44852d..8dc794f62c0 100644 --- a/win32ss/user/ntuser/cursoricon.c +++ b/win32ss/user/ntuser/cursoricon.c @@ -264,13 +264,15 @@ BOOL UserSetCursorPos( INT x, INT y, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Ho pt.x = x; pt.y = y; - /* 1. Generate a mouse move message, this sets the htEx and Track Window too. */ - Msg.message = WM_MOUSEMOVE; - Msg.wParam = UserGetMouseButtonsState(); - Msg.lParam = MAKELPARAM(x, y); - Msg.pt = pt; - co_MsqInsertMouseMessage(&Msg, flags, dwExtraInfo, Hook); - + if ((gpsi->ptCursor.x != x) || (gpsi->ptCursor.y != y)) + { + /* 1. Generate a mouse move message, this sets the htEx and Track Window too. */ + Msg.message = WM_MOUSEMOVE; + Msg.wParam = UserGetMouseButtonsState(); + Msg.lParam = MAKELPARAM(x, y); + Msg.pt = pt; + co_MsqInsertMouseMessage(&Msg, flags, dwExtraInfo, Hook); + } /* 2. Store the new cursor position */ gpsi->ptCursor = pt; From 14beaec1d9e89c7876e6e6686b5f0bc071887ea7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 9 Mar 2024 18:29:35 +0200 Subject: [PATCH 26/44] [SHELLBTRFS] Prevent redeclaration of __cpuidex with newer mingw-w64 headers --- dll/shellext/shellbtrfs/recv.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dll/shellext/shellbtrfs/recv.cpp b/dll/shellext/shellbtrfs/recv.cpp index 673df5c42fb..a1e09591043 100644 --- a/dll/shellext/shellbtrfs/recv.cpp +++ b/dll/shellext/shellbtrfs/recv.cpp @@ -27,6 +27,9 @@ #ifndef _MSC_VER +#ifdef __REACTOS__ +#define __cpuidex __cpuidex_ // prevent redeclaration +#endif #include #else #include From f61e14f554f5a1bad66b1e7bc26ab629db42fd4f Mon Sep 17 00:00:00 2001 From: Ratin Gao Date: Tue, 19 Dec 2023 01:35:30 +0800 Subject: [PATCH 27/44] [NTDLL][ADVAPI32][ADVAPI32_APITEST][CRYPTLIB] Add hash API exports for NT6+ and apitests with small fixes - For NT6.0+, NTDLL exports those hash APIs that ADVAPI32 thunks forward to - Fix undocumented context structure layout and content - Add apitests to verify both of hash result and structure content --- dll/ntdll/CMakeLists.txt | 3 + dll/ntdll/def/ntdll.spec | 18 +- dll/win32/advapi32/advapi32.spec | 27 +- .../rostests/apitests/advapi32/CMakeLists.txt | 1 + modules/rostests/apitests/advapi32/Hash.c | 303 ++++++++++++++++++ modules/rostests/apitests/advapi32/testlist.c | 2 + sdk/lib/cryptlib/md4.c | 1 + sdk/lib/cryptlib/md5.c | 1 + sdk/lib/cryptlib/sha1.c | 1 + sdk/lib/cryptlib/sha1.h | 7 +- 10 files changed, 342 insertions(+), 22 deletions(-) create mode 100644 modules/rostests/apitests/advapi32/Hash.c diff --git a/dll/ntdll/CMakeLists.txt b/dll/ntdll/CMakeLists.txt index 3fee0a79ce1..f416bb85ed7 100644 --- a/dll/ntdll/CMakeLists.txt +++ b/dll/ntdll/CMakeLists.txt @@ -62,6 +62,9 @@ set_subsystem(ntdll console) ################# END HACK ################# target_link_libraries(ntdll csrlib rtl rtl_um rtl_vista ntdllsys libcntpr uuid ${PSEH_LIB}) +if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600) + target_link_libraries(ntdll cryptlib) +endif() if (STACK_PROTECTOR) target_sources(ntdll PRIVATE $) diff --git a/dll/ntdll/def/ntdll.spec b/dll/ntdll/def/ntdll.spec index d4ad13d38bc..aa1cf0ca734 100644 --- a/dll/ntdll/def/ntdll.spec +++ b/dll/ntdll/def/ntdll.spec @@ -10,9 +10,9 @@ @ stdcall -arch=i386 ExpInterlockedPopEntrySListEnd() @ stdcall -arch=i386 ExpInterlockedPopEntrySListFault() @ stdcall -arch=i386 ExpInterlockedPopEntrySListResume() -@ stdcall -stub -version=0x600+ A_SHAFinal(ptr ptr) -@ stdcall -stub -version=0x600+ A_SHAInit(ptr) -@ stdcall -stub -version=0x600+ A_SHAUpdate(ptr ptr long) +@ stdcall -version=0x600+ A_SHAFinal(ptr ptr) +@ stdcall -version=0x600+ A_SHAInit(ptr) +@ stdcall -version=0x600+ A_SHAUpdate(ptr ptr long) @ stdcall -stub -version=0x600+ AlpcAdjustCompletionListConcurrencyCount(ptr long) @ stdcall -stub -version=0x600+ AlpcFreeCompletionListMessage(ptr ptr) @ stdcall -stub -version=0x600+ AlpcGetCompletionListLastMessageInformation(ptr ptr ptr) @@ -191,12 +191,12 @@ @ stub -version=0x600+ LdrpResGetMappingSize @ stub -version=0x600+ LdrpResGetRCConfig @ stub -version=0x600+ LdrpResGetResourceDirectory -@ stdcall -stub -version=0x600+ MD4Final(ptr) -@ stdcall -stub -version=0x600+ MD4Init(ptr) -@ stdcall -stub -version=0x600+ MD4Update(ptr ptr long) -@ stdcall -stub -version=0x600+ MD5Final(ptr) -@ stdcall -stub -version=0x600+ MD5Init(ptr) -@ stdcall -stub -version=0x600+ MD5Update(ptr ptr long) +@ stdcall -version=0x600+ MD4Final(ptr) +@ stdcall -version=0x600+ MD4Init(ptr) +@ stdcall -version=0x600+ MD4Update(ptr ptr long) +@ stdcall -version=0x600+ MD5Final(ptr) +@ stdcall -version=0x600+ MD5Init(ptr) +@ stdcall -version=0x600+ MD5Update(ptr ptr long) @ extern NlsAnsiCodePage @ extern NlsMbCodePageTag @ extern NlsMbOemCodePageTag diff --git a/dll/win32/advapi32/advapi32.spec b/dll/win32/advapi32/advapi32.spec index e158d6a5c48..e79390f57ba 100644 --- a/dll/win32/advapi32/advapi32.spec +++ b/dll/win32/advapi32/advapi32.spec @@ -1,7 +1,10 @@ 1 stdcall I_ScGetCurrentGroupStateW(ptr wstr ptr) -@ stdcall A_SHAFinal(ptr ptr) -@ stdcall A_SHAInit(ptr) -@ stdcall A_SHAUpdate(ptr ptr long) +@ stdcall -version=0x502 A_SHAFinal(ptr ptr) +@ stdcall -version=0x600+ A_SHAFinal(ptr ptr) ntdll.A_SHAFinal +@ stdcall -version=0x502 A_SHAInit(ptr) +@ stdcall -version=0x600+ A_SHAInit(ptr) ntdll.A_SHAInit +@ stdcall -version=0x502 A_SHAUpdate(ptr ptr long) +@ stdcall -version=0x600+ A_SHAUpdate(ptr ptr long) ntdll.A_SHAUpdate @ stdcall AbortSystemShutdownA(ptr) @ stdcall AbortSystemShutdownW(ptr) @ stdcall AccessCheck(ptr long long ptr ptr ptr ptr ptr) @@ -405,12 +408,18 @@ @ stdcall LsaSetTrustedDomainInfoByName(ptr ptr long ptr) @ stdcall LsaSetTrustedDomainInformation(ptr ptr long ptr) @ stdcall LsaStorePrivateData(ptr ptr ptr) -@ stdcall MD4Final(ptr) -@ stdcall MD4Init(ptr) -@ stdcall MD4Update(ptr ptr long) -@ stdcall MD5Final(ptr) -@ stdcall MD5Init(ptr) -@ stdcall MD5Update(ptr ptr long) +@ stdcall -version=0x502 MD4Final(ptr) +@ stdcall -version=0x600+ MD4Final(ptr) ntdll.MD4Final +@ stdcall -version=0x502 MD4Init(ptr) +@ stdcall -version=0x600+ MD4Init(ptr) ntdll.MD4Init +@ stdcall -version=0x502 MD4Update(ptr ptr long) +@ stdcall -version=0x600+ MD4Update(ptr ptr long) ntdll.MD4Update +@ stdcall -version=0x502 MD5Final(ptr) +@ stdcall -version=0x600+ MD5Final(ptr) ntdll.MD5Final +@ stdcall -version=0x502 MD5Init(ptr) +@ stdcall -version=0x600+ MD5Init(ptr) ntdll.MD5Init +@ stdcall -version=0x502 MD5Update(ptr ptr long) +@ stdcall -version=0x600+ MD5Update(ptr ptr long) ntdll.MD5Update @ stub MSChapSrvChangePassword2 @ stub MSChapSrvChangePassword @ stdcall MakeAbsoluteSD2(ptr ptr) diff --git a/modules/rostests/apitests/advapi32/CMakeLists.txt b/modules/rostests/apitests/advapi32/CMakeLists.txt index 8a9bab7abd6..45c91859cb2 100644 --- a/modules/rostests/apitests/advapi32/CMakeLists.txt +++ b/modules/rostests/apitests/advapi32/CMakeLists.txt @@ -3,6 +3,7 @@ list(APPEND SOURCE CreateService.c DuplicateTokenEx.c eventlog.c + Hash.c HKEY_CLASSES_ROOT.c IsTextUnicode.c LockServiceDatabase.c diff --git a/modules/rostests/apitests/advapi32/Hash.c b/modules/rostests/apitests/advapi32/Hash.c new file mode 100644 index 00000000000..aa4a3b8cdf4 --- /dev/null +++ b/modules/rostests/apitests/advapi32/Hash.c @@ -0,0 +1,303 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Tests for basic hash APIs + * COPYRIGHT: Copyright 2023 Ratin Gao + */ + +#include "precomp.h" + +typedef struct _A_SHA_CTX +{ + UCHAR Buffer[64]; + ULONG State[5]; + ULONG Count[2]; +} A_SHA_CTX, *PA_SHA_CTX; + +#define A_SHA_DIGEST_LEN 20 + +typedef struct _MD5_CTX +{ + ULONG Count[2]; + ULONG State[4]; + UCHAR Buffer[64]; + UCHAR Hash[16]; +} MD5_CTX, *PMD5_CTX; + +#define MD5_DIGEST_LEN 16 + +typedef struct _MD4_CTX +{ + ULONG State[4]; + ULONG Count[2]; + UCHAR Buffer[64]; + UCHAR Hash[16]; +} MD4_CTX, *PMD4_CTX; + +#define MD4_DIGEST_LEN 16 + +#ifndef RSA32API +#define RSA32API __stdcall +#endif + +typedef +VOID +RSA32API +FN_A_SHAInit( + _Out_ PA_SHA_CTX Context); + +typedef +VOID +RSA32API +FN_A_SHAUpdate( + _Inout_ PA_SHA_CTX Context, + _In_reads_(BufferSize) PUCHAR Buffer, + _In_ ULONG BufferSize); + +typedef +VOID +RSA32API +FN_A_SHAFinal( + _Inout_ PA_SHA_CTX Context, + _Out_ PUCHAR Result); + +typedef +VOID +RSA32API +FN_MD5Init( + _Out_ PMD5_CTX Context); + +typedef +VOID +RSA32API +FN_MD5Update( + _Inout_ PMD5_CTX Context, + _In_reads_(BufferSize) PUCHAR Buffer, + _In_ ULONG BufferSize); + +typedef +VOID +RSA32API +FN_MD5Final( + _Inout_ PMD5_CTX Context); + +typedef +VOID +RSA32API +FN_MD4Init( + _Out_ PMD4_CTX Context); + +typedef +VOID +RSA32API +FN_MD4Update( + _Inout_ PMD4_CTX Context, + _In_reads_(BufferSize) PUCHAR Buffer, + _In_ ULONG BufferSize); + +typedef +VOID +RSA32API +FN_MD4Final( + _Inout_ PMD4_CTX Context); + +static HMODULE g_hAdvapi32 = NULL; +static ANSI_STRING g_TestString = RTL_CONSTANT_STRING("ReactOS Hash API Test String"); + +static ULONG g_ctxSHA1StateInit[] = { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 }; +static UCHAR g_aucSHA1Result[A_SHA_DIGEST_LEN] = { + 0xEC, 0x05, 0x43, 0xE7, 0xDE, 0x8A, 0xEE, 0xFF, + 0xAD, 0x72, 0x2B, 0x9D, 0x55, 0x4F, 0xCA, 0x6A, + 0x8D, 0x81, 0xF1, 0xC7 +}; + +static ULONG g_aulMD5Or4StateInit[] = { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476 }; +static UCHAR g_aucMD5Result[MD5_DIGEST_LEN] = { + 0x3D, 0xE8, 0x23, 0x8B, 0x9D, 0xE0, 0xCE, 0x48, + 0xB1, 0x1B, 0xDD, 0xD9, 0xC6, 0x86, 0xB2, 0xDE +}; +static UCHAR g_aucMD4Result[MD4_DIGEST_LEN] = { + 0xE0, 0xE8, 0x50, 0x8A, 0x4D, 0x11, 0x02, 0xA6, + 0x6A, 0xF0, 0xA7, 0xAB, 0xD8, 0xC4, 0x40, 0xED +}; + +static void Test_SHA1(void) +{ + FN_A_SHAInit* pfnA_SHAInit; + FN_A_SHAUpdate* pfnA_SHAUpdate; + FN_A_SHAFinal* pfnA_SHAFinal; + DECLSPEC_ALIGN(4) A_SHA_CTX ctx; + UCHAR Result[A_SHA_DIGEST_LEN]; + SIZE_T ComparedSize; + + /* Load functions */ + pfnA_SHAInit = (FN_A_SHAInit*)GetProcAddress(g_hAdvapi32, "A_SHAInit"); + pfnA_SHAUpdate = (FN_A_SHAUpdate*)GetProcAddress(g_hAdvapi32, "A_SHAUpdate"); + pfnA_SHAFinal = (FN_A_SHAFinal*)GetProcAddress(g_hAdvapi32, "A_SHAFinal"); + + if (!pfnA_SHAInit || !pfnA_SHAUpdate || !pfnA_SHAFinal) + { + skip("advapi32.dll!A_SHA*** not found\n"); + return; + } + + /* Test A_SHAInit */ + pfnA_SHAInit(&ctx); + ComparedSize = RtlCompareMemory(ctx.State, + g_ctxSHA1StateInit, + RTL_FIELD_SIZE(A_SHA_CTX, State)); + ok_eq_size(ComparedSize, RTL_FIELD_SIZE(A_SHA_CTX, State)); + ok_eq_ulong(ctx.Count[0], 0UL); + ok_eq_ulong(ctx.Count[1], 0UL); + + /* Test A_SHAUpdate */ + pfnA_SHAUpdate(&ctx, (PUCHAR)g_TestString.Buffer, g_TestString.Length); + ComparedSize = RtlCompareMemory(ctx.Buffer, + g_TestString.Buffer, + g_TestString.Length); + ok_eq_size(ComparedSize, g_TestString.Length); + ComparedSize = RtlCompareMemory(ctx.State, + g_ctxSHA1StateInit, + RTL_FIELD_SIZE(A_SHA_CTX, State)); + ok_eq_size(ComparedSize, RTL_FIELD_SIZE(A_SHA_CTX, State)); + ok_eq_ulong(ctx.Count[0], 0UL); + ok_eq_ulong(ctx.Count[1], (ULONG)g_TestString.Length); + + /* Test A_SHAFinal */ + pfnA_SHAFinal(&ctx, Result); + ComparedSize = RtlCompareMemoryUlong(ctx.Buffer, sizeof(ctx.Buffer), 0); + ok_eq_size(ComparedSize, sizeof(ctx.Buffer)); + ComparedSize = RtlCompareMemory(ctx.State, + g_ctxSHA1StateInit, + RTL_FIELD_SIZE(A_SHA_CTX, State)); + ok_eq_size(ComparedSize, RTL_FIELD_SIZE(A_SHA_CTX, State)); + ok_eq_ulong(ctx.Count[0], 0UL); + ok_eq_ulong(ctx.Count[1], 0UL); + ComparedSize = RtlCompareMemory(Result, g_aucSHA1Result, A_SHA_DIGEST_LEN); + ok_eq_size(ComparedSize, A_SHA_DIGEST_LEN); +} + +static void Test_MD5(void) +{ + FN_MD5Init* pfnMD5Init; + FN_MD5Update* pfnMD5Update; + FN_MD5Final* pfnMD5Final; + DECLSPEC_ALIGN(4) MD5_CTX ctx; + SIZE_T ComparedSize; + + /* Load functions */ + pfnMD5Init = (FN_MD5Init*)GetProcAddress(g_hAdvapi32, "MD5Init"); + pfnMD5Update = (FN_MD5Update*)GetProcAddress(g_hAdvapi32, "MD5Update"); + pfnMD5Final = (FN_MD5Final*)GetProcAddress(g_hAdvapi32, "MD5Final"); + + if (!pfnMD5Init || !pfnMD5Update || !pfnMD5Final) + { + skip("advapi32.dll!MD5*** not found\n"); + return; + } + + /* Test MD5Init */ + pfnMD5Init(&ctx); + ok_eq_ulong(ctx.Count[0], 0UL); + ok_eq_ulong(ctx.Count[1], 0UL); + ComparedSize = RtlCompareMemory(ctx.State, + g_aulMD5Or4StateInit, + RTL_FIELD_SIZE(MD5_CTX, State)); + ok_eq_size(ComparedSize, RTL_FIELD_SIZE(MD5_CTX, State)); + + /* Test MD5Update */ + pfnMD5Update(&ctx, (PUCHAR)g_TestString.Buffer, g_TestString.Length); + ComparedSize = RtlCompareMemory(ctx.Buffer, + g_TestString.Buffer, + g_TestString.Length); + ok_eq_size(ComparedSize, g_TestString.Length); + ComparedSize = RtlCompareMemory(ctx.State, + g_aulMD5Or4StateInit, + RTL_FIELD_SIZE(MD5_CTX, State)); + ok_eq_size(ComparedSize, RTL_FIELD_SIZE(MD5_CTX, State)); + ok_eq_ulong(ctx.Count[0], (ULONG)g_TestString.Length * CHAR_BIT); + ok_eq_ulong(ctx.Count[1], 0UL); + + /* Test MD5Final */ + pfnMD5Final(&ctx); + ok_eq_ulong(ctx.Count[0], 0x200UL); + ok_eq_ulong(ctx.Count[1], 0UL); + ok_eq_ulong(ctx.State[0], 0x8B23E83DUL); + ok_eq_ulong(ctx.State[1], 0x48CEE09DUL); + ok_eq_ulong(ctx.State[2], 0xD9DD1BB1UL); + ok_eq_ulong(ctx.State[3], 0xDEB286C6UL); + ComparedSize = RtlCompareMemoryUlong(ctx.Buffer, sizeof(ctx.Buffer), 0); + ok_eq_size(ComparedSize, sizeof(ctx.Buffer)); + ComparedSize = RtlCompareMemory(ctx.Hash, &g_aucMD5Result, MD5_DIGEST_LEN); + ok_eq_size(ComparedSize, MD5_DIGEST_LEN); +} + +static void Test_MD4(void) +{ + FN_MD4Init* pfnMD4Init; + FN_MD4Update* pfnMD4Update; + FN_MD4Final* pfnMD4Final; + DECLSPEC_ALIGN(4) MD4_CTX ctx; + SIZE_T ComparedSize; + + /* Load functions */ + pfnMD4Init = (FN_MD4Init*)GetProcAddress(g_hAdvapi32, "MD4Init"); + pfnMD4Update = (FN_MD4Update*)GetProcAddress(g_hAdvapi32, "MD4Update"); + pfnMD4Final = (FN_MD4Final*)GetProcAddress(g_hAdvapi32, "MD4Final"); + + if (!pfnMD4Init || !pfnMD4Update || !pfnMD4Final) + { + skip("advapi32.dll!MD4*** not found\n"); + return; + } + + /* Test MD4Init */ + pfnMD4Init(&ctx); + ok_eq_ulong(ctx.Count[0], 0UL); + ok_eq_ulong(ctx.Count[1], 0UL); + ComparedSize = RtlCompareMemory(ctx.State, + g_aulMD5Or4StateInit, + RTL_FIELD_SIZE(MD4_CTX, State)); + ok_eq_size(ComparedSize, RTL_FIELD_SIZE(MD4_CTX, State)); + + /* Test MD4Update */ + pfnMD4Update(&ctx, (PUCHAR)g_TestString.Buffer, g_TestString.Length); + ComparedSize = RtlCompareMemory(ctx.Buffer, + g_TestString.Buffer, + g_TestString.Length); + ok_eq_size(ComparedSize, g_TestString.Length); + ComparedSize = RtlCompareMemory(ctx.State, + g_aulMD5Or4StateInit, + RTL_FIELD_SIZE(MD4_CTX, State)); + ok_eq_size(ComparedSize, RTL_FIELD_SIZE(MD4_CTX, State)); + ok_eq_ulong(ctx.Count[0], (ULONG)g_TestString.Length * CHAR_BIT); + ok_eq_ulong(ctx.Count[1], 0UL); + + /* Test MD4Final */ + pfnMD4Final(&ctx); + ok_eq_ulong(ctx.Count[0], 0x200UL); + ok_eq_ulong(ctx.Count[1], 0UL); + ok_eq_ulong(ctx.State[0], 0x8A50E8E0UL); + ok_eq_ulong(ctx.State[1], 0xA602114DUL); + ok_eq_ulong(ctx.State[2], 0xABA7F06AUL); + ok_eq_ulong(ctx.State[3], 0xED40C4D8UL); + ComparedSize = RtlCompareMemoryUlong(ctx.Buffer, sizeof(ctx.Buffer), 0); + ok_eq_size(ComparedSize, sizeof(ctx.Buffer)); + ComparedSize = RtlCompareMemory(ctx.Hash, &g_aucMD4Result, MD4_DIGEST_LEN); + ok_eq_size(ComparedSize, MD4_DIGEST_LEN); +} + +START_TEST(Hash) +{ + /* Load advapi32.dll */ + g_hAdvapi32 = GetModuleHandleW(L"advapi32.dll"); + if (!g_hAdvapi32) + { + skip("Module advapi32 not found\n"); + return; + } + + Test_SHA1(); + Test_MD5(); + Test_MD4(); +} diff --git a/modules/rostests/apitests/advapi32/testlist.c b/modules/rostests/apitests/advapi32/testlist.c index 67764a03204..a48b3b9d496 100644 --- a/modules/rostests/apitests/advapi32/testlist.c +++ b/modules/rostests/apitests/advapi32/testlist.c @@ -6,6 +6,7 @@ extern void func_CreateService(void); extern void func_DuplicateTokenEx(void); extern void func_eventlog(void); +extern void func_Hash(void); extern void func_HKEY_CLASSES_ROOT(void); extern void func_IsTextUnicode(void); extern void func_LockServiceDatabase(void); @@ -27,6 +28,7 @@ const struct test winetest_testlist[] = { "CreateService", func_CreateService }, { "DuplicateTokenEx", func_DuplicateTokenEx }, { "eventlog_supp", func_eventlog }, + { "Hash", func_Hash }, { "HKEY_CLASSES_ROOT", func_HKEY_CLASSES_ROOT }, { "IsTextUnicode" , func_IsTextUnicode }, { "LockServiceDatabase" , func_LockServiceDatabase }, diff --git a/sdk/lib/cryptlib/md4.c b/sdk/lib/cryptlib/md4.c index a553a20eb4e..8144a65abd6 100644 --- a/sdk/lib/cryptlib/md4.c +++ b/sdk/lib/cryptlib/md4.c @@ -152,6 +152,7 @@ VOID NTAPI MD4Final( MD4_CTX *ctx ) MD4Transform( ctx->buf, (unsigned int *)ctx->in ); byteReverse( (unsigned char *)ctx->buf, 4 ); memcpy( ctx->digest, ctx->buf, 16 ); + memset(ctx->in, 0, sizeof(ctx->in)); } /* The three core functions */ diff --git a/sdk/lib/cryptlib/md5.c b/sdk/lib/cryptlib/md5.c index a847997172a..02dca4e166e 100644 --- a/sdk/lib/cryptlib/md5.c +++ b/sdk/lib/cryptlib/md5.c @@ -152,6 +152,7 @@ VOID NTAPI MD5Final( MD5_CTX *ctx ) MD5Transform( ctx->buf, (unsigned int *)ctx->in ); byteReverse( (unsigned char *)ctx->buf, 4 ); memcpy( ctx->digest, ctx->buf, 16 ); + memset(ctx->in, 0, sizeof(ctx->in)); } /* The four core functions - F1 is optimized somewhat */ diff --git a/sdk/lib/cryptlib/sha1.c b/sdk/lib/cryptlib/sha1.c index ba9cd7ba488..90a33297c6c 100644 --- a/sdk/lib/cryptlib/sha1.c +++ b/sdk/lib/cryptlib/sha1.c @@ -194,5 +194,6 @@ A_SHAFinal(PSHA_CTX Context, PULONG Result) for (Index = 0; Index < 5; Index++) Result[Index] = DWORD2BE(Context->State[Index]); + memset(Context->Buffer, 0, sizeof(Context->Buffer)); A_SHAInit(Context); } diff --git a/sdk/lib/cryptlib/sha1.h b/sdk/lib/cryptlib/sha1.h index 519d03e5bb5..5ea49ec3bb0 100644 --- a/sdk/lib/cryptlib/sha1.h +++ b/sdk/lib/cryptlib/sha1.h @@ -11,10 +11,9 @@ extern "C" { /* SHA Context Structure Declaration */ typedef struct { - ULONG Unknown[6]; - ULONG State[5]; - ULONG Count[2]; - UCHAR Buffer[64]; + UCHAR Buffer[64]; + ULONG State[5]; + ULONG Count[2]; } SHA_CTX, *PSHA_CTX; VOID NTAPI From 7fdec9600932e308ad66037b3fe5823f25cde174 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 13 Apr 2024 21:07:12 +0900 Subject: [PATCH 28/44] [SHELL32] Fix ParseDisplayName Part 2 (#6740) Follow-up to #6721. Reduce SHParseDisplayName failures. JIRA issue: CORE-19495 - Re-implement CFSFolder::ParseDisplayName method to validate the names. - Add CFSFolder::_ParseSimple, CFSFolder::_GetFindDataFromName, and CFSFolder::_CreateIDListFromName helper methods. - Add PathIsDotOrDotDotW, PathIsValidElement, PathIsDosDevice, and SHILAppend helper functions. - Delete GetNextElementW and add Shell_NextElement function. --- dll/win32/shell32/folders/CFSFolder.cpp | 235 +++++++++++++++--------- dll/win32/shell32/folders/CFSFolder.h | 8 + dll/win32/shell32/precomp.h | 8 +- dll/win32/shell32/shfldr.h | 10 +- dll/win32/shell32/shlfolder.cpp | 71 +++---- dll/win32/shell32/utils.cpp | 90 +++++++-- 6 files changed, 286 insertions(+), 136 deletions(-) diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index 978b0d440fd..f6546dc23bf 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -4,7 +4,7 @@ * PURPOSE: file system folder * COPYRIGHT: Copyright 1997 Marcus Meissner * Copyright 1998, 1999, 2002 Juergen Schmied - * Copyright 2019 Katayama Hirofumi MZ + * Copyright 2019-2024 Katayama Hirofumi MZ * Copyright 2020 Mark Jansen (mark.jansen@reactos.org) */ @@ -539,46 +539,6 @@ static const shvheader GenericSFHeader[] = { #define GENERICSHELLVIEWCOLUMNS 6 -/************************************************************************** - * SHELL32_CreatePidlFromBindCtx [internal] - * - * If the caller bound File System Bind Data, assume it is the - * find data for the path. - * This allows binding of paths that don't exist. - */ -LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path) -{ - IFileSystemBindData *fsbd = NULL; - LPITEMIDLIST pidl = NULL; - IUnknown *param = NULL; - WIN32_FIND_DATAW wfd; - HRESULT r; - - TRACE("%p %s\n", pbc, debugstr_w(path)); - - if (!pbc) - return NULL; - - /* see if the caller bound File System Bind Data */ - r = pbc->GetObjectParam((LPOLESTR)STR_FILE_SYS_BIND_DATA, ¶m); - if (FAILED(r)) - return NULL; - - r = param->QueryInterface(IID_PPV_ARG(IFileSystemBindData,&fsbd)); - if (SUCCEEDED(r)) - { - r = fsbd->GetFindData(&wfd); - if (SUCCEEDED(r)) - { - lstrcpynW(&wfd.cFileName[0], path, MAX_PATH); - pidl = _ILCreateFromFindDataW(&wfd); - } - fsbd->Release(); - } - - return pidl; -} - static HRESULT SHELL32_GetCLSIDForDirectory(LPCWSTR pwszDir, LPCWSTR KeyName, CLSID* pclsidFolder) { WCHAR wszCLSIDValue[CHARS_IN_GUID]; @@ -705,6 +665,91 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW return S_OK; } +HRESULT CFSFolder::_ParseSimple( + _In_ LPOLESTR lpszDisplayName, + _Out_ WIN32_FIND_DATAW *pFind, + _Out_ LPITEMIDLIST *ppidl) +{ + HRESULT hr; + LPWSTR pchNext = lpszDisplayName; + + *ppidl = NULL; + + LPITEMIDLIST pidl; + for (hr = S_OK; SUCCEEDED(hr); hr = SHILAppend(pidl, ppidl)) + { + hr = Shell_NextElement(&pchNext, pFind->cFileName, _countof(pFind->cFileName), FALSE); + if (hr != S_OK) + break; + + if (pchNext) + pFind->dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; + + pidl = _ILCreateFromFindDataW(pFind); + if (!pidl) + { + hr = E_OUTOFMEMORY; + break; + } + } + + if (SUCCEEDED(hr)) + return S_OK; + + if (*ppidl) + { + ILFree(*ppidl); + *ppidl = NULL; + } + + return hr; +} + +BOOL CFSFolder::_GetFindDataFromName(_In_ LPCWSTR pszName, _Out_ WIN32_FIND_DATAW *pFind) +{ + WCHAR szPath[MAX_PATH]; + lstrcpynW(szPath, m_sPathTarget, _countof(szPath)); + PathAppendW(szPath, pszName); + + HANDLE hFind = ::FindFirstFileW(szPath, pFind); + if (hFind == INVALID_HANDLE_VALUE) + return FALSE; + + ::FindClose(hFind); + return TRUE; +} + +HRESULT CFSFolder::_CreateIDListFromName(LPCWSTR pszName, DWORD attrs, IBindCtx *pbc, LPITEMIDLIST *ppidl) +{ + *ppidl = NULL; + + if (PathIsDosDevice(pszName)) + return HRESULT_FROM_WIN32(ERROR_BAD_DEVICE); + + WIN32_FIND_DATAW FindData = { 0 }; + + HRESULT hr = S_OK; + if (attrs == ULONG_MAX) // Invalid attributes + { + if (!_GetFindDataFromName(pszName, &FindData)) + hr = HRESULT_FROM_WIN32(::GetLastError()); + } + else // Pretend as an item of attrs + { + StringCchCopyW(FindData.cFileName, _countof(FindData.cFileName), pszName); + FindData.dwFileAttributes = attrs; + } + + if (FAILED(hr)) + return hr; + + *ppidl = _ILCreateFromFindDataW(&FindData); + if (!*ppidl) + return E_OUTOFMEMORY; + + return S_OK; +} + /************************************************************************** * CFSFolder::ParseDisplayName {SHELL32} * @@ -736,13 +781,6 @@ HRESULT WINAPI CFSFolder::ParseDisplayName(HWND hwndOwner, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) { - HRESULT hr = E_INVALIDARG; - LPCWSTR szNext = NULL; - WCHAR szElement[MAX_PATH]; - WCHAR szPath[MAX_PATH]; - LPITEMIDLIST pidlTemp = NULL; - DWORD len; - TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this, hwndOwner, pbc, lpszDisplayName, debugstr_w (lpszDisplayName), pchEaten, ppidl, pdwAttributes); @@ -750,68 +788,85 @@ HRESULT WINAPI CFSFolder::ParseDisplayName(HWND hwndOwner, if (!ppidl) return E_INVALIDARG; + *ppidl = NULL; + if (!lpszDisplayName) - { - *ppidl = NULL; return E_INVALIDARG; - } - *ppidl = NULL; - - if (pchEaten) - *pchEaten = 0; /* strange but like the original */ + HRESULT hr; + WIN32_FIND_DATAW FindData; + if (SHIsFileSysBindCtx(pbc, &FindData) == S_OK) + { + CComHeapPtr pidlTemp; + hr = _ParseSimple(lpszDisplayName, &FindData, &pidlTemp); + if (SUCCEEDED(hr) && pdwAttributes && *pdwAttributes) + { + LPCITEMIDLIST pidlLast = ILFindLastID(pidlTemp); + GetAttributesOf(1, &pidlLast, pdwAttributes); + } - if (*lpszDisplayName) + if (SUCCEEDED(hr)) + *ppidl = pidlTemp.Detach(); + } + else { - /* get the next element */ - szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH); + INT cchElement = lstrlenW(lpszDisplayName) + 1; + LPWSTR pszElement = (LPWSTR)alloca(cchElement * sizeof(WCHAR)); + LPWSTR pchNext = lpszDisplayName; + hr = Shell_NextElement(&pchNext, pszElement, cchElement, TRUE); + if (FAILED(hr)) + return hr; - pidlTemp = SHELL32_CreatePidlFromBindCtx(pbc, szElement); - if (pidlTemp != NULL) + hr = _CreateIDListFromName(pszElement, ULONG_MAX, pbc, ppidl); + if (FAILED(hr)) { - /* We are creating an id list without ensuring that the items exist. - If we have a remaining path, this must be a folder. - We have to do it now because it is set as a file by default */ - if (szNext) + if (pchNext) // Is there the next element? { - pidlTemp->mkid.abID[0] = PT_FOLDER; + // pszElement seems like a directory + if (_GetFindDataFromName(pszElement, &FindData) && + (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + hr = _CreateIDListFromName(pszElement, FILE_ATTRIBUTE_DIRECTORY, pbc, ppidl); + } + } + else + { + // pszElement seems like a non-directory + if ((hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || + hr == HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)) && + (BindCtx_GetMode(pbc, 0) & STGM_CREATE)) + { + // Pretend like a normal file + hr = _CreateIDListFromName(pszElement, FILE_ATTRIBUTE_NORMAL, pbc, ppidl); + } } - hr = S_OK; - } - else - { - /* build the full pathname to the element */ - lstrcpynW(szPath, m_sPathTarget, MAX_PATH - 1); - PathAddBackslashW(szPath); - len = wcslen(szPath); - lstrcpynW(szPath + len, szElement, MAX_PATH - len); - - /* get the pidl */ - hr = _ILCreateFromPathW(szPath, &pidlTemp); } if (SUCCEEDED(hr)) { - if (szNext && *szNext) + if (pchNext) // Is there next? { - /* try to analyse the next element */ - hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, - &pidlTemp, (LPOLESTR) szNext, pchEaten, pdwAttributes); + CComPtr psfChild; + hr = BindToObject(*ppidl, pbc, IID_PPV_ARG(IShellFolder, &psfChild)); + if (FAILED(hr)) + return hr; + + DWORD chEaten; + CComHeapPtr pidlChild; + hr = psfChild->ParseDisplayName(hwndOwner, pbc, pchNext, &chEaten, &pidlChild, + pdwAttributes); + + // Append pidlChild to ppidl + if (SUCCEEDED(hr)) + hr = SHILAppend(pidlChild.Detach(), ppidl); } - else + else if (pdwAttributes && *pdwAttributes) { - /* it's the last element */ - if (pdwAttributes && *pdwAttributes) - hr = SHELL32_GetFSItemAttributes(this, pidlTemp, pdwAttributes); + GetAttributesOf(1, (LPCITEMIDLIST*)ppidl, pdwAttributes); } } } - if (SUCCEEDED(hr)) - *ppidl = pidlTemp; - else - *ppidl = NULL; - TRACE("(%p)->(-- pidl=%p ret=0x%08x)\n", this, ppidl ? *ppidl : 0, hr); return hr; diff --git a/dll/win32/shell32/folders/CFSFolder.h b/dll/win32/shell32/folders/CFSFolder.h index 924dd9bd893..8d29c4d3479 100644 --- a/dll/win32/shell32/folders/CFSFolder.h +++ b/dll/win32/shell32/folders/CFSFolder.h @@ -33,6 +33,14 @@ class CFSFolder : HRESULT _CreateExtensionUIObject(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut); HRESULT _GetDropTarget(LPCITEMIDLIST pidl, LPVOID *ppvOut); HRESULT _GetIconHandler(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut); + + HRESULT _ParseSimple( + _In_ LPOLESTR lpszDisplayName, + _Out_ WIN32_FIND_DATAW *pFind, + _Out_ LPITEMIDLIST *ppidl); + BOOL _GetFindDataFromName(_In_ LPCWSTR pszName, _Out_ WIN32_FIND_DATAW *pFind); + HRESULT _CreateIDListFromName(LPCWSTR pszName, DWORD attrs, IBindCtx *pbc, LPITEMIDLIST *ppidl); + public: CFSFolder(); ~CFSFolder(); diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index 74765c7c2e9..19c4255fc0f 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -161,8 +161,9 @@ Shell_TranslateIDListAlias( _In_ DWORD dwFlags); BOOL BindCtx_ContainsObject(_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName); +DWORD BindCtx_GetMode(_In_ IBindCtx *pbc, _In_ DWORD dwDefault); BOOL SHSkipJunctionBinding(_In_ IBindCtx *pbc, _In_ CLSID *pclsid); -HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW **ppFindData); +HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData); BOOL Shell_FailForceReturn(_In_ HRESULT hr); EXTERN_C INT @@ -211,4 +212,9 @@ BindCtx_RegisterObjectParam( _In_opt_ IUnknown *punk, _Out_ LPBC *ppbc); +BOOL PathIsDotOrDotDotW(_In_ LPCWSTR pszPath); +BOOL PathIsValidElement(_In_ LPCWSTR pszPath); +BOOL PathIsDosDevice(_In_ LPCWSTR pszName); +HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl); + #endif /* _PRECOMP_H__ */ diff --git a/dll/win32/shell32/shfldr.h b/dll/win32/shell32/shfldr.h index 46878c28a0c..64e236a5d73 100644 --- a/dll/win32/shell32/shfldr.h +++ b/dll/win32/shell32/shfldr.h @@ -36,14 +36,18 @@ typedef struct { #define GET_SHGDN_FOR(dwFlags) ((DWORD)dwFlags & (DWORD)0x0000FF00) #define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF) -LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut); +HRESULT +Shell_NextElement( + _Inout_ LPWSTR *ppch, + _Out_ LPWSTR pszOut, + _In_ INT cchOut, + _In_ BOOL bValidate); + HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut, LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes); HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet); -LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path); - HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes); HRESULT SHELL32_CompareDetails(IShellFolder2* isf, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); diff --git a/dll/win32/shell32/shlfolder.cpp b/dll/win32/shell32/shlfolder.cpp index 283cf76ce8b..3a396e5fc60 100644 --- a/dll/win32/shell32/shlfolder.cpp +++ b/dll/win32/shell32/shlfolder.cpp @@ -26,45 +26,54 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); -/*************************************************************************** - * GetNextElement (internal function) - * - * Gets a part of a string till the first backslash. - * - * PARAMETERS - * pszNext [IN] string to get the element from - * pszOut [IN] pointer to buffer which receives string - * dwOut [IN] length of pszOut - * - * RETURNS - * LPSTR pointer to first, not yet parsed char - */ - -LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut) +HRESULT +Shell_NextElement( + _Inout_ LPWSTR *ppch, + _Out_ LPWSTR pszOut, + _In_ INT cchOut, + _In_ BOOL bValidate) { - LPCWSTR pszTail = pszNext; - DWORD dwCopy; + *pszOut = UNICODE_NULL; - TRACE ("(%s %p 0x%08x)\n", debugstr_w (pszNext), pszOut, dwOut); + if (!*ppch) + return S_FALSE; - *pszOut = 0x0000; + HRESULT hr; + LPWSTR pchNext = wcschr(*ppch, L'\\'); + if (pchNext) + { + if (*ppch < pchNext) + { + /* Get an element */ + StringCchCopyNW(pszOut, cchOut, *ppch, pchNext - *ppch); + ++pchNext; - if (!pszNext || !*pszNext) - return NULL; + if (!*pchNext) + pchNext = NULL; /* No next */ - while (*pszTail && (*pszTail != (WCHAR) '\\')) - pszTail++; + hr = S_OK; + } + else /* Double backslashes found? */ + { + pchNext = NULL; + hr = E_INVALIDARG; + } + } + else /* No more next */ + { + StringCchCopyW(pszOut, cchOut, *ppch); + hr = S_OK; + } - dwCopy = pszTail - pszNext + 1; - lstrcpynW (pszOut, pszNext, (dwOut < dwCopy) ? dwOut : dwCopy); + *ppch = pchNext; /* Go next */ - if (*pszTail) - pszTail++; - else - pszTail = NULL; + if (hr == S_OK && bValidate && !PathIsValidElement(pszOut)) + { + *pszOut = UNICODE_NULL; + hr = E_INVALIDARG; + } - TRACE ("--(%s %s 0x%08x %p)\n", debugstr_w (pszNext), debugstr_w (pszOut), dwOut, pszTail); - return pszTail; + return hr; } HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, diff --git a/dll/win32/shell32/utils.cpp b/dll/win32/shell32/utils.cpp index 0909b235573..ae028bf6272 100644 --- a/dll/win32/shell32/utils.cpp +++ b/dll/win32/shell32/utils.cpp @@ -9,6 +9,68 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); +BOOL PathIsDotOrDotDotW(_In_ LPCWSTR pszPath) +{ + if (pszPath[0] != L'.') + return FALSE; + return !pszPath[1] || (pszPath[1] == L'.' && !pszPath[2]); +} + +#define PATH_VALID_ELEMENT ( \ + PATH_CHAR_CLASS_DOT | PATH_CHAR_CLASS_SEMICOLON | PATH_CHAR_CLASS_COMMA | \ + PATH_CHAR_CLASS_SPACE | PATH_CHAR_CLASS_OTHER_VALID \ +) + +BOOL PathIsValidElement(_In_ LPCWSTR pszPath) +{ + if (!*pszPath || PathIsDotOrDotDotW(pszPath)) + return FALSE; + + for (LPCWSTR pch = pszPath; *pch; ++pch) + { + if (!PathIsValidCharW(*pch, PATH_VALID_ELEMENT)) + return FALSE; + } + + return TRUE; +} + +BOOL PathIsDosDevice(_In_ LPCWSTR pszName) +{ + WCHAR szPath[MAX_PATH]; + StringCchCopyW(szPath, _countof(szPath), pszName); + PathRemoveExtensionW(szPath); + + if (lstrcmpiW(szPath, L"NUL") == 0 || lstrcmpiW(szPath, L"PRN") == 0 || + lstrcmpiW(szPath, L"CON") == 0 || lstrcmpiW(szPath, L"AUX") == 0) + { + return TRUE; + } + + if (_wcsnicmp(szPath, L"LPT", 3) == 0 || _wcsnicmp(szPath, L"COM", 3) == 0) + { + if ((L'0' <= szPath[3] && szPath[3] <= L'9') && szPath[4] == UNICODE_NULL) + return TRUE; + } + + return FALSE; +} + +HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl) +{ + LPITEMIDLIST pidlOld = *ppidl; + if (!pidlOld) + { + *ppidl = pidl; + return S_OK; + } + + HRESULT hr = SHILCombine(*ppidl, pidl, ppidl); + ILFree(pidlOld); + ILFree(pidl); + return hr; +} + static BOOL OpenEffectiveToken( _In_ DWORD DesiredAccess, @@ -49,6 +111,19 @@ BOOL BindCtx_ContainsObject(_In_ IBindCtx *pBindCtx, _In_ LPCWSTR pszName) return TRUE; } +DWORD BindCtx_GetMode(_In_ IBindCtx *pbc, _In_ DWORD dwDefault) +{ + if (!pbc) + return dwDefault; + + BIND_OPTS BindOpts = { sizeof(BindOpts) }; + HRESULT hr = pbc->GetBindOptions(&BindOpts); + if (FAILED(hr)) + return dwDefault; + + return BindOpts.grfMode; +} + BOOL SHSkipJunctionBinding(_In_ IBindCtx *pbc, _In_ CLSID *pclsid) { if (!pbc) @@ -61,7 +136,7 @@ BOOL SHSkipJunctionBinding(_In_ IBindCtx *pbc, _In_ CLSID *pclsid) return pclsid && SHSkipJunction(pbc, pclsid); } -HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW **ppFindData) +HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW *pFindData) { CComPtr punk; CComPtr pBindData; @@ -72,17 +147,10 @@ HRESULT SHIsFileSysBindCtx(_In_ IBindCtx *pBindCtx, _Out_opt_ WIN32_FIND_DATAW * if (FAILED(punk->QueryInterface(IID_PPV_ARG(IFileSystemBindData, &pBindData)))) return S_FALSE; - HRESULT hr = S_OK; - if (ppFindData) - { - *ppFindData = (WIN32_FIND_DATAW*)LocalAlloc(LPTR, sizeof(WIN32_FIND_DATAW)); - if (*ppFindData) - pBindData->GetFindData(*ppFindData); - else - hr = E_OUTOFMEMORY; - } + if (pFindData) + pBindData->GetFindData(pFindData); - return hr; + return S_OK; } BOOL Shell_FailForceReturn(_In_ HRESULT hr) From ff282894a8064137e92440dd8b73365d1b14ad2f Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 13 Apr 2024 21:08:39 +0900 Subject: [PATCH 29/44] [SHELL32] Refactor and simplify CDesktopFolder (#6741) Follow-up to #6721. This PR can reduce 1KB of binary size. JIRA issue: CORE-19495 - Delete CStubFolderBase and derived classes. - Add CDesktopFolder::_ParseDisplayNameByParent method. - Don't use excessive IShellFolder objects in parsing display names. - Simplify and reduce code. --- dll/win32/shell32/folders/CDesktopFolder.cpp | 278 +++++++++---------- dll/win32/shell32/folders/CDesktopFolder.h | 111 ++------ 2 files changed, 157 insertions(+), 232 deletions(-) diff --git a/dll/win32/shell32/folders/CDesktopFolder.cpp b/dll/win32/shell32/folders/CDesktopFolder.cpp index 51695e196f4..54f3206ef5c 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -25,8 +25,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); STDMETHODIMP -CShellUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) +CDesktopFolder::ShellUrlParseDisplayName( + HWND hwndOwner, + LPBC pbc, + LPOLESTR lpszDisplayName, + DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, + DWORD *pdwAttributes) { LPWSTR pch; INT cch, csidl; @@ -36,7 +41,7 @@ CShellUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayNa ::ParseURLW(lpszDisplayName, &ParsedURL); DWORD attrs = (pdwAttributes ? *pdwAttributes : 0) | SFGAO_STREAM; - if (ParsedURL.pszSuffix[0] == L':' && ParsedURL.pszSuffix[1] == L':') + if (ParsedURL.pszSuffix[0] == L':' && ParsedURL.pszSuffix[1] == L':') // It begins from "::" { CComPtr psfDesktop; hr = SHGetDesktopFolder(&psfDesktop); @@ -119,126 +124,16 @@ CShellUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayNa } STDMETHODIMP -CFileUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) -{ - WCHAR szPath[MAX_PATH]; - DWORD cchPath = _countof(szPath); - HRESULT hr = PathCreateFromUrlW(lpszDisplayName, szPath, &cchPath, 0); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - - CComPtr psfDesktop; - hr = SHGetDesktopFolder(&psfDesktop); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - - return psfDesktop->ParseDisplayName(hwndOwner, pbc, szPath, pchEaten, ppidl, pdwAttributes); -} - -STDMETHODIMP -CIDListUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) -{ - return E_NOTIMPL; // FIXME -} - -STDMETHODIMP -CHttpUrlStub::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) -{ - return E_NOTIMPL; // FIXME -} - -BOOL CDesktopFolder::_TryUrlJunctions( - LPCWSTR pcszURL, - IBindCtx *pBindCtx, - IShellFolder **ppShellFolder, - LPITEMIDLIST *ppidl) -{ - PARSEDURLW ParsedURL = { sizeof(ParsedURL) }; - ::ParseURLW(pcszURL, &ParsedURL); - - *ppShellFolder = NULL; - switch (ParsedURL.nScheme) - { - case URL_SCHEME_FILE: - *ppShellFolder = &m_FileUrlStub; - break; - - case URL_SCHEME_HTTP: - case URL_SCHEME_HTTPS: - if (!BindCtx_ContainsObject(pBindCtx, STR_PARSE_PREFER_FOLDER_BROWSING)) - break; - *ppShellFolder = &m_HttpUrlStub; - break; - - case URL_SCHEME_SHELL: - *ppShellFolder = &m_ShellUrlStub; - break; - - case URL_SCHEME_MSSHELLROOTED: - *ppShellFolder = NULL; // FIXME - break; - - case URL_SCHEME_MSSHELLIDLIST: - *ppShellFolder = &m_IDListUrlStub; - break; - - default: - break; - } - - return !!*ppShellFolder; -} - -BOOL CDesktopFolder::_GetParentForParsing( - LPCWSTR pszPath, - IBindCtx *pbc, - IShellFolder **ppParentFolder, - LPITEMIDLIST *ppidlParent) -{ - WCHAR wch = *pszPath; - if (((L'A' <= wch && wch <= L'Z') || (L'a' <= wch && wch <= L'z')) && (pszPath[1] == ':')) - *ppidlParent = _ILCreateMyComputer(); - else if (PathIsUNCW(pszPath)) - *ppidlParent = _ILCreateNetwork(); - else if (UrlIsW(pszPath, URLIS_URL) && !SHSkipJunctionBinding(pbc, NULL)) - _TryUrlJunctions(pszPath, pbc, ppParentFolder, ppidlParent); - - if (!*ppParentFolder && *ppidlParent) - SHBindToObject(NULL, *ppidlParent, IID_PPV_ARG(IShellFolder, ppParentFolder)); - - return *ppParentFolder != NULL; -} - -HRESULT CDesktopFolder::_ChildParseDisplayName( - IShellFolder *pParentFolder, - LPCITEMIDLIST pidlParent, +CDesktopFolder::HttpUrlParseDisplayName( HWND hwndOwner, - IBindCtx *pBindCtx, - LPWSTR lpszDisplayName, + LPBC pbc, + LPOLESTR lpszDisplayName, DWORD *pchEaten, - LPITEMIDLIST *ppidl, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) { - LPITEMIDLIST pidlChild; - HRESULT hr = pParentFolder->ParseDisplayName(hwndOwner, pBindCtx, lpszDisplayName, - pchEaten, &pidlChild, pdwAttributes); - if (FAILED(hr)) - return hr; - - if (pidlParent) - { - *ppidl = ILCombine(pidlParent, pidlChild); - ILFree(pidlChild); - } - else - { - *ppidl = pidlChild; - } - - return (*ppidl ? S_OK : E_OUTOFMEMORY); + FIXME("\n"); + return E_NOTIMPL; // FIXME } /* @@ -487,6 +382,116 @@ HRESULT CDesktopFolder::_GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2** psf) return m_DesktopFSFolder->QueryInterface(IID_PPV_ARG(IShellFolder2, psf)); } +HRESULT CDesktopFolder::_ParseDisplayNameByParent( + HWND hwndOwner, + LPBC pbc, + LPOLESTR lpszDisplayName, + DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, + DWORD *pdwAttributes) +{ + if (pchEaten) + *pchEaten = 0; + + CComHeapPtr pidlParent; + BOOL bPath = FALSE; + WCHAR wch = *lpszDisplayName; + if (((L'A' <= wch && wch <= L'Z') || (L'a' <= wch && wch <= L'z')) && + (lpszDisplayName[1] == L':')) + { + // "C:..." + bPath = TRUE; + pidlParent.Attach(_ILCreateMyComputer()); + } + else if (PathIsUNCW(lpszDisplayName)) // "\\\\..." + { + bPath = TRUE; + pidlParent.Attach(_ILCreateNetwork()); + } + + if (bPath) + { + if (!pidlParent) + return E_OUTOFMEMORY; + + CComPtr pParentFolder; + SHBindToObject(NULL, pidlParent, IID_PPV_ARG(IShellFolder, &pParentFolder)); + + CComHeapPtr pidlChild; + HRESULT hr = pParentFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, + pchEaten, &pidlChild, pdwAttributes); + if (FAILED(hr)) + return hr; + + *ppidl = ILCombine(pidlParent, pidlChild); + return (*ppidl ? S_OK : E_OUTOFMEMORY); + } + + if (!UrlIsW(lpszDisplayName, URLIS_URL) || SHSkipJunctionBinding(pbc, NULL)) + return E_INVALIDARG; + + // Now lpszDisplayName is a URL + PARSEDURLW ParsedURL = { sizeof(ParsedURL) }; + ::ParseURLW(lpszDisplayName, &ParsedURL); + + switch (ParsedURL.nScheme) + { + case URL_SCHEME_FILE: // "file:..." + { + // Convert "file://..." to a normal path + WCHAR szPath[MAX_PATH]; + DWORD cchPath = _countof(szPath); + HRESULT hr = PathCreateFromUrlW(lpszDisplayName, szPath, &cchPath, 0); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + CComPtr psfDesktop; + hr = SHGetDesktopFolder(&psfDesktop); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + // Parse by desktop folder + return psfDesktop->ParseDisplayName(hwndOwner, pbc, szPath, pchEaten, ppidl, + pdwAttributes); + } + case URL_SCHEME_HTTP: // "http:..." + case URL_SCHEME_HTTPS: // "https:..." + { + if (!BindCtx_ContainsObject(pbc, STR_PARSE_PREFER_FOLDER_BROWSING)) + return E_INVALIDARG; + + return HttpUrlParseDisplayName(hwndOwner, + pbc, + lpszDisplayName, + pchEaten, + ppidl, + pdwAttributes); + } + case URL_SCHEME_SHELL: // "shell:..." + { + return ShellUrlParseDisplayName(hwndOwner, + pbc, + lpszDisplayName, + pchEaten, + ppidl, + pdwAttributes); + } + case URL_SCHEME_MSSHELLROOTED: + case URL_SCHEME_MSSHELLIDLIST: + { + WARN("We don't support 'ms-shell-rooted:' and 'ms-shell-idlist:' schemes\n"); + break; + } + default: + { + TRACE("Scheme: %u\n", ParsedURL.nScheme); + break; + } + } + + return E_INVALIDARG; +} + /************************************************************************** * CDesktopFolder::ParseDisplayName * @@ -526,35 +531,22 @@ HRESULT WINAPI CDesktopFolder::ParseDisplayName( pdwAttributes); } - HRESULT hr = E_INVALIDARG; - CComHeapPtr pidlParent; - CComPtr pParentFolder; - if (_GetParentForParsing(lpszDisplayName, pbc, &pParentFolder, &pidlParent)) + HRESULT hr = _ParseDisplayNameByParent(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, + pdwAttributes); + if (SUCCEEDED(hr)) { - if (pchEaten) - *pchEaten = 0; - - hr = _ChildParseDisplayName(pParentFolder, - pidlParent, - hwndOwner, - pbc, - lpszDisplayName, - pchEaten, - ppidl, - pdwAttributes); - if (SUCCEEDED(hr)) + if (BindCtx_ContainsObject(pbc, STR_PARSE_TRANSLATE_ALIASES)) { - if (BindCtx_ContainsObject(pbc, STR_PARSE_TRANSLATE_ALIASES)) + CComHeapPtr pidlAlias; + if (SUCCEEDED(Shell_TranslateIDListAlias(*ppidl, NULL, &pidlAlias, 0xFFFF))) { - LPITEMIDLIST pidlAlias; - if (SUCCEEDED(Shell_TranslateIDListAlias(*ppidl, NULL, &pidlAlias, 0xFFFF))) - { - ILFree(*ppidl); - *ppidl = pidlAlias; - } + ILFree(*ppidl); + *ppidl = pidlAlias.Detach(); } - return hr; } + + TRACE ("(%p)->(-- ret=0x%08x)\n", this, hr); + return hr; } if (Shell_FailForceReturn(hr)) diff --git a/dll/win32/shell32/folders/CDesktopFolder.h b/dll/win32/shell32/folders/CDesktopFolder.h index ea68c0c0315..7a9b498d240 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.h +++ b/dll/win32/shell32/folders/CDesktopFolder.h @@ -23,73 +23,6 @@ #ifndef _CDESKTOPFOLDER_H_ #define _CDESKTOPFOLDER_H_ -class CStubFolderBase : public IShellFolder -{ -public: - CStubFolderBase() { } - - STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) override { return E_NOTIMPL; } - STDMETHODIMP_(ULONG) AddRef() override { return 3; } - STDMETHODIMP_(ULONG) Release() override { return 2; } - - // IShellFolder methods - STDMETHODIMP ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, - DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override - { return E_NOTIMPL; } - STDMETHODIMP EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override - { return E_NOTIMPL; } - STDMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override - { return E_NOTIMPL; } - STDMETHODIMP BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override - { return E_NOTIMPL; } - STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override - { return E_NOTIMPL; } - STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override - { return E_NOTIMPL; } - STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override - { return E_NOTIMPL; } - STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, - REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) override - { return E_NOTIMPL; } - STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override - { return E_NOTIMPL; } - STDMETHODIMP SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, - DWORD dwFlags, PITEMID_CHILD *pPidlOut) override - { return E_NOTIMPL; } -}; - -class CShellUrlStub : public CStubFolderBase -{ -public: - STDMETHODIMP - ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; -}; - -class CFileUrlStub : public CStubFolderBase -{ -public: - STDMETHODIMP - ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; -}; - -class CIDListUrlStub : public CStubFolderBase -{ -public: - STDMETHODIMP - ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; -}; - -class CHttpUrlStub : public CStubFolderBase -{ -public: - STDMETHODIMP - ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, - PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override; -}; - class CDesktopFolder : public CComCoClass, public CComObjectRootEx, @@ -104,35 +37,35 @@ class CDesktopFolder : CComPtr m_SharedDesktopFSFolder; CComPtr m_regFolder; - // Stub URL objects - CShellUrlStub m_ShellUrlStub; - CFileUrlStub m_FileUrlStub; - CIDListUrlStub m_IDListUrlStub; - CHttpUrlStub m_HttpUrlStub; - LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */ LPITEMIDLIST pidlRoot; /* absolute pidl */ HRESULT _GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2** psf); - BOOL _TryUrlJunctions( - LPCWSTR pcszURL, - IBindCtx *pBindCtx, - IShellFolder **ppShellFolder, - LPITEMIDLIST *ppidl); - BOOL _GetParentForParsing( - LPCWSTR pszPath, - IBindCtx *pbc, - IShellFolder **ppParentFolder, - LPITEMIDLIST *ppidlParent); - HRESULT _ChildParseDisplayName( - IShellFolder *pParentFolder, - LPCITEMIDLIST pidlParent, + HRESULT _ParseDisplayNameByParent( + HWND hwndOwner, + LPBC pbc, + LPOLESTR pszPath, + DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, + DWORD *pdwAttributes); + + STDMETHODIMP + ShellUrlParseDisplayName( + HWND hwndOwner, + LPBC pbc, + LPOLESTR lpszDisplayName, + DWORD *pchEaten, + PIDLIST_RELATIVE *ppidl, + DWORD *pdwAttributes); + + STDMETHODIMP + HttpUrlParseDisplayName( HWND hwndOwner, - IBindCtx *pBindCtx, - LPWSTR lpszDisplayName, + LPBC pbc, + LPOLESTR lpszDisplayName, DWORD *pchEaten, - LPITEMIDLIST *ppidl, + PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes); public: From bb444b93d9780c7c1e1e9df737445a861b684c2c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 22 Oct 2023 18:21:42 +0300 Subject: [PATCH 30/44] [RTL/x64] Handle STATUS_UNWIND_CONSOLIDATE in RtlRestoreContext It's not entirely correct yet and will probably fail on recursive c++ exceptions, but it fixes basic c++ exception handling. --- sdk/lib/rtl/amd64/except_asm.S | 15 ++++++--------- sdk/lib/rtl/amd64/unwind.c | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/sdk/lib/rtl/amd64/except_asm.S b/sdk/lib/rtl/amd64/except_asm.S index e3fd67b852f..4b776b27974 100644 --- a/sdk/lib/rtl/amd64/except_asm.S +++ b/sdk/lib/rtl/amd64/except_asm.S @@ -107,22 +107,19 @@ PUBLIC RtlCaptureContext .ENDP /* - * VOID NTAPI - * RtlRestoreContext( - * _In_ PCONTEXT ContextRecord@, - * PEXCEPTION_RECORD *ExceptionRecord@); + * VOID + * RtlpRestoreContextInternal( + * _In_ PCONTEXT ContextRecord@); */ -PUBLIC RtlRestoreContext -.PROC RtlRestoreContext +PUBLIC RtlpRestoreContextInternal +.PROC RtlpRestoreContextInternal /* Allocate space */ sub rsp, HEX(8) .ALLOCSTACK 8 .ENDPROLOG - // TODO: Handle ExceptionRecord - - /* Restore legacy floating point registers (It's slow, so do it first) */ + /* Restore legacy floating point registers (It is slow, so do it first) */ ldmxcsr [rcx + CxMxCsr] fxrstor [rcx + CxFltSave] diff --git a/sdk/lib/rtl/amd64/unwind.c b/sdk/lib/rtl/amd64/unwind.c index 72e40860771..4a5903361b9 100644 --- a/sdk/lib/rtl/amd64/unwind.c +++ b/sdk/lib/rtl/amd64/unwind.c @@ -1131,3 +1131,26 @@ RtlSetUnwindContext( *ContextPointers.Xmm14 = Context->Xmm14; *ContextPointers.Xmm15 = Context->Xmm15; } + +VOID +RtlpRestoreContextInternal( + _In_ PCONTEXT ContextRecord); + +VOID +RtlRestoreContext( + _In_ PCONTEXT ContextRecord, + _In_ PEXCEPTION_RECORD ExceptionRecord) +{ + if (ExceptionRecord != NULL) + { + if ((ExceptionRecord->ExceptionCode == STATUS_UNWIND_CONSOLIDATE) && + (ExceptionRecord->NumberParameters >= 1)) + { + PVOID (*Consolidate)(EXCEPTION_RECORD*) = (PVOID)ExceptionRecord->ExceptionInformation[0]; + // FIXME: This should be called through an asm wrapper to allow handling recursive unwinding + ContextRecord->Rip = (ULONG64)Consolidate(ExceptionRecord); + } + } + + RtlpRestoreContextInternal(ContextRecord); +} From fc6e23d6b885d3ebd3d0dc35ea4abfa6624fc28a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 14 Mar 2024 21:06:30 +0200 Subject: [PATCH 31/44] [NDK/x64] Remove #pragma pack(push,4) around KPRCB/KPCR --- sdk/include/ndk/amd64/ketypes.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sdk/include/ndk/amd64/ketypes.h b/sdk/include/ndk/amd64/ketypes.h index d59df0135be..9a8a365a202 100644 --- a/sdk/include/ndk/amd64/ketypes.h +++ b/sdk/include/ndk/amd64/ketypes.h @@ -46,7 +46,7 @@ Header Name: #define KF_AMDK6MTRR 0x00008000 // Win 5.0-6.1 #define KF_XSAVEOPT 0x00008000 // From KF_XSAVEOPT_BIT #define KF_XMMI64 0x00010000 // SSE2 -#define KF_BRANCH 0x00020000 // From ksamd64.inc, Win 6.1-6.2 +#define KF_BRANCH 0x00020000 // From ksamd64.inc, Win 6.1-6.2 #define KF_00040000 0x00040000 // Unclear #define KF_SSE3 0x00080000 // Win 6.0+ #define KF_CMPXCHG16B 0x00100000 // Win 6.0-6.2 @@ -621,7 +621,6 @@ typedef struct _REQUEST_MAILBOX // // Processor Region Control Block // -#pragma pack(push,4) typedef struct _KPRCB { ULONG MxCsr; @@ -965,7 +964,6 @@ typedef struct _KIPCR ULONG ContextSwitches; } KIPCR, *PKIPCR; -#pragma pack(pop) // // TSS Definition From b8abfa76ca99b99d48575ee78e91e273eed1a12b Mon Sep 17 00:00:00 2001 From: Serge Gautherie <32623169+SergeGautherie@users.noreply.github.com> Date: Sat, 13 Apr 2024 21:23:15 +0200 Subject: [PATCH 32/44] [DOC] 3rd Party Files.txt: Complete 'win-iconv' (#6691) Upstream (code) reads: `win_iconv is placed in the public domain.` --- media/doc/3rd Party Files.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media/doc/3rd Party Files.txt b/media/doc/3rd Party Files.txt index d55807743f2..3831b7efa71 100644 --- a/media/doc/3rd Party Files.txt +++ b/media/doc/3rd Party Files.txt @@ -248,7 +248,7 @@ URL: http://www.mega-nerd.com/SRC/download.html Title: win-iconv Path: sdk/lib/3rdparty/libwin-iconv Used Version: git commit 8765259 -License: +License: "Public Domain" URL: https://github.com/win-iconv/win-iconv Title: LibXML From 78dc504e72219dc9bfb256409ec508b66dc50c62 Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Sat, 13 Apr 2024 16:12:35 -0600 Subject: [PATCH 33/44] [SHELL32] Initialize MenuItemInfoW struct in AddStaticContextMenusToMenu (#6737) This prevents an issue where clicking on most of the icons on the desktop that isn't the file explorer causes explorer to throw an exception, and also prevents another issue where most applications won't launch from the start menu; at least on MSVC builds running on VirtualBox 5.2.44. ^- I am pretty sure, that this was not always the case. The guilty rev is yet unknown though. --- dll/win32/shell32/CDefaultContextMenu.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dll/win32/shell32/CDefaultContextMenu.cpp b/dll/win32/shell32/CDefaultContextMenu.cpp index 31231af1db9..2bd9b833c46 100644 --- a/dll/win32/shell32/CDefaultContextMenu.cpp +++ b/dll/win32/shell32/CDefaultContextMenu.cpp @@ -493,13 +493,12 @@ CDefaultContextMenu::AddStaticContextMenusToMenu( UINT uFlags) { UINT ntver = RosGetProcessEffectiveVersion(); - MENUITEMINFOW mii; + MENUITEMINFOW mii = { sizeof(mii) }; UINT idResource; WCHAR wszVerb[40]; UINT fState; UINT cIds = 0, indexFirst = *pIndexMenu; - mii.cbSize = sizeof(mii); mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA; mii.fType = MFT_STRING; mii.dwTypeData = NULL; From ba170757d6b4184064e03c68f026da179bdfd793 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Sun, 14 Apr 2024 11:10:01 +0200 Subject: [PATCH 34/44] [REGEDIT] Anonymize CONTROL "List1" (#6735) This saves a few bytes in the binary, e.g. regedit.exe master 0.4.15-dev-7887-g64a59a1 RosBEWin2.2.2 GCC8.4.0 dbg x86 shrinks from 1.049.600 bytes to 1.049.080 bytes. Furthermore it syncs the translations at this line, because es-ES.rc even translated that identifier to "Lista1" already. --- base/applications/regedit/lang/bg-BG.rc | 2 +- base/applications/regedit/lang/cs-CZ.rc | 2 +- base/applications/regedit/lang/de-DE.rc | 2 +- base/applications/regedit/lang/el-GR.rc | 2 +- base/applications/regedit/lang/en-US.rc | 2 +- base/applications/regedit/lang/es-ES.rc | 2 +- base/applications/regedit/lang/fr-FR.rc | 2 +- base/applications/regedit/lang/he-IL.rc | 2 +- base/applications/regedit/lang/hu-HU.rc | 2 +- base/applications/regedit/lang/id-ID.rc | 2 +- base/applications/regedit/lang/it-IT.rc | 2 +- base/applications/regedit/lang/ja-JP.rc | 2 +- base/applications/regedit/lang/ko-KR.rc | 2 +- base/applications/regedit/lang/nl-NL.rc | 2 +- base/applications/regedit/lang/no-NO.rc | 2 +- base/applications/regedit/lang/pl-PL.rc | 2 +- base/applications/regedit/lang/pt-BR.rc | 2 +- base/applications/regedit/lang/pt-PT.rc | 2 +- base/applications/regedit/lang/ro-RO.rc | 2 +- base/applications/regedit/lang/ru-RU.rc | 2 +- base/applications/regedit/lang/sk-SK.rc | 2 +- base/applications/regedit/lang/sl-SI.rc | 2 +- base/applications/regedit/lang/sq-AL.rc | 2 +- base/applications/regedit/lang/sv-SE.rc | 2 +- base/applications/regedit/lang/th-TH.rc | 2 +- base/applications/regedit/lang/tr-TR.rc | 2 +- base/applications/regedit/lang/uk-UA.rc | 2 +- base/applications/regedit/lang/zh-CN.rc | 2 +- base/applications/regedit/lang/zh-HK.rc | 2 +- base/applications/regedit/lang/zh-TW.rc | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/base/applications/regedit/lang/bg-BG.rc b/base/applications/regedit/lang/bg-BG.rc index c2690ce34d9..f092077ff1c 100644 --- a/base/applications/regedit/lang/bg-BG.rc +++ b/base/applications/regedit/lang/bg-BG.rc @@ -695,7 +695,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Добре", IDOK, 107, 114, 50, 14 PUSHBUTTON "Отказ", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Избор на любимки:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/cs-CZ.rc b/base/applications/regedit/lang/cs-CZ.rc index 99604f96dd2..9eaac9781d5 100644 --- a/base/applications/regedit/lang/cs-CZ.rc +++ b/base/applications/regedit/lang/cs-CZ.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Storno", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Vyberte Oblíbené:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/de-DE.rc b/base/applications/regedit/lang/de-DE.rc index 5e3327535f2..365c9c605d9 100644 --- a/base/applications/regedit/lang/de-DE.rc +++ b/base/applications/regedit/lang/de-DE.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "A&bbrechen", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Favorit(en) auswählen:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/el-GR.rc b/base/applications/regedit/lang/el-GR.rc index f5f3cd91139..ac29c176722 100644 --- a/base/applications/regedit/lang/el-GR.rc +++ b/base/applications/regedit/lang/el-GR.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Ακύρωση", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Επιλογή Αγαπημένου(ων):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/en-US.rc b/base/applications/regedit/lang/en-US.rc index 54e5f7c4602..ec285c944a8 100644 --- a/base/applications/regedit/lang/en-US.rc +++ b/base/applications/regedit/lang/en-US.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/es-ES.rc b/base/applications/regedit/lang/es-ES.rc index e98fd21153a..598cd3cbb82 100644 --- a/base/applications/regedit/lang/es-ES.rc +++ b/base/applications/regedit/lang/es-ES.rc @@ -693,7 +693,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Aceptar", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancelar", IDCANCEL, 7, 114, 50, 14 - CONTROL "Lista1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Seleccionar favoritos:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/fr-FR.rc b/base/applications/regedit/lang/fr-FR.rc index 298eb640b3d..3a145cf5f93 100644 --- a/base/applications/regedit/lang/fr-FR.rc +++ b/base/applications/regedit/lang/fr-FR.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Annuler", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Sélectionnez le(s) favori(s) :", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/he-IL.rc b/base/applications/regedit/lang/he-IL.rc index bf7e3e6920f..c454595aa7c 100644 --- a/base/applications/regedit/lang/he-IL.rc +++ b/base/applications/regedit/lang/he-IL.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "אישור", IDOK, 107, 114, 50, 14 PUSHBUTTON "ביטול", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "בחירת מועדפים:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/hu-HU.rc b/base/applications/regedit/lang/hu-HU.rc index d520872bf7a..fb88103f6a1 100644 --- a/base/applications/regedit/lang/hu-HU.rc +++ b/base/applications/regedit/lang/hu-HU.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/id-ID.rc b/base/applications/regedit/lang/id-ID.rc index 806eb79529b..b4967bad88a 100644 --- a/base/applications/regedit/lang/id-ID.rc +++ b/base/applications/regedit/lang/id-ID.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Batal", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Pilih Favorit:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/it-IT.rc b/base/applications/regedit/lang/it-IT.rc index 006df7a8438..117b4ff4374 100644 --- a/base/applications/regedit/lang/it-IT.rc +++ b/base/applications/regedit/lang/it-IT.rc @@ -698,7 +698,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Annulla", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Scegli preferiti:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/ja-JP.rc b/base/applications/regedit/lang/ja-JP.rc index 01a6eb3e2cf..41a937298a7 100644 --- a/base/applications/regedit/lang/ja-JP.rc +++ b/base/applications/regedit/lang/ja-JP.rc @@ -690,7 +690,7 @@ FONT 9, "MS UI Gothic" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "キャンセル", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "お気に入りの選択:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/ko-KR.rc b/base/applications/regedit/lang/ko-KR.rc index 6489368522e..b48f52b580a 100644 --- a/base/applications/regedit/lang/ko-KR.rc +++ b/base/applications/regedit/lang/ko-KR.rc @@ -692,7 +692,7 @@ FONT 9, "굴림" BEGIN DEFPUSHBUTTON "확인", IDOK, 107, 114, 50, 14 PUSHBUTTON "취소", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "즐겨찾기를 선택:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/nl-NL.rc b/base/applications/regedit/lang/nl-NL.rc index fbd13c5b03a..e355dd26f04 100644 --- a/base/applications/regedit/lang/nl-NL.rc +++ b/base/applications/regedit/lang/nl-NL.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/no-NO.rc b/base/applications/regedit/lang/no-NO.rc index 69249a0d730..55ac8c8b72e 100644 --- a/base/applications/regedit/lang/no-NO.rc +++ b/base/applications/regedit/lang/no-NO.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Avbryt", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Velg favoritt(er):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/pl-PL.rc b/base/applications/regedit/lang/pl-PL.rc index 150be323306..ff74ec1c317 100644 --- a/base/applications/regedit/lang/pl-PL.rc +++ b/base/applications/regedit/lang/pl-PL.rc @@ -700,7 +700,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Anuluj", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Wybierz ulubione:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/pt-BR.rc b/base/applications/regedit/lang/pt-BR.rc index 61d052a4473..56f2c80ef51 100644 --- a/base/applications/regedit/lang/pt-BR.rc +++ b/base/applications/regedit/lang/pt-BR.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancelar", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Selecionar favorito(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/pt-PT.rc b/base/applications/regedit/lang/pt-PT.rc index 74bcb698eb1..83aa764b46e 100644 --- a/base/applications/regedit/lang/pt-PT.rc +++ b/base/applications/regedit/lang/pt-PT.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancelar", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Seleccione Favorito(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/ro-RO.rc b/base/applications/regedit/lang/ro-RO.rc index 5ed6613fd68..bb9899d10d8 100644 --- a/base/applications/regedit/lang/ro-RO.rc +++ b/base/applications/regedit/lang/ro-RO.rc @@ -700,7 +700,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Con&firmă", IDOK, 107, 114, 50, 14 PUSHBUTTON "A&nulează", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Alege favorit(e):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/ru-RU.rc b/base/applications/regedit/lang/ru-RU.rc index 87875a88a27..ca36a8da08e 100644 --- a/base/applications/regedit/lang/ru-RU.rc +++ b/base/applications/regedit/lang/ru-RU.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Отмена", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Выберите удаляемое:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/sk-SK.rc b/base/applications/regedit/lang/sk-SK.rc index 536ebc07727..578c7170942 100644 --- a/base/applications/regedit/lang/sk-SK.rc +++ b/base/applications/regedit/lang/sk-SK.rc @@ -695,7 +695,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Zrušiť", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/sl-SI.rc b/base/applications/regedit/lang/sl-SI.rc index f280dfa036c..f28052edd40 100644 --- a/base/applications/regedit/lang/sl-SI.rc +++ b/base/applications/regedit/lang/sl-SI.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/sq-AL.rc b/base/applications/regedit/lang/sq-AL.rc index a2f99fc3d72..c24aa2dafc8 100644 --- a/base/applications/regedit/lang/sq-AL.rc +++ b/base/applications/regedit/lang/sq-AL.rc @@ -694,7 +694,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Anulo", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/sv-SE.rc b/base/applications/regedit/lang/sv-SE.rc index 47e58c3f22c..969313dc717 100644 --- a/base/applications/regedit/lang/sv-SE.rc +++ b/base/applications/regedit/lang/sv-SE.rc @@ -690,7 +690,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Avbryt", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Välj Favorit(er):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/th-TH.rc b/base/applications/regedit/lang/th-TH.rc index aadae1ed5a9..84dae45e7dd 100644 --- a/base/applications/regedit/lang/th-TH.rc +++ b/base/applications/regedit/lang/th-TH.rc @@ -692,7 +692,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Cancel", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Select Favorite(s):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/tr-TR.rc b/base/applications/regedit/lang/tr-TR.rc index 64a6c13b886..d1c6c4afc16 100644 --- a/base/applications/regedit/lang/tr-TR.rc +++ b/base/applications/regedit/lang/tr-TR.rc @@ -692,7 +692,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "Tamam", IDOK, 107, 114, 50, 14 PUSHBUTTON "İptal", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Yer imlerini seçiniz.", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/uk-UA.rc b/base/applications/regedit/lang/uk-UA.rc index 4200106f525..8a3ee5e6d79 100644 --- a/base/applications/regedit/lang/uk-UA.rc +++ b/base/applications/regedit/lang/uk-UA.rc @@ -692,7 +692,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK, 107, 114, 50, 14 PUSHBUTTON "Скасувати", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "Оберіть імена для видалення:", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/zh-CN.rc b/base/applications/regedit/lang/zh-CN.rc index d02fd94695c..5e625734d44 100644 --- a/base/applications/regedit/lang/zh-CN.rc +++ b/base/applications/regedit/lang/zh-CN.rc @@ -700,7 +700,7 @@ FONT 9, "宋体" BEGIN DEFPUSHBUTTON "确定", IDOK, 107, 114, 50, 14 PUSHBUTTON "取消", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "选择收藏(&S):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/zh-HK.rc b/base/applications/regedit/lang/zh-HK.rc index aaccae008c0..a7cef6e2403 100644 --- a/base/applications/regedit/lang/zh-HK.rc +++ b/base/applications/regedit/lang/zh-HK.rc @@ -698,7 +698,7 @@ FONT 9, "新細明體" BEGIN DEFPUSHBUTTON "確定", IDOK, 107, 114, 50, 14 PUSHBUTTON "取消", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "選擇資料夾(&S):", IDC_STATIC, 7, 7, 99, 12 END diff --git a/base/applications/regedit/lang/zh-TW.rc b/base/applications/regedit/lang/zh-TW.rc index 7820446d298..ad169a0671f 100644 --- a/base/applications/regedit/lang/zh-TW.rc +++ b/base/applications/regedit/lang/zh-TW.rc @@ -699,7 +699,7 @@ FONT 9, "新細明體" BEGIN DEFPUSHBUTTON "確定", IDOK, 107, 114, 50, 14 PUSHBUTTON "取消", IDCANCEL, 7, 114, 50, 14 - CONTROL "List1", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | + CONTROL "", IDC_FAVORITESLIST, "SysListView32", LVS_LIST | WS_BORDER | WS_TABSTOP, 7, 20, 150, 90 LTEXT "選擇收藏夾(&S)︰", IDC_STATIC, 7, 7, 99, 12 END From 83e741c643f1f2e1d76d063a4eea700a5dc2ad9f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 2 Mar 2018 08:48:34 +0200 Subject: [PATCH 35/44] [RTL/x64] Implement RtlRaiseException in asm This fixes invalid contexts being passed to RtlDispatchException. Also update the ExceptionAddress field in the EXCEPTION_FRAME, to match the Rip value in the CONTEXT, which is required for proper unwinding. --- sdk/lib/rtl/amd64/except.c | 44 -------------------- sdk/lib/rtl/amd64/except_asm.S | 75 ++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 44 deletions(-) diff --git a/sdk/lib/rtl/amd64/except.c b/sdk/lib/rtl/amd64/except.c index 1dc9b59c0cd..3a1c642012d 100644 --- a/sdk/lib/rtl/amd64/except.c +++ b/sdk/lib/rtl/amd64/except.c @@ -13,50 +13,6 @@ /* PUBLIC FUNCTIONS **********************************************************/ -VOID -NTAPI -RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord) -{ - CONTEXT Context; - NTSTATUS Status = STATUS_INVALID_DISPOSITION; - - /* Capture the current context */ - RtlCaptureContext(&Context); - - /* Fix up Context.Rip for the caller */ - Context.Rip = (ULONG64)_ReturnAddress(); - - /* Fix up Context.Rsp for the caller */ - Context.Rsp = (ULONG64)_AddressOfReturnAddress() + 8; - - /* Save the exception address */ - ExceptionRecord->ExceptionAddress = (PVOID)Context.Rip; - - /* Check if user mode debugger is active */ - if (RtlpCheckForActiveDebugger()) - { - /* Raise an exception immediately */ - Status = ZwRaiseException(ExceptionRecord, &Context, TRUE); - } - else - { - /* Dispatch the exception and check if we should continue */ - if (!RtlDispatchException(ExceptionRecord, &Context)) - { - /* Raise the exception */ - Status = ZwRaiseException(ExceptionRecord, &Context, FALSE); - } - else - { - /* Continue, go back to previous context */ - Status = ZwContinue(&Context, FALSE); - } - } - - /* If we returned, raise a status */ - RtlRaiseStatus(Status); -} - /* * @unimplemented */ diff --git a/sdk/lib/rtl/amd64/except_asm.S b/sdk/lib/rtl/amd64/except_asm.S index 4b776b27974..52bac1602a7 100644 --- a/sdk/lib/rtl/amd64/except_asm.S +++ b/sdk/lib/rtl/amd64/except_asm.S @@ -233,6 +233,81 @@ ReturnFar: .ENDP +EXTERN RtlpCheckForActiveDebugger:PROC +EXTERN RtlDispatchException:PROC +EXTERN ZwContinue:PROC +EXTERN ZwRaiseException:PROC +EXTERN RtlRaiseStatus:PROC + +/* + * VOID + * RtlRaiseException ( + * _In_ PEXCEPTION_RECORD ExceptionRecord); + */ +PUBLIC RtlRaiseException +.PROC RtlRaiseException + + /* Allocate stack space for a CONTEXT record */ + sub rsp, CONTEXT_FRAME_LENGTH + 8 + .allocstack CONTEXT_FRAME_LENGTH + 8 + + /* Save the ExceptionRecord pointer */ + mov [rsp + CONTEXT_FRAME_LENGTH + 8 + P1Home], rcx + + .endprolog + + /* Save the return address in EXCEPTION_RECORD.ExceptionAddress */ + mov rdx, [rsp + CONTEXT_FRAME_LENGTH + 8] + mov [rcx + ErExceptionAddress], rdx + + /* Capture the current context */ + mov rcx, rsp + call RtlCaptureContext + + /* Fix up CONTEXT.Rip for the caller (RtlCaptureContext doesn't change rdx!) */ + mov [rsp + CxRip], rdx + + /* Fix up CONTEXT.Rsp for the caller (+8 for the return address) */ + lea rdx, [rsp + CONTEXT_FRAME_LENGTH + 8 + 8] + mov [rsp + CxRsp], rdx + + /* Check if a user mode debugger is active */ + call RtlpCheckForActiveDebugger + test al, al + mov r8b, 1 + jnz RaiseException + + /* Dispatch the exception */ + mov rcx, [rsp + CONTEXT_FRAME_LENGTH + 8 + P1Home] + mov rdx, rsp + call RtlDispatchException + + /* Check if it was handled */ + test al, al + mov r8b, 0 + jz RaiseException + + /* It was handled, continue with the updated context */ + mov rcx, rsp + mov dl, 0 + call ZwContinue + jmp RaiseStatus + +RaiseException: + + mov rcx, [rsp + CxP1Home] + mov rdx, rsp + call ZwRaiseException + +RaiseStatus: + + mov rcx, rax + mov rdx, rsp + call RtlRaiseStatus + +.ENDP + + END From 05456808e8a09346f9abdb7ca99919eb1d93cbc1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 15 Dec 2022 21:55:16 +0200 Subject: [PATCH 36/44] [NTOS:KE/x64] Fix handling of non-volatiles in trap vs exception frame The registers that are saved/restored in the trap / exception frame need to be consistent between all entry/exit points as well as the functions that convert between trap/exception frame and context. The trap frame contains only the non-volatile registers and rbp, the rest is saved in the exception frame. The previous code didn't save rbp in the syscall handler, which led to it being clobbered when exiting though KiServiceExit2 rather than returning back to the syscall exit path. Also KeContextToTrapFrame would use rbx, rsi and rdi from the trap frame, which wouldn't be saved there by the syscall handler. --- ntoskrnl/ke/amd64/context.c | 6 +++--- ntoskrnl/ke/amd64/trap.S | 4 +++- sdk/include/asm/trapamd64.inc | 17 ----------------- 3 files changed, 6 insertions(+), 21 deletions(-) diff --git a/ntoskrnl/ke/amd64/context.c b/ntoskrnl/ke/amd64/context.c index 1e9900af11f..3c345f89052 100644 --- a/ntoskrnl/ke/amd64/context.c +++ b/ntoskrnl/ke/amd64/context.c @@ -36,11 +36,8 @@ KeContextToTrapFrame(IN PCONTEXT Context, if (ContextFlags & CONTEXT_INTEGER) { TrapFrame->Rax = Context->Rax; - TrapFrame->Rbx = Context->Rbx; TrapFrame->Rcx = Context->Rcx; TrapFrame->Rdx = Context->Rdx; - TrapFrame->Rsi = Context->Rsi; - TrapFrame->Rdi = Context->Rdi; TrapFrame->Rbp = Context->Rbp; TrapFrame->R8 = Context->R8; TrapFrame->R9 = Context->R9; @@ -48,6 +45,9 @@ KeContextToTrapFrame(IN PCONTEXT Context, TrapFrame->R11 = Context->R11; if (ExceptionFrame) { + ExceptionFrame->Rbx = Context->Rbx; + ExceptionFrame->Rsi = Context->Rsi; + ExceptionFrame->Rdi = Context->Rdi; ExceptionFrame->R12 = Context->R12; ExceptionFrame->R13 = Context->R13; ExceptionFrame->R14 = Context->R14; diff --git a/ntoskrnl/ke/amd64/trap.S b/ntoskrnl/ke/amd64/trap.S index a2cbd4ab013..6013c5492d0 100644 --- a/ntoskrnl/ke/amd64/trap.S +++ b/ntoskrnl/ke/amd64/trap.S @@ -781,6 +781,7 @@ PUBLIC KiSystemCallEntry64 /* The unwind info pretends we have a machine frame */ .PUSHFRAME .ALLOCSTACK (KTRAP_FRAME_LENGTH + MAX_SYSCALL_PARAM_SIZE - MachineFrameLength) + .SAVEREG rbp, MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rbp .ENDPROLOG /* Swap gs to kernel, so we can access the PCR */ @@ -795,7 +796,7 @@ PUBLIC KiSystemCallEntry64 /* Allocate a TRAP_FRAME and space for parameters */ sub rsp, (KTRAP_FRAME_LENGTH + MAX_SYSCALL_PARAM_SIZE) - /* Save volatile registers in the trap frame */ + /* Save volatile registers and rbp in the trap frame */ mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rax], rax mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rip], rcx mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rdx], rdx @@ -803,6 +804,7 @@ PUBLIC KiSystemCallEntry64 mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_R9], r9 mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rcx], r10 mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_EFlags], r11 + mov [rsp + MAX_SYSCALL_PARAM_SIZE + KTRAP_FRAME_Rbp], rbp /* Store user stack pointer in the trap frame */ mov rax, gs:[PcUserRsp] diff --git a/sdk/include/asm/trapamd64.inc b/sdk/include/asm/trapamd64.inc index 0c09063f058..b095f193481 100644 --- a/sdk/include/asm/trapamd64.inc +++ b/sdk/include/asm/trapamd64.inc @@ -108,16 +108,6 @@ MACRO(EnterTrap, Flags) lea rbp, [rsp] .setframe rbp, 0 - if (Flags AND TF_NONVOLATILES) - /* Save non-volatile registers */ - mov [rbp + KTRAP_FRAME_Rbx], rbx - .savereg rbx, KTRAP_FRAME_Rbx - mov [rbp + KTRAP_FRAME_Rdi], rdi - .savereg rdi, KTRAP_FRAME_Rdi - mov [rbp + KTRAP_FRAME_Rsi], rsi - .savereg rsi, KTRAP_FRAME_Rsi - endif - .endprolog if (Flags AND TF_VOLATILES) @@ -243,13 +233,6 @@ MACRO(ExitTrap, Flags) kernel_mode_return: - if (Flags AND TF_NONVOLATILES) - /* Restore non-volatile registers */ - mov rbx, [rbp + KTRAP_FRAME_Rbx] - mov rdi, [rbp + KTRAP_FRAME_Rdi] - mov rsi, [rbp + KTRAP_FRAME_Rsi] - endif - if (Flags AND TF_VOLATILES) /* Restore volatile registers */ mov rax, [rbp + KTRAP_FRAME_Rax] From 8d459f2820c262b0b3282164db676185457a8568 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 26 Mar 2024 00:00:52 +0200 Subject: [PATCH 37/44] [NTOS:KE/x64] Clean up EnterTrap/ExitTrap - Always save and restore all non-volatile registers, including xmm - Remove the obsolete flags --- hal/halx86/apic/apictrap.S | 6 +-- sdk/include/asm/trapamd64.inc | 80 +++++++++++++++-------------------- 2 files changed, 37 insertions(+), 49 deletions(-) diff --git a/hal/halx86/apic/apictrap.S b/hal/halx86/apic/apictrap.S index e62ffc0b471..417d7e70fc6 100644 --- a/hal/halx86/apic/apictrap.S +++ b/hal/halx86/apic/apictrap.S @@ -15,9 +15,9 @@ #include .code -TRAP_ENTRY HalpClockInterrupt, (TF_VOLATILES OR TF_SEND_EOI) -TRAP_ENTRY HalpClockIpi, (TF_VOLATILES OR TF_SEND_EOI) -TRAP_ENTRY HalpProfileInterrupt, (TF_VOLATILES OR TF_SEND_EOI) +TRAP_ENTRY HalpClockInterrupt, TF_SEND_EOI +TRAP_ENTRY HalpClockIpi, TF_SEND_EOI +TRAP_ENTRY HalpProfileInterrupt, TF_SEND_EOI PUBLIC ApicSpuriousService ApicSpuriousService: diff --git a/sdk/include/asm/trapamd64.inc b/sdk/include/asm/trapamd64.inc index b095f193481..180756de5bc 100644 --- a/sdk/include/asm/trapamd64.inc +++ b/sdk/include/asm/trapamd64.inc @@ -52,13 +52,10 @@ ENDM APIC_EOI = HEX(0FFFFFFFFFFFE00B0) -TF_VOLATILES = HEX(01) -TF_NONVOLATILES = HEX(02) -TF_XMM = HEX(04) TF_SEGMENTS = HEX(08) TF_DEBUG = HEX(10) TF_IRQL = HEX(20) -TF_SAVE_ALL = (TF_VOLATILES OR TF_NONVOLATILES OR TF_XMM OR TF_SEGMENTS) +TF_SAVE_ALL = (TF_SEGMENTS) TF_HAS_ERROR_CODE = HEX(40) TF_SEND_EOI = HEX(80) //TF_SYSTEMSERVICE = (TRAPFLAG_VOLATILES or TRAPFLAG_DEBUG) @@ -98,11 +95,9 @@ MACRO(EnterTrap, Flags) sub rsp, (KTRAP_FRAME_LENGTH - SIZE_INITIAL_FRAME) .allocstack (KTRAP_FRAME_LENGTH - SIZE_INITIAL_FRAME) - /* Save rbp and rax */ + /* Save rbp */ mov [rsp + KTRAP_FRAME_Rbp], rbp .savereg rbp, KTRAP_FRAME_Rbp - mov [rsp + KTRAP_FRAME_Rax], rax - .savereg rax, KTRAP_FRAME_Rax /* Point rbp to the KTRAP_FRAME */ lea rbp, [rsp] @@ -110,25 +105,22 @@ MACRO(EnterTrap, Flags) .endprolog - if (Flags AND TF_VOLATILES) - /* Save volatile registers */ - mov [rbp + KTRAP_FRAME_Rcx], rcx - mov [rbp + KTRAP_FRAME_Rdx], rdx - mov [rbp + KTRAP_FRAME_R8], r8 - mov [rbp + KTRAP_FRAME_R9], r9 - mov [rbp + KTRAP_FRAME_R10], r10 - mov [rbp + KTRAP_FRAME_R11], r11 - endif - - if (Flags AND TF_XMM) - /* Save xmm registers */ - movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 - movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 - movdqa [rbp + KTRAP_FRAME_Xmm2], xmm2 - movdqa [rbp + KTRAP_FRAME_Xmm3], xmm3 - movdqa [rbp + KTRAP_FRAME_Xmm4], xmm4 - movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 - endif + /* Save volatile registers */ + mov [rbp + KTRAP_FRAME_Rax], rax + mov [rbp + KTRAP_FRAME_Rcx], rcx + mov [rbp + KTRAP_FRAME_Rdx], rdx + mov [rbp + KTRAP_FRAME_R8], r8 + mov [rbp + KTRAP_FRAME_R9], r9 + mov [rbp + KTRAP_FRAME_R10], r10 + mov [rbp + KTRAP_FRAME_R11], r11 + + /* Save volatile xmm registers */ + movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 + movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 + movdqa [rbp + KTRAP_FRAME_Xmm2], xmm2 + movdqa [rbp + KTRAP_FRAME_Xmm3], xmm3 + movdqa [rbp + KTRAP_FRAME_Xmm4], xmm4 + movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 if (Flags AND TF_SEGMENTS) /* Save segment selectors */ @@ -233,26 +225,22 @@ MACRO(ExitTrap, Flags) kernel_mode_return: - if (Flags AND TF_VOLATILES) - /* Restore volatile registers */ - mov rax, [rbp + KTRAP_FRAME_Rax] - mov rcx, [rbp + KTRAP_FRAME_Rcx] - mov rdx, [rbp + KTRAP_FRAME_Rdx] - mov r8, [rbp + KTRAP_FRAME_R8] - mov r9, [rbp + KTRAP_FRAME_R9] - mov r10, [rbp + KTRAP_FRAME_R10] - mov r11, [rbp + KTRAP_FRAME_R11] - endif - - if (Flags AND TF_XMM) - /* Restore xmm registers */ - movdqa xmm0, [rbp + KTRAP_FRAME_Xmm0] - movdqa xmm1, [rbp + KTRAP_FRAME_Xmm1] - movdqa xmm2, [rbp + KTRAP_FRAME_Xmm2] - movdqa xmm3, [rbp + KTRAP_FRAME_Xmm3] - movdqa xmm4, [rbp + KTRAP_FRAME_Xmm4] - movdqa xmm5, [rbp + KTRAP_FRAME_Xmm5] - endif + /* Restore volatile registers */ + mov rax, [rbp + KTRAP_FRAME_Rax] + mov rcx, [rbp + KTRAP_FRAME_Rcx] + mov rdx, [rbp + KTRAP_FRAME_Rdx] + mov r8, [rbp + KTRAP_FRAME_R8] + mov r9, [rbp + KTRAP_FRAME_R9] + mov r10, [rbp + KTRAP_FRAME_R10] + mov r11, [rbp + KTRAP_FRAME_R11] + + /* Restore xmm registers */ + movdqa xmm0, [rbp + KTRAP_FRAME_Xmm0] + movdqa xmm1, [rbp + KTRAP_FRAME_Xmm1] + movdqa xmm2, [rbp + KTRAP_FRAME_Xmm2] + movdqa xmm3, [rbp + KTRAP_FRAME_Xmm3] + movdqa xmm4, [rbp + KTRAP_FRAME_Xmm4] + movdqa xmm5, [rbp + KTRAP_FRAME_Xmm5] /* Restore MCXSR */ ldmxcsr [rbp + KTRAP_FRAME_MxCsr] From 8feb0786927cd6304fcbb8133577f18213827896 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 26 Mar 2024 00:04:16 +0200 Subject: [PATCH 38/44] [NTOS:KE/x64] Use movaps instead of movdqa It does the same thing, but is one byte shorter. --- sdk/include/asm/trapamd64.inc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sdk/include/asm/trapamd64.inc b/sdk/include/asm/trapamd64.inc index 180756de5bc..04a1515388b 100644 --- a/sdk/include/asm/trapamd64.inc +++ b/sdk/include/asm/trapamd64.inc @@ -115,12 +115,12 @@ MACRO(EnterTrap, Flags) mov [rbp + KTRAP_FRAME_R11], r11 /* Save volatile xmm registers */ - movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 - movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 - movdqa [rbp + KTRAP_FRAME_Xmm2], xmm2 - movdqa [rbp + KTRAP_FRAME_Xmm3], xmm3 - movdqa [rbp + KTRAP_FRAME_Xmm4], xmm4 - movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 + movaps [rbp + KTRAP_FRAME_Xmm0], xmm0 + movaps [rbp + KTRAP_FRAME_Xmm1], xmm1 + movaps [rbp + KTRAP_FRAME_Xmm2], xmm2 + movaps [rbp + KTRAP_FRAME_Xmm3], xmm3 + movaps [rbp + KTRAP_FRAME_Xmm4], xmm4 + movaps [rbp + KTRAP_FRAME_Xmm5], xmm5 if (Flags AND TF_SEGMENTS) /* Save segment selectors */ @@ -235,12 +235,12 @@ kernel_mode_return: mov r11, [rbp + KTRAP_FRAME_R11] /* Restore xmm registers */ - movdqa xmm0, [rbp + KTRAP_FRAME_Xmm0] - movdqa xmm1, [rbp + KTRAP_FRAME_Xmm1] - movdqa xmm2, [rbp + KTRAP_FRAME_Xmm2] - movdqa xmm3, [rbp + KTRAP_FRAME_Xmm3] - movdqa xmm4, [rbp + KTRAP_FRAME_Xmm4] - movdqa xmm5, [rbp + KTRAP_FRAME_Xmm5] + movaps xmm0, [rbp + KTRAP_FRAME_Xmm0] + movaps xmm1, [rbp + KTRAP_FRAME_Xmm1] + movaps xmm2, [rbp + KTRAP_FRAME_Xmm2] + movaps xmm3, [rbp + KTRAP_FRAME_Xmm3] + movaps xmm4, [rbp + KTRAP_FRAME_Xmm4] + movaps xmm5, [rbp + KTRAP_FRAME_Xmm5] /* Restore MCXSR */ ldmxcsr [rbp + KTRAP_FRAME_MxCsr] From 63e5885b373d1813184fac03a5b9094e85938fde Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 15 Apr 2024 03:24:09 +0900 Subject: [PATCH 39/44] [SHELL32] Fix ParseDisplayName Part 3 (#6746) Follow-up to #6740. Reduce SHParseDisplayName failures. JIRA issue: CORE-19495 - Add CRegFolder::_IsInNameSpace helper method. - Half-implement CRegFolder::ParseDisplayName method. - Parse class string by using GUIDFromStringW function. - Return CO_E_CLASSSTRING for invalid CLSID string. --- dll/win32/shell32/folders/CRegFolder.cpp | 78 +++++++++++++++++------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/dll/win32/shell32/folders/CRegFolder.cpp b/dll/win32/shell32/folders/CRegFolder.cpp index 5965039c147..57e0dc9aa3a 100644 --- a/dll/win32/shell32/folders/CRegFolder.cpp +++ b/dll/win32/shell32/folders/CRegFolder.cpp @@ -313,6 +313,8 @@ class CRegFolder : CComHeapPtr m_pidlRoot; HRESULT GetGuidItemAttributes (LPCITEMIDLIST pidl, LPDWORD pdwAttributes); + BOOL _IsInNameSpace(_In_ LPCITEMIDLIST pidl); + public: CRegFolder(); ~CRegFolder(); @@ -401,46 +403,76 @@ HRESULT CRegFolder::GetGuidItemAttributes (LPCITEMIDLIST pidl, LPDWORD pdwAttrib return S_OK; } +BOOL CRegFolder::_IsInNameSpace(_In_ LPCITEMIDLIST pidl) +{ + CLSID clsid = *_ILGetGUIDPointer(pidl); + if (IsEqualGUID(clsid, CLSID_Printers)) + return TRUE; + if (IsEqualGUID(clsid, CLSID_ConnectionFolder)) + return TRUE; + FIXME("Check registry\n"); + return TRUE; +} + HRESULT WINAPI CRegFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten, PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes) { - LPITEMIDLIST pidl; - - if (!lpszDisplayName || !ppidl) + if (!ppidl) return E_INVALIDARG; - *ppidl = 0; + *ppidl = NULL; - if (pchEaten) - *pchEaten = 0; + if (!lpszDisplayName) + return E_INVALIDARG; - UINT cch = wcslen(lpszDisplayName); - if (cch < 39 || lpszDisplayName[0] != L':' || lpszDisplayName[1] != L':') + if (lpszDisplayName[0] != L':' || lpszDisplayName[1] != L':') + { + FIXME("What should we do here?\n"); return E_FAIL; + } - pidl = _ILCreateGuidFromStrW(lpszDisplayName + 2); - if (pidl == NULL) + LPWSTR pch, pchNextOfComma = NULL; + for (pch = &lpszDisplayName[2]; *pch && *pch != L'\\'; ++pch) + { + if (*pch == L',' && !pchNextOfComma) + pchNextOfComma = pch + 1; + } + + CLSID clsid; + if (!GUIDFromStringW(&lpszDisplayName[2], &clsid)) + return CO_E_CLASSSTRING; + + if (pchNextOfComma) + { + FIXME("Delegate folder\n"); return E_FAIL; + } + + CComHeapPtr pidlTemp(_ILCreateGuid(PT_GUID, clsid)); + if (!pidlTemp) + return E_OUTOFMEMORY; - if (cch < 41) + if (!_IsInNameSpace(pidlTemp) && !(BindCtx_GetMode(pbc, 0) & STGM_CREATE)) + return E_INVALIDARG; + + *ppidl = pidlTemp.Detach(); + + if (!*pch) { - *ppidl = pidl; if (pdwAttributes && *pdwAttributes) - { GetGuidItemAttributes(*ppidl, pdwAttributes); - } + + return S_OK; } - else + + HRESULT hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, ppidl, pch + 1, pchEaten, + pdwAttributes); + if (FAILED(hr)) { - HRESULT hr = SHELL32_ParseNextElement(this, hwndOwner, pbc, &pidl, lpszDisplayName + 41, pchEaten, pdwAttributes); - if (SUCCEEDED(hr)) - { - *ppidl = pidl; - } - return hr; + ILFree(*ppidl); + *ppidl = NULL; } - - return S_OK; + return hr; } HRESULT WINAPI CRegFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) From b1de3bfb2b5fa3e15ef9330169d9474b8304a708 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 15 Apr 2024 03:25:20 +0900 Subject: [PATCH 40/44] [SHELL32] Fix ParseDisplayName Part 4 (#6747) Follow-up to #6746. Reduce SHParseDisplayName failures. JIRA issue: CORE-19495 - Re-implement CDrivesFolder::ParseDisplayName method. --- dll/win32/shell32/folders/CDrivesFolder.cpp | 91 +++++++++++---------- 1 file changed, 47 insertions(+), 44 deletions(-) diff --git a/dll/win32/shell32/folders/CDrivesFolder.cpp b/dll/win32/shell32/folders/CDrivesFolder.cpp index ba1a3d10160..04d0c080814 100644 --- a/dll/win32/shell32/folders/CDrivesFolder.cpp +++ b/dll/win32/shell32/folders/CDrivesFolder.cpp @@ -4,7 +4,7 @@ * Copyright 1997 Marcus Meissner * Copyright 1998, 1999, 2002 Juergen Schmied * Copyright 2009 Andrew Hill - * Copyright 2017-2019 Katayama Hirofumi MZ + * Copyright 2017-2024 Katayama Hirofumi MZ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -658,67 +658,70 @@ HRESULT WINAPI CDrivesFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLEST DWORD * pchEaten, PIDLIST_RELATIVE * ppidl, DWORD * pdwAttributes) { HRESULT hr = E_INVALIDARG; - LPCWSTR szNext = NULL; - LPITEMIDLIST pidlTemp = NULL; - INT nDriveNumber; TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", this, hwndOwner, pbc, lpszDisplayName, debugstr_w (lpszDisplayName), pchEaten, ppidl, pdwAttributes); - *ppidl = 0; - if (pchEaten) - *pchEaten = 0; /* strange but like the original */ + if (!ppidl) + return hr; - /* handle CLSID paths */ - if (lpszDisplayName[0] == ':' && lpszDisplayName[1] == ':') - return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, pdwAttributes); + *ppidl = NULL; - nDriveNumber = PathGetDriveNumberW(lpszDisplayName); - if (nDriveNumber < 0) - return E_INVALIDARG; + if (!lpszDisplayName) + return hr; - /* check if this drive actually exists */ - if ((::GetLogicalDrives() & (1 << nDriveNumber)) == 0) + /* handle CLSID paths */ + if (lpszDisplayName[0] == L':' && lpszDisplayName[1] == L':') { - return HRESULT_FROM_WIN32(ERROR_INVALID_DRIVE); + return m_regFolder->ParseDisplayName(hwndOwner, pbc, lpszDisplayName, pchEaten, ppidl, + pdwAttributes); } - pidlTemp = _ILCreateDrive(lpszDisplayName); - if (!pidlTemp) - return E_OUTOFMEMORY; - - if (lpszDisplayName[2] == L'\\') + if (lpszDisplayName[0] && + ((L'A' <= lpszDisplayName[0] && lpszDisplayName[0] <= L'Z') || + (L'a' <= lpszDisplayName[0] && lpszDisplayName[0] <= L'z')) && + lpszDisplayName[1] == L':' && lpszDisplayName[2] == L'\\') { - szNext = &lpszDisplayName[3]; - } + // "C:\..." + WCHAR szRoot[8]; + PathBuildRootW(szRoot, ((*lpszDisplayName - 1) & 0x1F)); - if (szNext && *szNext) - { - hr = SHELL32_ParseNextElement (this, hwndOwner, pbc, &pidlTemp, - (LPOLESTR) szNext, pchEaten, pdwAttributes); - } - else - { - hr = S_OK; - if (pdwAttributes && *pdwAttributes) + if (SHIsFileSysBindCtx(pbc, NULL) != S_OK && !(BindCtx_GetMode(pbc, 0) & STGM_CREATE)) { - if (_ILIsDrive(pidlTemp)) - { - *pdwAttributes &= dwDriveAttributes; + if (::GetDriveType(szRoot) == DRIVE_NO_ROOT_DIR) + return HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND); + } - if (_ILGetDriveType(pidlTemp) == DRIVE_CDROM) - *pdwAttributes &= ~SFGAO_CANRENAME; // CD-ROM drive cannot rename - } - else if (_ILIsSpecialFolder(pidlTemp)) - m_regFolder->GetAttributesOf(1, &pidlTemp, pdwAttributes); - else - ERR("Got unknown pidl\n"); + CComHeapPtr pidlTemp(_ILCreateDrive(szRoot)); + if (!pidlTemp) + return E_OUTOFMEMORY; + + if (lpszDisplayName[3]) + { + CComPtr pChildFolder; + hr = BindToObject(pidlTemp, pbc, IID_PPV_ARG(IShellFolder, &pChildFolder)); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + ULONG chEaten; + CComHeapPtr pidlChild; + hr = pChildFolder->ParseDisplayName(hwndOwner, pbc, &lpszDisplayName[3], &chEaten, + &pidlChild, pdwAttributes); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + + hr = SHILCombine(pidlTemp, pidlChild, ppidl); + } + else + { + *ppidl = pidlTemp.Detach(); + if (pdwAttributes && *pdwAttributes) + GetAttributesOf(1, (PCUITEMID_CHILD_ARRAY)ppidl, pdwAttributes); + hr = S_OK; } } - *ppidl = pidlTemp; - TRACE("(%p)->(-- ret=0x%08x)\n", this, hr); return hr; From ea34ecc9ec78882d8aff6e297ab57d5b22df3005 Mon Sep 17 00:00:00 2001 From: "Carl J. Bialorucki" Date: Sun, 14 Apr 2024 17:08:01 -0600 Subject: [PATCH 41/44] Check if dwBandID is NULL before getting band object (#6738) fixes CORE-18807 'Our explorer.exe ATL-asserts when executed on XPSP3' which most likely got unhidden when we enabled the ATL-assertions in 0.4.15-dev-5023-g 55343f04b084931a20c396b76645f38cad94ea1b --- base/shell/explorer/tbsite.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/shell/explorer/tbsite.cpp b/base/shell/explorer/tbsite.cpp index 387cdb4d188..a842509d5da 100644 --- a/base/shell/explorer/tbsite.cpp +++ b/base/shell/explorer/tbsite.cpp @@ -459,7 +459,7 @@ class CTrayBandSite : /* Enumerate all bands */ while (SUCCEEDED(m_BandSite->EnumBands(uBand, &dwBandID))) { - if (SUCCEEDED(m_BandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &pBand)))) + if (dwBandID && SUCCEEDED(m_BandSite->GetBandObject(dwBandID, IID_PPV_ARG(IPersist, &pBand)))) { if (SUCCEEDED(pBand->GetClassID(&BandCLSID))) { From 1b85a5fa06c80b010b7a93fbe0a60d3e5b07b0e3 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Mon, 15 Apr 2024 09:41:01 +0900 Subject: [PATCH 42/44] [BROWSEUI] SHExplorerParseCmdLine: Fix parsing of /root (#6752) Remove excessive (!pInfo->pidlPath) check in SHExplorerParseCmdLine function. JIRA issue: CORE-16939 --- dll/win32/browseui/parsecmdline.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/dll/win32/browseui/parsecmdline.cpp b/dll/win32/browseui/parsecmdline.cpp index 720b3084c5a..56e68f127ef 100644 --- a/dll/win32/browseui/parsecmdline.cpp +++ b/dll/win32/browseui/parsecmdline.cpp @@ -252,9 +252,8 @@ SHExplorerParseCmdLine(_Out_ PEXPLORER_CMDLINE_PARSE_RESULTS pInfo) PCWSTR strNextArg = _FindFirstField(strFieldArray); - BOOL hasNext = TRUE; + BOOL hasNext = _ReadNextArg(&strNextArg, strField, _countof(strField)); - hasNext = _ReadNextArg(&strNextArg, strField, _countof(strField)); while (TRUE) { // Basic flags-only params first @@ -319,9 +318,6 @@ SHExplorerParseCmdLine(_Out_ PEXPLORER_CMDLINE_PARSE_RESULTS pInfo) TRACE("CmdLine Parser: Found %S flag\n", strField); - if (!pInfo->pidlPath) - return FALSE; - if (!hasNext) return FALSE; @@ -414,7 +410,6 @@ SHExplorerParseCmdLine(_Out_ PEXPLORER_CMDLINE_PARSE_RESULTS pInfo) TRACE("CmdLine Parser: Parsed target path. dwFlags=%08lx, strPath=%S\n", pInfo->dwFlags, field); } } - } } From 95bf896b10173e0f5bc3f06eb765fdae2fa421c3 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 8 Mar 2024 12:55:01 +0200 Subject: [PATCH 43/44] [CRT] crtdefs.h: Wrap localeinfo_struct in ifdef This prevents a redefinition error, when GCC 13 host headers are included when compiling c++ code. --- sdk/include/crt/crtdefs.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/include/crt/crtdefs.h b/sdk/include/crt/crtdefs.h index bf01188fe9f..6eb0acae37a 100644 --- a/sdk/include/crt/crtdefs.h +++ b/sdk/include/crt/crtdefs.h @@ -438,10 +438,13 @@ typedef struct threadmbcinfostruct *pthreadmbcinfo; struct __lc_time_data; +#ifndef DEFINED_localeinfo_struct typedef struct localeinfo_struct { pthreadlocinfo locinfo; pthreadmbcinfo mbcinfo; }_locale_tstruct,*_locale_t; +#define DEFINED_localeinfo_struct 1 +#endif #ifdef __cplusplus } From 6cb18bc6a46adb72c9f543eecb2a26960f34f20e Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Wed, 17 Apr 2024 16:53:09 +0200 Subject: [PATCH 44/44] [COMDLG32] *.rc: Tweak spaces in IDS_INVALID_FILENAME (#6736) This saves a few bytes in the binary, e.g. comdlg32.dll master 0.4.15-dev-7887-g64a59a1 RosBEWin2.2.2 GCC8.4.0 dbg x86 shrinks from 1.011.712 bytes to 1.009.664 bytes. Furthermore it syncs the translations at this line, because pt-PT.rc already applied such a tweak. Co-authored-by: Katayama Hirofumi MZ --- dll/win32/comdlg32/lang/cdlg_Bg.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ca.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Cs.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Da.rc | 2 +- dll/win32/comdlg32/lang/cdlg_De.rc | 2 +- dll/win32/comdlg32/lang/cdlg_El.rc | 2 +- dll/win32/comdlg32/lang/cdlg_En.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Eo.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Es.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Et.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Fi.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Fr.rc | 2 +- dll/win32/comdlg32/lang/cdlg_He.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Hi.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Hu.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Id.rc | 2 +- dll/win32/comdlg32/lang/cdlg_It.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ja.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ko.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Lt.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Nl.rc | 2 +- dll/win32/comdlg32/lang/cdlg_No.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Pl.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Pt.rc | 3 ++- dll/win32/comdlg32/lang/cdlg_Ro.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Ru.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Si.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sk.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sq.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sr.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Sv.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Th.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Tr.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Uk.rc | 2 +- dll/win32/comdlg32/lang/cdlg_Zh.rc | 4 ++-- 35 files changed, 37 insertions(+), 36 deletions(-) diff --git a/dll/win32/comdlg32/lang/cdlg_Bg.rc b/dll/win32/comdlg32/lang/cdlg_Bg.rc index 61b4b651c27..ca8cd625d58 100644 --- a/dll/win32/comdlg32/lang/cdlg_Bg.rc +++ b/dll/win32/comdlg32/lang/cdlg_Bg.rc @@ -31,7 +31,7 @@ STRINGTABLE Искате ли да го замените?" IDS_INVALID_FILENAME_TITLE "Невалидни знаци в пътя" IDS_INVALID_FILENAME "Името на файла не може да съдържа следните символи:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Пътят не съществува" IDS_FILENOTEXISTING "Файлът не съществува" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Ca.rc b/dll/win32/comdlg32/lang/cdlg_Ca.rc index 8a9c9f07595..ef0239a2140 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ca.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ca.rc @@ -31,7 +31,7 @@ El voleu crear?" El voleu reemplaçar?" IDS_INVALID_FILENAME_TITLE "Hi ha caràcters invàlids en la ruta" IDS_INVALID_FILENAME "Un nom de fitxer no pot contenir cualsevol dels caràcters següents:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "La ruta no existeix" IDS_FILENOTEXISTING "El fitxer no existeix" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Cs.rc b/dll/win32/comdlg32/lang/cdlg_Cs.rc index d09f79a18eb..6fd87456eed 100644 --- a/dll/win32/comdlg32/lang/cdlg_Cs.rc +++ b/dll/win32/comdlg32/lang/cdlg_Cs.rc @@ -31,7 +31,7 @@ Chcete ho vytvořit?" Chcete ho přepsat novým?" IDS_INVALID_FILENAME_TITLE "Nedovolený(é) znak(y) v cestě k souboru" IDS_INVALID_FILENAME "Název souboru nesmí obsahovat žádný z následujících znaků:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Adresář neexistuje" IDS_FILENOTEXISTING "Soubor neexistuje" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Da.rc b/dll/win32/comdlg32/lang/cdlg_Da.rc index 0a7c8e39951..959f38d23e3 100644 --- a/dll/win32/comdlg32/lang/cdlg_Da.rc +++ b/dll/win32/comdlg32/lang/cdlg_Da.rc @@ -31,7 +31,7 @@ Vil du oprette filen?" Vil du erstatte den?" IDS_INVALID_FILENAME_TITLE "Der er et eller flere Ugyldige tegn i stien" IDS_INVALID_FILENAME "Et filnavn må ikke indeholde følgende tegn:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Stien eksisterer ikke." IDS_FILENOTEXISTING "Filen eksisterer ikke." IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_De.rc b/dll/win32/comdlg32/lang/cdlg_De.rc index 8e972e4db37..59f57c187fd 100644 --- a/dll/win32/comdlg32/lang/cdlg_De.rc +++ b/dll/win32/comdlg32/lang/cdlg_De.rc @@ -31,7 +31,7 @@ Wollen Sie sie neu anlegen?" Wollen Sie sie überschreiben?" IDS_INVALID_FILENAME_TITLE "Unzulässige Zeichen im Pfad" IDS_INVALID_FILENAME "Ein Dateiname darf folgende Zeichen nicht enthalten:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Der Pfad existiert nicht" IDS_FILENOTEXISTING "Die Datei existiert nicht" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_El.rc b/dll/win32/comdlg32/lang/cdlg_El.rc index 77301d0f946..7784bfab731 100644 --- a/dll/win32/comdlg32/lang/cdlg_El.rc +++ b/dll/win32/comdlg32/lang/cdlg_El.rc @@ -31,7 +31,7 @@ STRINGTABLE Θέλετε να το αντικαταστήσετε;" IDS_INVALID_FILENAME_TITLE "Μη έγγυρος(οι) χαρακτήρας(ες) στο μονοπάτι" IDS_INVALID_FILENAME "Ένα όνομα αρχείο δε μπορεί να περιέχει κάποιον από τους παρακάτω χαρακτήρες:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Το μονοπάτι δεν υπάρχει" IDS_FILENOTEXISTING "Το αρχείο δεν υπάρχει" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_En.rc b/dll/win32/comdlg32/lang/cdlg_En.rc index e0fbad88c09..a906672ae64 100644 --- a/dll/win32/comdlg32/lang/cdlg_En.rc +++ b/dll/win32/comdlg32/lang/cdlg_En.rc @@ -31,7 +31,7 @@ Do you want to create file?" Do you want to replace it?" IDS_INVALID_FILENAME_TITLE "Invalid character(s) in path" IDS_INVALID_FILENAME "A filename cannot contain any of the following characters:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Path does not exist" IDS_FILENOTEXISTING "File does not exist" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Eo.rc b/dll/win32/comdlg32/lang/cdlg_Eo.rc index b96f4f16a41..3038ed63f95 100644 --- a/dll/win32/comdlg32/lang/cdlg_Eo.rc +++ b/dll/win32/comdlg32/lang/cdlg_Eo.rc @@ -31,7 +31,7 @@ STRINGTABLE Ĉu vi volas superskribi ĝin?" IDS_INVALID_FILENAME_TITLE "Nekorekta(j) tipo(j) en vojo" IDS_INVALID_FILENAME "La dosiernomo ne povas enhavi la jenajn tipojn:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Vojo estas neekzistanta" IDS_FILENOTEXISTING "Dosiero estas neekzistanta" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Es.rc b/dll/win32/comdlg32/lang/cdlg_Es.rc index cbd7a9dc8ca..c006a5d14e3 100644 --- a/dll/win32/comdlg32/lang/cdlg_Es.rc +++ b/dll/win32/comdlg32/lang/cdlg_Es.rc @@ -37,7 +37,7 @@ STRINGTABLE ¿Desea reemplazarlo?" IDS_INVALID_FILENAME_TITLE "Caracter(es) inválidos en la ruta" IDS_INVALID_FILENAME "Un nombre de archivo no puede contener ninguno de los siguientes caracteres:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "La ruta no existe" IDS_FILENOTEXISTING "El archivo no existe" IDS_INVALID_FOLDERNAME "La selección contiene algún elemento que no es una carpeta" diff --git a/dll/win32/comdlg32/lang/cdlg_Et.rc b/dll/win32/comdlg32/lang/cdlg_Et.rc index 8edf1a25918..651e2972dd5 100644 --- a/dll/win32/comdlg32/lang/cdlg_Et.rc +++ b/dll/win32/comdlg32/lang/cdlg_Et.rc @@ -32,7 +32,7 @@ Kas soovite luua selle faili?" Kas soovite asendada selle?" IDS_INVALID_FILENAME_TITLE "Invalid character(s) in path" IDS_INVALID_FILENAME "Failinimi ei tohi sisaldada järgmisi märke:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Koht ei eksisteeri" IDS_FILENOTEXISTING "Fail ei eksisteeri" IDS_INVALID_FOLDERNAME "Valik sisaldab muid objekte kui kausti." diff --git a/dll/win32/comdlg32/lang/cdlg_Fi.rc b/dll/win32/comdlg32/lang/cdlg_Fi.rc index e95da5c83da..3693591d14d 100644 --- a/dll/win32/comdlg32/lang/cdlg_Fi.rc +++ b/dll/win32/comdlg32/lang/cdlg_Fi.rc @@ -31,7 +31,7 @@ Haluatko luoda sen?" Haluatko ylikirjoitaa sen?" IDS_INVALID_FILENAME_TITLE "Kansio sisältää epäkelpoja merkkejä" IDS_INVALID_FILENAME "Tiedoston nimi ei voi sisältää näitä merkkejä:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Kansiota ei ole" IDS_FILENOTEXISTING "Tiedostoa ei ole" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Fr.rc b/dll/win32/comdlg32/lang/cdlg_Fr.rc index 27e291cfe8e..aa5bf815e27 100644 --- a/dll/win32/comdlg32/lang/cdlg_Fr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Fr.rc @@ -31,7 +31,7 @@ Souhaitez-vous le créer ?" Voulez-vous le remplacer ?" IDS_INVALID_FILENAME_TITLE "Le chemin d'accès contient des caractères invalides" IDS_INVALID_FILENAME "Un nom de fichier ne peut contenir aucun des caractères suivants :\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Le chemin d'accès n'existe pas" IDS_FILENOTEXISTING "Le fichier n'existe pas" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_He.rc b/dll/win32/comdlg32/lang/cdlg_He.rc index a587f7d1302..9d20216508b 100644 --- a/dll/win32/comdlg32/lang/cdlg_He.rc +++ b/dll/win32/comdlg32/lang/cdlg_He.rc @@ -31,7 +31,7 @@ STRINGTABLE האם ברצונך להחליף אותו?" IDS_INVALID_FILENAME_TITLE "תווים שגויים בנתיב" IDS_INVALID_FILENAME "שם קובץ לא יכול להכיל אף אחד מהתווים הבאים:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "הנתיב אינו קיים" IDS_FILENOTEXISTING "הקובץ אינו קיים" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Hi.rc b/dll/win32/comdlg32/lang/cdlg_Hi.rc index f0233199bbf..c99318ac44d 100644 --- a/dll/win32/comdlg32/lang/cdlg_Hi.rc +++ b/dll/win32/comdlg32/lang/cdlg_Hi.rc @@ -17,7 +17,7 @@ STRINGTABLE क्या आप इसे बदलना चाहते हैं?" IDS_INVALID_FILENAME_TITLE "पथ में अमान्य कैरेक्टर" IDS_INVALID_FILENAME "फ़ाइलनेम में निम्न में से कोई भी कैरेक्टर नहीं हो सकता है:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "पथ मौजूद नहीं है" IDS_FILENOTEXISTING "फ़ाइल मौजूद नहीं है" IDS_INVALID_FOLDERNAME "चयन में एक गैर-फ़ोल्डर ऑब्जेक्ट है" diff --git a/dll/win32/comdlg32/lang/cdlg_Hu.rc b/dll/win32/comdlg32/lang/cdlg_Hu.rc index ff2df2f7b4d..dfe759b218f 100644 --- a/dll/win32/comdlg32/lang/cdlg_Hu.rc +++ b/dll/win32/comdlg32/lang/cdlg_Hu.rc @@ -31,7 +31,7 @@ Létrehozza a fájlt?" Cseréli a fájlt?" IDS_INVALID_FILENAME_TITLE "Érvénytelen karakter(ek) van(nak) az útvonalban" IDS_INVALID_FILENAME "A fájlnév nem tartalmazhatja ezeket a karaktereket:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Útvonal nem létezik" IDS_FILENOTEXISTING "Fájl nem létezik" IDS_INVALID_FOLDERNAME "A kijelölés egy mappától eltérő objektumot tartalmaz" diff --git a/dll/win32/comdlg32/lang/cdlg_Id.rc b/dll/win32/comdlg32/lang/cdlg_Id.rc index 9ce8054197d..347d0da0743 100644 --- a/dll/win32/comdlg32/lang/cdlg_Id.rc +++ b/dll/win32/comdlg32/lang/cdlg_Id.rc @@ -32,7 +32,7 @@ Ingin buat berkas?" Ingin mengganti berkas?" IDS_INVALID_FILENAME_TITLE "Karakter pada jalur tidak valid" IDS_INVALID_FILENAME "Nama file tidak boleh berisi salah satu karakter berikut:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Jalur tidak tersedia" IDS_FILENOTEXISTING "Berkas tidak tersedia" IDS_INVALID_FOLDERNAME "Pilihan ini berisi obyek non-folder" diff --git a/dll/win32/comdlg32/lang/cdlg_It.rc b/dll/win32/comdlg32/lang/cdlg_It.rc index 2281263c40c..ce044444232 100644 --- a/dll/win32/comdlg32/lang/cdlg_It.rc +++ b/dll/win32/comdlg32/lang/cdlg_It.rc @@ -31,7 +31,7 @@ Creare il file" Sovrascriverlo?" IDS_INVALID_FILENAME_TITLE "Caratteri invalidi nel percorso" IDS_INVALID_FILENAME "Il nome di un file non può contenere i seguenti caratteri:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Il percorso specificato non esiste" IDS_FILENOTEXISTING "Il file non esiste" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Ja.rc b/dll/win32/comdlg32/lang/cdlg_Ja.rc index 3baeb3b7d4a..ca0fc8ccaf0 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ja.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ja.rc @@ -31,7 +31,7 @@ STRINGTABLE 上書きしますか?" IDS_INVALID_FILENAME_TITLE "ファイル名に使えない文字" IDS_INVALID_FILENAME "ファイル名には以下の文字は使えません:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "パスが見つかりません" IDS_FILENOTEXISTING "ファイルが見つかりません" IDS_INVALID_FOLDERNAME "フォルダ以外のオブジェクトを選択しています" diff --git a/dll/win32/comdlg32/lang/cdlg_Ko.rc b/dll/win32/comdlg32/lang/cdlg_Ko.rc index 55e7deb434c..089794d0734 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ko.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ko.rc @@ -31,7 +31,7 @@ STRINGTABLE 덮어쓰겠습니까?" IDS_INVALID_FILENAME_TITLE "경로에 올바르지 않은 문자가 있습니다h" IDS_INVALID_FILENAME "파일이름에는 다음 문자만 포함될 수 있습니다:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "경로가 존재하지 않습니다." IDS_FILENOTEXISTING "파일이 존재하지 않습니다" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Lt.rc b/dll/win32/comdlg32/lang/cdlg_Lt.rc index 8e1da9ee7fa..b2d4c1b87ed 100644 --- a/dll/win32/comdlg32/lang/cdlg_Lt.rc +++ b/dll/win32/comdlg32/lang/cdlg_Lt.rc @@ -31,7 +31,7 @@ Ar norite sukurti failą?" Ar norite jį pakeisti?" IDS_INVALID_FILENAME_TITLE "Kelyje yra netinkamų simbolių" IDS_INVALID_FILENAME "Failo vardas negali turėti šių simbolių:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Kelias neegzistuoja" IDS_FILENOTEXISTING "Failas neegzistuoja" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Nl.rc b/dll/win32/comdlg32/lang/cdlg_Nl.rc index 35ad4f4aa72..d746a540b02 100644 --- a/dll/win32/comdlg32/lang/cdlg_Nl.rc +++ b/dll/win32/comdlg32/lang/cdlg_Nl.rc @@ -31,7 +31,7 @@ Wilt u het bestand aanmaken?" Wilt u het vervangen?" IDS_INVALID_FILENAME_TITLE "De naam van het pad bevat ongeldige tekens" IDS_INVALID_FILENAME "De volgende tekens mogen niet in de bestandsnaam voorkomen:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Het pad bestaat niet" IDS_FILENOTEXISTING "Kan het bestand niet vinden" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_No.rc b/dll/win32/comdlg32/lang/cdlg_No.rc index 4be6c2b1176..071de101386 100644 --- a/dll/win32/comdlg32/lang/cdlg_No.rc +++ b/dll/win32/comdlg32/lang/cdlg_No.rc @@ -31,7 +31,7 @@ Skal den opprettes?" Skal den overskrives?" IDS_INVALID_FILENAME_TITLE "Ugyldige tegn i filnavnet" IDS_INVALID_FILENAME "Et filnavn kan ikke inneholder følgende tegn:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Stien finnes ikke" IDS_FILENOTEXISTING "Filen finnes ikke" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Pl.rc b/dll/win32/comdlg32/lang/cdlg_Pl.rc index 9ede78a8b18..1fd1d3ed7bd 100644 --- a/dll/win32/comdlg32/lang/cdlg_Pl.rc +++ b/dll/win32/comdlg32/lang/cdlg_Pl.rc @@ -32,7 +32,7 @@ Czy chcesz go utworzyć?" Czy chcesz go zastąpić?" IDS_INVALID_FILENAME_TITLE "Błędny(e) znak(i) w nazwie" IDS_INVALID_FILENAME "Nazwa pliku nie może zawierać znaków:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Katalog nie istnieje" IDS_FILENOTEXISTING "Plik nie istnieje" IDS_INVALID_FOLDERNAME "Wybór nie zawiera folderu" diff --git a/dll/win32/comdlg32/lang/cdlg_Pt.rc b/dll/win32/comdlg32/lang/cdlg_Pt.rc index 65858d51d12..e148b6fec27 100644 --- a/dll/win32/comdlg32/lang/cdlg_Pt.rc +++ b/dll/win32/comdlg32/lang/cdlg_Pt.rc @@ -31,7 +31,8 @@ STRINGTABLE IDS_CREATEFILE "O ficheiro não existe.\nGostaria de o criar?" IDS_OVERWRITEFILE "O ficheiro já existe.\nGostaria de o substituir?" IDS_INVALID_FILENAME_TITLE "Caracter(es) inválidos na localização" - IDS_INVALID_FILENAME "Um nome de ficheiro não pode conter quaisquer dos seguintes caracteres:\n / : < > |" + IDS_INVALID_FILENAME "Um nome de ficheiro não pode conter quaisquer dos seguintes caracteres:\n\ +/ : < > |" IDS_PATHNOTEXISTING "A localização não existe" IDS_FILENOTEXISTING "O ficheiro não existe" IDS_INVALID_FOLDERNAME "A sua selecção não contém nenhuma pasta" diff --git a/dll/win32/comdlg32/lang/cdlg_Ro.rc b/dll/win32/comdlg32/lang/cdlg_Ro.rc index 99ec3de6038..f8a0c0cceae 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ro.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ro.rc @@ -34,7 +34,7 @@ Doriți crearea acest fișier?" Doriți să îl suprascrieți?" IDS_INVALID_FILENAME_TITLE "Caracter(e) nevalid(e) în cale" IDS_INVALID_FILENAME "Numele de fișier nu poate conține caracterele următoare:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Calea nu există" IDS_FILENOTEXISTING "Fișierul nu există" IDS_INVALID_FOLDERNAME "Selecția nu conține un folder" diff --git a/dll/win32/comdlg32/lang/cdlg_Ru.rc b/dll/win32/comdlg32/lang/cdlg_Ru.rc index f5761dfaec7..00966b73503 100644 --- a/dll/win32/comdlg32/lang/cdlg_Ru.rc +++ b/dll/win32/comdlg32/lang/cdlg_Ru.rc @@ -31,7 +31,7 @@ STRINGTABLE Заменить его?" IDS_INVALID_FILENAME_TITLE "Некорректный символ(ы) в записи пути" IDS_INVALID_FILENAME "Имя файла не может содержать следующие символы:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Путь не существует" IDS_FILENOTEXISTING "Файл не существует" IDS_INVALID_FOLDERNAME "Выбор содержит объект не являющийся папкой" diff --git a/dll/win32/comdlg32/lang/cdlg_Si.rc b/dll/win32/comdlg32/lang/cdlg_Si.rc index 5771d53a1d2..d2505f70355 100644 --- a/dll/win32/comdlg32/lang/cdlg_Si.rc +++ b/dll/win32/comdlg32/lang/cdlg_Si.rc @@ -31,7 +31,7 @@ Ali jo želite ustvariti?" Ali jo želite zamenjati?" IDS_INVALID_FILENAME_TITLE "Neveljavni znaki v poti" IDS_INVALID_FILENAME "Ime datoteke ne sme vsebovati naslednjih znakov:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Pot ne obstaja" IDS_FILENOTEXISTING "Datoteka ne obstaja" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Sk.rc b/dll/win32/comdlg32/lang/cdlg_Sk.rc index 024b80249ed..c18ea80b67a 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sk.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sk.rc @@ -31,7 +31,7 @@ Do you want to create file?" Do you want to replace it?" IDS_INVALID_FILENAME_TITLE "Invalid character(s) in path" IDS_INVALID_FILENAME "Názov súboru nemôže obsahovať žiadny z nasledovných znakov:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Cesta neexistuje" IDS_FILENOTEXISTING "Súbor neexistuje" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Sq.rc b/dll/win32/comdlg32/lang/cdlg_Sq.rc index ea49c077405..834d29ec00e 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sq.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sq.rc @@ -32,7 +32,7 @@ Doni ta krijoni dokumentin?" Doni ta zevendesoni?" IDS_INVALID_FILENAME_TITLE "Karatere te pavlere ne rruge" IDS_INVALID_FILENAME "Nje emer dokumentin nuk mund te permbaje kararakteret e meposhtme:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Rruga nuk ekziston" IDS_FILENOTEXISTING "Dokumenti nuk ekziston" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Sr.rc b/dll/win32/comdlg32/lang/cdlg_Sr.rc index 2844f61aaaf..8d6c3229d2d 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sr.rc @@ -31,7 +31,7 @@ STRINGTABLE Želite li da je zamenite?" IDS_INVALID_FILENAME_TITLE "Neispravan znak u putanji" IDS_INVALID_FILENAME "Naziv datoteke ne sme sadržati sledeće znakove:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Putanja ne postoji" IDS_FILENOTEXISTING "Datoteka ne postoji" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Sv.rc b/dll/win32/comdlg32/lang/cdlg_Sv.rc index ad29c5a2cf0..4f40beb6281 100644 --- a/dll/win32/comdlg32/lang/cdlg_Sv.rc +++ b/dll/win32/comdlg32/lang/cdlg_Sv.rc @@ -31,7 +31,7 @@ Vill du skapa fil?" Vill du ersätta den?" IDS_INVALID_FILENAME_TITLE "Illegalt tecken i sökväg" IDS_INVALID_FILENAME "Ett filnamn kan inte innehålla någon av följande tecken:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Sökvägen finns inte" IDS_FILENOTEXISTING "Filen finns inte" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Th.rc b/dll/win32/comdlg32/lang/cdlg_Th.rc index 69d04dd7600..0d0ebde45dc 100644 --- a/dll/win32/comdlg32/lang/cdlg_Th.rc +++ b/dll/win32/comdlg32/lang/cdlg_Th.rc @@ -31,7 +31,7 @@ Do you want to create file?" Do you want to replace it?" IDS_INVALID_FILENAME_TITLE "Invalid character(s) in path" IDS_INVALID_FILENAME "ในชื่อแฟ้มใช้ไมได้ต้วนี้:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "ไม่พบไดเรกทอรี" IDS_FILENOTEXISTING "ไม่พบแฟ้ม" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Tr.rc b/dll/win32/comdlg32/lang/cdlg_Tr.rc index b4f722da58b..e256a4a2bd4 100644 --- a/dll/win32/comdlg32/lang/cdlg_Tr.rc +++ b/dll/win32/comdlg32/lang/cdlg_Tr.rc @@ -30,7 +30,7 @@ Dosya oluşturmak ister misiniz?" Onu değiştirmek ister misiniz?" IDS_INVALID_FILENAME_TITLE "Yolda geçersiz işaret ya da işaretler var." IDS_INVALID_FILENAME "Bir dosya adı aşağıdaki işaretlerin rastgele birini içeremez:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Dosya yolu yok." IDS_FILENOTEXISTING "Dosya yok." IDS_INVALID_FOLDERNAME "Seçim dizin olmayan bir nesne içeriyor." diff --git a/dll/win32/comdlg32/lang/cdlg_Uk.rc b/dll/win32/comdlg32/lang/cdlg_Uk.rc index a372795ca92..b7a975c3749 100644 --- a/dll/win32/comdlg32/lang/cdlg_Uk.rc +++ b/dll/win32/comdlg32/lang/cdlg_Uk.rc @@ -31,7 +31,7 @@ STRINGTABLE Замінити його?" IDS_INVALID_FILENAME_TITLE "Невірний символ в записі шляху" IDS_INVALID_FILENAME "Ім'я файлу не може містити наступні символи:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "Шлях не існує" IDS_FILENOTEXISTING "Файл не існує" IDS_INVALID_FOLDERNAME "The selection contains a non-folder object" diff --git a/dll/win32/comdlg32/lang/cdlg_Zh.rc b/dll/win32/comdlg32/lang/cdlg_Zh.rc index 18bf2c599d9..10024633655 100644 --- a/dll/win32/comdlg32/lang/cdlg_Zh.rc +++ b/dll/win32/comdlg32/lang/cdlg_Zh.rc @@ -35,7 +35,7 @@ STRINGTABLE 是否替换?" IDS_INVALID_FILENAME_TITLE "路径中包含无效字符" IDS_INVALID_FILENAME "文件名中不能包含任何以下字符::\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "路径不存在" IDS_FILENOTEXISTING "文件不存在" IDS_INVALID_FOLDERNAME "所选内容包含一个非文件夹物体" @@ -537,7 +537,7 @@ STRINGTABLE 您要取代它嗎?" IDS_INVALID_FILENAME_TITLE "檔案名稱含有無效的字元" IDS_INVALID_FILENAME "檔案名稱中不能包含以下任何一個字元:\n\ - / : < > |" +/ : < > |" IDS_PATHNOTEXISTING "路徑不存在" IDS_FILENOTEXISTING "檔案不存在" IDS_INVALID_FOLDERNAME "已選項目包含非資料夾物件"