Compare commits

...

561 Commits

Author SHA1 Message Date
Justin Miller
2709c9a6c8 Disable GetDisplayName test which is acting weird on the Windows
testbots
2025-07-28 21:47:19 -07:00
Katayama Hirofumi MZ
915b771037 [EXPLORER][NTUSER] Notify ABN_FULLSCREENAPP and fix monitor code (#8254)
Enable ABN_FULLSCREENAPP notification.
Fix some monitor functions.
JIRA issue: CORE-7237
- Improve NtUserMonitorFromRect and
  NtUserMonitorFromWindow functions.
- Remove if-statement in
  OnWindowActivated function.
- Don't check WS_EX_TOOLWINDOW in
  IntIsWindowFullscreen function.
- Add IntGetMonitorFromRect helper
  function to commonize some code in
  monitor functions.
2025-07-28 17:58:59 +09:00
Eric Kohl
fade0c3b89 [BOOTDATA] Fix resource id of Malayalam keyboard layout display name 2025-07-27 13:58:02 +02:00
Eric Kohl
7e1d9ef9bf [DHCPCSVC] Add DhcpEnumClasses and DhcpHandlePnpEvent stubs 2025-07-26 19:00:04 +02:00
Eric Kohl
76e5143e42 [IPCONFIG] Print proper error messages and more TCHAR fixes 2025-07-26 15:50:16 +02:00
Eric Kohl
e5b35337fd [IPCONFIG] Get rid of tchar.h 2025-07-26 15:25:08 +02:00
Eric Kohl
4b53972724 [IPCONFIG] Print an error message on unrecognized or incomplete command line 2025-07-26 12:35:40 +02:00
Eric Kohl
4e425b54b6 [BOOTDATA] Add missing Locale for Bengali (Bangaldesh)
This should fix CORE-20213. Please test again.
2025-07-23 22:25:46 +02:00
Doug Lyons
996bde80a9 [WIN32K] Fix gdi/dib horizontal line draw function crashes (#8263)
* [WIN32K] Fix gdi/dib assembly code and 'C' code horizontal line draw function crashes.
Do not do subtracts that cause a wrap to a negative value when determining length.
This affects bit depths of 8, 16, 24, and 32 Bits per Plane.

CORE-19634
CORE-13532
2025-07-22 13:09:53 -05:00
Eric Kohl
ea189a3048 [IPCONFIG] Implement the /setclassid option
The current implementation does not notify the dhcp client of the changed registry setting. Windows IPCONFIG calls DhcpHandlePnpEvent after setting the DhcpClassId registry value.
2025-07-20 13:59:39 +02:00
Timo Kreuzer
9750f6decd [RTL/x64] Improve RtlUnwindInternal
- Implement RtlpExecuteHandlerForUnwind in asm
- Implement RtlpExecuteHandlerForUnwindHandler
- Use the correct context in DISPATCHER_CONTEXT when unwinding
- Handle collided unwinds
2025-07-20 10:42:26 +03:00
Timo Kreuzer
4d21384d8f [COMPILER_APITEST] Add a test for collided unwind 2025-07-20 10:42:26 +03:00
Timo Kreuzer
6334168bf5 [COMPILER_APITEST] Enable some SEH tests for MSVC builds 2025-07-20 10:42:26 +03:00
Katayama Hirofumi MZ
d958a24678 [NTUSER][USER32_APITEST] Support ShowWindow.SW_FORCEMINIMIZE (#8261)
One more step to support ghost windows.
JIRA issue: CORE-19671
- Add IntForceMinimizeWindow helper
  function.
- Use IntForceMinimizeWindow in
  co_WinPosShowWindow function.
- Enhance ShowWindow testcase in
  user32_apitest.
- Add mask to the return value of
  GetWindowLong.
2025-07-20 13:14:01 +09:00
Eric Kohl
6ebf15d838 [IPCONFIG] Call DHCP functions directly
Use DhcpAcquireParameters and DhcpReleaseParameters instead of iphlpapi functions.
2025-07-19 13:31:25 +02:00
Eric Kohl
cb0c31945e [DHCPCSVC] DSAcquireParams and DSReleaseParams must return an error code 2025-07-19 10:52:46 +02:00
Eric Kohl
28b35625dd [DHCPCSVC] Change AdapterName parameter to UNICODE
DhcpAcquireParameters and DhcpReleaseParameters use a UNICODE AdapterName parameter.
2025-07-18 23:31:21 +02:00
Ratin Gao
49e652b7b7 [NTOS:PS] Implement ProcessImageFileNameWin32 information class 2025-07-17 18:18:47 +03:00
Whindmar Saksit
805d4c7eea [RAPPS] Added LnkParameters Generate field to set the shortcut parameters (#8262) 2025-07-17 16:28:34 +02:00
Katayama Hirofumi MZ
519232df78 [MSCTF] Support TF_CreateCategoryMgr etc. (#8260)
Implementing missing features...
JIRA issue: CORE-19361
- Implement TF_CreateCategoryMgr
  and TF_CreateDisplayAttributeMgr.
- Rename g_tlsIndex as g_dwTLSIndex.
- Use ProcessAttach and
  ProcessDetach in DllMain.
2025-07-17 21:17:28 +09:00
George Bișoc
a5ab400689 [SDK] Swap initguid and wdm headers
The WDM header contains power manager related GUIDs that were declared but never initialized properly due to the fact the initguid.h header wasn't at the top.
This patch fixes a linker error in the kernel where GUIDs like GUID_LIDSWITCH_STATE_CHANGE are used.
It's a hotfix for 624c3fd.
2025-07-16 22:08:55 +02:00
George Bișoc
624c3fd847 [SDK] Introduce the PO GUID library
This library aims to include all the public and global power manager related GUID identifiers into one shared library, of which they can be accessed across multiple modules of ReactOS, e.g. the kernel, ACPI, PCI, et al.

This patch is needed for the development of the Power Manager (#5719) to continue.

CORE-18969
2025-07-16 20:15:15 +02:00
Whindmar Saksit
c40624ae2a [SHELL32] Only set state flag if state is set on items in DefView list (#8259)
CORE-20273
2025-07-16 13:36:02 +02:00
Justin Miller
b8f1da6483 [BOOT] Make ACPI always copy on amd64 (#8238)
This just makes it so ACPI.sys is always loaded and copied by the bootcd no matter what on amd64.
On x86 it can depend on whether we're using an ACPI hal but is set up to never boot with ACPI on the bootcd.
2025-07-14 22:51:15 -07:00
Dmitry Borisov
b558596409 [SPTILIB] Introduce SPTI static library for storage drivers (#8209)
Add a SCSI and ATA passthrough support helper library for direct use
from low-level storage drivers.

Tested with: CDRoller, CloneCD, Magic ISO
NOTE: Vbox seems to lack support for CD/DVD burning; tested on real hardware.

CORE-10191 CORE-16452
CORE-14788 CORE-18241
CORE-17256 CORE-13866
2025-07-13 22:49:51 +02:00
Piotr Hetnarowicz
5bd84f6f71 [NETSHELL] Update Polish (pl-PL) translation (#8208) 2025-07-13 19:35:07 +02:00
Piotr Hetnarowicz
2d886daabd [POWERCFG] Update Polish (pl-PL) translation (#8206) 2025-07-13 19:34:51 +02:00
Hermès Bélusca-Maïto
9b7c788cd0 [SETUPLDR] Add support for architecture-specific "SourceDisksNames" section (#8249)
Will be used for installing specific drivers on x64
(e.g. the ACPI driver, see PR #8238).

Add also the ARM64 define in the SETUPLIB spapisup.h header.
2025-07-13 19:23:06 +02:00
Katayama Hirofumi MZ
a18a5734ac [MSCTF][CICERO][DOC] Fork MSCTF from Wine (#8245)
JIRA issue: CORE-19361
- Delete msctf.c and add msctf.cpp.
- Modify precomp.h and enable precompiled header.
- Modify media/doc/WINESYNC.txt.
- Add cicMemReCalloc function to cicero.
2025-07-13 18:30:42 +09:00
Matisse Rüdiger
853b446e38 [ACPPAGE] Update French (fr-FR) translation (#8248)
The word "colours" was left untranslated.
2025-07-12 22:06:15 +02:00
Piotr Hetnarowicz
92c399e0d8 [DEVMGR] Update Polish (pl-PL) translation (#8207) 2025-07-12 20:34:31 +02:00
Piotr Hetnarowicz
0459e0daff [STOBJECT] Update Polish (pl-PL) translation (#8198) 2025-07-12 20:33:36 +02:00
Piotr Hetnarowicz
be032857f7 [HOTPLUG] Update Polish (pl-PL) translation (#8197) 2025-07-12 20:32:59 +02:00
Piotr Hetnarowicz
d0aeaab947 [TASKMGR] Update Polish (pl-PL) translation (#8188) 2025-07-12 20:30:08 +02:00
Eric Kohl
0e5df9c51c [DHCPCSVC] Fix the options request list and add the class identifier to requests 2025-07-12 18:57:28 +02:00
Whindmar Saksit
8edf4f0926 [SHELL32][NTOBJSHEX] CDefaultContextMenu cannot close keys it does not own (#8233) 2025-07-12 15:18:39 +02:00
Whindmar Saksit
3fb2905c37 [SHELL32] Don't get icon and label from AutoRun.inf on floppy drives (#7953)
CORE-9881 (partial)
2025-07-12 15:16:38 +02:00
Mas Ahmad Muhammad
a56e47fe60 [SETUP:REACTOS] Fix warning RC4206 in Indonesian (id-ID) translation (#8220)
Noticed by Katayama's comment from chat.reactos.org:

> Indonesian translation warning: base\setup\reactos\lang/id-ID(15): warning RC4206: title string too long; trunctated at 256

Fix problem by making the string length shorter, it's 245 chars now.
Addendum to 0.4.16-dev-862-g 7b5e004dd6.
2025-07-12 14:32:21 +03:00
Carl J. Bialorucki
117cd33b49 [PSDK] Sync winerror.h with wine-10.0 (#8244)
- Sync winerror.h to wine-10.0
- Fix a couple hacks that existed because we didn't do this sooner
- Fix an instance where Wine compares a pointer to S_OK to see if it's null
2025-07-11 14:12:09 -06:00
Katayama Hirofumi MZ
12fa72a06d [MSCTF] Make thread manager C++ (#8239)
Implemeting missing features...
JIRA issue: CORE-19361
- Delete threadmgr.c and add threadmgr.cpp.
- Make ITfThreadMgr implementation C++.
2025-07-11 09:35:18 +09:00
Oleg Dubinskiy
206b52833f [MMIXER] HACK: Decrease SteppingDelta for each volume value by 1
This workarounds broken changing volume level for left and right volume controls separately ("Speakers Volume" button in "Sound" tab of mmsys.cpl).
CORE-19190
2025-07-10 14:02:23 +02:00
Oleg Dubinskiy
376708b586 [MMIXER] Fix improperly working volume control
Fix broken volume level changing and left/right speakers balance level changing.
Get and set volume level value for all available output channels instead of only the 1st channel (available in MIXERCONTROLDETAILS.cChannels member), so other channels don't have a non-set volume values now. This allows to control the volume for all channels.
So now the volume control works correctly and hence, the volume level can be properly changed from Sound Properties (mmsys.cpl) and Volume Mixer (sndvol32.exe) as well.
Note that the volume level settings changed by user are not saved after reboot yet. We need to save (write) and then load (read) them at next boot from HKLM/System/CurrentControlSet/Control/DeviceClasses/KSCATEGORY_AUDIO/.../DeviceParameters/Mixer/.../* keys inside wdmaud.sys, similarly to as it's done in Windows XP/2003. It can be tested (and is tested sveral times by me and is confirmed) by using MS wdmaud.sys in ReactOS. It writes the values in that key, so the actual volume values are stored there.
Another key, HKCU/SOFTWARE/Microsoft/Windows/Applets/Volume Control/, is created and managed by sndvol32.exe instead, so it does not contain the actual values of volume levels.
CORE-17976
2025-07-10 14:02:23 +02:00
Timo Kreuzer
7e4f12743f [NTOS:PS/x64] Use KiGetTrapContext from PspGetOrSetContextKernelRoutine 2025-07-10 14:57:09 +03:00
Timo Kreuzer
61b6cd9d28 [NTOS:KE] Implement KiGetTrapContextInternal 2025-07-10 14:57:09 +03:00
Timo Kreuzer
f026550f89 [RTL] Implement RtlGetUnwindContext 2025-07-10 14:57:09 +03:00
Timo Kreuzer
98ed87b556 [RTL] Fix RtlSetUnwindContext
Only set the registers requested by ContextFlags
2025-07-10 14:57:09 +03:00
Timo Kreuzer
d23ee5f365 [PSEH] Make structures more SEH3 compatible 2025-07-10 11:15:23 +03:00
Timo Kreuzer
6d2eb03402 [COMPILER_APITEST] More SEH tests 2025-07-10 11:15:23 +03:00
Timo Kreuzer
cfb579dd67 [PSEH3] Fix unlinking of EH frames during unwind.
On Windows the function that calls the language specific exception handler function registers it's own exception handler, so the top of the exception chain does not point to our own handler. We need to take that into account when unwinding the stack and removing each handler as we go.
2025-07-10 11:15:23 +03:00
Timo Kreuzer
ff8d24cabb [PSEH3] Fix _SEH3_LEAVE
Previously, when leave was used in the except or finally block of a nested try block, it would jump back to the start of the except/finally block, resulting in an endless loop. This is fixed by jumping back to a label at the beginning of the try block, which is only visible from within the try block itself and from there to the end of the SEH block.
Fixes seh0055 testcase of MS SEH tests.
2025-07-10 11:15:23 +03:00
Justin Miller
d054f63e68 [HALACPI] Initialize HalpPicVectorRedirect with the full 0-15 array
This probably seems a little silly that I'm making a change to an array
we don't really use but because of this little bug ACPI was getting
reported as 0xA which is incorrect! As we call IoConnectInterrupt with
0x9 later. This makes sure that the IRQ from FADT is correct.
2025-07-09 20:39:48 -07:00
Katayama Hirofumi MZ
e7358c5930 [NTUSER][USER32] Fix IME UI exception (#8227)
Fix BSoD when toggling visibility of the IME status
window (IME Toolbar).
JIRA issue: CORE-20261
- Add IntGetImeUIFromWnd helper function.
- Fix exception in IntNotifyImeShowStatus function.
- Fix initialization of IME UI in ImeWndProc_common
  function.
- Delete RegisterIMEClass function.
2025-07-09 08:16:26 +09:00
Hermès Bélusca-Maïto
38d07d3a24 [WINLOGON/WLNTFYTESTS] Add semi-"interactive" tests for Winlogon notifications (#8234)
Add a `wlntfytests.dll` in `ReactOS\bin\suppl`, containing tests for Winlogon notifications.

To use it:
- Register the dll with `regsvr32 <path_to>\wlntfytests.dll` and reboot
  the machine.
- With a debugger, observe the traces emitted by the dll, whenever any
  Winlogon notification is emitted. If Winlogon debugging is enabled,
  a debug-break is made everytime a notification is invoked.
- Once testing is done, unregister the dll with `regsvr32 /u <path_to>\wlntfytests.dll`
  and reboot the machine.

For each received notification, the handlers dump the contents of the
`WLX_NOTIFICATION_INFO` structure, and verify that the notifications
are received in the correct expected order. This is done by keeping
what the previous received notification was, before comparing it with
the expected one(s) that must precede the new notification being received.

References:
- https://learn.microsoft.com/en-us/windows/win32/secauthn/creating-a-winlogon-notification-package
- https://learn.microsoft.com/en-us/windows/win32/secauthn/winlogon-notification-events
- https://rsdn.org/article/baseserv/winlogon.xml
2025-07-08 21:21:11 +02:00
Justin Miller
02343c22f6 [RTL] Partial revert of Wine timer code in thread pooling (#8229)
* [SDK] Partial Revert of 0bf42067d2

It was found that the timer code from WINE doesn't work as well as ours,
This is a revert from that part of the PR as it doesn't change any of the real threadpool code in all reality. Thanks to the investigation of Julenuri and Simone
JIRA issue: CORE-20245
2025-07-08 12:05:53 -07:00
Katayama Hirofumi MZ
3917c60749 [MSCTF] Make input processor profiles C++ (#8232)
Implementing missing features...
JIRA issue: CORE-19361
- Delete inputprocessor.c and add
  inputprocessor.cpp.
- Make ITfInputProcessorProfiles
  implementation C++.
2025-07-08 21:20:57 +09:00
Eric Kohl
8fbbb41a19 [UMPNPMGR] Fix a typo in a DPRINT line 2025-07-07 20:07:28 +02:00
Eric Kohl
9d21d48cda [UMPNPMGR] PNP_FreeLogConf: Delete a resource configuration 2025-07-07 20:05:29 +02:00
Hermès Bélusca-Maïto
9c053ec989 [ROSTESTS] Add the interactive buttonvistest to the build 2025-07-07 19:28:14 +02:00
Vitaly Orekhov
5ffc6ceb55 [PSEH] Guard SEH2 macros for Clang on Linux x64 builders (#8194)
Hackfixing a corner case detected via broken entities of wlanwiz
due to its usage of STLport. This was already done to PSEH3 prior to me.

Corner case examples:
- broken: https://github.com/SigmaTel71/reactos/actions/runs/15911239148
- "fixed": https://github.com/SigmaTel71/reactos/actions/runs/15945705635

Guard SEH2 family macros behind #ifndef. CORE-6622 CORE-6905
2025-07-07 15:24:27 +03:00
Katayama Hirofumi MZ
3e427ad17e [KBSWITCH] Fix System Pen icon visibility (#8230)
Management of System Pen icon was
inconsistent.
JIRA issue: CORE-10667
- Add g_bSysPenNotifyAdded global
  variable.
- Add checking the result of
  Shell_NotifyIcon.
- Fix UpdateLanguageDisplayCurrent
  function.
- Add WM_INPUTLANGCHANGEREQUEST
  message handling.
Testbot runs (
2025-07-07 21:04:05 +09:00
Whindmar Saksit
212a1a5c74 [SDK][SHELL32_APITEST] Fix some warnings (#7031) 2025-07-06 21:12:37 +02:00
Whindmar Saksit
c0ea1c0e9f [USER32][APITESTS] Use the correct user32 icon resource ids (#7807) 2025-07-06 15:24:25 +02:00
Whindmar Saksit
2a901a72f3 [SHELL32_APITEST] Try to close windows opened by each test (#7861) 2025-07-06 13:47:12 +02:00
Carl J. Bialorucki
a753f34e30 [PSDK][XDK][NDK][INCLUDE/WINE] Make header changes to sync crypt32, kernel32, and user32 winetests (#8114)
- [PSDK] Sync wincrypt.h to Wine 10.0, keeping our SAL annotated function definitions behind an #ifdef guard
- [XDK] Add definitions to our winnt header that Wine 10.0's winternl.h depends on.
- [INCLUDE/WINE] Sync winternl.h to Wine 10.0
- [OTHER] Fix breaking changes with the synced winternl.h.
2025-07-05 15:14:31 -06:00
Carl J. Bialorucki
a993c589ae [SHLWAPI_APITEST] Fix heap assertion and test failures (#8217)
- Properly initialize a string in SHPropertyBag test. This prevents a heap assertion failure on Vista+ when freed and connected to a debugger.
- Adjust a value against Windows 8+ instead of Vista as originally assumed in the IsQSForward test.
- Use GetVersion() to check if we are running on NT6+ and test appropriately in the PathIsUNC and PathIsUNCServer tests.
2025-07-05 15:09:23 -06:00
Whindmar Saksit
375fca5058 [SHELL32] Implement SHSimulateDropOnClsid (#8223) 2025-07-05 18:18:51 +02:00
Serge Gautherie
2c0782d1e0 [SCSIPORT] Add explicit IOCTL_ATA_PASS_THROUGH* cases (#1969)
ATA passthrough IOCTLs not supported by MS scsiport.
The implementation is optional, especially in SCSI.

IOCTL_SCSI_PASS_THROUGH will be implemented in SPTI library.

CORE-16422
2025-07-05 18:20:42 +03:00
Katayama Hirofumi MZ
6ba2363bdb [CICERO][MSCTF] ITfContext: Follow-up of #8224 (#8231)
Follow-up of #8224.
JIRA issue: CORE-19361
- Add cicIsNullPtr function in Cicero <cicbase.h>.
- Reordering of CMakeLists.txt items.
- Minor refactoring.
2025-07-05 21:05:15 +09:00
Katayama Hirofumi MZ
93181db68b [MSCTF] Make ITfContext C++ (#8224)
Implementing missing features...
JIRA issue: CORE-19361
- Delete context.c and add context.cpp.
- Make ITfContext implementation C++.
2025-07-05 20:09:00 +09:00
Carl J. Bialorucki
410db43f20 [IPHLPAPI_APITEST] Test failure fixes (#8214)
- liCreateTimestamp isn't set in TCP tables on several Windows versions. If it isn't, then we can't compare it to the current system time; so don't.
- GetInterfaceName had some test failures unique to Vista, guard them.
- icmp: Accept either ERROR_INVALID_HANDLE  or ERROR_INVALID_PARAMETER as a last error in a couple tests.
2025-07-04 19:14:24 -06:00
Serge Gautherie
ea9e2812c6 [GITHUB] build.yml: Build some more ARM/ARM64 modules (#8215)
Another extension of ARM* builds.
I "randomly" tried some directories, these succeed.

Build 4+1 more directories.
2025-07-05 01:52:46 +03:00
Serge Gautherie
b0420ca511 [HALX86] HalpSetupAcpiPhase0(): Fix ACPI version reporting (#8211)
Use the correct structure and fields.
Based on ACPI v1.0-v6.6 documentation at https://uefi.org/acpi/specs

Addendum to c21792df52 (r53831).
2025-07-05 01:48:36 +03:00
Dmitry Borisov
0462ebf0d6 [COMCTL32_APITEST] Add a testcase for product version string (#8216)
Addendum to commit b5f763447c.

- KVM x86: https://reactos.org/testman/compare.php?ids=102897,102903
- KVM x64: https://reactos.org/testman/compare.php?ids=102898,102905

comctl32:tooltipv6: 1 tests executed (0 marked as todo, 0 failures), 0 skipped.
2025-07-04 21:26:37 +03:00
Hermès Bélusca-Maïto
bb881021ce [WINLOGON] Move logoff/shutdown thread handling code into a helper function (#8222)
This code was in common between HandleLogoff() and HandleShutdown().
2025-07-04 17:07:03 +02:00
Piotr Hetnarowicz
fbd70c81c3 [SHIMGVW] Update Polish (pl-PL) translation (#8201)
Addendum to 084fae1eb4.
2025-07-04 08:48:50 +03:00
Piotr Hetnarowicz
5cbfa17321 [TASKKILL] Update Polish (pl-PL) translation (#8189)
Addendum to 97e7efc020 and 1519a676bd.
2025-07-04 08:44:40 +03:00
Carl J. Bialorucki
33336d0369 [APITESTS] Add GetNTVersion() macro for version detection on Windows 8.x+ (#8225)
Grab the NT version from KUSER_SHARED_DATA and expose it in GetNTVersion().
2025-07-03 14:51:10 -06:00
Carl J. Bialorucki
19e8fbb20e [KMTESTS] Fixes for 2003, Vista, 7, 8, 10 x86 and x64 (#8175)
Fix several kmtests in preparation for testbots with newer versions of Windows. There's still more kmtests to fix, but this fixes all the kmtests that bugchecked during my testing.
2025-07-03 14:33:59 -06:00
Justin Miller
83faff8706 [FREELDR] Hack AMD64 so it can boot in high mem (#8226)
Hack ReactOS AMD64 so we can boot on systems with higher ram amounts tested up to 128gb

JIRA report: CORE-20265
2025-07-03 12:47:34 -07:00
Timo Kreuzer
24b0857a72 [NTOS:MM] Handle failure of MmSetPageEntrySectionSegment
This prevents a crash when paged pool is low.

No, I will not fix all other instances!
2025-07-03 22:38:50 +03:00
Timo Kreuzer
2cd05a3756 [NDK] Update SYSTEM_INFORMATION_CLASS
See https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi/system_information_class.htm and Windows 10/11 pdb files
2025-07-03 22:21:05 +03:00
Piotr Hetnarowicz
41e7aa19d5 [CABVIEW] Update Polish (pl-PL) translation (#8196)
Addendum to 63bb46a2fd.
2025-07-03 15:36:22 +03:00
Piotr Hetnarowicz
283e351724 [INPUT] Update Polish (pl-PL) translation (#8202)
Addendum to 0eadf4a00c + 17e1cf3127 and 80c4856bba.
2025-07-03 15:10:33 +03:00
Piotr Hetnarowicz
273642a8b3 [SHDOCVW] Update Polish (pl-PL) translation (#8200)
Addendum to 960a305e5c.
2025-07-03 14:54:41 +03:00
Piotr Hetnarowicz
ba326df6d9 [W32TIME] Update Polish (pl-PL) translation (#8199)
Addendum to e4898e6e0b and 2a616b0a14.
2025-07-03 14:36:22 +03:00
Piotr Hetnarowicz
eb0e645def [CMD] Update Polish (pl-PL) translation (#8193)
Addendum to 736d81938a and 18acf79551.
2025-07-03 14:26:23 +03:00
Piotr Hetnarowicz
8eb8919ce0 [TRACERT] Update Polish (pl-PL) translation (#8187)
Addendum to be56c5c328.
2025-07-03 14:19:04 +03:00
Katayama Hirofumi MZ
02ea0aaa93 [MSCTF] Make compartment manager C++ (#8218)
Implementing missing features...
JIRA issue: CORE-19361
- Delete compartmentmgr.c and
  add compartmentmgr.cpp.
- Make ITfCompartmentMgr
  implementation C++.
2025-07-03 06:48:16 +09:00
Hermès Bélusca-Maïto
2e4cdd4c23 [WINLOGON] Improve EWX_* flags to WLX_* actions mapping in WM_LOGONNOTIFY:LN_LOGOFF
CORE-8322 CORE-11550
2025-07-02 22:44:28 +02:00
Stanislav Motylkov
52e02af86b [BOOTVID] Fix build for ARM port
- Move functions from header to main source, keeping their definitions
- Fix typo DefaultPalette -> VidpDefaultPalette
- Add missing PrepareForSetPixel() function

Addendum to 5f2ca473dc and cd91271796. CORE-17617 CORE-17604
2025-07-02 22:24:46 +02:00
Katayama Hirofumi MZ
0db7879a66 [CMAKE] msvc.cmake: Add /wd4819 for Far East Asian (#8219)
"Far East Asian" Visual Studio had
generated a lot of "warning C4819:
File contains characters that
cannot be displayed in the current
code page...".

JIRA issue: N/A
2025-07-02 22:10:54 +09:00
Katayama Hirofumi MZ
06343fa9a5 [MSCTF] Make category manager C++ (#8210)
Implementing missing features...
JIRA issue: CORE-19361
- Delete categorymgr.c and add
  categorymgr.cpp.
- Make category manager
  implementation C++.
2025-07-01 21:39:26 +09:00
Timo Kreuzer
00f45a4a73 [KMTEST] Remove totally broken PoolsCorruption test
It was already disabled.
2025-07-01 10:50:48 +00:00
Serge Gautherie
671935f24b [KERNEL32] _dump_context(): Fix ARM case (#8185)
Match DbgPrint() parameters.
Addendum to commit 369786f126 (r67736).
2025-06-30 14:05:12 +02:00
Hermès Bélusca-Maïto
3f73319068 [WINLOGON] Cleanup user login information when logon fails and at logoff (#8182) 2025-06-30 14:02:34 +02:00
Timo Kreuzer
c507b701ab [CRT:MATH] Import frexp from musl 2025-06-30 09:19:47 +00:00
Timo Kreuzer
b734e3ba63 [CRT:MATH] Move some math functions from ucrt to crt 2025-06-30 09:19:47 +00:00
Timo Kreuzer
a9ee20cb9a [CRT:MATH] Import nextafter, nextafterf and nexttowardf from musl
Note: On Windows, where a long double is the same as a double, nextafterl is the same as nextafter, nexttowardl is the same as nexttoward.
Also nexttoward is the same as nextafter.
2025-06-30 09:19:47 +00:00
Timo Kreuzer
5c26ccdb29 [CRT:MATH] Import scalbn/scalbnf from musl 2025-06-30 09:19:47 +00:00
Timo Kreuzer
3f71ab80ad [CRT:MATH] Implement _isnan and _isnanf 2025-06-30 09:19:47 +00:00
Timo Kreuzer
e01231bd49 [CRT:MATH] Implement _finite, _finitef 2025-06-30 09:19:47 +00:00
Timo Kreuzer
50028685dc [CRT:MATH] Implement _dsign and _dsignf 2025-06-30 09:19:47 +00:00
Timo Kreuzer
0e5d6af68e [CRT:MATH] Implement x86 sse2 math functions
These are just wrappers around the normal functions and lack any optimization.
2025-06-30 09:19:47 +00:00
Timo Kreuzer
5c6912f561 [CRT][UCRTBASE] Add round/roundf 2025-06-30 09:19:47 +00:00
Timo Kreuzer
d736b55644 [CRT:MATH] Fix a bug in _handle_error 2025-06-30 09:19:47 +00:00
Timo Kreuzer
35bc1e1d9e [CRT] Add crtmath library 2025-06-30 09:19:47 +00:00
Katayama Hirofumi MZ
4866a25a8f [EXPLORER] Fix Taskbar context menu Z-order bug (#8186)
Taskbar task button context menu was wrongly
overlapped by Taskbar. #8105 introduced this bug.
JIRA issue: CORE-20260
- Don't bring the taskbar to top on no rude app.
- Check the target window by FindTaskItem in
  OnWindowActivated and OnWindowDestroyed.
2025-06-30 10:55:15 +09:00
Eric Kohl
c720dd4960 [NTOS:IO] NtPlugPlayControl.PlugPlayControlUnlockDevice is not implemented
It was probably used in previous versions of Windows NT.
2025-06-29 23:43:09 +02:00
Hermès Bélusca-Maïto
12e01218ad [SYSTEMINFO] Do some code lift-up; use Conutils lib to be able to display localized unicode strings
In particular:
- unhardcode buffer sizes and API flags;
- add our standard file header in the .c file (I haven't done it for
  the other files);
- merge systeminfo.rc and rsrc.rc together.
2025-06-29 23:03:10 +02:00
Hermès Bélusca-Maïto
dc7c7fb9f5 [SYSTEMINFO] Review translations (#8169)
- Improve help/usage display formatting for all languages.

- Fix sk-SK Slovak typos and file encoding.
  With Notepad++:
  * "Encoding->Convert to ANSI", then Save;
  * "Encoding->Character encoding->Central Europe Languages->OEM 852", then Save;
  * "Encoding->Convert to UTF-8 (without BOM)"

- Fix and finish French (fr-FR) translation.
2025-06-29 21:04:23 +02:00
Eric Kohl
b364fee806 [NTOS:IO] Implement NtPlugPlayControl.PlugPlayControlDeviceClassAssociation
The unregistration part is not implemented yet.
2025-06-29 17:34:27 +02:00
Hermès Bélusca-Maïto
92fd611209 [SYSSETUP] Improve French (fr-FR) translation (#8167) 2025-06-29 16:48:44 +02:00
Hermès Bélusca-Maïto
9cb76114c6 [NETSHELL][SAMSRV] Fix "reqired" -> "required" typo
3rd-party code (drivers/filesystems/fastfat/dirsup.c) left untouched.

Caught by Serge Gautherie.
2025-06-29 16:42:35 +02:00
Hermès Bélusca-Maïto
2a91e496ee [NETSHELL] Improve French (fr-FR) translation (#8166) 2025-06-29 16:36:53 +02:00
Hermès Bélusca-Maïto
488db450b8 [IPCONFIG] Update Russian (ru-RU) and Ukrainian (uk-UA) translations (#8165)
Co-authored-by: Oleg Dubinskiy <oleg.dubinskij30@gmail.com>
Co-authored-by: Stanislav Motylkov <x86corez@gmail.com>
2025-06-29 16:33:58 +02:00
Hermès Bélusca-Maïto
3ea9bab324 [IPCONFIG] Review translations (#8165)
- Improve help/usage display formatting for all languages.

- Change "IP" to "IPv4" where applicable (our IPCONFIG doesn't support
  IPv6 yet, but prepare the terrain in the translations :)

- Fix and finish French (fr-FR) translation.
2025-06-29 16:33:57 +02:00
Hermès Bélusca-Maïto
af96e9f353 [TRANSLATIONS] Fix some typos in French translations (#8164) 2025-06-29 16:31:39 +02:00
Katayama Hirofumi MZ
76daabf6d1 [CYLFRAC] Fix build; Japanese (ja-JP) translation
Fix mistake in:
4ac1aacc17

CORE-18706
2025-06-29 22:06:05 +09:00
Katayama Hirofumi MZ
3120d985ff [VCDCONTROLTOOL] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 22:02:00 +09:00
Oleg Dubinskiy
63ca8c414e [NTOS:EX] Implement NtSetSystemInformation().SystemLoadGdiDriverInSystemSpaceInformation (#8180)
Implement SystemLoadGdiDriverInSystemSpaceInformation case of NtSetSystemInformation() function.
According to https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/gdi_driver.htm, it does the similar thing to SystemLoadGdiDriverInformation (these two cases even have the same shared SYSTEM_GDI_DRIVER_INFORMATION structure).
The only difference is, SystemLoadGdiDriverInSystemSpaceInformation uses the global system space (without passing an additional flag to MmLoadSystemImage()), while SystemLoadGdiDriverInformation uses the session space instead.
Since the session space is not supported yet, for now simply redirect SystemLoadGdiDriverInSystemSpaceInformation to SystemLoadGdiDriverInformation case, which we have already implemented. However, this code needs to be updated appropriately (an additional flag should be passed to MmLoadSystemImage() call for SystemGdiDriverInformation as well) once a support for session space is implemented.
This fixes VM starting failure for VirtualBox 3.1.0 - 4.0.24 and 4.3.0 - 4.3.12 versions. Newer versions of VirtualBox still don't work because of another blocking bugs.
CORE-20257
2025-06-29 15:00:41 +02:00
Katayama Hirofumi MZ
056bfd312e [SYSTEMINFO] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:53:24 +09:00
Katayama Hirofumi MZ
30dad221ed [STARFIELD] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:38:29 +09:00
Katayama Hirofumi MZ
0fc26352d8 [SSSTARS] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:36:14 +09:00
Katayama Hirofumi MZ
672fc60b5a [MAZESCR] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:31:10 +09:00
Katayama Hirofumi MZ
bc79a9a2cf [MATRIX] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:23:41 +09:00
Katayama Hirofumi MZ
4ac1aacc17 [CYLFRAC] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:17:48 +09:00
Katayama Hirofumi MZ
4642da06e1 [CIRCLES] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:15:11 +09:00
Katayama Hirofumi MZ
046679ddf3 [BUTTERFLIES] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:12:01 +09:00
Katayama Hirofumi MZ
5cd0ec8575 [BLANKSCR] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 21:05:33 +09:00
Katayama Hirofumi MZ
8c2a6aae31 [VGAFONTEDIT] Add Japanese (ja-JP) translation
CORE-18706
2025-06-29 20:59:33 +09:00
Timo Kreuzer
5549fbd6a4 [NTDLL_APITEST] Remove unused / broken definitions 2025-06-29 09:31:14 +00:00
Hervé Poussineau
7b9ef6b390 [NDIS] NdisOpenFile: close file locally, as we don't need it later
Remove now unused field FileHandle in NDIS_HANDLE_OBJECT structure.
2025-06-29 08:23:33 +02:00
Hervé Poussineau
e2904d3baf [NDIS] NdisOpenFile: read file contents into buffer when opening it
NdisMapFile now returns a non-null buffer.

CORE-20259
2025-06-29 08:23:33 +02:00
Hervé Poussineau
d72bcb149f [NDIS] NdisOpenFile: retrieve and return file length in *FileLength
CORE-20259
2025-06-29 08:23:32 +02:00
Hervé Poussineau
07f305cd59 [NDIS] NdisOpenFile: use local variables instead of using output variables 2025-06-29 08:23:32 +02:00
Eric Kohl
71b6fab74b [UMPNPMGR] PNP_AddEmptyLogConf: Add resource list to an existing requirements list 2025-06-28 15:58:11 +02:00
Katayama Hirofumi MZ
bc64f3aee1 [INDICDLL] Don't use user32 in DLL_PROCESS_ATTACH (#8179)
Related to #8145. We shouldn't use
user32 functions in
DllMain.DLL_PROCESS_ATTACH.
This bug affects Global Hook. See
DllMain and "Dynamic-Link Library
Best Practices" on MS Learn.
JIRA issue: CORE-20242
Don't use user32!FindWindow in
DllMain.DLL_PROCESS_ATTACH,
but in KbSwitchSetHooks function.
2025-06-28 04:59:08 +09:00
Hermès Bélusca-Maïto
f60be66d1f [MSGINA][WINLOGON] Carefully zero password memory buffers before freeing them (#8172)
Including variables containing pointers to a password buffer and its lengths.
2025-06-27 16:45:12 +02:00
Whindmar Saksit
b087c08d76 [MSCONFIG] Disable actions that are not implemented (#8178) 2025-06-27 13:53:09 +02:00
Whindmar Saksit
c14a14e3b4 [BROWSEUI] Find files must compare the entire path when the view asks about the name (#8174)
CORE-20256
2025-06-26 23:02:04 +02:00
Whindmar Saksit
4562306ce4 [BROWSEUI] Find files must forward IItemNameLimits to the FS folder (#8176) 2025-06-26 23:00:53 +02:00
Eric Kohl
4afb871782 [UMPNPMGR] Implement PNP_UnregisterDeviceClassAssociation 2025-06-26 22:13:59 +02:00
Katayama Hirofumi MZ
f7c36c6d94 [SHELL32_APITEST] Certainly close newly-opened windows (#8171)
It's frustrating when windows open
during a test and remain after the test
is over.
JIRA issue: ROSTESTS-402
- Delete closewnd.cpp. Enhance
  closewnd.h.
- Modify ShellExecCmdLine,
  ShellExec_RunDLL, ShellExecuteEx,
  and ShellExecuteW testcases.
- Certainly close the newly-opened
  windows.
2025-06-26 18:20:49 +09:00
Eric Kohl
f1332c7722 [UMPNPMGR] Implement PNP_RegisterDeviceClassAssociation 2025-06-25 21:39:51 +02:00
Serge Gautherie
4164b8a053 [NTUSER] menu.c: Tiny optimizations (#8111)
A bit clearer code. A bit faster execution.
- NtUserGetTitleBarInfo(): Add/Use early returns.
  Addendum to
3b4c9ded42 (r33657).
- NtUserTrackPopupMenuEx():
  Check flags a bit earlier.
  Addendum to
3c35117f97
  (0.4.16-dev-1275).
- NtUserThunkedMenuItemInfo():
  Sort out code and comments
- menu.c: Move UserLeave() a bit earlier.
2025-06-25 21:15:28 +09:00
Katayama Hirofumi MZ
aaed9f77d9 [SHELL32_APITEST] Enhance SHAppBarMessage testcase (#8149)
SHAppBarMessage testcase has to
cover the auto-hide feature. Make the
testcase more stable.
JIRA issue: CORE-7237
Add more tests.
2025-06-25 08:48:30 +09:00
Hermès Bélusca-Maïto
b254ea8274 [MSGINA][WINLOGON] Perform thorough memory cleanup after user logging (#8155)
- MSGINA: The `pMprNotifyInfo` and `pProfile` structures returned by
  `WlxLoggedOutSAS()`, as well as all of their pointer fields, are
  allocated by `LocalAlloc()`[^1][^2]. This is what Windows' Winlogon
  expects (and ours too, for interoperability with GINA dlls written
  for Windows), as it then frees them using `LocalFree()`.

- WINLOGON: In `HandleLogon()`, free the cached `MprNotifyInfo` and
  `Profile` buffers (and all their members) obtained from a previous
  call to `WlxLoggedOutSAS()`.

[^1]: https://learn.microsoft.com/en-us/windows/win32/api/winwlx/nf-winwlx-wlxloggedoutsas
[^2]: 3rd-party GINAs rely on this as well. One example can be found at:
      https://www.codeproject.com/Articles/20656/Winlogon-using-Mobile-Disk
2025-06-24 20:30:34 +02:00
Piotr Hetnarowicz
64d1301b5a [EXPLORER] Update Polish (pl-PL) translation (#8160) 2025-06-24 16:59:32 +02:00
Piotr Hetnarowicz
a889320d42 [SYSSETUP] Update Polish (pl-PL) translation (#8159)
Co-authored-by: Adam Słaboń <asaillen@protonmail.com>
2025-06-24 16:59:07 +02:00
Piotr Hetnarowicz
60cdfaa11f [SHELL32] Update Polish (pl-PL) translation (#8158) 2025-06-24 16:58:02 +02:00
Piotr Hetnarowicz
6d2267d243 [SYSDM] Update Polish (pl-PL) translation (#8157) 2025-06-24 16:57:20 +02:00
Petr Akhlamov
e5613026c4 [SYSDM][SHELL32] Update Russian (ru-RU) translation (#8147)
Added russian strings to system properties about effects and virtual memory.

Co-authored-by: Stanislav Motylkov <x86corez@gmail.com>
2025-06-24 16:56:55 +02:00
Hermès Bélusca-Maïto
28f733a9a4 [UNITTESTS][PATHCCH] Add unit compilation-tests for the pathcch library (#8085)
CORE-12686

Test the following compilation scenarii:
- using the `pathcch_static` library (function implementations
  statically linked into the test);
- using the `pathcch_kernelbase` library (linking directly to
  kernelbase.dll);
- using the `pathcch` MS PSDK-compatible library (linking to
  the api-ms-win-core-path-l1-1-0.dll APISET dll).
2025-06-24 16:48:04 +02:00
Hermès Bélusca-Maïto
db96138813 [SDK][KERNELBASE][PATHCCH] Compile a collection of PathCch libraries (#8085)
CORE-12686

This collection of libraries consist in:

- a down-level `pathcch_static` PathCch library, to be used for programs
  that need to run on Windows 7 and below;

- Windows 8+ compatible libraries importing from either kernelbase.dll
  (`pathcch_kernelbase`), or from the corresponding APISET
  api-ms-win-core-path-l1-1-0.dll (`pathcch`, which is Win8+ PSDK
  compatible).

The down-level static library is compiled by reusing the newly-introduced
kernelbase's path.c, instead of using a specific pathcch.c.
Unrelated functions are excluded from compilation by putting them into
`#ifndef STATIC_PATHCCH ..... #endif` blocks.
2025-06-24 16:48:03 +02:00
Hermès Bélusca-Maïto
8ed6ec437b [SDK] Move pathcch.h to the PSDK (#8085)
CORE-12686
2025-06-24 16:47:56 +02:00
Whindmar Saksit
81931d1ac0 [SHELL32] Use the folder column, not the list column during DefView sorting (#8162)
IShellFolder::CompareIDs does not understand ListView columns, we must provide it with a column index it understands during sorting.

CORE-20251
2025-06-24 15:46:48 +02:00
Whindmar Saksit
c25856d1c0 [BROWSEUI] Fix CompareIDs lParam passed to inner folder (#8161)
CORE-20250
2025-06-24 15:45:43 +02:00
Timo Kreuzer
1378f6b543 [CMAKE] Fix ARM64 build
Since VS 17.14.36203.30 / MSVC 19.44.35209.0 the default behavior on ARM64 is to not inline _Interlocked* functions. Until we have those implemented, we disable this feature, going back to the old behavior.
For additional details / tracking of the implementation see CORE-20255
2025-06-24 12:45:51 +00:00
Daniel Victor
6ed46baf49 [FREELDR] Improve disk detection (#8074)
Improve disk detection on UEFI by using PublicBootHandle index

JIRA issue: CORE-11954
2025-06-23 16:03:05 -07:00
Timo Kreuzer
6243d16945 [CRT_APITEST] Add tests for _isnan(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
b3dff9df15 [CRT_APITEST] Add tests for _finite(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
39e534bddc [CRT_APITEST] Add a tests for tan(f) / __libm_sse2_tan(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
85e2f6b26c [CRT_APITEST] Add tests for sqrt(f) / _libm_sqrt_precise 2025-06-23 17:35:21 +00:00
Timo Kreuzer
7360d0abe7 [CRT_APITEST] Add a tests for sin(f) / __libm_sse2_sin(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
90f10847f7 [CRT_APITEST] Add a tests for log10(f) / __libm_sse2_log10(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
8235099f4d [CRT_APITEST] Add a tests for log(f) / __libm_sse2_log(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
9ee1847379 [CRT_APITEST] Add a tests for exp(f) / __libm_sse2_exp(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
c4a2dbd1b0 [CRT_APITEST] Add a tests for cos(f) / __libm_sse2_cos(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
1536f521d6 [CRT_APITEST] Add a tests for atan(f) / __libm_sse2_atan(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
8b1a8d5b67 [CRT_APITEST] Add a tests for asin(f) / __libm_sse2_asin(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
bf225ab7da [CRT_APITEST] Add a tests for acos(f) / __libm_sse2_acos(f) 2025-06-23 17:35:21 +00:00
Timo Kreuzer
3b895a3c12 [CRT_APITEST] Add a python tool to generate test tables for math functions
Note: The code contains a custom implementation of ldexp in python, because on Windows (below Win 11) ldexp is broken and rounds denormals incorrectly. ldexp is used by mpmath to convert multi-precision to float, which led to incorrect floating point results (specifically denormals).
2025-06-23 17:35:21 +00:00
Timo Kreuzer
a42b3c36e4 [UCRTBASE_APITEST] Add tests for round/roundf 2025-06-23 17:35:21 +00:00
Timo Kreuzer
43546cb5c2 [UCRTBASE_APITEST] Add ucrtbase_apitest
First test is ceil.
2025-06-23 17:35:21 +00:00
Hermès Bélusca-Maïto
b401f547ae [NDK][ROSLOAD][ROSTESTS][SDK][WINE] Fix and use standard 'ReactOS' casing (#8163) 2025-06-22 22:49:54 +02:00
Eric Kohl
d4d04c83db [NDK] Add PLUGPLAY_CONTROL_CLASS_ASSOCIATION_DATA type 2025-06-22 21:59:23 +02:00
Timo Kreuzer
c36d8c9271 [WIN32K] Fix a possible NULL pointer dereference in co_IntGetScrollBarInfo
The following code in user32_winetest scroll.c was causing it:

    ret = EnableScrollBar( mainwnd, SB_CTL, ESB_ENABLE_BOTH );
    ok( !ret, "EnableScrollBar should fail.\n" );
2025-06-22 17:35:15 +00:00
Whindmar Saksit
6a28201e3d [SDK] Add some shell defines from an old NT4 SDK (#8156) 2025-06-22 19:21:30 +02:00
Whindmar Saksit
38ad1ca394 [SHELL32][BROWSEUI] Make externally available FCIDM WM_COMMANDs work correctly (#8150) 2025-06-22 19:20:12 +02:00
Timo Kreuzer
02ad6b17ed [KERNEL32_VISTA] Implement GetFinalPathNameByHandleW
Note: The wine implementation is broken (it relies on broken behavior of NtQueryObject) and cannot be used.
2025-06-22 13:01:07 +00:00
Timo Kreuzer
36183cfc51 [KERNEL32_APITEST] Add tests for GetFinalPathNameByHandleW 2025-06-22 13:01:07 +00:00
Timo Kreuzer
007c9521ca [NTDLL_APITEST] Add another test for NtQueryObject
This shows that wine's implementation is broken, which wine's GetFinalPathNameByHandle relies on.
2025-06-22 13:01:07 +00:00
Timo Kreuzer
220e18d065 [PSDK] Fix up lmshare.h 2025-06-22 13:01:07 +00:00
Eric Kohl
8bf9b670ed [DHCPCSVC] Enable DHCP for wired Ethernet and wireless IEEE802.11 network interfaces
Fixes CORE-20244
2025-06-22 10:57:50 +02:00
Katayama Hirofumi MZ
66b782da3c [KBSWITCH][INDICDLL] Fix initialization bug (#8135)
There was a bug that hKbSwitchWnd was not correctly initialized.
JIRA issue: N/A
- Check if hKbSwitchWnd is initialized or not.
- When hKbSwitchWnd was not initialized, initialize it on DllMain.
- Enable trace in indicdll.dll.
2025-06-22 10:52:58 +09:00
Katayama Hirofumi MZ
b199e9d05f [SHLWAPI][SDK][BOOTDATA] Implement SHGetAppCompatFlags (#8137)
Compatibility is a key that the system
works well.
JIRA issue: CORE-19278
- Add appcompat.c.
- Implement SHGetAppCompatFlags
  function.
- Add Str_SetPtrA prototype to
  <commctrl.h>.
- Add SHACF_... flags to
  <shlwapi_undoc.h>.
- Add comctl32 delay import
  (for Str_SetPtrA).
- Modify boot/bootdata/hivesft.inf
  for registry key
  HRESULTKLM\SOFTWARE\Microsoft\
  Windows\CurrentVersion\
  ShellCompatibility\Applications.
2025-06-22 09:52:37 +09:00
Timo Kreuzer
1a11aa059f [NTOS:MM] Fix section related test failures
Fixes all failures, except pointer counts.
2025-06-21 18:19:01 +00:00
Timo Kreuzer
736015f36f [NTOS:MM] Fix a bad cast 2025-06-21 18:19:01 +00:00
Timo Kreuzer
e9ab780527 [NTOS:MM] Fix some unimplemented cases of NtQuerySection 2025-06-21 18:19:01 +00:00
Whindmar Saksit
e307cad501 [UXTHEME] Implement SetSystemVisualStyle (#7864)
Implement SetSystemVisualStyle based on function and flags found at https://stackoverflow.com/a/1036903 and 
https://pinvoke.net/default.aspx/uxtheme.SetSystemVisualStyle
2025-06-21 18:56:48 +02:00
Whindmar Saksit
99b99bda0f [BROWSEUI][SHELL32] Fixed FindFiles rename operation (#8151)
DefView will now map its internal (FCIDM) commands (when sent from the toolbar and accelerators) to canonical verb strings so clients outside shell32 can detect the verb. This is critical for "rename" and handy for "properties".

CORE-18326
2025-06-21 16:52:48 +02:00
Timo Kreuzer
6653bb5224 [NTOS:KE] Detect CPU support for XSAVE, AVX, AVX2 and AVX512 2025-06-21 07:55:06 +00:00
Timo Kreuzer
294eb31cfd [NTOS:KE/x64] Handle extended processor state on context switch 2025-06-21 07:55:06 +00:00
Timo Kreuzer
d6874fe7b9 [NTOS:KE/x64] Implement KiSave/RestoreXState 2025-06-21 07:55:06 +00:00
Timo Kreuzer
410cf69b0c [NTOS:KE/x64] Handle XState allocation on the stack 2025-06-21 07:55:06 +00:00
Timo Kreuzer
72fbbdf854 [NTOS:KE/x64] Implement KiInitializeXStateConfiguration 2025-06-21 07:55:06 +00:00
Timo Kreuzer
f4fd842be1 [NTOS:KE/X64] Move initialization of keFeatureBits 2025-06-21 07:55:06 +00:00
Timo Kreuzer
55b3e641ef [SDK] immintrin.h: add (f)xsave/restore intrinsics 2025-06-21 07:55:06 +00:00
Timo Kreuzer
26fae132d6 [UMKM_APITEST] Add test for XSTATE configuration 2025-06-21 07:55:06 +00:00
Timo Kreuzer
0f2f124c3a [XDK][NDK] Add XSTATE hacks 2025-06-21 07:55:06 +00:00
Timo Kreuzer
e029a98c22 [SDK] Fix some CPUID structures 2025-06-21 07:55:06 +00:00
Timo Kreuzer
0e2788de4a [SDK] Add CPUID_EXTENDED_STATE_SIZE_OFFSET_REGS 2025-06-21 07:55:06 +00:00
Timo Kreuzer
9ea129b8a9 [XDK][NDK] Avoid code duplication by generating more definitions for winnt.h 2025-06-21 07:55:06 +00:00
Timo Kreuzer
8d2d9b803a [NDK][XDK] Fix XSTATE_CONFIGURATION a bit 2025-06-21 07:55:06 +00:00
Timo Kreuzer
84c205bd06 [UMKM_APITEST] Add test for extended state saving 2025-06-21 07:55:06 +00:00
Eric Kohl
d8bfa93f21 [DEVMGR] Fix reading the device resource lists
For each device we must first try to read its AllocConfig resource list. If its AllocConfig resource list is not available, try to read its BootConfig resource list.
2025-06-20 20:50:18 +02:00
Justin Miller
8aab5a9b24 [ACPI_NEW] Minimal to build
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
Co-authored-by: Dmitry Borisov <di.sean@protonmail.com>
2025-06-19 20:32:11 -07:00
Daniil Tatianin
156fead517 [ACPI_NEW] Import uACPI 2.1.1 2025-06-19 20:32:11 -07:00
Eric Kohl
15e69dbf34 [DEVMGR] Fix the device manager
- Revert changes to the wine debug macros.
- Enable grayed the Resource By Type menu items.
2025-06-19 23:08:25 +02:00
Eric Kohl
87d2179956 [DEVMGR] Implement the Resources By Type view
TODO:
- Add resource type icon
- Fix the context menu
2025-06-19 22:32:28 +02:00
Whindmar Saksit
59e556f3f3 [SHELL32] Implement DragDropHandlers shell extension context menus (#8143)
CORE-11240 CORE-11238
2025-06-19 20:54:28 +02:00
Timo Kreuzer
06414ac85a [KERNEL32_VISTA] Implement IsValidLocaleName 2025-06-19 17:36:40 +00:00
Timo Kreuzer
a8987adb67 [KERNEL32_VISTA] Move GetLocaleInfoEx from locale.c into a separate file
This allows to have it in kernel32_vista
2025-06-19 17:36:40 +00:00
Timo Kreuzer
c37310b4e0 [KERNEL32_APITEST] Add tests for GetLocaleInfoEx 2025-06-19 17:36:40 +00:00
Timo Kreuzer
5225c75d3b [KERNEL32_VISTA] Move EnumSystemLocalesEx from locale.c into a separate file
This allows to have it in kernel32_vista
2025-06-19 17:36:40 +00:00
Timo Kreuzer
48ec990a49 [KERNEL32_VISTA] Implement LCIDToLocaleName 2025-06-19 17:36:40 +00:00
Timo Kreuzer
7c1b7ee87d [KERNEL32_VISTA] Implement LocaleNameToLCID 2025-06-19 17:36:40 +00:00
Timo Kreuzer
fa79aaa0f3 [KERNEL32_APITEST] Add tests for LocaleNameToLCID 2025-06-19 17:36:40 +00:00
Timo Kreuzer
be1cd6987b [KERNEL32_APITEST] Add a test for LCMapString 2025-06-19 17:36:40 +00:00
Timo Kreuzer
e83eccee31 [KERNEL32] Zero out CPINFO in GetCPInfo 2025-06-19 17:36:40 +00:00
Timo Kreuzer
2bec8c9d4c [KERNEL32_APITEST] Add tests for GetCPInfo 2025-06-19 17:36:40 +00:00
Timo Kreuzer
c495e0d727 ]HIVESYS] Add missing NLS files to registry 2025-06-19 17:36:40 +00:00
Timo Kreuzer
189ce2a5a6 [KERNEL32_VISTA] Implement GetUserDefaultLocaleName 2025-06-19 17:36:40 +00:00
Timo Kreuzer
d5286af2e1 [NTDLL_VISTA] Export RtlLcidToLocaleName and RtlLocaleNameToLcid 2025-06-19 17:36:40 +00:00
Timo Kreuzer
942d362ff8 [NTDLL_APITEST] Add another test for RtlLocaleNameToLcid 2025-06-19 17:36:40 +00:00
Serge Gautherie
9832737843 [NTDLL_WINETEST][NTOS:PS] Fix a few NtQueryInformationProcess(Process*) handling cases (#8136)
* [NTDLL_WINETEST] `test_query_process_debug_object_handle()`: one WINESYNC

Cherry-pick WineTest part of:
52d733b5c4
server: Implement retrieving the debug object of a process.
by: Alexandre Julliard <julliard@winehq.org>

* [NTOS:PS] Fix `NtQueryInformationProcess(ProcessDebugObjectHandle)`

Close the retrieved `DebugPort` on failure.
Addendum to commit 1e172203a (r55734).

* [NTOS:PS] Optimize `NtQueryInformationProcess(ProcessWow64Information)` on 32-bit.

No need to do the ExAcquire/ReleaseRundownProtection rigamarole since
we aren't retrieving the `Process->Wow64Process` on 32-bit builds.
Addendum to commit 1e172203a (r55734).

* [NTOS:PS] Fix `NtQueryInformationProcess(ProcessExecuteFlags)`

s/return/break/ on a failure case.
Addendum to commit 1e172203a (r55734).

* [NTOS:PS] NtQueryInformationProcess(): Optimize `*ReturnLength` assignment

Enter the SEH block only if we know we'll have to set `*ReturnLength` on return.
Addendum to commit 2278c2914 (r23175).
2025-06-19 18:47:31 +02:00
Hermès Bélusca-Maïto
b8c5e9c209 [WINLOGON] Check whether error popups should be shown if loading user profile fails (#8139)
Respect the `"NoPopupsOnBoot"` REG_DWORD value in `HKLM\System\CurrentControlSet\Control\Windows`
https://www.visualautomation.com/comprod/secure6/nopopups.htm
2025-06-19 16:09:31 +02:00
Hermès Bélusca-Maïto
cbf3e61d63 [USERENV] Implement error reporting via error dialog (#8139)
This feature is used to report errors when `LoadUserProfile()` fails.
It is also meant to be used by other functions in the future.

The error dialog is shown only when the `PI_NOUI` flag is _NOT_ set
in `PROFILEINFO::dwFlags`.

- Add support for retrieving USERENV-specific registry policies,
  in a systematic way.

- Add support for "timed" dialogs that automatically close after
  a given timeout has elapsed.
  The default timeout is controlled by the `"ProfileDlgTimeOut"` policy:
  https://www.visualautomation.com/comprod/secure6/profile_.htm
  https://www.infania.net/misc/kbarchive/kb/196/Q196284/index.html

- TODO for the future: report the error in the event log.

- `LoadUserProfileW()`: Reset `ret` to `FALSE` after the call to
  `CreateUserProfileW()`; this allows to return failure in case
  any other function calls down the line fails. (`ret` is set to
  `TRUE` only when everything has succeeded.)
2025-06-19 16:09:30 +02:00
Katayama Hirofumi MZ
3a96c90c54 [NTUSER][USER32] Re-implement WM_POPUPSYSTEMMENU message (#8144)
This PR resolves a bug of #8094. #8094
correctly validates the flags. TPM_SYSTEM_MENU is an internal flag
and not a valid flag for TrackPopupMenu.
Thus, calling TrackPopupMenu.TPM_SYSTEM_MENU
in User32DefWindowProc was wrong.
This caused failure of taskbar context
menu.

JIRA issue: CORE-20238

- Move WM_POPUPSYSTEMMENU
  message handling of user32 into
  win32k.sys!IntDefWindowProc.
- Use win32k.sys!IntTrackPopupMenuEx
  instead of user32!TrackPopupMenu
  in handling of WM_POPUPSYSTEMMENU.
2025-06-19 22:59:27 +09:00
Eric Kohl
9853869a79 [SETUPAPI] Implement CM_Get_Device_Interface_Alias_ExA 2025-06-19 12:48:55 +02:00
Serge Gautherie
4f7e9dc2ed [NTOS:PS] Fix NtQueryInformationProcess(ProcessImageInformation) (#8134)
Do not overwrite Status failure value.

Addendum to commit bf493b93a (r59859).
2025-06-19 12:23:32 +02:00
Eric Kohl
44da696ad7 [UMPNPMGR] Fix PNP_GetInterfaceDeviceAlias
Pass Parameters to NtPlugPlayControl.
2025-06-19 11:49:56 +02:00
Eric Kohl
0b1a448150 [NTOS:PNP] Implement NtPlugPlayControl.PlugPlayControlGetInterfaceDeviceAlias 2025-06-19 11:06:20 +02:00
Adam Słaboń
81a4d8344b [NTOS:SE] SeValidSecurityDescriptor: Use relative security descriptor header size for length calculation (#8127)
Fixes Win2k3 ntfs.sys on x64
2025-06-18 23:55:27 +02:00
Dmitry Borisov
b5f763447c [COMCTL32] Fix product verison (#7854)
Specify the correct comctl version to fix tooltips in SIV software.
2025-06-18 20:54:44 +02:00
Whindmar Saksit
8ff8f676b3 [SYSDM][BROWSEUI][SHELL32][SDK] Added Advanced Performance Options property sheets (#8029) 2025-06-18 17:46:38 +02:00
Carl J. Bialorucki
bf734eb002 [APPHELP_APITEST] Fix test failures on Vista, 7, 8.1 x86 and x64 (#8122)
* Disable most apphelp:env and some apphelp:db tests on x64 due to structure differences breaking these tests.
* Add new tag lists for Windows 8.1 and Windows 10 in apphelp:apphelp test.
* Make a few changes to accept either Windows 10 or Windows 8.1 and older behavior in apphelp:apphelp test.
* Create new shimdata structures for Windows 8 and Windows Vista.
* Add attribute size definitions for Vista, 8.1, and 10.
* Create new shim data validation functions for Vista and 8.1.
* Use local time instead of UTC time for shim db version. This fixes test failures when the day in local time and the day in UTC are different.
2025-06-17 11:18:32 -06:00
Mikhail Tyukin
ae4d4544d9 [MSWSOCK] Fix integer overflow (#8141)
Fix integer overflow in mswsock which could result in a crash in ws2_32.dll when using x64 builds.
2025-06-17 16:45:44 +02:00
Katayama Hirofumi MZ
13e7f56754 [INDICDLL] Don't use WH_KEYBOARD_LL but WH_KEYBOARD (#8142)
- Replace WH_KEYBOARD_LL hook and
  handler with WH_KEYBOARD and
  adapted KeyboardProc.
- Update key-state checks to use
  HIWORD(lParam) flags and
  GetKeyState.
2025-06-17 18:44:15 +09:00
Katayama Hirofumi MZ
e26ad0de12 [MSCTF] Translate ITfDocumentMgr into C++ (#8120)
Implementing missing features...
JIRA issue: CORE-19361
- Delete documentmgr.c and add
  documentmgr.cpp.
- Make ITfDocumentMgr and
  IEnumTfContexts C++ code.
2025-06-17 07:08:42 +09:00
Eric Kohl
44d99fa60f [UMPNPMGR][NDK] Implement PNP_GetInterfaceDeviceAlias 2025-06-16 23:51:12 +02:00
Vitaly Orekhov
26368a1ead [PSDK] Enumerate WPA3 algorithms in DOT11_AUTH_ALGORITHM (#8129)
Reference: https://learn.microsoft.com/en-us/windows/win32/nativewifi/dot11-auth-algorithm

CORE-6905
2025-06-16 21:57:48 +02:00
Serge Gautherie
824fae4cb1 [SYSSETUP] wizard.c!UnattendSetup: Fix Theme page order (#8098)
Especially, unskip DateTime page.

Addendum to commit fc1f0c2088 (r75495).
CORE-15848
2025-06-16 21:55:57 +02:00
Whindmar Saksit
a3b032b118 [SHELL32] Fix IShellExecuteHookW (#8097) 2025-06-16 21:47:45 +02:00
Timo Kreuzer
c0b4a2cab0 [NTDLL_APITEST] Fix unreliable test for NtContinue
Some EFLAGS bits depend on the hardware / OS environments.
2025-06-16 16:47:41 +00:00
Hermès Bélusca-Maïto
82a57e41e1 [WINLOGON] Correctly reset LogonState in case logon or shutdown fails (#8133)
CORE-18351 CORE-18237 CORE-17137 CORE-16567
CORE-15360 CORE-5071 CORE-3804

Reset `LogonState` back to `STATE_LOGGED_OFF` before invoking
`WlxDisplaySASNotice()` when:
- in `STATE_LOGGED_OFF_SAS` state, `HandleLogon()` failed;
- or when an attempted shutdown operation failed.

This fixes the resulting inconsistent `LogonState` that happened if
any of these operations failed due to legitimate reasons. For example,
a corrupted user profile that caused the login attempt to abort, or,
an ongoing shutdown attempt being aborted as well.

One of the user-visible effects of this inconsistency, was the inability
to access the familiar Logged-Out SAS dialog by pressing Ctrl-Alt-Del at
the invite (SAS notice) dialog, because the `LogonState` was incorrectly
left into the `STATE_LOGGED_OFF_SAS` state, instead of being reset to
`STATE_LOGGED_OFF`.

----

Typical scenario:
The "Administrator" user, who is auto-logged-in by default after the
installation, gets a corrupted ntuser.dat profile registry hive if the
2nd-stage installation is aborted at the end by force-restarting ReactOS.
After reboot, ReactOS tries to log into the account, but fails, and goes
back to the Ctrl-Alt-Del invite dialog.
Before this fix, the user couldn't go into the Logged-Out SAS dialog to
enter new login credentials and attempt login to another account.
This is now fixed.
2025-06-16 14:16:47 +02:00
Hermès Bélusca-Maïto
545f9cebb2 [WINLOGON] Allow workstation (un)locking only if we are in the correct LogonState (#8132)
- Locking (`WLX_SAS_ACTION_LOCK_WKSTA`) is allowed only if `LogonState`
  is either `STATE_LOGGED_ON` or `STATE_LOGGED_ON_SAS`, i.e., either the
  user invokes the `user32:LockWorkStation()` API or presses Win-L, or,
  opens the Logged-On SAS dialog then clicks on the "Lock Workstation" button.

- Unlocking (`WLX_SAS_ACTION_UNLOCK_WKSTA`) is allowed only if
  `LogonState` is either `STATE_LOCKED` or `STATE_LOCKED_SAS`,
  i.e., the workstation is locked and we are either on the Locked-
  notice or on the SAS dialog that asks for the user credentials.

Additionally:

- Fix the invocation order of `LockHandler`/`UnlockHandler` notifications:
  * the `LockHandler` is invoked on the Winlogon desktop, just before
    displaying the Locked-notice dialog;
  * the `UnlockHandler` is invoked on the Winlogon desktop, just before
    switching back to the user's desktop.

- If we are on the Logged-On SAS dialog and the user presses Win-L to
  lock the workstation (instead of pressing the corresponding dialog
  button), the `DoGenericAction(WLX_SAS_ACTION_LOCK_WKSTA)` handler is
  invoked asynchronously while the SAS dialog is still being displayed.
  We thus need to ensure all the existing dialogs are closed before
  displaying the Locked-notice dialog, in order to avoid stray dialogs
  being shown concurrently.
2025-06-16 14:11:42 +02:00
Hermès Bélusca-Maïto
b0fbeb6801 [WINLOGON][MSGINA] Improve WLX_SAS_ACTION_TASKLIST handling in logged-on/logged-on SAS states (#8131)
CORE-13478
Addendum to commit 46dcab7ab.

The `WLX_SAS_ACTION_TASKLIST` action can be invoked in three scenarii to
open the Task-Manager:

1. from the logged-on state (`LogonState == STATE_LOGGED_ON`), when the
   user presses Ctrl-Shift-Esc while being on its own desktop (usual case);

2. from the Logged-On SAS dialog (`LogonState == STATE_LOGGED_ON_SAS`),
   when the user presses the "Task-Manager" button: here Winlogon should
   switch back to the user's desktop, restoring `STATE_LOGGED_ON` and
   start the TaskMgr;

3. or when the user presses Ctrl-Shift-Esc **while being on the Logged-On
   SAS dialog**: in this case, the Task-Manager is started on the
   currently-hidden user's desktop (and so, will be hidden), but the SAS
   dialog stays open. The user will see the opened TaskMgr once (s)he
   closes the SAS dialog and Winlogon switches back to the user's desktop.

In order to support these scenarii, the `WLX_SAS_ACTION_TASKLIST` action
handling is reworked:

- `SASWindowProc(WM_HOTKEY, IDHK_CTRL_SHIFT_ESC)` always invokes the
  `DoGenericAction(WLX_SAS_ACTION_TASKLIST)`: this allows centralizing
  inside `DoGenericAction()` the condition checks for starting TaskMgr.

- `DoGenericAction(WLX_SAS_ACTION_TASKLIST)` just starts the Task-Manager
  only if the Winlogon's `LogonState` is either `STATE_LOGGED_ON` or
  `STATE_LOGGED_ON_SAS`. It doesn't attempt there to switch desktops nor
  change the `LogonState` value, in order to support scenarii 2 and 3.

- The switch from/to Winlogon/user's desktops when going to the
  `LogonState: STATE_LOGGED_ON -> STATE_LOGGED_ON_SAS` change is done
  in `DispatchSAS()`, just before invoking the GINA's `WlxLoggedOnSAS()`
  (see below for more details) and just after it returns, only in the
  necessary cases.

----

[MSGINA] The WlxLoggedOnSAS() dialog shouldn't switch the desktops itself.

This behaviour can be observed on Windows with Winlogon debugging + tracing
enabled. It is Winlogon instead that does the desktop switch itself, as for
all the other SAS dialogs, in addition to changing its internal `LogonState`.

Fix for commit 7aecedf79 (r58785).
2025-06-16 14:04:33 +02:00
Hermès Bélusca-Maïto
a8c5f55315 [WINLOGON] Invoke NtShutdownSystem() with an adequate shutdown action (#8130)
Specify a shutdown action value corresponding to the
`WLX_SAS_ACTION_SHUTDOWN_*` ones.
2025-06-16 14:02:55 +02:00
Hermès Bélusca-Maïto
b3e56c95ef [WINLOGON] WlxSwitchDesktopToUser/Winlogon(): ensure the calling thread is assigned the specified desktop (#8130)
Invoke SetThreadDesktop() after a successful SwitchDesktop() call.
2025-06-16 14:02:55 +02:00
Hermès Bélusca-Maïto
14894f2e27 [WINLOGON] DefaultWlxWindowProc(WLX_WM_SAS): return an adequate WLX_DLG_* value (#8130)
For more details, see:
https://learn.microsoft.com/en-us/windows/win32/api/winwlx/nc-winwlx-pwlx_dialog_box_indirect_param#return-value
2025-06-16 14:02:49 +02:00
Katayama Hirofumi MZ
24b2c4be8c [INF] intl.inf: Add [KbdLayoutIds] section (#8115)
Win2K internat.exe uses this section.
WinXP and Win2k3 have this section.
JIRA issue: CORE-19268
- Add [KbdLayoutIds] section and add values to intl.inf.
- Add some missing "Layout Id" for "SYSTEM\
  CurrentControlSet\Control\Keyboard Layouts" of
  hivesys.inf.
2025-06-16 17:16:19 +09:00
Katayama Hirofumi MZ
1ece139178 [SHLWAPI][SHLWAPI_APITEST][SDK] Support MayExecForward + MayQSForward (#8125)
Follow-up of #8124. Implementing missing features...
JIRA issue: CORE-19278
- Implement MayExecForward and MayQSForward
  functions.
- Modify these prototypes in <shlwapi_undoc.h>.
- Add tests to shlwapi_apitest IsQSForward.
2025-06-16 07:31:47 +09:00
Eric Kohl
37cc1e2fd6 [NTOS:IO] Move location paths code because they are not stored in the registry 2025-06-15 23:36:53 +02:00
Oleg Dubinskiy
42aaad43db [OLEAUT32][OLEAUT32_WINETEST] Import LPSAFEARRAY user marshal interface marshaling support from Wine (#8121)
Import the following Wine commits:
oleaut32: Implement LPSAFEARRAY user marshal interface marshaling.
a1f2b44a1b
oleaut32/tests: Add tests for LPSAFEARRAY user marshal interface marshaling.
b2574278f7
containing the implementation itself and a test for it.
Fixes:
1) improperly displayed comboboxes with OS type and version selection,
2) failure to save/load virtual machine settings in/from XML file
in VirtualBox 3.0.0 - 4.0.36 versions and
3) improperly displayed comboboxes in 3DMark2001.
As result, this also allows to create and start a virtual machine(s) in VirtualBox up to 3.0.8 version. For newer VirtualBox versions, another fix is required.
CORE-8418, CORE-11254, CORE-14507, CORE-17980, CORE-18496, CORE-20015
2025-06-15 16:08:51 +02:00
Katayama Hirofumi MZ
4e7702a6a9 [EXPLORER] Add fullscreen handling (#8105)
Adds support for handling fullscreen
applications (a.k.a. “rude apps”) so
the taskbar can hide or show
appropriately.

JIRA issue: CORE-11242, CORE-15681,
CORE-16056, CORE-16063, CORE-16131,
CORE-16132, CORE-16192, CORE-16196,
CORE-16249, CORE-16290, CORE-16313,
CORE-16320, CORE-16322, CORE-16347,
CORE-16584, CORE-19795, CORE-9862,
CORE-16230, CORE-10738, 
and CORE-12263.

- Removes legacy pulse/timer logic in
  the tray window and adds a fullscreen
  notification workflow.
- Implements fullscreen detection
  across monitors in the task switcher,
  using a sequence of validation timers.
- Defines a new ITrayWindow::
  NotifyFullScreenToAppBars interface
  method to broadcast fullscreen state
  to appbars.
2025-06-15 21:20:45 +09:00
Ethan Rodensky
7ec3a7e98b [UXTHEME] Implement various Vista+ functions, mostly from WINE 2025-06-14 18:33:39 -07:00
Katayama Hirofumi MZ
01a6c4874a [MSCTF] CRange: Follow-up of #8096; Fix crash on tests (#8126)
Fix CRASH of msctf:inputprocessor tests.
JIRA issue: CORE-19361
- Implement Range_Constructor and
  TF_SELECTION_to_TS_SELECTION_ACP functions.
- Adapt CRange to these changes.
2025-06-15 09:26:30 +09:00
Katayama Hirofumi MZ
3b73f625b8 [SHLWAPI_APITEST] Follow-up of #8124; Fix IsQSForward testcase
JIRA issue: CORE-19278
2025-06-15 08:14:35 +09:00
Katayama Hirofumi MZ
80381b0578 [SHLWAPI][SHLWAPI_APITEST][SDK] Implement IsQSForward (#8124)
Implementing missing features...
JIRA issue: CORE-19278
- Implement IsQSForward function.
- Modify IsQSForward prototype in <shlwapi_undoc.h>
- Add IsQSForward testcase to shlwapi_apitest.
2025-06-14 20:57:33 +09:00
Katayama Hirofumi MZ
b39cb1229a [SHLWAPI] Implement SHCreateShellPalette (#8123)
Implementing missing features...
JIRA issue: CORE-19278
Implement SHCreateShellPalette function.
2025-06-14 20:27:23 +09:00
Katayama Hirofumi MZ
62ad2403a0 [USER32][COMCTL32] Edit: Optimize EDIT_SetCaretPos for speed (#8113)
The caret move on IME was slow until this PR.
JIRA issue: CORE-19268
- Don't use ImmIsIME but use IS_IME_HKL(hKL) in
  EDIT_SetCaretPos function. This change improves
  the caret speed.
- Prohibit display of composition window for Korean
  in the handling of WM_IME_SETCONTEXT and
  WM_IME_STARTCOMPOSITION, because Korean
  doesn't want it.
2025-06-14 20:26:05 +09:00
Timo Kreuzer
d0ca0f41f7 [MSVCRT_WINETEST] Skip 2 hanging pipe tests on ReactOS 2025-06-14 10:48:15 +00:00
Timo Kreuzer
1fef0ce8de [MSVCRT_WINETEST] Improve msvcrt_winetest
- Reduce diff to wine
- Enable todo_wine
2025-06-14 10:48:15 +00:00
Timo Kreuzer
17289faf7f [WINETEST] Allow to use USE_WINE_TODOS with win_skip 2025-06-14 10:48:15 +00:00
Katayama Hirofumi MZ
c894716295 [MSCTF][SDK] Add CDisplayAttributeMgr stubs (#8116)
Implementing missing features...
JIRA issue: CORE-19361
- Delete displayattributemgr.c and
  add displayattributemgr.cpp.
- Add CDisplayAttributeMgr class
  as stubs.
2025-06-13 05:31:01 +09:00
Katayama Hirofumi MZ
d809cd0f7f [BOOTDATA][NTUSER] Add DontLoadCTFIME and use it (#8110)
Improve CTF IME customization.
Use the proper names for CTF IME.
JIRA issue: CORE-19268
- In the registry key "HKLM\SOFTWARE\Microsoft\
  Windows NT\CurrentVersion\IMM", add
  DontLoadCTFIME value and set it to 1.
- Delete LoadCTFIME value to avoid user
  confusing.
- Rename UserIsCiceroEnabled function
  as UserIsCTFIMEEnabled.
- Rename SRVINFO_CICERO_ENABLED
  flag as SRVINFO_CTFIME_ENABLED.
2025-06-12 13:55:49 +09:00
Katayama Hirofumi MZ
474212939d [KBSWITCH] Handle IME Menu default items (#8101)
Finishing IME menu work. The IME menu of the system
pen icon has to append the default items if DMI_LEFT and
RDMI_RIGHT are not specified.
JIRA issue: CORE-20142
- Add IsRegImeToolbarShown and ShowImeToolbar
  helper functions.
- Add more code into KbSwitch_OnPenIconMsg function
  to handle IME menu default items.
- Add some resource strings.
2025-06-12 09:33:23 +09:00
Doug Lyons
70732b0ca4 [TASKMGR] Work around memory leak in performance tab of taskmgr (#8017)
* [TASKMGR] Work around Taskmgr memory leak by changing heap allocation methodology.
CORE-18014
2025-06-10 18:04:11 -05:00
Katayama Hirofumi MZ
3c35117f97 [NTUSER][USER32_APITEST] TrackPopupMenuEx: Check flags (#8094)
Validate flags.
JIRA issue: CORE-3247
- In NtUserTrackPopupMenuEx function, validate the flags.
- If validation failed, then set last error and return FALSE.
- Add SAL annotations to NtUserTrackPopupMenuEx.
- Keep reference to menu in the function.
- Add TrackPopupMenuEx testcase to user32_apitest.
2025-06-10 21:25:14 +09:00
Katayama Hirofumi MZ
4cf350a716 [IMM32] Use ANSI_NULL and UNICODE_NULL (#8109)
Coding style fix.
JIRA issue: CORE-19268
- Use ANSI_NULL for '\0'.
- Use UNICODE_NULL for L'\0'.
2025-06-10 20:45:23 +09:00
Katayama Hirofumi MZ
5b94656442 [MSCTF][SDK] Add stubs for CRange (#8096)
This PR is just a step, but a slightly
great one for OS development history.
JIRA issue: CORE-19361
- Add IAnchor interface into textstor.idl.
- Fix ITfRangeAnchor interface (that
  was wrong).
- Delete range.c.
- Add range.cpp.
- Add CRange class as stubs.
2025-06-09 23:51:17 +09:00
Katayama Hirofumi MZ
2c124893ec [KBSWITCH] Update indicdll/res/*.ico
CORE-20142
2025-06-09 08:39:55 +09:00
Mikhail Tyukin
b6925bdd6f [RICHED20] Sync to Wine-10.0 (#8078)
[RICHED20] Sync to Wine-10.0
Sync wine/rbtree.h to Wine-10.0 as changes in riched20 require this. Also added a define to allow directx code to compile.
Sync riched20 to Wine-10.0 and its tests using the script.

Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 9f72c5601173728c52626342a1ec6c9a4c70670f by Francois Gouget <fgouget@free.fr>

Update WINESYNC.txt

Update precomp.h

fix build

[WINESYNC]: riched20 is now in sync with wine-staging wine-10.0

[WINESYNC] riched20: Only call ME_SendRequestResize when control is in-place active.

Prevent GetClientRect from being called when not in-place active.

wine commit id e61db557ab8473a490c84301dbb4b4665b6c9c9f by Charlotte Pabst <cpabst@codeweavers.com>

[WINESYNC] riched20: Exit from editor_ensure_visible when control is not in-place active.

According to microsoft documentation, ScrollWindowEx, SetScrollPos and SetScrollRange may only
be called while the control is in-place active.

This fixes a segmentation fault in an application.

wine commit id dafaadcb4addd9af334433666a4bc2e7aa6eb9ff by Charlotte Pabst <cpabst@codeweavers.com>

[WINESYNC] riched20/tests: Test that ScrollWindowEx and GetClientRect are only called when control is in-place active.

wine commit id f1301cedbea51be107017bb8545956bcfd02b610 by Charlotte Pabst <cpabst@codeweavers.com>

Update editor.c

[WINESYNC] riched20: Release IME input context when done using it.

wine commit id 3f51fb96c162e8d3314627b3db25564fa7d9d419 by Zhiyi Zhang <zzhang@codeweavers.com>

[WINESYNC] riched20: In para_set_fmt protect against out of bound cTabStop values.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56730

wine commit id 7b2ff977739df25252d46552d2447af50c23040e by Fabian Maurer <dark.shadow4@web.de>

Update editor.c

[WINESYNC] riched20: Don't write past end of buffer.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>

wine commit id 5cbe3a6cb186cffed20e3fea5f88abd0880d3914 by Eric Pouech <epouech@codeweavers.com>

[WINESYNC] riched20: Don't crash when no OLE obj is present.

This was generating a lot of crashes in riched20 tests.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>

wine commit id 015aae30cf2217164f631d1c03abfc9ea63bb43d by Eric Pouech <epouech@codeweavers.com>

Update editor.c

[WINESYNC] riched20: Use CRT allocation functions.

wine commit id 42579f1dcd2f14e765e2f53ceb5b46fff5623f10 by Alex Henrie <alexhenrie24@gmail.com>

[WINESYNC] riched20/tests: Make the editor paste test failures more informative and unique.

Knowing the content of the edit field is more useful than knowing the
strcmp() result. The text field may contain carriage returns and
linefeeds so use wine_dbgstr_a() so they are clearly visible in the
failure message.
Also prefix the ok messages with a unique string to indicate which
test_WM_PASTE() test failed.

wine commit id b8950d04e439f649f2167477a36ee453ad8b81ef by Francois Gouget <fgouget@codeweavers.com>

[WINESYNC] riched20: Don't call wrap_marked_paras_dc() before the editor is fully initialized.

Today, CreateTextServices() sometimes triggers an assertion failure in
select_style().

When ME_MakeEditor() calls ME_MakeFirstParagraph(), the editor
(ME_TextEditor) is not in a fully initialized state.  For example, the
font cache (pFontCache) is not fully initialized, which sometimes makes
select_style() believe that the cache slots are fully occupied.

Fix this by delaying the call to wrap_marked_paras_dc() until the editor
is fully initialized.

Also, delay the call to ITextHost::TxReleaseDC() until after
wrap_marked_paras_dc(), since we need the device context a bit longer.

Fixes: b70eb32c5f3e506181d9e1e9fbef62e9baf3674d

wine commit id 548d7179e3b2b9961321a4df50644c9b3874a295 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Factor out device context acquisition from ME_MakeFirstParagraph.

This lets ME_MakeEditor() reuse the device context throughout the editor
initialization process.

wine commit id 03036f42e1afa9c79246dcee6b9fe876286b1aa4 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Don't call ME_UpdateRepaint inside set_selection().

This partially reverts c5daf6a30f21 (riched20: Call ME_UpdateRepaint
instead of editor_ensure_visible in set_selection.)

Fixes: c5daf6a30f21acd20263692b278acba49e014cc1

wine commit id ac5110131493b8b05795e8825285e41ca40ab6f1 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Add tests for change notifications caused by EM_SETSEL{,EX}.

wine commit id c35926e49825f7a3d48ba826085fe1ae3d2a7e27 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Wrap marked paragraphs at Text Services initialization.

Today, CreateTextServices() returns an Rich Edit object without row
start and end marks, which are expected to exist by many Rich Edit
operations as well as EM_* message handlers.

This leads to a crash when certain messages (e.g., EM_SCROLLCARET) are
sent to the Rich Edit object via ITextServices::TxSendMessage(), unless
ME_WrapMarkedParagraphs() has been called beforehand.

Fix this by calling wrap_marked_paras_dc() early in the initialization
process.

This is not a problem for windowed Rich Edit controls, which already
calls ME_WrapMarkedParagraphs() before the user or application starts
interacting with it.

wine commit id b70eb32c5f3e506181d9e1e9fbef62e9baf3674d by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Use nameless unions/structs.

wine commit id 26826d3af8b1969de389f3d6702d7c8b805126e1 by Alexandre Julliard <julliard@winehq.org>

Update editor.h

[WINESYNC] riched20: Remove DECLSPEC_HIDDEN usage.

wine commit id c04ab166498b5841ecde620a9bd0b74969b01596 by Alistair Leslie-Hughes <leslie_alistair@hotmail.com>

[WINESYNC] riched20: Call ME_UpdateRepaint instead of editor_ensure_visible in set_selection.

To prevent cases where ME_WrapMarkedParagraphs has not been called causing a NULL
pointer when editor_ensure_visible tries to get the row from the cursor.

wine commit id c5daf6a30f21acd20263692b278acba49e014cc1 by Santino Mazza <smazza@codeweavers.com>

[WINESYNC] riched20: Update paragraph position in marked tree.

nCharOfs is the key for paragraphs added to the marked tree
If it is updated, re-add the entry to update its position

wine commit id f1aa3f37ef326b7cbf8fc94e982c9f0b398181c4 by Daniel Lehman <dlehman25@gmail.com>

Update editor.c

[WINESYNC] riched20: Update the editor IME position on GCS_RESULTSTR.

So that a GCS_RESULTSTR followed by GCS_COMPSTR, without interruping the
composition, begins inserting the new composition text after the result
instead of before it.

wine commit id de45bc33a73eac5dbc3502b4a43cd48399507c73 by Rémi Bernon <rbernon@codeweavers.com>

[WINESYNC] riched20/tests: Fix a typo in a comment.

wine commit id 145e3c758b9594596835e291b2fcb3c80e4c0479 by Francois Gouget <fgouget@free.fr>

[WINESYNC] riched20/tests: Don't specify DT_WORDBREAK in _check_txgetnaturalsize().

Today, test_TxGetNaturalSize() creates a pop-up window with a fixed size
(extent) of 100 x 100.  The test function then proceeds to compute the
natural size of rich edit control that fits the sample text
"TestSomeText" and compare it to the RECT calculated by DrawText.

Apparently, this test fails if the width of the sample text
"TestSomeText" exceeds the width of the test window's client area.  In
this case, DrawText() with DT_WORDBREAK breaks the text into the two
lines due to text wrapping; however, Rich Edit's
ITextServices::TxGetNaturalSize implementation does not seem to perform
text wrapping on overflow.  This results in extent mismatch.

(Note that the test may either succeed or fail depending on the current
font used for DEFAULT_GUI_FONT, which defaults to Tahoma according to
Microsoft's documentation.  To reproduce this failure, it may be
necessary to switch fonts or change the width of the pop-up window.)

Fix this by omitting the DT_WORDBREAK flag for the DrawText() call in
_check_txgetnaturalsize().

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54637

wine commit id f54a1dac64c89aea3fe02ae8c0d6eef43a0aa117 by Jinoh Kang <jinoh.kang.kr@gmail.com>

Update editstr.h

[WINESYNC] riched20: Implement ITextDocument::Freeze and ITextDocument::Unfreeze.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54617

wine commit id 3fe15349d39ccf31026a92eae30f83f65c91cb1f by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Don't assume that TxDraw preserves the device context's brush selection.

Today, RichEditWndProc_common assumes that ITextServices::TxDraw
preserves the brush selection of the given device context.  However,
this invariant may be broken by misbehaving embedded OLE objects in the
text document.

Fix this by not assuming that the return value of the second
SelectObject() call equals the brush passed to the first SelectObject()
call in RichEditWndProc_common's WM_PAINT / WM_PRINTCLIENT case.

wine commit id 2027be7e0370c92595f126a0b0dd167a635d50a2 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Test for ITextDocument::Freeze and ITextDocument::Unfreeze.

wine commit id 3105fad82b9bae390fcd710a2fc10a18988b4622 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Don't set para unless committing cursor move in ME_MoveCursorWords.

Introduce a temporary variable, `other_para`, so that we don't end up
returning incorrect para (with stale run) inside the output cursor.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54564

wine commit id 7e28fa5c558f1417f8f033cb843424778bbfb8b8 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Test for word movement across paragraph boundary.

wine commit id 21d25b17c2cae8eb2d2376ce42b76e3f61eb0bba by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Fix the EM_GETSELTEXT tests in Hindi on Windows.

On Windows EM_GETSELTEXT fails with an invalid parameter error in the
Hindi locale but works in most other locales, including UTF-8 ones.
So check for this issue and adjust the expected results accordingly.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54559
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54565

wine commit id 37cd13abdf5d91c7b3f25b39fa14976bc3a3e3a3 by Francois Gouget <fgouget@codeweavers.com>

[WINESYNC] riched20/tests: EM_GETSELTEXT's wparam is not used and should be 0.

wine commit id baa41970647a7e548701a72bea2e4aa2a61ca27e by Francois Gouget <fgouget@codeweavers.com>

[WINESYNC] riched20/tests: Add context to the EM_FORMATRANGE tests.

wine commit id 020145248371bbfd2e473e79ba873e8313dde72d by Francois Gouget <fgouget@codeweavers.com>

[WINESYNC] riched20/tests: Check clipboard content after destroying the editor window.

Destroying the editor window should render all the formats so they are
still available after.

wine commit id b5b5b0b365639b889a0240d4992e16174b428f75 by Francois Gouget <fgouget@codeweavers.com>

[WINESYNC] riched20/tests: Add retry loop around OpenClipboard() to avoid access denial.

Reusing existing helper from user32 & comctl32.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47888
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>

wine commit id 25743d46f4103c7345c955b87b4134a065fb5f1d by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20/tests: Ensure clipboard has been pasted before testing the result.

The patch does reduce error failures locally.

For the record:
- WM_PASTE in undo operations haven't been transformed (as it requires
  UNDO stack manipulation in a coherent way across platforms)

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47888
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>

wine commit id 4fd5252f635817b431673accaba718c7481f48f6 by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20: Support SFF_SELECTION when streaming in plain text.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>

wine commit id 1b7a918bd7ec8bc2c51bcb76525b56b17c5ff0c0 by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20/tests: Add tests when pasting in plain text mode.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>

wine commit id 82fa1048b5cc7d9c6a2a289403f25adbdd8158c7 by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20: Obtain the composition start index after deleting selection.

Today, the Rich Edit control handles the WM_IME_STARTCOMPOSITION message
by the computing the composition start position (imeStartIndex) _before_
calling ME_DeleteSelection(), which shifts the character positions after
the range of deletion.  If the selection were not empty, imeStartIndex
immediately becomes stale, since it does not take into account the
number of deleted characters before it.

Fix this by computing imeStartIndex after the ME_DeleteSelection() call.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54318

wine commit id 8c43577f0f9b4422d3641457c595c3998bd54a18 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Call GlobalReAlloc with GMEM_MOVEABLE flag.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53474

wine commit id dfd44bb979ee2052eceff094083147e9879fa807 by Rémi Bernon <rbernon@codeweavers.com>

[WINESYNC] riched20: Fix failing test in UTF8 locales.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52875
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>

wine commit id 5902cfd2990261189ce9af27981a95ac12fa2a5d by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20: Don't emit EN_CHANGE events during window creation.

wine commit id 5c997de8dc1e4885266fa884a2fb74f840e3bedc by Evan Tang <etang@codeweavers.com>

[WINESYNC] riched20: Add test for EN_CHANGE events during window creation.

GenoPro isn't very happy if it receives one

wine commit id 0b069106b0e0f141d6925d3e10166be89fc59145 by Evan Tang <etang@codeweavers.com>

[WINESYNC] riched20: Move test class creation to a helper function.

wine commit id f9083961ed187777d660796f7136addc04fff8b0 by Evan Tang <etang@codeweavers.com>

[WINESYNC] riched20/tests: Use ARRAY_SIZE instead of open coding it.

wine commit id 90b6288f54afdc4430dac146779a92b89f4d1219 by Michael Stefaniuc <mstefani@winehq.org>

[WINESYNC] riched20/test: Add scrolling test for richole.

Signed-off-by: Santino Mazza <mazzasantino1206@gmail.com>

wine commit id 059c70d736baa164a1b246e949acd006cf83ab5a by Santino Mazza <mazzasantino1206@gmail.com>

[WINESYNC] riched20: Ensure that cursor is visible when selecting text.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=40444
Signed-off-by: Santino Mazza <mazzasantino1206@gmail.com>

wine commit id 25209c162fc209124b369abbad55d915d31909b2 by Santino Mazza <mazzasantino1206@gmail.com>

[WINESYNC] riched20/tests: When selection is out of view, the scrollbar should move.

Signed-off-by: Santino Mazza <mazzasantino1206@gmail.com>

wine commit id ee131e9eba7dad090f0baf4a73fab2d62dc73b52 by Santino Mazza <mazzasantino1206@gmail.com>

[WINESYNC] riched20: Remove duplicate code.

Signed-off-by: David Kahurani <k.kahurani@gmail.com>

wine commit id 3588479e1a674e5f43f1acb9e7c0aa8cecf98f25 by David Kahurani <k.kahurani@gmail.com>

[WINESYNC] riched20: Implement ITextDocument::Undo and ITextDocument::Redo.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53289
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id ded8227774570a1ea320dc34f2de0033f85b3ce7 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Add undo control state variable to ME_TextEditor.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id 40c54854e61d8adfca21e2fa9260712e4f5453e9 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Factor out undo-ignored status check.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id 0cd86e010e41eebdc1a4c142f9cc6a4948554d0e by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Ensure MEPF_COMPLEX is unset when in password input mode.

Otherwise, Wine may crash while attempting to fetch the script shaping
information, which does not exist since shape_para() was not called.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53335
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id f77f12ba3b1dad9ebdcb116c66b137e9103a0d1b by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Test for ITextDocument::Undo and ITextDocument::Redo.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id 73284ea18891a152dce989ffff59e2c527f94c73 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Commit and wrap paragraphs after changing text properties.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53170
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id 0974f047b57357252ec94bea119e5291250a446c by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Draw OLE objects with IViewObject implementation.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52752
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id ecc607c6da96a5c2e8988f3021e98b442fe24c12 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Fetch extent from object if REOBJECT::sizel is unset.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id 164897e6c94d3eee4798f82a730472a5a847f9b2 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Add tests for drawing embedded OLE objects.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>

wine commit id a7d29d1625f7e02df4fbf59ef4e4a999d39edde0 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Fix the spelling of a comment.

Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id f9fa5f9e523b45766f715c6981c6a6ab5f183157 by Francois Gouget <fgouget@free.fr>

[WINESYNC] riched20: Implement callback to IRichEditOleCallback_QueryInsertObject.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 10667b39aad6710668f60c1ba8f10e50aeb87242 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20/tests: Add tests for IRichEditOleCallback_QueryInsertObject.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 95b4072cc774ba7a7eabb0d4c114b933b7d71105 by Jinoh Kang <jinoh.kang.kr@gmail.com>

Update richole.c

[WINESYNC] riched20: Set REOBJECT's cp correctly in IRichEditOle::GetObject.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52705
Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 194ba06c403fd72fbfb95048385c9ca4838af169 by Jinoh Kang <jinoh.kang.kr@gmail.com>

[WINESYNC] riched20: Add back-reference to outer ME_Run from struct re_object.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 05796c4e2a4acb91e6035c536b4d0e1f7e16896d by Jinoh Kang <jinoh.kang.kr@gmail.com>

fix

[WINESYNC] riched20/tests: Enable compilation with long types.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 9e90cecdc603d79c6332a03884ed8d4851ef2e88 by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20/tests: Use correct integral type.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 8b66db027d4112bfd4287b03d5c7b6f33994adc3 by Eric Pouech <eric.pouech@gmail.com>

fix build, sync rbtree.h

[WINESYNC] riched20: Enable compilation with long types.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 42d0e56643740a0eac5913a9f176e789457cb475 by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20/tests: Add a test to see what richedit class flavours should be available.

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id d54a0e2bea4548bb5d9c0cca9f918d7c46591e23 by Dmitry Timoshkov <dmitry@baikal.ru>

[WINESYNC] riched20: Use correct integral type.

Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 63a643f7f42ecd0c2625a5f5704b5b9647349e7b by Eric Pouech <eric.pouech@gmail.com>

[WINESYNC] riched20/tests: Avoid "misleading indentation" warnings.

Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 2d6fad7bda2f2e21a871f405a6b0c3e70ebf6a6a by Fabian Maurer <dark.shadow4@web.de>

[WINESYNC] include: Remove the wine_ prefix on rbtree functions.

Add defines for frequently-used functions.

For compatibility with vkd3d.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 3527230c461b6baba9c29e69b575ada85bdbbc43 by Alexandre Julliard <julliard@winehq.org>

[WINESYNC] riched20: Defer releasing the host if inside a notify callback.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51521
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 8138159f20d6453443861570689e0f14018051da by Huw Davies <huw@codeweavers.com>

[WINESYNC] riched20: Return the nearest char pos if the coords are outside the format rect.

For the two tests that remain todo_wine, the results differ between
riched20 and msftedit, with Wine's implementation matching msftedit.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52041
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 363508454d5f8f1fc5916bda47e6429756b7dc8f by Huw Davies <huw@codeweavers.com>

[WINESYNC] riched20: Check font_cache in select_style() too.

Signed-off-by: Serge Gautherie <winehq-git_serge_180711@gautherie.fr>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 177f808aa86e5442be1a0a92ddccc4904bf2e743 by Serge Gautherie <winehq-git_serge_180711@gautherie.fr>

[WINESYNC] riched20: Use the standard va_list instead of __ms_va_list.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 5b15bf33255bd373cbf26ec373d16a8234ec6b1c by Alexandre Julliard <julliard@winehq.org>

[WINESYNC] riched20: Use regular allocation helpers for text services objects.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 2064c206c0b67edb8524f572166b974ba9cbd6fe by Nikolay Sivov <nsivov@codeweavers.com>

[WINESYNC] riched20: Remove New() allocation macro.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 1d5c9defb19fca6cfb1107384fc2325d391726d6 by Nikolay Sivov <nsivov@codeweavers.com>

[WINESYNC] riched20: Don't create custom heap.

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 8bff437e9d5e047e689d8b32f62995785c0cd48e by Dmitry Timoshkov <dmitry@baikal.ru>

[WINESYNC] riched20/tests: Don't cast NULL.

Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id b701c3df99fbd6d4df7eaa11327bb11db95d8676 by Michael Stefaniuc <mstefani@winehq.org>

[WINESYNC] riched20/tests: Add more tests for testing EM_GETTEXTEX with OLE objects.

Signed-off-by: Jactry Zeng <jzeng@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 40988d6c3886d0f7a914c45ea68264bfc8540859 by Jactry Zeng <jzeng@codeweavers.com>

Update richole.c

[WINESYNC] riched20: Allow to insert OLE object at specified offset.

Signed-off-by: Jactry Zeng <jzeng@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 8c894382dde5b9da88b0e9f23a753d5e851a43d6 by Jactry Zeng <jzeng@codeweavers.com>

Update richole.c

[WINESYNC] riched20/tests: Lock hGlobal before use.

Signed-off-by: Jactry Zeng <jzeng@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id f9c8c95856ded333be35ff41ab40a246bfe345b6 by Jactry Zeng <jzeng@codeweavers.com>

Co-authored-by: winesync <ros-dev@reactos.org>
2025-06-08 15:05:27 -07:00
Whindmar Saksit
c7a7376545 [SHELL32] Implement basic SHMultiFileProperties (#7956)
CORE-12510 CORE-20217
2025-06-08 20:04:10 +02:00
Eric Kohl
bec50f65f4 [ACPI] Report a docking device to the system 2025-06-08 16:47:45 +02:00
Serge Gautherie
076f08cb3e [SYSSETUP] WriteUserLocale(): Fix Locale[] length and value (#8090)
'Locale' format is "0000nnnn".

CORE-15848
2025-06-08 16:05:22 +02:00
Katayama Hirofumi MZ
6128c20937 [EXPLORER] Set MINMAXINFO correctly (#8100)
JIRA issue: CORE-20219
Set MINMAXINFO data in WM_GETMINMAXINFO
message handling.
2025-06-08 19:49:45 +09:00
Katayama Hirofumi MZ
586989350b [KBSWITCH] Support System Pen Icon (#8080)
## Purpose
Supporting System Pen icon and IME menus for
East-Asian users.
JIRA issue: CORE-20142

## Overview
The East-Asian system has the system pen icon
in taskbar additionally. The system pen icon
shows the current IME status.

If the user clicked the IME system pen icon,
the IME menu will open. The IME system pen icon
can be customized by the IME module by posting
indicator messages.

## Proposed changes
- Add default pen icon resources.
- Add base/applications/kbswitch/imemenu.c to
  handle IME menus.
- Add code for adding, modifying and deleting
  the System Pen icon.
- Modify indicdll.spec.
- Fix popup menu alignment.
2025-06-08 17:21:24 +09:00
Hervé Poussineau
85cde17c46 [DISKPART] Fix wrong '\n' in Italian translation
This fixes some warnings:
- it-IT.rc:115: unrecognized escape sequence
- it-IT.rc:160: unrecognized escape sequence
2025-06-08 08:58:59 +02:00
Katayama Hirofumi MZ
92ff994cc2 [SDK][USER32_APITEST] Update <msgdump.h> (#8099)
JIRA issue: N/A
- Replace MSGDUMP_TPRINTF with
  MSGDUMP_PRINTF and use ANSI for
  strings. Now, we can use printf-
  compatible function for dump.
- Fix some mistakes.
- Adapt user32_apitest
  MessageStateAnalyzer to these
  changes.
2025-06-08 14:10:22 +09:00
Katayama Hirofumi MZ
87f4b28b99 [NTUSER][FORMATTING] NtUserTrackPopupMenuEx: Just formatting
for #8094. CORE-3247
2025-06-08 07:48:41 +09:00
Timo Kreuzer
c129b6d921 [COMPILER_APITEST] Disable some tests for GCC
We cannot fix these, since GCC inlines the conversion.
2025-06-07 15:53:51 +00:00
Whindmar Saksit
4b87ae3dca [SHLEXTDBG] Added more SEI flags (#8091) 2025-06-07 16:54:29 +02:00
Katayama Hirofumi MZ
901af6a681 [SENDMAIL] Add 'override' keywords
to CDeskLinkDropHandler. CORE-19469
2025-06-07 11:24:40 +09:00
Katayama Hirofumi MZ
99ddf459e0 [MYDOCS] Add 'override' keywords
to CMyDocsDropHandler.
JIRA issue: CORE-19469
2025-06-07 11:22:06 +09:00
Katayama Hirofumi MZ
7cf1e01cd4 [SDK][MSUTB] Move WM_IME_SYSTEM to <imm32_undoc.h> (#8093)
Defining macros in proper place will improve header
compatibility.
JIRA issue: CORE-19268
- Move WM_IME_SYSTEM macro in <undocuser.h>
  into <imm32_undoc.h>.
- Move IMS_... macros in <immdev.h> into
  <imm32_undoc.h>.
- Include <imm32_undoc.h> in base/ctf/msutb.
2025-06-07 07:52:05 +09:00
Katayama Hirofumi MZ
2335229c32 [USER32][IMM32][SDK] Support WM_IME_SYSTEM.0x1D (#8088)
Splitted from #8080. The message
handling of WM_IME_SYSTEM.0x1D
is needed for IME menu handling.
JIRA issue: CORE-20142
- Define IMS_IMEMENUITEMSELECTED
  (0x1D) in <immdev.h>.
- Add WM_IME_SYSTEM.0x1D handling
  in ImeWnd_OnImeSystem function.
- Rename and extend
  User32GetImmFileName function as
  User32GetSystemFilePath, with
  adding a filename parameter.
2025-06-07 06:51:46 +09:00
Katayama Hirofumi MZ
5b4d1dbd4b [NTUSER] IntTrackPopupMenuEx: Check TPMPARAMS.cbSize (#8092)
Validate structure size.
JIRA issue: CORE-3247
- In IntTrackPopupMenuEx function,
  if lpTpm was non-NULL, then
  validate lpTpm->cbSize.
- If validation failed, then set last
  error and return FALSE.
2025-06-06 22:37:27 +09:00
Katayama Hirofumi MZ
6dd04063ba [KBSWITCH] Rename kbsdll.dll as indicdll.dll (#8087)
Splitted from #8080. We have confirmed usage of the
name of "indicdll.dll" in user32.dll, in #8080. So, we
have to rename kbsdll.dll as "indicdll.dll".
JIRA issue: CORE-20142
2025-06-05 07:24:19 +09:00
Stanislav Motylkov
21d02b8266 [KMTESTS] Allocate buffer for the test list dynamically
Fixes broken test list output.
Addendum to 7c3a119d6d. CORE-20078
2025-06-04 22:04:03 +02:00
Hermès Bélusca-Maïto
fbd676f4c9 [WINLOGON] Register hotkeys for 'Lock Workstation' and 'Accessibility' (UtilMan) (#8083)
- The hotkeys are respectively: Win+L and Win+U .
- Use instead the hotkey IDs in the WM_HOTKEY handler.
2025-06-04 16:44:44 +02:00
Serge Gautherie
dfe30e58c0 [ROSAPPS:SYSUTILS] Remove remnant config.h (#8075)
- `REACTOS_NO_SECURITY_SS`
Added on 9ef17ea (r475), without being used.
Not currently used either.

- `FMIFS_IMPORT_DLL`
Now lives in the 2 /base programs which use it.
Addendum to (probably earlier than) 9723b5e (r70868) and dc17af9 (r70916).
2025-06-04 16:25:35 +02:00
Hermès Bélusca-Maïto
273b4c8702 [WIN32SS:NTUSER] Minor code cleanup in hotkey code (#8084)
- Remove duplicated code in NtUserRegisterHotKey() and in
  NtUserUnregisterHotKey() by directly calling UserRegisterHotKey()
  and UserUnregisterHotKey() after the usual user-validation steps.

- In UserRegisterHotKey(), ignore hotkeys with virtual key VK_PACKET
  since this is not a real keyboard input, but is instead used in
  conjunction with unicode characters to simulate keystrokes for
  non-keyboard input methods.

- s/StartDebugHotKeys/SetDebugHotKeys/

- Remove duplicate code between NtUserCallMsgFilter() and IntCallMsgFilter().
2025-06-04 14:26:34 +02:00
Dmitry Borisov
7c3a119d6d [KMTESTS:HAL] Add a test for string I/O intrinsic functions
CORE-20078
2025-06-04 10:52:34 +03:00
Dmitry Borisov
4a3a446ba7 [KMTESTS] Add the ability to detect a virtual machine
This allows the tests to interact directly with hardware
CORE-20078
2025-06-04 10:52:34 +03:00
Katayama Hirofumi MZ
18290a7b6b [KBSWITCH] Follow-up of #8039
JIRA issue: CORE-18546
2025-06-04 15:13:15 +09:00
Katayama Hirofumi MZ
7d8d8a6e52 [USER32_APITEST] Add MenuUI testcase (#8066)
Verifying menu behavior.
JIRA issue: CORE-5065
JIRA issue: CORE-10829
JIRA issue: CORE-11756
- Add user32_apitest_menuui sub
  program for MenuUI testcase.
- Add MenuUI testcase.
2025-06-04 05:56:01 +09:00
Katayama Hirofumi MZ
67a4cf93be [NTUSER] ime.c: Add SAL2 annotations and tracing (#8070)
Refactoring and improving trace.
JIRA issue: CORE-19455
- Add SAL2 annotations to
  function parameters.
- Add and improve tracing
  (TRACE and ERR) for easier
  debugging.
2025-06-04 05:47:54 +09:00
Carl J. Bialorucki
0947a64a90 [GDI32_APITEST] Fix test on all versions of Windows at certain vertical resolutions (#8048)
* Use MulDiv to generate the result and negate that instead of dividing by a negative number, which can cause test failures.
2025-06-03 14:08:03 -06:00
Hervé Poussineau
aa0089a3ec [DXDIAG] Rework display enumeration, to use DirectDrawEnumerateEx
We can now get a device GUID by display, which is given to DirectDrawCreate.
2025-06-03 21:35:59 +02:00
Hervé Poussineau
343d1d4873 [DXDIAG] Add a GUID field to DXDIAG_DISPLAY, and give it to DirectDrawCreate
Currently, this GUID is always NULL.
2025-06-03 21:34:56 +02:00
Hervé Poussineau
6f47c884d5 [DXDIAG] Add a structure to contain all data related to one display
Also change user pointer of display page to be the PDXDIAG_DISPLAY structure.
2025-06-03 21:34:56 +02:00
Whindmar Saksit
4f7736a088 [SHELL32] Implement single-click mode in DefView (#8054) 2025-06-03 20:39:38 +02:00
Daniel Victor
22d077f9f1 [FREELDR] Make the NTFS filename comparison conforming to NTLDR/BOOTMGR (#8021)
When an NTFS partition is created with Windows and modified with Linux
(see below), the NTLDR/BOOTMGR will compare the file names ignoring the
case of the files, while FreeLdr does not and the same hack is on Btrfs
file name comparison.

This PR is necessary because the case of the file names on registry, etc.
may not always be consistent!

How to reproduce:
- Try to install Windows with NTFS and install FreeLdr on it;
- Try to modify Windows partition on Linux like creating/copying some new files;
- Try to boot with FreeLdr (it will fail if the hive file path case is different
  than the actual file path);
- Try to boot with NTLDR/BOOTMGR (it will work finally reaching the desktop).
2025-06-03 16:47:15 +02:00
Katayama Hirofumi MZ
2ab01e7302 [SHELL32_APITEST] Add shell32_apitest_sub dependency (#8077)
Improve shell32_apitest build.
JIRA issue: N/A
Add dependency to shell32_apitest_sub.
2025-06-03 23:22:06 +09:00
Katayama Hirofumi MZ
d80fdbe146 [IMM32][SDK] Refactor IMM32 and fix annotations (#8071)
Fix annotations' mistakes. Improve debug output.
JIRA issue: CORE-19268
- Fix some SAL annotations.
- Use debugstr_a and debugstr_w for tracing
  strings.
- Add static to some functions.
- Remove APIENTRY of some functions.
- Fix code formatting.
2025-06-03 11:09:36 +09:00
Katayama Hirofumi MZ
2fd0af4f8f [EXPLORER] AppBar Part 3 (#7966)
Follow-up of #7946.
JIRA issue: CORE-7237
- Implement ABM_GETSTATE,
 ABM_GETTASKBARPOS, ABM_ACTIVATE,
  ABM_WINDOWPOSCHANGED,
  ABM_GETAUTOHIDEBAR,
  ABM_SETAUTOHIDEBAR, and
  ABM_SETSTATE appbar messages.
- Implement TWM_SETZORDER tray
  message.
2025-06-03 06:59:30 +09:00
Katayama Hirofumi MZ
2543e2179c [USER32] Alt+Tab: Don't switch to IME-related window (#8061)
The application switcher (Alt+Tab) shouldn't switch to IME-related (CS_IME) windows.
JIRA issue: CORE-19268
2025-06-03 06:53:51 +09:00
Serge Gautherie
1395e7ecc4 [FORMAT] Usage(): Remove redundant LoadFMIFSEntryPoints() call (#8072)
`wmain()` already handles this. Addendum to commit 9cea0fddde (r24253).

CORE-20218
2025-06-02 22:30:47 +02:00
Serge Gautherie
9fd4378def [BOOTDATA] hivesys.inf: Sort 5 NLS languages and locales (#8068)
- Remove '0414' redundant NLS Language. Addendum to 532d977 (r27709).
- Remove '0401' redundant NLS Language. Addendum to 3a88ebc (r63713).
- Sort '0845', '0c04' and '1004' NLS Locales

CORE-16766
2025-06-02 22:27:10 +02:00
Andrei-Valentin Miloiu
bb282448c6 [MSUTB] Add Romanian (ro-RO) translation (#7923) 2025-06-02 22:18:04 +02:00
Andrei-Valentin Miloiu
81edd1f9b4 [NETSHELL] Update Romanian (ro-RO) translation (#7973) 2025-06-02 21:43:33 +02:00
Andrei-Valentin Miloiu
6a154167cf [REGEDIT] Update Romanian (ro-RO) translation (#7948) 2025-06-02 21:43:12 +02:00
Gabriele Lo Re
9d8b342e60 [BASE] Add and improve Italian (it-IT) translation (#7893) 2025-06-02 21:40:46 +02:00
Hervé Poussineau
d09c3d0af8 [COMCTL32] Pass WM_SYSCOLORCHANGE/WM_DISPLAYCHANGE/WM_WININICHANGE to property pages
Property pages may want to react on such events, like 'Font' or 'Layout' pages
in console.dll

CORE-13212
2025-06-02 21:23:30 +02:00
Carl J. Bialorucki
dd896f6f44 [DNSAPI_APITEST] Fix dnsapi:DnsQuery on Server 2003 x86, 8.1 x86, 8.1 x64, 10 x86, 10 x64 (#8043)
* Windows Server 2003 x86 may return a DNS_ERROR_RCODE_NAME_ERROR in some tests where other versions of Windows may return ERROR_INVALID_NAME, ERROR_TIMEOUT, or DNS_ERROR_INVALID_NAME_CHAR. Pass this behavior.

* Windows 8+ sets the query to a null pointer when given an invalid query pointer while earlier Windows versions don't change the query pointer. Pass either behavior.
2025-06-02 12:15:45 -06:00
Daniel Victor
bad53bf847 [FREELDR] Fix UEFI boot after FreeLoader split (#8069)
Add missing initialization of the module list and boot devices.
This makes UEFI boot work again after #7488 merge.

CORE-11954
2025-06-02 13:42:49 +03:00
Justin Miller
9fe829874b [KERNELBASE][KERNEL32] Import KernelBase from WINE-10.0 (#8049)
* [KERNELBASE] Import KernelBase from wine-10.0
* [KERNELBASE] Create some cmake files and add stuff into headers
2025-06-01 23:13:41 -07:00
Katayama Hirofumi MZ
1286711ac4 [SDK][CICERO] Replace msctf_undoc.h with msctf_undoc.idl (#8060)
Follow-up of #8057. Generally, the IDL
file is a higher level than the header file.
JIRA issue: CORE-19361
- Modify CMakeLists.txt.
- Add sdk/include/reactos/CMakeLists.txt.
- Add reactos_idls CMake target in
- sdk/include/reactos/CMakeLists.txt
  to process IDL files.
- Add reactos_idls dependency to cicero.
- Delete msctf_undoc.h and add
  msctf_undoc.idl.
2025-06-02 06:53:42 +09:00
Katayama Hirofumi MZ
52ca35327e [MSCTF] Make ITfLangBarMgr C++ (#8056)
Implementing missing features...
JIRA issue: CORE-19361
- Delete langbarmgr.c (C) and add
  langbarmgr.cpp (C++).
- Remove the legacy C
  implementation of ITfLangBarMgr.
- Add CLangBarMgr class.
2025-06-02 05:07:49 +09:00
Whindmar Saksit
ddcd5f7083 [SHELL32] Don't assert on broken ShellExecuteEx error reporting (#8065) 2025-06-01 06:49:38 +02:00
Katayama Hirofumi MZ
54840389ee [NETSHELL] Update Japanese (ja-JP) translation
CORE-18706
2025-06-01 11:36:06 +09:00
Justin Miller
45eff312cb [SDK][XDK][PSDK] Grab header changes needed for Wine-10.0 KernelBase (#8047)
* [SDK] Update ThreadInfoClass to wine-10.0

* [SDK][MODULES] Fix a test and add wine-10 entries to headers

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2025-05-31 17:20:02 -07:00
Eric Kohl
babe6046e5 [DHCPCSVC] Fix exception on service restart
CORE-14390
2025-05-31 16:16:34 +02:00
Timo Kreuzer
87b8c1ee2f [NTDLL_APITEST] Fix build 2025-05-31 13:14:31 +00:00
Katayama Hirofumi MZ
51495b1b75 [KBSWITCH] Refactor on layout numbers (#8052)
We believe the power of simplicity.
JIRA issue: CORE-20142
- Rename g_nCurrentLayoutNum as
  g_iKL for simplicity.
- Make g_iKL zero-based indexing.
- Add ID_LANG_BASE id for language
  menu items and adjust
  ID_EXIT/ID_PREFERENCES values.
- Fix KbSwitch_OnNotifyIconMsg
  function.
2025-05-31 21:17:41 +09:00
Eric Kohl
c187cf8b9e [SERVICES] Add check for valid control codes to RI_ScSendPnPMessage 2025-05-31 14:07:18 +02:00
Timo Kreuzer
001d0051e9 [CRT_APITEST] Fix test failures on Win 2003 x64 2025-05-31 09:57:32 +00:00
Timo Kreuzer
e431470ff9 [REACTOS] Fix build with VS 17.14.2 / CL 19.44.35207.1 2025-05-31 09:51:33 +00:00
Whindmar Saksit
d663eb4466 [SHELL32][CMD][SHLWAPI] Use the openas verb when invoking unknown file types (#7981)
CORE-20184
2025-05-30 18:46:24 +02:00
Katayama Hirofumi MZ
6dd8e04438 [KBSWITCH] Delete vDbgPrintExWithPrefix and link ntdll (#8050)
Reverts 57981ed and later changes.
JIRA issue: N/A
2025-05-30 22:44:16 +09:00
Katayama Hirofumi MZ
e43e639c30 [CICERO] Move sdk/lib/cicero to base/ctf/cicero (#8055)
The CTF modules depend on Cicero
static library. Cicero should be a
component in CTF.
This move will improve code
readability and grep-ability.
JIRA issue: CORE-19361
JIRA issue: CORE-19363
- Move sdk/lib/cicero to base/ctf/cicero.
- Adapt CMakeLists.txt to this move.
- No code content change except
  CMakeLists.txt.
2025-05-30 22:17:09 +09:00
Katayama Hirofumi MZ
543cf1e2fd [SDK] Add ITfRangeAnchor interface to <msctf_undoc.h> (#8057)
This interface is needed for msctf.dll.
JIRA issue: CORE-19361
- Add ITfRangeAnchor interface
  (based on current msctf
  implementation) to
  <msctf_undoc.h>.
2025-05-30 22:15:47 +09:00
Serge Gautherie
bc03c010b3 [WIN32K:DIB] USE_DIBLIB: Use new DIB_16BPP_AlphaBlend() (#4568)
* [WIN32K:DIB] Fix 'DIB_16BPP_AlphaBlend' copypasta in a DPRINT()

Addendum to 684c3d3 (r49275).

* [WIN32K:DIB] USE_DIBLIB: Use new DIB_16BPP_AlphaBlend()

Addendum to 7540c2e (r64953).
2025-05-28 22:06:41 -05:00
Hervé Poussineau
72dcb3a11f [WIN32SS:ENG] Initialize pdo variable before using it 2025-05-28 23:37:28 +02:00
Hervé Poussineau
9f21cc3e98 [WIN32SS:ENG] Do not allocate 0 bytes if no monitor is reported
Addendum to 2f00ca4663
2025-05-28 18:26:23 +02:00
Hervé Poussineau
4534537036 [WIN32SS:USER] Remove useless assignations of pdo variable
Addendum to 30a7d19d84
2025-05-28 18:26:23 +02:00
Katayama Hirofumi MZ
9853f1de67 [KBSWITCH] Make message handlers functions (#8044)
Simplify window procedure management.
JIRA issue: CORE-20142
- Make message handling codes some
  functions (KbSwitch_On...).
2025-05-28 21:45:30 +09:00
Katayama Hirofumi MZ
b4e471c87d [IMM32][SDK] Add install.c and move some code (#8032)
Splitting IME installation code for code readability.
JIRA issue: CORE-19268
- Add win32ss/user/imm32/install.c.
- Move some code to install.c.
- Add SAL annotations. Use debugstr_a/_w macro.
- Modify <imm32_undoc.h>.
- Don't CharUpperW for IME pathname due to
  security reason.
2025-05-28 16:08:51 +09:00
Carl J. Bialorucki
b627a42898 [APPSHIM_APITEST] Fix test for x86 Vista and 7 (#8042)
On x86 builds, accept the sentinel hmodule instead of the 111 hmodule and 0 hmodule for Vista and 7.
2025-05-27 16:11:42 -06:00
Eric Kohl
7015c76c63 [ADVAPI32] Do not call the classic service handler function with an event control code 2025-05-27 23:37:19 +02:00
Katayama Hirofumi MZ
d4c64771cd [CTFMON][MSCTF][MSCTFIME][MSUTB] Move CTF modules to base/ctf (#8040)
This PR reorganizes the location of
the CTF-related modules to improve
grep-ability, understanding, and
readability. New folder base/ctf will
become incomplete Cicero, CTF or
TSF (Text Services Framework).
JIRA issue: CORE-19360
JIRA issue: CORE-19361
JIRA issue: CORE-19363
- Move ctfmon, msctf, msctfime,
  and msutb modules to new
  directory base/ctf.
- Adapt CMakeLists.txt to this move.
- Modify .github/labeler.yml and
  media/doc/WINESYNC.txt.
- No code content changes except
  CMakeLists.txt, .github/labeler.yml,
  and media/doc/WINESYNC.txt.
2025-05-28 05:04:03 +09:00
Hermès Bélusca-Maïto
2a0d98c2bc [DOSKEY][USETUP][KERNEL32][NTVDM][CONSRV][REGEXPL] Fix build (#8019)
Fix build after the move and update of private console API
definitions to wincon_undoc.h
2025-05-27 20:52:20 +02:00
Hermès Bélusca-Maïto
412fe7d9ac [SDK] Improve wincon.h and add wincon_undoc.h (#8019)
- Add missing WINBASEAPI modifiers.
- Update/add missing SAL annotations.
- Add missing function argument names.
- Only keep public definitions there.
- Move private/undocumented ones in a new wincon_undoc.h

This header is based on the following resources:
- https://undoc.airesoft.co.uk/kernel32.dll/
- https://github.com/microsoft/terminal/blob/main/dep/Console/ntcon.h
- https://github.com/microsoft/terminal/blob/main/dep/Console/winconp.h
  (commit f08321a0b2)
2025-05-27 20:52:19 +02:00
Hermès Bélusca-Maïto
228156e79f [SDK][SHELL] Sort out SEE_MASK_* and CMIC_MASK_* defines (#8019)
- Add missing versioning defines for the different SEE_MASK_*
  and CMIC_MASK_* defines.
- Move the five undocumented SEE_MASK_* defines into reactos/undocshell.h
2025-05-27 20:52:19 +02:00
Hermès Bélusca-Maïto
07ab1cc82d [SDK] winuser.h: Add missing Vista+ WinEvent defines (#8019) 2025-05-27 20:52:18 +02:00
Hermès Bélusca-Maïto
6696d40cfc [SDK] Introduce winbase_undoc.h for undocumented exported kernel32 definitions (#8019)
This header is based on the following files from the official
Windows 10.0.10240.0 PSDK, a copy of which can be found at:
- https://github.com/tpn/winsdk-10/blob/master/Include/10.0.10240.0/um/minwin/winbasep.h
- https://github.com/tpn/winsdk-10/blob/master/Include/10.0.10240.0/um/minwin/wbasek.h
2025-05-27 20:52:17 +02:00
Hermès Bélusca-Maïto
4fce13e06b [SDK] winbase.h: Add missing WINADVAPI define (#8019) 2025-05-27 20:52:16 +02:00
Hermès Bélusca-Maïto
2c5bba3c48 [SDK] sdkddkver.h: Add NTDDI_* defines for newest Windows 11 versions (#8019)
And add version descriptions, from https://github.com/MiroKaku/Veil
and cross-checked with BetaWiki ones.
2025-05-27 20:52:15 +02:00
Hermès Bélusca-Maïto
14877a7ec6 [CODEOWNERS] Sort out entries for "Win32 Subsystem" 2025-05-27 20:52:14 +02:00
Hervé Poussineau
30a7d19d84 [WIN32SS:USER] Rework UserEnumDisplayDevices to correctly report monitors
desk.cpl now returns the correct monitor name.
2025-05-27 20:34:37 +02:00
Hervé Poussineau
29b5003455 [VIDEOPRT] Implement IOCTL_VIDEO_ENUM_MONITOR_PDO 2025-05-27 20:34:37 +02:00
Hervé Poussineau
2f00ca4663 [WIN32SS:ENG] Retrieve and store list of associated monitors for each video adapter device 2025-05-27 20:34:37 +02:00
Katayama Hirofumi MZ
17577d2581 [IMM32][SDK] Support ImmIMPQueryIMEA/W and ImmIMPSetIMEA/W (#8033)
Implementing missing features...
These functions are given for IME
program handling.
JIRA issue: CORE-19268
- Implement ImmIMPQueryIMEA
  and ImmIMPQueryIMEW functions.
- Implement ImmIMPSetIMEA and
  ImmIMPSetIMEW functions.
- Add prototypes to <imm32_undoc.h>.
2025-05-27 20:10:25 +09:00
Katayama Hirofumi MZ
3df71d678d [KBSWITCH] Make Alt+Shift working Part 1 (#8039)
Recently language switching (Alt+Shift)
was not working. This PR will fix
Alt+Shift (partially).
JIRA issue: CORE-18546
- Add WH_KEYBOARD_LL hook to
  detect Alt+Shift.
- Add delay to the action after language
  change.
- Increase g_SpecialIds not to be full.
- Delete useless ID_NEXTLAYOUT
  command.
2025-05-27 20:09:03 +09:00
Whindmar Saksit
c03d7794b8 [SHELL32_APITEST] Fixed SimpleIDListFromPath and SHGetFileInfo tests on NT5 (#8038) 2025-05-27 00:10:53 +02:00
Johannes Anderwald
4bdbb3092c [POWERCFG] Add Batteries page
Missing things are:
- "Show details for each battery" doesn't work
- Data are not updated on timer (you need to reopen the window)

Global battery doesn't work, but that's a ntoskrnl bug (CORE-19452)
2025-05-26 21:45:55 +02:00
Hervé Poussineau
f4992a4484 [RTL] Fix prototypes of RtlCreateUserSecurityObject and RtlCreateAndSetSD 2025-05-26 21:29:30 +02:00
Katayama Hirofumi MZ
5af1d7c6b1 [MSCTF][SDK][CTFMON][MSCTFIME][MSUTB] Add msctf.dll stubs (#8026)
Some baby steps to msctf.dll for CTF.
JIRA issue: CORE-19361
- Add all the export functions of msctf.dll.
- Modify msctf.spec.
- Modify sdk/include/psdk/msctf.idl
  and sdk/include/psdk/inputscope.idl.
- Add sdk/include/reactos/msctf_undoc.h.
- Include <msctf_undoc.h> in ctfmon,
  msctfime, and msutb.
2025-05-26 07:22:41 +09:00
Eric Kohl
99e2606982 [DC21x4][ne2000][netkvm][nvnet][pcnet][rtl8139] Implement OID_GEN_PHYSICAL_MEDIUM
CORE-20206
2025-05-25 23:48:38 +02:00
Katayama Hirofumi MZ
3194e0556f [MSCTF] Implement CheckAnchorStore function (#8025)
Implementing missing features...
JIRA issue: CORE-19361
2025-05-26 06:40:22 +09:00
Hervé Poussineau
0743ceefa2 [WIN32SS:ENG] Fix check to enable panning driver
If ldevtype is not LDEV_DEVICE_DISPLAY, pdm is really a PMDEVOBJ structure.
So, we must not read the dmFields value.
2025-05-25 20:24:00 +02:00
Eric Kohl
c699471994 [AUDIOSRV] Register and unregister device notifications 2025-05-25 17:15:23 +02:00
Eric Kohl
16e620d647 [ADVAPI32] Pass PnP data to services on SERVICE_CONTROL_DEVICEEVENT
Services can now receive PnP events.
2025-05-25 14:34:25 +02:00
Katayama Hirofumi MZ
55b6f3455c [CTFMON] Include <ime/indicml.h> and use INDICATOR_CLASS
CORE-19362
2025-05-25 19:48:17 +09:00
Katayama Hirofumi MZ
8a913baed8 [CONSRV] Improve Japanese (ja-JP) translation
CORE-18706
2025-05-25 19:36:12 +09:00
Eric Kohl
a6bdcbc007 [SERVICES] Refactor ScmControlService(Ex) and implement RI_ScSendPnPMessage 2025-05-25 10:34:13 +02:00
Katayama Hirofumi MZ
64fda67763 [KBSWITCH] s/ARRAYSIZE/_countof/
Use standard-ish macro.
CORE-18546
2025-05-25 08:27:13 +09:00
Doug Lyons
284f15be02 [USP10] Fix notepad without word-wrap 'select all' (#8016)
CORE-20176 & CORE-20177
2025-05-24 18:06:35 -05:00
Whindmar Saksit
6bd0ffc494 [SHELL32_APITEST] Fix control panel printers PIDL test (#8022) 2025-05-24 22:08:54 +02:00
Katayama Hirofumi MZ
57981ed025 [KBSWITCH] Unlink ntdll and add vDbgPrintExWithPrefix
CORE-18546
2025-05-24 23:23:22 +09:00
Katayama Hirofumi MZ
2041f3c7a1 [IMM32][GITHUB] Move dll/win32/imm32 to win32ss/user/imm32 (#8024)
imm32 and win32ss have common
interface. This move will improve
grep-ability.
JIRA issue: N/A
- Move dll/win32/imm32 to
  win32ss/user/imm32.
- Adapt CMakeLists.txt to this move.
- No code content change except
  CMakeLists.txt and .github\labeler.yml.
2025-05-24 13:44:47 +09:00
Whindmar Saksit
5299f047e4 [NTUSER][PSDK] Implement Snap DockMoving setting (#8020)
SPI_SETDOCKMOVING allows you to turn off window snapping when moving a window with the mouse. The Win keys can still snap unless you turn everything off with SPI_SETWINARRANGING.
2025-05-23 13:45:25 +02:00
Timo Kreuzer
e326b06983 [KMTEST] Improve MmSection test 2025-05-22 18:39:14 +00:00
Timo Kreuzer
08b6106aac [NTDLL_APITEST] Improve test for NtQuerySection 2025-05-22 18:39:14 +00:00
Timo Kreuzer
f920d349e0 [APITESTS] Improve ok_* macros to avoid format warnings 2025-05-22 18:39:14 +00:00
Timo Kreuzer
4cb4eee23a [E1000] Implement OID_GEN_PHYSICAL_MEDIUM 2025-05-22 18:37:55 +00:00
Katayama Hirofumi MZ
99064a58d9 [KBSWITCH] Enable Wine debug (#8010)
Debug easy and develop easy.
JIRA issue: CORE-18546
- Include <wine/debug.h>.
- Import ntdll and link to wine.
- Enable Wine debug.
2025-05-22 20:08:36 +09:00
Timo Kreuzer
40721f49ba [CRT_APITEST] Reorganize tests
- Move build files and testlist.c into individual modules folder
2025-05-21 14:29:29 +00:00
Timo Kreuzer
99d9e764a2 [CRT_APITEST] Fix GCC format warnings 2025-05-21 14:29:29 +00:00
Katayama Hirofumi MZ
ec5b1422bc [IMM32][SDK] Implement ImmIMPGetIMEA/W (#8011)
Implementing missing features...
JIRA issue: CORE-19268
- Add dll/win32/imm32/imepro.c.
- Move some utils.c code into imepro.c.
- Implement ImmIMPGetIMEA and
  ImmIMPGetIMEW functions there.
- Add prototypes into <imm32_undoc.h>.
- Delete needless code.
2025-05-21 07:16:39 +09:00
Timo Kreuzer
06034b258a [XDK] Some GCC/wine compatibility fixes 2025-05-20 18:13:16 +00:00
Timo Kreuzer
8369c55edb [WINE] wine/asm.h: add missing __ASM_DEFINE_IMPORT 2025-05-20 18:13:16 +00:00
Timo Kreuzer
0453ed98df [WINE] Improve wine/exception.h 2025-05-20 18:13:16 +00:00
Timo Kreuzer
876bba3d07 [PSDK] Add threadpoolapiset.h 2025-05-20 18:13:16 +00:00
Timo Kreuzer
ada4584cb6 [PSDK] make winnt.h compile with rtlsupportapi.h 2025-05-20 18:13:16 +00:00
Timo Kreuzer
61ff0eb940 [PSDK] Import rtlsupportapi.h from wine-10.0 2025-05-20 18:13:16 +00:00
Timo Kreuzer
2f30fda4f9 [VCRUNTIME] emmintrin.h: don expect _STATIC_ASSERT to be defined
Legacy headers, like the Wine msvcrt headers, do not define _STATIC_ASSERT
2025-05-20 18:13:16 +00:00
Timo Kreuzer
eff677ca98 [PSDK] winnls.h: add missing LOCALE_ALLOW_NEUTRAL_NAMES 2025-05-20 18:13:16 +00:00
Timo Kreuzer
95caf762d4 [XDK] Add missing _InlineInterlockedAdd 2025-05-20 18:13:16 +00:00
Timo Kreuzer
281855e88c [KMTEST] Fix MmSection tests 2025-05-20 16:30:06 +00:00
Whindmar Saksit
937954cf6c [BROWSEUI][SHELL32][SHLWAPI][BOOTDATA] Implement and use IRegTreeOptions (#7255) 2025-05-20 16:59:02 +02:00
Eric Kohl
3842b59f75 [TCPIP] Retrieve the interface medium type from NDIS
Send OID_GEN_PHYSICAL_MEDIUM and OID_GEN_MEDIA_SUPPORTED query requests to NDIS.

This will enable us to distinguish wired and wireless ethernet adapters.
2025-05-20 00:47:26 +02:00
Katayama Hirofumi MZ
c876fe350d [IMM32][NTUSER] Strictly check Cicero IME (#8009)
This PR enhances Cicero IME support.
JIRA issue: CORE-19268
- Add null checks for the functions
  of Cicero IMEs in Imm32LoadIME
  function.
- Add and use
  IS_CICERO_COMPAT_DISABLED
  macro in win32ss/include/ntuser.h.
- Fix ImmGetImeInfoEx,
  Imm32LoadImeDpi,
  ImmGetDescriptionA,
  ImmGetDescriptionW,
  ImmGetIMEFileNameA,
  ImmGetIMEFileNameW, and
  ImmGetProperty functions for
  Cicero IME support.
- Set last error in NtUserGetImeInfoEx.
2025-05-20 07:34:46 +09:00
Katayama Hirofumi MZ
7ce90a0399 [IMM32] NotifyIME: Improve debug trace (#8005)
JIRA issue: CORE-19455
- Add some traces for NotifyIME calls.
- Improve Imm32MakeIMENotify trace.
- Make some parameter types of
  Imm32MakeIMENotify function
  DWORD's.
- Fix and improve ERR_PRINTF macro.
2025-05-20 07:30:46 +09:00
Hervé Poussineau
eff61af6df [IPHLPAPI] Call tcpip.sys driver to get IP/TCP/UDP statistics
CORE-19596
2025-05-19 21:07:58 +02:00
Hervé Poussineau
7cc36bd42f [PSDK] Add TCP_MIB_STAT_ID/UDP_MIB_STAT_ID 2025-05-19 21:07:58 +02:00
Eric Kohl
c477928b0e [HIDCLASS] Override hid device capabilities
- Disable the Removable capability
- Enable the SilentInstall and SurpriseRemovalOK capabilities

This keeps the remove device icon from showing in the notification area whenever you plug in a mouse or a keyboard.
2025-05-19 00:29:10 +02:00
Katayama Hirofumi MZ
5d40ec3e8c [IMM32] ImeGetImeMenuItems is optional (#8008)
Supporting old IMEs.
JIRA issue: CORE-19268
Do null check of ImeGetImeMenuItems
function of IME side, in
ImmGetImeMenuItemsAW function.
2025-05-19 06:09:48 +09:00
Timo Kreuzer
eb9c664d7e [KERNEL32_APITEST] Revert manifest architecture changes
While the previous change didn't have any effect on ReactOS, it made the test crash on Windows 2003.
2025-05-18 17:53:12 +00:00
Timo Kreuzer
6b222fb084 [SHELL32_APITEST] Comment out OpenAs_RunDLL test
This test hangs on Windows 2003 and breaks testing on Windows 2003 x64.
2025-05-18 11:54:26 +00:00
Katayama Hirofumi MZ
8029339c49 [IMM32] Fix ImmLocalAlloc usage (#8007)
JIRA issue: CORE-19268
- Replaces LPTR with 0 in two calls
  to ImmLocalAlloc within imemenu.c
  (No need to zero-fill).
2025-05-17 06:35:17 +09:00
Katayama Hirofumi MZ
9e1f2b035f [NTUSER][USER32] Rewrite GetAncestor (#7978)
JIRA issue: N/A
- Set the last error.
- Check message window.
- Modify user32.spec.
2025-05-16 19:41:01 +09:00
Whindmar Saksit
53685ada35 [SHELL32][SHDOCVW] Only forward menu messages to the correct shell extension (#7968)
Folder Marker 1.4 fails if it gets a WM_INITPOPUPMENU it does not expect.

CORE-17811
2025-05-15 12:21:22 +02:00
Katayama Hirofumi MZ
6bfb792439 [IMM32][SDK] Add User32InitializeImmEntryTable to <undocuser.h> (#8006)
Declare function in proper place.
JIRA issue: CORE-19268
- Add User32InitializeImmEntryTable
  prototype to <undocuser.h> and use it.
2025-05-15 15:10:57 +09:00
Katayama Hirofumi MZ
6efbed51ac [BROWSEUI][FORMATTING] Quick Launch: Just formatting (#7998)
JIRA issue: N/A
Just fix indentation and formatting.
2025-05-15 07:57:23 +09:00
Katayama Hirofumi MZ
490f7af4ae [NETAPI32] Revert to Wine module (#8004)
Partially revert #7912.
JIRA issue: CORE-5743
Use wine instead of wine2ros.
2025-05-15 07:43:14 +09:00
Katayama Hirofumi MZ
e2e6fcdb96 [IMM32] Revert to Wine module (#8003)
Partially revert #7912.
JIRA issue: CORE-5743
- Use wine instead of wine2ros.
- Improve Unexpected Condition Checkers.
2025-05-15 07:38:49 +09:00
Doug Lyons
a2dd6efcb4 [COMCTL32] Fix StatusBar left border frame missing (#7979)
Remove flag BF_MIDDLE from DrawEdge function.

CORE-19854
2025-05-14 17:15:16 -05:00
Mohammad Amin Mollazadeh
0fa49018cd [FREELDR] Show a notice message when booting in debug mode (#7967)
Make FreeLoader print a notice message before it passes the control
to the kernel, if kernel-mode debugging is enabled via boot options.

This can be helpful for people who may forget that they're booting
in debug mode (the default boot option also for the bootcd) and they
need to attach a debugger for the boot process to continue.
2025-05-14 22:15:11 +02:00
Timo Kreuzer
947c03e948 [WS2_32][WS2HELP] On Vista+ forward all ws2help to ws2_32 2025-05-14 05:50:59 +00:00
Timo Kreuzer
8df62f2f2c [WS2_32] Add Vista exports 2025-05-14 05:50:59 +00:00
Timo Kreuzer
3a0e02cede [WS2_32] Improve exports
- Add 64 bit exports
- Fix some parameters
- Add stubs file to build
2025-05-14 05:50:59 +00:00
Timo Kreuzer
c47d1ffba6 [WS2_32] Fix export ordering
Put exports with ordinals at the top, sort the rest like on Windows.
2025-05-14 05:50:59 +00:00
Katayama Hirofumi MZ
4f84ffa118 [IMM32][SDK] Support IME menus Part 1 (#7969)
Supporting IME menus will improve
Asian users' usability. IME menu is
used on the IME System Pen icon.
JIRA issue: CORE-20142
- Add dll/win32/imm32/imemenu.c.
- Move some code to imemenu.c.
- Implement IME menu transporting
  correctly by using file mapping and
  serialization.
2025-05-14 11:02:57 +09:00
Katayama Hirofumi MZ
189623614d [ACCESS] Improve Japanese (ja-JP) translation Part 3 (#7997)
Follow-up of #7995.
JIRA issue: CORE-18706
2025-05-14 10:30:27 +09:00
Katayama Hirofumi MZ
626a875de1 [EXPLORER] Improve Japanese (ja-JP) translation (#7996)
JIRA issue: CORE-18706
2025-05-14 10:21:05 +09:00
Katayama Hirofumi MZ
6d1d6a7c51 [ACCESS] Improve Japanese (ja-JP) translation Part 2 (#7995)
Follow-up of #7994.
JIRA issue: CORE-18706
2025-05-14 10:13:19 +09:00
Katayama Hirofumi MZ
6d460b61bf [ACCESS] Improve Japanese (ja-JP) translation (#7994)
JIRA issue: CORE-18706
2025-05-14 10:07:04 +09:00
Katayama Hirofumi MZ
9e3546028d [SHELL32] Improve Japanese (ja-JP) translation (#7993)
JIRA issue: CORE-18706
2025-05-14 09:47:03 +09:00
Katayama Hirofumi MZ
e07cf7f629 [DXDIAG] Improve Japanese (ja-JP) translation (#7992)
JIRA issue: CORE-18706
2025-05-14 09:35:45 +09:00
Katayama Hirofumi MZ
6cca9a9466 [SERVMAN] Improve Japanese (ja-JP) translation (#7991)
JIRA issue: CORE-18706
2025-05-14 09:26:36 +09:00
Katayama Hirofumi MZ
f17f96cb7e [RAPPS] Update Japanese (ja-JP) translation (#7990)
JIRA issue: CORE-18706
2025-05-14 09:22:26 +09:00
Katayama Hirofumi MZ
2766144b8b [FC] Improve Japanese (ja-JP) translation (#7989)
JIRA issue: CORE-18706
2025-05-14 09:04:22 +09:00
Katayama Hirofumi MZ
0c5274549b [REG] Improve Japanese (ja-JP) translation (#7988)
JIRA issue: CORE-18706
2025-05-14 08:49:25 +09:00
Katayama Hirofumi MZ
42b48b7435 [HELP] Improve Japanese (ja-JP) translation (#7987)
JIRA issue: CORE-18706
2025-05-14 08:22:28 +09:00
Katayama Hirofumi MZ
28ff80d3d1 [NETID] Improve Japanese (ja-JP) translation (#7986)
JIRA issue: CORE-18706
2025-05-14 08:16:18 +09:00
Katayama Hirofumi MZ
aa79640218 [DEVMGR] Improve Japanese (ja-JP) translation (#7985)
JIRA issue: CORE-18706
2025-05-14 08:10:41 +09:00
Katayama Hirofumi MZ
4fe1f62ba3 [NETCFGX] Improve Japanese (ja-JP) translation (#7984)
JIRA issue: CORE-18706
2025-05-14 08:01:29 +09:00
Katayama Hirofumi MZ
42da121600 [SYSSETUP] Improve Japanese (ja-JP) translation (#7983)
JIRA issue: CORE-18706
2025-05-14 07:09:41 +09:00
Katayama Hirofumi MZ
99ecbf5e56 [KBSWITCH][SDK] Add indicml.h and change window class (#7970)
Supporting the IME System Pen icon.
JIRA issue: CORE-19268
- Change kbswitch window class to "Indicator"
  from "kbswitcher".
- Add <ime/indicml.h> from DDK.
2025-05-13 07:14:17 +09:00
Hervé Poussineau
49427c48c5 [WIN32SS:USER] If default display driver doesn't work, try with VGA
CORE-7728, CORE-16002, CORE-16009, CORE-19224, CORE-19951
2025-05-12 18:24:58 +02:00
Hervé Poussineau
dca369cf41 [WIN32SS:ENG] Rework EngpUpdateGraphicsDeviceList
- choose VGA adapter outside of driver initialization loop
- choose primary adapter outside of driver initialization loop
- link VGA adapter to primary adapter at the end
- only set DISPLAY_DEVICE_PRIMARY_DEVICE in this function

Also mark VgaSave driver as SystemStart instead of Disabled,
so it is available if main display driver doesn't work.
2025-05-12 18:24:55 +02:00
Katayama Hirofumi MZ
6df1cc63b6 [BROWSEUI] Fix 'bad window handle' on CShellBrowser::RepositionBars (#7980)
Silence "NtUserSetWindowPos bad window
handle!" error at win32k!NtUserSetWindowPos
function when Desktop has started up.
JIRA issue: CORE-19663
Add null check of window handle before
SetWindowPos call in
CShellBrowser::RepositionBars method.
2025-05-12 22:27:52 +09:00
Katayama Hirofumi MZ
d06d9f3e8f [SYSDM] Improve Japanese (ja-JP) translation (#7976)
JIRA issue: CORE-18706
Update dll/cpl/sysdm/lang/ja-JP.rc.
2025-05-11 21:57:55 +09:00
Katayama Hirofumi MZ
6a905ae2e1 [REACTOS] Improve Japanese (ja-JP) translation (#7975)
JIRA issue: CORE-18706
Update base/setup/reactos/lang/ja-JP.rc.
2025-05-11 21:57:07 +09:00
Eric Kohl
d32fd58722 [UMPNPMGR][ADVAPI32][SERVICES] Pass PNP events to the service manager
- umpnpmgr.dll: Call I_ScSendPnPMessage to report pnp events to the service manager.
- adavpi32.dll: Implement I_ScSendPnPMessage which calls the service managers RI_ScSendPnPMessage function.
- services.exe: Add a debug message to RI_ScSendPnPMessage.
2025-05-11 14:25:15 +02:00
Katayama Hirofumi MZ
00b5dc8b49 [BROWSEUI] Quick Launch: Refresh buttons on change notify (#7965)
Respond change notification on Quick Launch.
JIRA issue: CORE-18475
- Subclass CISFBand to handle messages.
- Register change notification.
- Refresh buttons on change notification.
- Use timer to reduce redrawing cost.
2025-05-11 06:04:14 +09:00
Whindmar Saksit
afe29ee7fa [BROWSEUI] Don't remember invoked non-folders in addressbar (#7954)
CORE-20091
2025-05-09 16:19:49 +02:00
Eric Kohl
e0ef51b11e [UMPNPMGR] PNP_RegisterNotification: Validate a service and keep its status handle in the notification entry 2025-05-09 01:00:59 +02:00
Hervé Poussineau
3729b96625 [WIN32SS:ENG] In case of error, display the name of the problematic file 2025-05-08 21:48:14 +02:00
Hervé Poussineau
a8abe1d677 [WIN32SS:ENG] Move debug log to the right place
Display number of prepared modes after preparing them, not at device creation
where this number is always 0.
2025-05-08 21:48:14 +02:00
Hervé Poussineau
a36bf31a0d [VGAMP] Correctly initialize interface before calling VideoPortInitialize 2025-05-08 21:48:14 +02:00
Hermès Bélusca-Maïto
f20efc6007 [INCLUDE][ATL] Fix WM_SETHOTKEY macro wrappers
WM_SETHOTKEY / WM_GETHOTKEY messages encode the hotkey in a different
way than with the WM_HOTKEY message.
For more details, see:
https://learn.microsoft.com/en-us/windows/win32/inputdev/wm-gethotkey
https://learn.microsoft.com/en-us/windows/win32/inputdev/wm-sethotkey

Addendum to commit 6829350af9 (PR #7947)
2025-05-08 18:57:43 +02:00
Eric Kohl
3bb27eb416 [UMPNPMGR] Fix buggy identification of window and service handles 2025-05-07 23:57:09 +02:00
Katayama Hirofumi MZ
0ca6002b4f [GDI32][NTGDI][SDK] Font/Text: Fix SAL2 annotations and const-ness (#7865)
I want to work in correct type info.
JIRA issue: CORE-17684
- Add and fix SAL2 annotations.
- Fix const-ness of function
  parameters.
- Delete needless type casts.
2025-05-06 15:13:04 +09:00
Katayama Hirofumi MZ
530d26a1f4 [NTGDI][NTUSER] Initial support of NtGdiRemoveFontResourceW (#7877)
Enable the users to delete fonts.
JIRA issue: CORE-17684
- Add IntDeleteRegFontEntry helper function.
- Add RegDeleteValueW and RegEnumValueW helper
  functions in win32ss/user/ntuser/misc/registry.c.
- Add some code to IntGdiRemoveFontResourceSingle
  function.
2025-05-06 12:38:54 +09:00
Katayama Hirofumi MZ
2c475add8c [IMM32][NETAPI32][SDK] Reduce Wine dependency (#7912)
Related to #7870. netapi32.dll uses NDK.
So, we have to reduce dependency on Wine.
JIRA issue: CORE-5743
- Introduce wine2ros module in
  sdk/lib/wine2ros/.
- Reduce Wine dependency.
2025-05-06 09:59:47 +09:00
Dmitry Borisov
45b928f8bc [ACPI] Remove section assignment from IOCTL handlers (#7829)
Fix a bug introduced in 5070e8960a.

CORE-17256

- These handlers must be memory resident. Otherwise,
  this would cause a page fault that needs to be resolved.
  Low-level storage drivers could evaluate ACPI control
  methods while the device's IRP queue has been paused.

- Minor code enhancements.
2025-05-05 22:42:11 +02:00
Timo Kreuzer
d1f9e06a4f [REACTOS] Change manifest architecture from "X86"/"" to "*" 2025-05-05 10:02:51 +00:00
Katayama Hirofumi MZ
93e9710caf [CRT_APITEST] Add setjmp testcase (Retry) (#7847)
Splitted from #7839. Improved a little.
JIRA issue: CORE-19265
2025-05-05 12:56:21 +09:00
Katayama Hirofumi MZ
7073bdfead [EXPLORER][SHELL32][SHELL32_APITEST][SDK] AppBar Part 2 (#7946)
Follow-up of #7778.
JIRA issue: CORE-7237
- Rename APPBARDATA3264 structure
  as APPBARDATAINTEROP.
- Fix structures for WoW64.
- Use trace instead of DPRINT1.
- Add CAppBarManager::
  RecomputeAllWorkareas function.
- Fix WM_DISPLAYCHANGE handling
  to re-compute the work areas.
2025-05-05 12:48:02 +09:00
Petru Răzvan
24c2e4433b [NETSHELL] Implement Right click menu (#7959)
This implements the right click menu on the network icon that is in the taskbar.

CORE-9055

Note that Repair isn't implemented and emits a "not implemented" message,
because as far as I see ReactOS has no repair functionality for internet.
2025-05-04 22:41:20 +02:00
Petru Răzvan
986c4778fa [REGEDIT] Fix Incorrect status bar (#7944)
This fixes the incorrect status bar that happens when context menu action is used.

CORE-19524
2025-05-04 22:38:21 +02:00
Mohammad Amin Mollazadeh
2e7cfa0400 [WINESYNC][COMCTL32] Move caret to the end on "select all" (#7939)
CORE-19903

comctl32/edit: Scroll caret on Ctrl+A.

wine commit id e71087cd39 by Vladislav Timonin <timoninvlad@yandex.ru>
2025-05-04 22:32:56 +02:00
Petru Răzvan
2aa6fc1c7f [WORDPAD] Fix garbage in "Get Text" dialog (#7922)
This fixes the garbage in the "Get Text" dialog which occurs if there is no text input
and one clicks on "Get Text" under Extras.

CORE-19868
Reported to Wine: https://bugs.winehq.org/show_bug.cgi?id=58144
2025-05-04 22:28:32 +02:00
Eric Kohl
7c8a8400e0 [SDK][LSASRV][SETUPAPI] Move undocumented service manager functions into a new header file 2025-05-04 20:15:48 +02:00
Hermès Bélusca-Maïto
fad52db479 [EVENTVWR] Add missing output buffer size parameters to some routines.
Fix also some bugs encountered while testing.
2025-05-04 17:54:28 +02:00
Marcin Jabłoński
39ce22150a [DESK][SHELL32] Remove desk.cpl hacks for argument parsing (#7934)
Remove argument parsing hacks from desk.cpl that were originally introduced to
make it work with the previous broken implementation of `Control_RunDLLW`.

CORE-20076

- Remove argument parsing hacks from desk.cpl;
- Fix some issues with space separated string parsing in `Control_RunDLL`;
- Windows seems to allow invalid dialog-box names if there is only one dialog-box.
2025-05-04 17:47:28 +02:00
Eric Kohl
9638666d84 [MOUCLASS] Only set the device interface state if we have an interface name 2025-05-04 17:28:37 +02:00
Eric Kohl
5414600e1e [KBDCLASS] Set the device interface state on device start and device remove 2025-05-04 17:27:23 +02:00
Mohammad Amin Mollazadeh
cc16769179 [SHELL32] Fix focus glitch when hovering separators with submenu open (#7932)
CORE-20124

Since `TB_HITTEST` returns negative numbers for ID for separator menu items [^1],
shell menu assumes mouse moved outside of the menu popup, highlighting the menu
item for currently open submenu.
To fix this behavior, we can detect separators in `CMenuFocusManager::ProcessMouseMove`
and negate the ID returned by `TB_HITTEST` to make it a positive number again,
so the shell menu wouldn't glitch.

[^1]: https://learn.microsoft.com/en-us/windows/win32/controls/tb-hittest
2025-05-04 17:11:44 +02:00
Mohammad Amin Mollazadeh
3e342246d4 [WINESYNC][COMCTL32] Fix large height for ComboBox when CBS_NOINTEGRALHEIGHT is specified (#7940)
CORE-19833

wine commit id d551564f1b by Orin Varley <ovarley@codeweavers.com>

comctl32: Make CBS_NOINTEGRALHEIGHT only set minimum combobox height.

When the combobox height is to be set by the application (as the CBS_NOINTEGRALHEIGHT style is on),
and when a large size is specified but only a small number of items in the list, the height of the
combobox should be set by the number of items rather than the size specified to avoid empty lines.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57360
2025-05-04 16:59:54 +02:00
Timo Kreuzer
946f17e93d [NTOS] Fix x64 definition of MMPFN
Adjust the definition of COLORED_LIST_HEAD to always match the new MI_PTE_FRAME_BITS define.
2025-05-04 07:28:41 +00:00
Timo Kreuzer
fb8e6124e0 [NDK][XDK] Update definition of KUSER_SHARED_DATA with tests 2025-05-04 07:24:40 +00:00
Mohammad Amin Mollazadeh
21d3e290b7 [WINESYNC][COMCTL32] Don't delete font when destroying the control (#7941)
The font object `infoPtr->Font` is not owned by the `syslink` control, therefore freeing it would make the whole system use a different font. The fix provided by Wine removes the code that deletes this font object.

Imports Wine commit 480598680c

Fixes deleting system font object when destroying syslink. CORE-20127
2025-05-04 02:14:24 +03:00
Tim Abdiukov
a9ba54f678 [DWNL] Improve user experience and fix progress output (#7903)
- `CBindStatusCallback_UpdateProgress`:
  * Rework the failsafe check to enable percentage to be at 100%.
  * More thorough failsafe check, to avoid displaying 100% (or even 101%) where the actual and expected file sizes don't match.
- `case BINDSTATUS_ENDDOWNLOADDATA`: Do update the progress one last time to be at 100%, on download success.
2025-05-03 23:42:36 +02:00
Hermès Bélusca-Maïto
e6f5065f32 [EVENTVWR] Rewrite the way data is copied into the clipboard
CORE-20023

- Besides copying the event information, copy also its formatted data.

- Update translations with new IDS_COPY* strings.

- Eliminate all statically-sized temporary buffers, in favour of
  carefully calculating the size, and allocating an adequately
  sized buffer to hold the data to be copied.

- By default, the "title" and event info on the single-line fields,
  are separated with TABs (to facilitate data import in spreadsheets).
  Add a mode where, when the user presses the SHIFT key while clicking
  on the "Copy" button, the separation is instead done with space
  padding, to be able to prettify information display when copying
  into text files instead.
2025-05-03 17:15:29 +02:00
Hermès Bélusca-Maïto
85a69768d0 [EVENTVWR] DisplayEvent(): Avoid using multiple large statically-sized buffers
CORE-20023

And use a loop to fill the individual event item fields,
instead of repeating the same code over and over.
2025-05-03 17:15:18 +02:00
Whindmar Saksit
6829350af9 [SHELL32][NTUSER] Implement the SEE_MASK_HOTKEY/ICON/HMONITOR flags (#7947) 2025-05-03 16:08:58 +02:00
Timo Kreuzer
102c1db735 [NTDLL_APITEST] Fix x64 MSVC warnings 2025-05-03 08:01:03 +00:00
Timo Kreuzer
7af8ab2470 [NTDLL_APITEST] Add a test for NtQuerySection 2025-05-03 08:01:03 +00:00
Timo Kreuzer
4cee67df3f [CMAKE] Fix TREAT_ALL_WARNINGS_AS_ERRORS 2025-05-03 08:00:44 +00:00
Timo Kreuzer
2d57c60148 [WINMM] Silence MSVC warning about unary minus operator
mci.c(1012): warning C4146: unary minus operator applied to unsigned type, result still unsigned
2025-05-03 08:00:44 +00:00
Timo Kreuzer
edc8eb63c4 [RICHED20] Fix array bounds overflow
editor.c(4518): warning C4045: 'text': array bounds overflow
2025-05-03 08:00:44 +00:00
Timo Kreuzer
9bfa6b51be [BROWSEUI] Fix MSVC warning about unary minus operator
basebarsite.cpp(536): warning C4146: unary minus operator applied to unsigned type, result still unsigned
2025-05-03 08:00:44 +00:00
Doug Lyons
e98bba2535 [NTGDI:FREETYPE] Fix Fonts broken by opening VLC About (Retry of PR #4579) (#7952)
* Check is FontGDI->OriginalWeight > FontGDI->RequestWeight and if so, then return original weight.
* Do not handle FontGDI->OriginalWeight as a boolean. Use 'FontGDI->OriginalWeight = FW_DONTCARE;'.

CORE-17011
2025-05-01 17:44:10 -05:00
Whindmar Saksit
bbd6a57c0f [MSGINA][LSASRV] Support LSA secret DefaultPassword in autologon (#7936) 2025-05-01 17:51:42 +02:00
Stanislav Motylkov
21810f11e4 [REGEDIT] Update Russian (ru-RU) translation
Addendum to eb91f91569. CORE-19886
2025-05-01 16:36:11 +03:00
Marcin Jabłoński
b79a0447b9 [REGEDIT] Update Polish (pl-PL) translation (#7949)
Addendum to eb91f91569. CORE-19886
2025-05-01 16:26:33 +03:00
Katayama Hirofumi MZ
d722e70817 [SDK][USER32] Implement WM_IME_SYSTEM.IMS_SOFTKBDONOFF (#7950)
Supporting soft keyboard will improve IME
usability.
JIRA issue: CORE-19268
- Define IMS_SOFTKBDONOFF constant as
  0x13 in <immdev.h>.
- Implement
  WM_IME_SYSTEM.IMS_SOFTKBDONOFF
  message handling in ImeWnd_OnImeSystem.
2025-05-01 11:20:18 +09:00
Katayama Hirofumi MZ
e40e5f572f Revert "[COMCTL32] Pager: Fix PGM_RECALCSIZE behaviour (#7875)" (#7910)
Reverts #7875.
JIRA issue: CORE-20121
2025-04-30 20:38:22 +09:00
Katayama Hirofumi MZ
b33127f494 Revert "[CURSOR] Add Cursor AI project settings (#7752)" (#7913)
Reverts #7752
JIRA issue: CORE-20011
2025-04-30 20:36:41 +09:00
Whindmar Saksit
ba6760683b [SHELL32] Handle sort order in RegItems (#7906)
* [SHELL32] Handle sort order in RegItems

This makes the TweakUI "First icon on desktop" setting work correctly.
2025-04-30 13:31:58 +02:00
Hermès Bélusca-Maïto
b1cf981c52 [PSDK] Add missing hMonitor member in union with hIcon in SHELLEXECUTEINFOA/W
As documented in the official MS PSDK and MSDN.
2025-04-29 16:25:23 +02:00
Whindmar Saksit
37e2c59096 [RAPPS] Add ExeInZip installer type to support running installers in zip files (#7866) 2025-04-29 15:39:22 +02:00
Leon Frommholz
eb91f91569 [REGEDIT] Add missing status text for "New" elements (#7927)
Add missing status text for the "Multi-String Value" and
"Expandable String Value" in the "New" menu of the registry editor
for the English and German languages.

CORE-19886
2025-04-29 13:10:26 +03:00
Mohammad Amin Mollazadeh
be87e0099f [SHELL32] Return correct CSIDL for "Network Connections" menu item (#7938)
Fixes erroneous addition of "Properties" item into its context menu.

- Addendum to 0241b5c4e9 and 5aaead3fdb. CORE-20152
- Also remove FIXME for CORE-19477 which is fixed now. CORE-20151
2025-04-28 22:44:58 +03:00
Eric Kohl
dbc0c37750 [UMPNPMGR] Typo: Handle device interface removal events properly 2025-04-28 21:16:05 +02:00
Eric Kohl
bfa63932ce [MOUCLASS] Activate and deactivate the device interface for mouse devices 2025-04-28 21:14:20 +02:00
Hermès Bélusca-Maïto
5456e195db [EVENTVWR] Improve _some_ translations
- Add accelerators to the IDD_EVENTDETAILS_CTRL controls, in _some_
  translations but NOT all. Anyone is welcome to add the missing ones
  in the translations to their own language!

- Fix "Data" static text tab-ordering. It should be just before the
  IDC_EVENTDATAEDIT control, so that when pressing its accelerator,
  focus is given to the edit control and NOT on the Bytes/Words buttons.

- Change IDC_WORDRADIO -> IDC_WORDSRADIO
2025-04-28 18:02:45 +02:00
Hermès Bélusca-Maïto
87eac43fb9 [EVENTVWR] Improve details controls transition when updating events list
CORE-20021, CORE-20023, CORE-20037

Complements commits 1786a68256 (#7757) and d1aa59982d (#7921)

- When starting eventvwr, the details buttons are disabled and the fields
  are empty.

- During events enumeration, i.e. when refreshing the events list, the
  Previous/Next navigation arrow buttons are disabled. They get re-enabled
  once enumeration is done. No default event item is auto-selected at first.

- When the user selects an item, the details fields are filled (and the
  Copy button is enabled; the Byte/Word mode buttons are enabled only if
  the selected event has associated data).

- When changing the current filter via the TreeView, the events list is
  refreshed, but also the event details fields are emptied and buttons
  are disabled. The navigation arrows are re-enabled once enumeration is
  finished, but the details fields remain empty until an event is selected.

- Pressing the Previous/Next buttons just after the events list refresh
  (when no item is selected), automatically selects respectively the
  last/the first event in the list.
  The rationale for this behaviour is the following: in this situation,
  no item is selected, so it is as if the "current" item is at the same
  time, at the top and at the end (i.e. at the borders) of the list.

- Temporary HACK: When disabling the navigation arrows, this is usually
  because the events list is being refreshed, so we loose access to the
  event's data and we cannot use the bytes/words mode buttons anymore.
2025-04-28 17:53:16 +02:00
Hermès Bélusca-Maïto
fe6de816d6 [EVENTVWR] Update French (fr-FR) translation 2025-04-28 13:19:16 +02:00
Katayama Hirofumi MZ
f19c62c80e [EXPLORER][SHELL32][SHELL32_APITEST][SDK] AppBar: Initial support (#7778)
Supporting AppBars.
JIRA issue: CORE-7237
- Rewrite shell32!SHAppBarMessage
  function.
- Introduce CAppBarManager class in
  base/shell/explorer/appbar.cpp.
- Add support of ABM_NEW,
  ABM_REMOVE, ABM_QUERYPOS,
  and ABM_SETPOS messages for
  AppBar in Tray Window.
2025-04-28 19:08:13 +09:00
Whindmar Saksit
378a335468 [SHELL32] Don't pass menu band hwnd to InvokeCommand (#7945)
The menu band window is about to go away, don't pass it to InvokeCommand because it's invalid as an owner window for any dialogs the callee might display.
2025-04-28 00:24:15 +02:00
Hervé Poussineau
9b70d4380c [FREELDR] Allow empty RDPATH parameter
In that case, read the whole partition/disk, instead of the selected file.

CORE-14603
2025-04-27 23:49:21 +02:00
Dmitry Borisov
c27a2fc7cb [XDK] Add missing PCI subclass type definition for AHCI controllers (#7931)
Split out of #6577. CORE-17256
2025-04-27 23:04:41 +03:00
Eric Kohl
f8efb5d474 [UMPNPMGR] Report device interface arrivals and removals to registered windows
- Other event types are not supported yet.
- Services notification is not supported yet.
2025-04-27 17:09:50 +02:00
Petru Răzvan
d1aa59982d [EVENTVWR] Fix "Bytes" and "Word" buttons enabled with empty entry (#7921)
CORE-20037
2025-04-27 16:31:25 +02:00
Whindmar Saksit
a6558c0562 [EXPLORER] Implement ClearRecentDocsOnExit setting (#7935) 2025-04-27 01:28:37 +02:00
Whindmar Saksit
bd2d3b8603 [SHELL32] Don't set a desktop.ini folder icon on WinDir and System32 (#7933)
wine 332b90c0064563a9e4f67fb2d9b26a940e5e745c removed the whole icon member on their side.

CORE-19037
2025-04-27 01:06:32 +02:00
Petru Răzvan
0a6bcfc9ff [CHARMAP] Fix status bar not being refreshed (#7924)
Ensure SetCaretXY() is called when the charset is changed,
or a new font is being set.

CORE-19838
2025-04-26 22:42:46 +03:00
Whindmar Saksit
8b6907f2a6 [EXPLORER] Implement NoWinKeys and HideClock restrictions (#7926) 2025-04-25 13:51:26 +02:00
Doug Lyons
85afe48c3e [GDI32] Fix MSVC warning in SetDIBitsToDevice and simplify code. (#7919)
This is a very small revert of PR #5227 to simplify the code and eliminate an MSVC warning.
It was pointed out by Timo Kreuzer as probably not doing what I intended and he was correct.
I added this code in PR #5227 to try and correct some return values from SetDIBitsToDevice.
After testing with this new PR, there was no difference in the regression tests for either
1) gdi32:bitmap or 2) gdi32:SetDIBitsToDevice after deleting the code here and the MSVC warning was fixed.
2025-04-24 21:04:36 -05:00
Whindmar Saksit
efbdd483b3 [SHELL32] Allow .Lnk properties dialog to change icon for non-FS targets (#7911)
CORE-19971
2025-04-24 21:30:27 +02:00
Whindmar Saksit
7eb8535edf [STOBJECT][NTUSER][ACCESS] Don't use a systray timer when not needed (#7917) 2025-04-24 21:27:36 +02:00
Whindmar Saksit
78e04c07b8 [USER32] Read the CoolSwitch settings from the registry (#7920) 2025-04-24 15:22:43 +02:00
Timo Kreuzer
e452980e0e [HALX86/APIC] Change IRQL for x86 profile interrupt to HIGH_LEVEL
While PROFILE_LEVEL is defined as 27 on x86, this does not match the vector for the profiling interrupt, which is 0xFD (see https://community.osr.com/t/odd-ioapic-output/45216), implying IRQL 31.
Fixes boot with x86 APIC hal (CORE-20093)
2025-04-24 11:36:12 +00:00
Timo Kreuzer
35fd771c84 [HALX86/APIC] Read APIC Id from APIC instead of using initial Id
This is needed on some hardware systems, where the BIOS has modified the actual APIC IDs.
The timer interrupt already did this, but in a broken way.
2025-04-24 11:36:12 +00:00
Timo Kreuzer
faaac75546 [HALX86/APIC] Use physical addressing in HalEnableSystemInterrupt 2025-04-24 11:36:12 +00:00
Timo Kreuzer
f1f01771b6 [HALX86/APIC] Set timer interrupt to level triggered 2025-04-24 11:36:12 +00:00
Timo Kreuzer
884f73fb04 [HALX86/APIC] Fix interrupt delivery on bare metal
Write both high and low 32 bits of ICR in ApicRequestSelfInterrupt. In VMs we get away with only writing the low 32 bits, but actual hardware doesn't always accept that.
2025-04-24 11:36:12 +00:00
Timo Kreuzer
0f6e982ad7 [HALX86/APIC] Mask profiling interrupt on init 2025-04-24 11:36:12 +00:00
Timo Kreuzer
2c057d9bc1 [HALX86] Set the NMI disable flag when accessing CMOS registers
An NMI while accessing the CMOS can leave it in an undefined state. NMIs are used on x64 SMP for CPU freeze in the debugger.
2025-04-24 11:36:12 +00:00
Katayama Hirofumi MZ
94fc56c038 [COMCTL32][USER32] Edit: Don't unlock if unlocked on EM_SETHANDLE (#7886)
JIRA issue: CORE-18944
EDIT_EM_GetHandle unlocks the handle,
so the next EM_SETHANDLE handler
shouldn't unlock the unlocked text.
Don't unlock the handle when es->text
was NULL on EM_SETHANDLE
message handling.
2025-04-24 19:21:22 +09:00
Mohammad Amin Mollazadeh
860262952d [SHELL32] Fix Deselect highlighted item in shell menus on close (#7904)
CORE-18855

Add a call to _ChangeHotItem(NULL, -1, 0) in CMenuBand::OnSelect(MPOS_CANCELLEVEL) which causes to deselect currently selected item the moment the menu bands (including start menu) are closing.
Start Menu is not destroyed when it's closed so its allocated resources can be re-used next time user wants to open it, so to keep this behavior and still not having an item selected every time you open the start menu, you have to deselect the currently selected item.
2025-04-23 23:10:08 +02:00
Whindmar Saksit
fcc2247774 [BROWSEUI] Use the last id for custom find files menu item (#7918) 2025-04-23 18:57:24 +02:00
Whindmar Saksit
6faee56f86 [DESK] Preview the color on the background color button (#7916)
Note: A bug in the classic button prevents it from sending CDDS_POSTPAINT if the button has no text, the button resource has a space in its text as a workaround.
2025-04-23 18:32:45 +02:00
Whindmar Saksit
d3456f5060 [SHELL32] Implement IShellFolder2::GetDetailsEx (#7880) 2025-04-21 23:21:44 +02:00
Marcin Jabłoński
4cbd5d1b44 [TASKMGR] Distinguish WOW64 processes with a " *32" in the image name (#7915) 2025-04-21 23:17:19 +02:00
Whindmar Saksit
73b019a390 [SHELL32] Respect the REST_NODRIVES restriction (#7907)
This is the "My Computer => Drives" setting in TweakUI.
2025-04-21 23:16:59 +02:00
Whindmar Saksit
fb6191b71a [SHELL32] Respect StrCmpLogicalW policy in shell folders (#7900) 2025-04-21 23:06:47 +02:00
Eric Kohl
4514e748f0 [DHCPCSVC] Implement DhcpAcquireParameters and DhcpReleaseParameters
TODO: The AdapterName parameter should be a unicode string. Fix this later.
2025-04-21 14:45:51 +02:00
Hermès Bélusca-Maïto
f135cab83e [SETUPLIB] Add a setuplib_static library, used for the dll and the unit-tests.
Since the setuplib.dll isn't available after installing ReactOS, build
instead a static library that is then used for the dll, and linked into
the setuplib_unittest, so that it can be run in our test-suite.

Addendum to commit d7c1d220.
2025-04-20 19:18:28 +02:00
Eric Kohl
2c2cdfddd3 [DHCPCSVC] Move the public header rosdhcp_public.h
This header is not to be used outside of dhcpcsvc because it contains the data structures for the communication between the client and the server part within dhcpcsvc. That is why it is moved inside of dhcpcsvc and renamed to rosdhcp_pipe.h.
2025-04-19 22:55:52 +02:00
Hermès Bélusca-Maïto
d489f1a170 [NTOS:KD] Supplement minimal handling in KdSend/ReceivePacket when no kernel debugger is present.
CORE-20107

Improve the minimal handling done in the fall-back KdSend/ReceivePacket()
routines when they are invoked by KD64 (in Release build).

Part of my `kdbg_tests_kdio_split` branch for splitting kd/kdio.c
into a separate KD dll.

KdSendPacket:
- Silently ignore PACKET_TYPE_KD_STATE_CHANGE32/64 DbgKdLoadSymbolsStateChange notification.
- Partially manage and log the unhandled PACKET_TYPE_KD_STATE_CHANGE DbgKdExceptionStateChange notification.
- Log other unhandled PACKET_TYPE_KD_STATE_CHANGE32/64 and PACKET_TYPE_KD_STATE_MANIPULATE notifications.

When KdSendPacket receives the DbgKdExceptionStateChange notification,
it cannot handle it (no debugger is there!). However, we need to claim
the debugger to be present, so that its KD64 caller: KdpSendWaitContinue(),
can call back KdReceivePacket(PACKET_TYPE_KD_STATE_MANIPULATE), which,
in turn, informs KD that the exception cannot be handled, by returning
a failure code in the ManipulateState's ContinueStatus.

During bugchecks, this allows KiBugCheckDebugBreak() to not loop infinitely,
but instead fall back into calling HalHaltSystem() to halt the computer.
2025-04-19 20:01:10 +02:00
Serge Gautherie
0e21c6f3fd [NTOS:KD] Accept some packet types without KDBG (#7892)
When KDBG isn't included in the kernel (Release build), the fall-back
KdSend/ReceivePacket() routines are invoked by KD64. A minimal handling
of the basic packets needs to be done:
PACKET_TYPE_KD_STATE_CHANGE32/64 for KdSendPacket(),
and PACKET_TYPE_KD_POLL_BREAKIN, PACKET_TYPE_KD_STATE_MANIPULATE
for KdReceivePacket().

Addendum to commit 2046a17ef4
CORE-20107
2025-04-19 20:01:09 +02:00
Hermès Bélusca-Maïto
005f75bd61 [RTL] x64/ARM: Alias RtlpBreakWithStatusInstruction to DbgBreakPointWithStatus; x64: fix a bug.
RtlpBreakWithStatusInstruction is just a label for KD.

On machines that have register calling conventions (basically all except
x86), the `Status` parameter for `DbgBreakPointWithStatus` is stored in
the first argument register.

https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-dbgbreakpointwithstatus

On the x64 platform, `DbgBreakPointWithStatus` only uses the ECX register
and leaves EAX untouched. Verified on Windows.
2025-04-19 20:01:08 +02:00
Hermès Bélusca-Maïto
a7d86fe3a7 [NTOS][RTL] Remove unused deprecated ReactOS-only DbgBreakPointNoBugCheck()
This helper was introduced in commit b041530f2d (r8551), and its
last remaining usage removed in commit f038f4a895 (r23636).
2025-04-19 20:01:06 +02:00
Whindmar Saksit
b42b015cc6 [SHELL32] Enable OK Run dialog button on combo change (#7909)
CORE-20125
2025-04-19 14:18:08 +02:00
Eric Kohl
2fe3073697 [DHCPCSVC] Remove the now obsolete function DhcpRosGetAdapterInfo 2025-04-19 11:42:09 +02:00
Eric Kohl
3fe4b41f20 [IPHLPAPI] Retrieve DHCP information from the registry 2025-04-18 19:52:23 +02:00
Doug Lyons
fa7890f39d [SERVMAN] Services Properties 'Dependencies' tab missing text above lower listbox (#7899)
- Add some missing 'colons' to descriptive text above upper listbox.
CORE-20115
2025-04-18 12:45:48 -05:00
Timo Kreuzer
aa60e56199 [NTOS] Fix MSVC warnings
Be strict about string length to prevent overflows.
2025-04-18 17:28:49 +00:00
Eric Kohl
aa6c33b21c [DHCPCSVC] Set more registry values when an ip address has been provided
Set the DhcpServer, LeaseObtainedTime and LeaseTerminatesTime values.
2025-04-18 19:26:23 +02:00
Whindmar Saksit
5a10ec60be [EXPLORER][BROWSEUI][SHLWAPI][BOOTDATA][WIN32K] Support AppKeys and more WM_APPCOMMANDs (#7879)
Implements a couple of extra commands in IShellBrowser and adds support for the AppKeys fallback registry key (used when the foreground application does not handle the command).
2025-04-18 18:35:30 +02:00
Timo Kreuzer
2e85425c53 [NTOS:MM] Remove one more instance of MmLocateMemoryAreaByAddress 2025-04-17 22:22:08 +00:00
Timo Kreuzer
0e58b59794 [NTOS:MM] Get rid of more calls to MmLocateMemoryAreaByAddress 2025-04-17 22:22:08 +00:00
Timo Kreuzer
1f27911997 [NTOS:MM] Reduce the magnitude of the MiRosProtectVirtualMemory hack 2025-04-17 22:22:08 +00:00
Timo Kreuzer
f60128b69d [NTOS:MM] Remove usage of memory area in MiProtectVirtualMemory 2025-04-17 22:22:08 +00:00
Timo Kreuzer
edecbf4799 [NTOS:MM] Remove usage of memory area in MiUnmapViewOfSection 2025-04-17 22:22:08 +00:00
Timo Kreuzer
a8f4a76c7b [NTOS:MM] Improve MiDeleteVirtualAddresses
- Fix parameter annotations
- Add an ASSERT
2025-04-17 22:22:08 +00:00
Timo Kreuzer
8851d86847 [NTOS:MM] Remove Vad pointer from MEMORY_AREA 2025-04-17 22:22:08 +00:00
Timo Kreuzer
7611e49b9d [NTOS:MM] Use StartingVpn instead of Vad member to check for user/kernel 2025-04-17 22:22:08 +00:00
Timo Kreuzer
7ec2e1cd2f [NTOS:MM] Stop inserting fake MEMORY_AREAs for ARM³ VADs
They were introduced when MEMROY_AREAs and VAD still lived in different tables to synchronize between them. Since some time MEMORY_AREAs are special VADs and live in the same table as ARM³ VADs, but with flags to distinguish them. Since then the only reason that the fake MEMORY_AREAs still existed was to determine whether a VAD that is a MEMORY_AREA is still handled by ARM³ (which is the case for some kernel VADs, like for paged pool). This is no longer required as it is now determined by a 2nd flag in the VAD itself.
Additionally, we tried to insert the fake MEMORY_AREAs into the VAD table, which would fail, because it was already occupied by the ARM³ VAD, but the failure was ignored.
2025-04-17 22:22:08 +00:00
Timo Kreuzer
2696f1a29f [NTOS:MM] Do not update ARM³ owned memory area
Those are not inserted into a table and we don't use them.
2025-04-17 22:22:08 +00:00
Timo Kreuzer
ec45b8fde8 [NTOS:MM] Stop using memory areas in MmAccessFault
- Implement MiLocateVad and make MiLocateAddress call it
- Use MiLocateVad in MmAccessFault to get the VAD
- Check VadFlags for whether this is an ARM³ VAD/MEMORY_AREA
2025-04-17 22:22:08 +00:00
Timo Kreuzer
fca88bb94d [NTOS:MM] Add more checks for MEMORY_AREA_OWNED_BY_ARM3 2025-04-17 22:22:08 +00:00
Timo Kreuzer
d0a7e496aa [NTOS:MM] Mark RosMm memory areas
This is to distinguish them from ARM³ memory areas, which we use for some kernel regions, like paged pool.
2025-04-17 22:22:08 +00:00
Timo Kreuzer
42c7e4f66a [NTOS:MM] Add macros to determine whether a VAD is a MEMORY_AREA 2025-04-17 22:22:08 +00:00
Timo Kreuzer
d27f5971c5 [NTOS:MM] Add MmIsAddressRangeFree helper function
Use this instead of MmLocateMemoryAreaByRegion to determine whether we can inert a section at the requested base address. This will be required to get rid of fake memory areas allocated for each ARM³ VAD.
2025-04-17 22:22:08 +00:00
Timo Kreuzer
48027a8058 [NTOS:MM] Remove obsolete code path
In MmCleanProcessAddressSpace we already delete VADs that are RosMm memory areas by calling MiRosCleanupMemoryArea, so we never reach the later check. This code path is from a time when VADs and memory areas lived in different tables, which is no longer the case.
2025-04-17 22:22:08 +00:00
Timo Kreuzer
7b23673851 [NTOS:MM] Forward MmLocateMemoryAreaByAddress to MmLocateMemoryAreaByRegion
Both functions do exactly the same.
2025-04-17 22:22:08 +00:00
Timo Kreuzer
31a693a035 [NTOS:MM] Remove some obsolete declarations 2025-04-17 22:22:08 +00:00
Katayama Hirofumi MZ
67e5343daf [IMM32] Make IMM32 non-Wine module (#7890)
Related to #7870. IMM32 uses NDK.
So, we have to remove Wine
dependency.
JIRA issue: CORE-5743
- Add dll/win32/imm32/debug.h.
- Remove Wine dependency.
- Update the documentation
  (media/doc/WINESYNC.txt).
2025-04-17 22:50:22 +09:00
Adam Słaboń
016c5fd083 [KERNEL32] RemoveDirectoryW: Fix the code for removing a mounted folder (#7897)
- Fix the crash due to copying the memory to wrong destination buffer.
- Fix the check for trailing backlash on path string.
2025-04-17 15:49:38 +02:00
Adam Słaboń
3d9b919814 [MOUNTMGR] Few fixes and improvements (#7896)
- `MountMgrVolumeMountPointChanged()`: Set status code in all failure
  paths and correct the check for remote or removable media.
- `DeleteRemoteDatabaseEntry()`: Do not allow the database with size of zero.
- `QueryVolumeName()`: Use reparse point file reference when no file name is supplied.
2025-04-17 15:26:58 +02:00
Adam Słaboń
26e0a5472f [NDK] Add definitions for system partition and disk information classes (#7895)
Add definitions for SystemSystemPartitionInformation and SystemSystemDiskInformation classes.
2025-04-17 13:57:19 +02:00
Petru Răzvan
7026466324 [USRMGR] Implement "Require user name and password on system startup." (#7887)
This implements the tickbox along with the associated code required for it to work.

CORE-11371
2025-04-17 13:55:31 +02:00
Curtis Wilson
be56c5c328 [TRACERT] Improve command line parsing (#7779)
- Added bounds check for -w and -h options to prevent the program from crashing.
- Added argument checks for -w and -h to make sure values were of the correct type and within range.
- Added check to see if a host was specified.
- Added new resource strings for reporting errors related to the checks above.
- Added the slash character as an additional option to specify command options.
2025-04-17 13:53:43 +02:00
1536 changed files with 156709 additions and 31217 deletions

View File

@@ -1,19 +0,0 @@
{
"indentation": {
"type": "spaces",
"size": 4
},
"lineLength": 100,
"braceStyle": "allman",
"namingConventions": {
"functions": {
"public": "PascalCase",
"private": "_PascalCase"
},
"variables": {
"local": "camelCase",
"global": "PascalCase",
"constants": "UPPER_CASE"
}
}
}

View File

@@ -1,52 +0,0 @@
{
"editor": {
"defaultFormatter": null
},
"[c,cpp]": {
"editor": {
"tabSize": 4,
"insertSpaces": true,
"detectIndentation": false,
"trimAutoWhitespace": true,
"formatOnSave": false,
"formatOnType": true,
"defaultFormatter": "clang-format",
"rulers": [100],
"wordWrap": "off"
}
},
"files": {
"associations": {
"*.c": "c",
"*.h": "c",
"*.cpp": "cpp",
"*.hpp": "cpp"
},
"encoding": "utf8",
"trimTrailingWhitespace": true,
"insertFinalNewline": true,
"exclude": {
"**/.git": true,
"compile_commands.json": true,
"output-*": true,
"modules/optional": true,
"modules/3rdparty": true,
"modules/bootcd_extras": true,
"modules/livecd_extras": true,
"modules/hybridcd_extras": true,
"modules/[Aa][Hh][Kk]_[Tt]ests": true,
".cache": true,
".cproject": true,
".DS_Store": true,
".project": true,
".settings": true,
".vscode": true,
"sdk/tools/winesync/winesync.cfg": true,
"**/build": true,
"**/obj": true,
"**/bin": true,
"**/*.o": true,
"**/*.obj": true
}
}
}

View File

@@ -1,46 +0,0 @@
{
"projectType": "reactos",
"language": {
"c": {
"standard": "c99",
"warnings": ["all", "error", "pedantic", "unused"],
"formatter": "clang-format",
"linter": "clang-tidy"
},
"cpp": {
"standard": "c++11",
"warnings": ["all", "error", "pedantic", "unused"],
"formatter": "clang-format",
"linter": "clang-tidy"
}
},
"codingStyle": "reactos",
"formatOnSave": false,
"lintOnSave": false,
"paths": {
"source": [
"base",
"boot",
"dll",
"drivers",
"hal",
"ntoskrnl",
"subsystems",
"win32ss"
],
"include": [
"sdk/include"
],
"docs": [
"**/*.md",
"media/doc/*.md",
"media/doc/*.txt"
],
"tests": [
"modules/rostests"
],
"build": [
"output-*"
]
}
}

7
.github/labeler.yml vendored
View File

@@ -47,10 +47,7 @@ Win32SS:
"input method":
- changed-files:
- any-glob-to-any-file:
- base/applications/ctfmon/**
- dll/ime/**
- dll/win32/imm32/**
- dll/win32/msctf/**
- dll/win32/msutb/**
- base/ctf/**
- win32ss/user/imm32/**
- win32ss/user/ntuser/ime.c
- win32ss/user/user32/misc/imm.c

View File

@@ -182,9 +182,21 @@ jobs:
- name: Build base module
if: ${{ matrix.arch == 'arm' }}
run: cmake --build build --target base/all
- name: Build dll:3rdparty
if: ${{ matrix.arch == 'arm' }}
run: cmake --build build --target dll/3rdparty/all -- -k0
- name: Build control panel applets
if: ${{ matrix.arch == 'arm' }}
run: cmake --build build --target dll/cpl/all
- name: Build dll:opengl
if: ${{ matrix.arch == 'arm' }}
run: cmake --build build --target dll/opengl/all -- -k0
- name: Build dll:shellext
if: ${{ matrix.arch == 'arm' }}
run: cmake --build build --target dll/shellext/all -- -k0
- name: Build drivers:base
if: ${{ matrix.arch == 'arm' }}
run: cmake --build build --target drivers/base/all -- -k0
- name: Build rosapps
if: ${{ matrix.arch == 'arm' }}
run: cmake --build build --target modules/rosapps/all
@@ -194,13 +206,20 @@ jobs:
- name: Build some applications (arm64)
if: ${{ matrix.arch == 'arm64' }}
run: cmake --build build --target calc magnify mstsc notepad osk regedit taskmgr winmine wordpad base/applications/screensavers/all -- -k0
- name: Build control panel applets (arm64)
if: ${{ matrix.arch == 'arm64' }}
run: cmake --build build --target dll/cpl/all -- -k0
- name: Upload compiled binaries
uses: actions/upload-artifact@v4
with:
name: reactos-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
path: |
build/base
build/dll/3rdparty
build/dll/cpl
build/dll/opengl
build/dll/shellext
build/drivers/base
build/modules/rosapps
build/subsystems
!**/CMakeFiles

2
.gitignore vendored
View File

@@ -13,5 +13,3 @@ modules/[Aa][Hh][Kk]_[Tt]ests
.settings
.vscode
sdk/tools/winesync/winesync.cfg
.cursor/cache/
.cursor/logs/

View File

@@ -347,8 +347,7 @@ Enable this if the module uses typeid or dynamic_cast. You will probably need to
add_subdirectory(sdk/include/xdk)
add_subdirectory(sdk/include/psdk)
add_subdirectory(sdk/include/dxsdk)
add_subdirectory(sdk/include/reactos/wine)
add_subdirectory(sdk/include/reactos/mc)
add_subdirectory(sdk/include/reactos)
add_subdirectory(sdk/include/asm)
if(ARCH MATCHES "64$")

View File

@@ -167,6 +167,8 @@
/drivers/base/condrv/ @HBelusca
/drivers/setup/blue/ @HBelusca
/modules/rostests/winetests/kernel32/console.c @HBelusca
/sdk/include/psdk/wincon.h @HBelusca
/sdk/include/reactos/wincon_undoc.h @HBelusca
/sdk/include/reactos/drivers/condrv/ @HBelusca
/sdk/include/reactos/drivers/blue/ @HBelusca
/sdk/include/reactos/subsys/win/conmsg.h @HBelusca
@@ -294,7 +296,7 @@
/dll/win32/kernel32/client/vdm.c @reactos573 @HBelusca
/dll/win32/kernel32/include/vdm.h @reactos573 @HBelusca
/sdk/include/reactos/subsys/win/vdm.h @reactos573 @HBelusca
/ntoskrnl/vdm @reactos573 @HBelusca
/ntoskrnl/vdm/ @reactos573 @HBelusca
/sdk/include/reactos/libs/fast486/ @reactos573 @HBelusca
/sdk/lib/fast486/ @reactos573 @HBelusca
/subsystems/mvdm/ @reactos573 @HBelusca
@@ -428,21 +430,23 @@
/modules/rosapps/applications/cmdutils/vfdcmd/ @HeisSpiter
/modules/rosapps/drivers/vfd/ @HeisSpiter
# Win32 file functions
# Win32 Subsystem
# M:
# R: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/sdk/include/reactos/winbase_undoc.h @HBelusca
/subsystems/win/basesrv/
/win32ss/user/winsrv/
/win32ss/user/winsrv/usersrv/harderror.c @HBelusca
# Win32 Subsystem - File functions
# M: HeisSpiter, Heis Spiter, Pierre Schweitzer
# R: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/dll/win32/kernel32/client/file/ @HeisSpiter
/dll/win32/kernel32/client/file/find.c @HBelusca
# Win32 Subsystem - User Server
# M:
# R: HBelusca, Hermès Bélusca-Maïto
# S: Maintained
/win32ss/user/winsrv/
/win32ss/user/winsrv/usersrv/harderror.c @HBelusca
# Win32 Subsystem Shutdown
# Win32 Subsystem - Shutdown
# M: HBelusca, Hermès Bélusca-Maïto
# R: EricKohl, ekohl, Eric Kohl
# S: Maintained

View File

@@ -1,5 +1,6 @@
add_subdirectory(applications)
add_subdirectory(ctf)
add_subdirectory(services)
add_subdirectory(setup)
add_subdirectory(shell)

View File

@@ -7,7 +7,6 @@ add_subdirectory(cleanmgr)
add_subdirectory(clipbrd)
add_subdirectory(cmdutils)
add_subdirectory(control)
add_subdirectory(ctfmon)
add_subdirectory(drwtsn32)
add_subdirectory(dxdiag)
add_subdirectory(extrac32)

View File

@@ -801,11 +801,13 @@ MapWndProc(HWND hwnd,
infoPtr->CurrentFont.lfFaceName,
SIZEOF(lfFaceName));
SetFont(infoPtr, lfFaceName);
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
break;
case FM_SETFONT:
infoPtr->CaretX = infoPtr->CaretY = infoPtr->iYStart = 0;
SetFont(infoPtr, (LPWSTR)lParam);
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
break;
case FM_GETCHAR:

View File

@@ -3,6 +3,7 @@
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* PURPOSE: Implementation of Italian language for Clipboard Viewer
* COPYRIGHT: Copyright 2018 George Bișoc (george.bisoc@reactos.org)
* Copyright 2025 Gabriele Lo Re (gabrolr70@gmail.com)
*/
LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
@@ -39,12 +40,12 @@ END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "Visualizzatore di Clipboard"
STRING_CLIPFILE "Elemento Clipboard"
STRING_DELETE_MSG "Cancella i contenuti del Clipboard?"
STRING_DELETE_TITLE "Cancella Clipboard"
STRING_FORMAT_NT "I file del Clipboard di ReactOS (*.clp)"
STRING_FORMAT_GEN "I file Clipboard (*.clp)"
STRING_CLIPBOARD "Visualizzatore Appunti condivisi"
STRING_CLIPFILE "Elemento appunti condivisi"
STRING_DELETE_MSG "Cancella i contenuti degli appunti condivisi?"
STRING_DELETE_TITLE "Cancella appunti condivisi"
STRING_FORMAT_NT "Appunti condivisi di ReactOS (*.clp)"
STRING_FORMAT_GEN "Appunti condivisi (*.clp)"
END
STRINGTABLE
@@ -67,6 +68,6 @@ END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "Il Clipboard contiene informazioni in formato data, che non p essere visualizzato."
ERROR_INVALID_FILE_FORMAT "Il file selezionato non è un file di tipo clipboard valido."
ERROR_UNSUPPORTED_FORMAT "Gli appunti Condivisi contengono informazioni in formato data, che non possono essere visualizzate."
ERROR_INVALID_FILE_FORMAT "Il file selezionato non è un file di tipo appunti condivisi valido."
END

View File

@@ -15,28 +15,7 @@
#include <winbase.h>
#include <winuser.h>
#include <wincon.h>
/* Console API functions which are absent from wincon.h */
#define EXENAME_LENGTH (255 + 1)
VOID
WINAPI
ExpungeConsoleCommandHistoryW(LPCWSTR lpExeName);
DWORD
WINAPI
GetConsoleCommandHistoryW(LPWSTR lpHistory,
DWORD cbHistory,
LPCWSTR lpExeName);
DWORD
WINAPI
GetConsoleCommandHistoryLengthW(LPCWSTR lpExeName);
BOOL
WINAPI
SetConsoleNumberOfCommandsW(DWORD dwNumCommands,
LPCWSTR lpExeName);
#include <wincon_undoc.h>
#include "doskey.h"

View File

@@ -2,40 +2,39 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "Compares two files or sets of files and displays the differences between\n\
them.\n\
IDS_USAGE "2つのファイルまたはファイル セットを比較し、それらの違いを表示します。\n\
\n\
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn]\n\
[drive1:][path1]filename1 [drive2:][path2]filename2\n\
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2\n\
[ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2\n\
FC /B [ドライブ1:][パス1]ファイル名1 [ドライブ2:][パス2]ファイル名2\n\
\n\
/A Displays only first and last lines for each set of differences.\n\
/B Performs a binary comparison.\n\
/C Disregards the case of letters.\n\
/L Compares files as ASCII text.\n\
/LBn Sets the maximum consecutive mismatches to the specified\n\
number of lines (default: 100).\n\
/N Displays the line numbers on an ASCII comparison.\n\
/OFF[LINE] Doesn't skip files with offline attribute set.\n\
/T Doesn't expand tabs to spaces (default: expand).\n\
/U Compare files as UNICODE text files.\n\
/W Compresses white space (tabs and spaces) for comparison.\n\
/nnnn Specifies the number of consecutive lines that must match\n\
after a mismatch (default: 2).\n\
[drive1:][path1]filename1\n\
Specifies the first file or set of files to compare.\n\
[drive2:][path2]filename2\n\
Specifies the second file or set of files to compare.\n"
IDS_NO_DIFFERENCE "FC: no differences encountered\n"
IDS_LONGER_THAN "FC: %ls longer than %ls\n"
IDS_COMPARING "Comparing files %ls and %ls\n"
IDS_OUT_OF_MEMORY "FC: Out of memory\n"
IDS_CANNOT_READ "FC: cannot read from %ls\n"
IDS_INVALID_SWITCH "FC: Invalid Switch\n"
IDS_CANNOT_OPEN "FC: cannot open %ls - No such file or folder\n"
IDS_NEEDS_FILES "FC: Insufficient number of file specifications\n"
IDS_CANT_USE_WILDCARD "Wildcard ('*' and '?') are not supported yet\n"
IDS_DIFFERENT "FC: File %ls and %ls are different\n"
IDS_TOO_LARGE "FC: File %ls too large\n"
IDS_RESYNC_FAILED "Resync failed. Files are too different.\n"
/A 各差分集合の最初の行と最後の行のみを表示します。\n\
/B バイナリ比較を実行します。\n\
/C 大文字と小文字を区別しません。\n\
/L ファイルを ASCII テキストとして比較します。\n\
/LBn 連続する不一致の最大数を指定された行数に設定します\n\
(デフォルト: 100)\n\
/N ASCII 比較の行番号を表示します。\n\
/OFF[LINE] オフライン属性が設定されたファイルをスキップしません。\n\
/T タブをスペースに展開しません (デフォルト: 展開する)。\n\
/U ファイルを UNICODE テキスト ファイルとして比較します。\n\
/W 比較のために空白 (タブとスペース) を圧縮します。\n\
/nnnn 不一致の後に一致する必要がある連続行の数を指定します\n\
(デフォルト: 2)\n\
[ドライブ1:][パス1]ファイル名1\n\
比較する最初のファイルまたはファイル集合を指定します。\n\
[ドライブ2:][パス2]ファイル名2\n\
比較する 2 番目のファイルまたはファイル集合を指定します。\n"
IDS_NO_DIFFERENCE "FC: 違いは見つかりませんでした\n"
IDS_LONGER_THAN "FC: %ls は %ls より長いです\n"
IDS_COMPARING "ファイル %ls %ls を比較しています\n"
IDS_OUT_OF_MEMORY "FC: メモリ不足\n"
IDS_CANNOT_READ "FC: %ls から読み取れません\n"
IDS_INVALID_SWITCH "FC: 無効なスイッチ\n"
IDS_CANNOT_OPEN "FC: %ls を開けません - そのようなファイルまたはフォルダはありません\n"
IDS_NEEDS_FILES "FC: ファイル指定が必要です\n"
IDS_CANT_USE_WILDCARD "ワイルドカード(「*」と「?」)はまだサポートされていません\n"
IDS_DIFFERENT "FC: ファイル %ls %ls は異なります\n"
IDS_TOO_LARGE "FC: ファイル %ls が大きすぎます\n"
IDS_RESYNC_FAILED "再同期に失敗しました。ファイルが違いすぎます。\n"
END

View File

@@ -4,14 +4,14 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_NO_ENTRY "This command is not supported by the help utility.\nTry ""%s /?"".\n"
IDS_NO_ENTRY "このコマンドはヘルプ ユーティリティではサポートされていません。\n「%s /?」を試してください。\n"
END
STRINGTABLE
BEGIN
IDS_USAGE "Provides Help information for ReactOS commands.\n\n\
HELP [command]\n\n\
command - Display help information for this command.\n"
IDS_USAGE "ReactOS コマンドのヘルプ情報を提供します。\n\n\
HELP [コマンド]\n\n\
コマンド - このコマンドのヘルプ情報を表示します。\n"
IDS_HELP1 "利用可能なすべてのコマンドの一覧と、その説明。\n\n\
help コマンド\n\
コマンド /? 特定のコマンドに関する詳細情報\n\n\
@@ -43,7 +43,7 @@ IF バッチ プログラム中で条件処理を実行します。\n\
LABEL ディスクのボリューム ラベルを表示または変更します。\n\
MD ディレクトリを作成します。\n\
MKDIR ディレクトリを作成します。\n\
MKLINK Creates a filesystem link object.\n\
MKLINK ファイルシステム リンク オブジェクトを作成します。\n\
MOVE ファイルを移動およびファイルとディレクトリ名を変更します。\n\
PATH 実行可能ファイルの検索パスを表示または設定します。\n\
PAUSE バッチ プログラムの処理を一時停止し、メッセージを表示します。\n\

View File

@@ -2,180 +2,180 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE
{
STRING_USAGE, "Usage:\n\
REG [operation] [parameters]\n\n\
Supported operations:\n\
STRING_USAGE, "使い方:\n\
REG [操作] [引数]\n\n\
サポートされた操作:\n\
ADD | COPY | DELETE | EXPORT | IMPORT | QUERY\n\n\
For help on a specific operation, type:\n\
REG [operation] /?\n\n"
特定の操作に関するヘルプを表示するには、次のように入力します。\n\
REG [操作] /?\n\n"
STRING_ADD_USAGE, "REG ADD <key> [/v value_name | /ve] [/t type] [/s separator] [/d data] [/f]\n\n\
Adds a key to the registry or adds a new value to a given registry key.\n\n\
<key>\n\
The registry key to add or, if either [/v] or [/ve] is specified,\n\
the key in which to add the new registry data.\n\n\
Format: ROOT\\Subkey\n\n\
ROOT: A predefined registry key. This must be one of the following:\n\n\
STRING_ADD_USAGE, "REG ADD <キー> [/v 値名 | /ve] [/t 種類] [/s 区切り] [/d データ] [/f]\n\n\
レジストリにキーを追加するか、指定されたレジストリ キーに新しい値を追加します。\n\n\
<キー>\n\
追加するレジストリ キー、または [/v] または [/ve] のいずれかが指定されて\n\
いる場合は、新しいレジストリ データを追加するキー。\n\n\
形式: <ルート>\\<サブキー>\n\n\
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
HKEY_LOCAL_MACHINE | HKLM\n\
HKEY_CURRENT_USER | HKCU\n\
HKEY_CLASSES_ROOT | HKCR\n\
HKEY_USERS | HKU\n\
HKEY_CURRENT_CONFIG | HKCC\n\n\
Subkey: The full path to a registry key under a given ROOT key.\n\n\
/v <value_name>\n\
The name of the registry value to add.\n\n\
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
/v <値名>\n\
追加するレジストリ値の名前。\n\n\
/ve\n\
Add an unnamed registry value. This option modifies the (Default)\n\
registry value.\n\n\
/t <type>\n\
The type of data to add to the registry. If [/t] is specified,\n\
<type> must be one of the following:\n\n\
名前のないレジストリ値を追加します。このオプションは(既定の)レジストリ\n\
値を変更します。\n\n\
/t <種類>\n\
レジストリに追加するデータの種類。 [/t] が指定されている場合、<種類> は\n\
次のいずれかである必要があります。\n\n\
REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ\n\
REG_DWORD | REG_BINARY | REG_NONE\n\n\
If [/t] is not specified, the default data type is REG_SZ.\n\n\
/s <separator>\n\
The character used to separate strings in REG_MULTI_SZ data.\n\
If [/s] is not specified, the default separator is \\0.\n\n\
/d <data>\n\
The data to add to the new registry value.\n\n\
[/t]が指定されていない場合、デフォルトのデータ型は REG_SZ になります。\n\n\
/s <区切り>\n\
REG_MULTI_SZ データ内の文字列を区切るために使用される文字。\n\
[/s] が指定されていない場合、デフォルトの区切り文字は \\0 になります。\n\n\
/d <データ>\n\
新しいレジストリ値に追加するデータ。\n\n\
/f\n\
Modify the registry without prompting for confirmation.\n\n"
確認を求めずにレジストリを変更します。\n\n"
STRING_DELETE_USAGE, "REG DELETE <key> [/v value_name | /ve | /va] [/f]\n\n\
Deletes a registry key (including all subkeys and values), or deletes\n\
one or more values from a given registry key.\n\n\
STRING_DELETE_USAGE, "REG DELETE <キー> [/v 値名 | /ve | /va] [/f]\n\n\
レジストリ キー (すべてのサブキーと値を含む) を削除するか、指定された\n\
レジストリ キーから 1 つ以上の値を削除します。\n\n\
<key>\n\
The registry key to delete or, if one of [/v], [/ve] or [/va] is\n\
specified, the registry key in which to delete one or more values.\n\n\
Format: ROOT\\Subkey\n\n\
ROOT: A predefined registry key. This must be one of the following:\n\n\
削除するレジストリ キー、または [/v][/ve][/va] のいずれかが指定されて\n\
いる場合は、1 つ以上の値を削除するレジストリ キー。\n\n\
形式: <ルート>\\<サブキー>\n\n\
ルート: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
HKEY_LOCAL_MACHINE | HKLM\n\
HKEY_CURRENT_USER | HKCU\n\
HKEY_CLASSES_ROOT | HKCR\n\
HKEY_USERS | HKU\n\
HKEY_CURRENT_CONFIG | HKCC\n\n\
Subkey: The full path to a registry key under a given ROOT key.\n\n\
/v <value_name>\n\
The name of the registry value to delete.\n\n\
サブキー: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
/v <値名>\n\
削除するレジストリ値の名前。\n\n\
/ve\n\
Delete an unnamed registry value. This option deletes the (Default)\n\
registry value.\n\n\
名前のないレジストリ値を削除します。このオプションは、(既定の) \n\
レジストリ値を削除します。\n\n\
/va\n\
Delete all values from a registry key.\n\n\
レジストリ キーからすべての値を削除します。\n\n\
/f\n\
Delete a registry key (including all subkeys and values) without\n\
prompting for confirmation.\n\n"
確認を求めることなくレジストリ キー (すべてのサブキーと値を含む) を削除します。\n\n"
STRING_QUERY_USAGE, "REG QUERY <key> [/v value_name | /ve] [/s]\n\n\
Queries a specified registry key and lists all immediate subkeys, values\n\
and data within that key. Use [/s] to recursively query each subkey.\n\n\
<key>\n\
The registry key to query.\n\n\
Format: ROOT\\Subkey\n\n\
ROOT: A predefined registry key. This must be one of the following:\n\n\
STRING_QUERY_USAGE, "REG QUERY <キー> [/v 値名 | /ve] [/s]\n\n\
指定されたレジストリキーを照会し、そのキーに含まれるすべてのサブキー、値、\n\
およびデータを一覧表示します。[/s] を使用すると、各サブキーを再帰的に照会できます。\n\n\
<キー>\n\
照会するレジストリ キー。\n\n\
形式: <ルート>\\<サブキー>\n\n\
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
HKEY_LOCAL_MACHINE | HKLM\n\
HKEY_CURRENT_USER | HKCU\n\
HKEY_CLASSES_ROOT | HKCR\n\
HKEY_USERS | HKU\n\
HKEY_CURRENT_CONFIG | HKCC\n\n\
Subkey: The full path to a registry key under a given ROOT key.\n\n\
/v <value_name>\n\
The name of the registry value to query. If neither [/v] nor [/ve] is\n\
specified, all values under <key> are listed.\n\n\
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
/v <値名>\n\
照会するレジストリ値の名前。[/v] [/ve] も指定されていない場合は、\n\
<キー> の下のすべての値がリストされます。\n\n\
/ve\n\
Query an unnamed registry value. This option queries the (Default)\n\
registry value.\n\n\
名前のないレジストリ値を照会します。このオプションは、(既定の) \n\
レジストリ値を照会します。\n\n\
/s\n\
List all registry entries under <key> and its subkeys.\n\n"
<キー> とそのサブキーの下にあるすべてのレジストリ エントリを一覧表示します。\n\n"
STRING_SUCCESS, "操作は正常に完了しました\n"
STRING_INVALID_KEY, "エラー: キー名が無効です\n"
STRING_INVALID_CMDLINE, "エラー: コマンド ライン引数が無効です\n"
STRING_NO_REMOTE, "エラー: リモート マシンにキーを追加できませんでした\n"
STRING_VALUE_NONEXIST, "エラー: システムは指定されたキーまたは値を見つけられませんでした\n"
STRING_UNSUPPORTED_TYPE, "reg: Unsupported registry data type [%1]\n"
STRING_MISSING_NUMBER, "reg: The option [/d] must be followed by a valid numeric value\n"
STRING_MISSING_HEXDATA, "reg: The option [/d] must be followed by a valid hexadecimal value\n"
STRING_UNHANDLED_TYPE, "reg: Unhandled registry data type [/t 0x%1!x!, /d %2]\n"
STRING_OVERWRITE_VALUE, "The registry value '%1' already exists. Do you want to overwrite it?"
STRING_UNSUPPORTED_TYPE, "reg: サポートされていないレジストリ データ型 [%1]\n"
STRING_MISSING_NUMBER, "reg: オプション[/d]の後には有効な数値を続ける必要があります\n"
STRING_MISSING_HEXDATA, "reg: オプション[/d]の後には有効な16進数値を続ける必要があります\n"
STRING_UNHANDLED_TYPE, "reg: 未処理のレジストリデータ型 [/t 0x%1!x!, /d %2]\n"
STRING_OVERWRITE_VALUE, "レジストリ値 '%1' は既に存在します。上書きしますか?"
STRING_YES, "Y"
STRING_NO, "N"
STRING_ALL, "A"
STRING_YESNO, " (Yes|No)"
STRING_YESNOALL, " (Yes|No|All)"
STRING_CANCELLED, "reg: The registry operation was cancelled\n"
STRING_DEFAULT_VALUE, "(Default)"
STRING_DELETE_VALUE, "Are you sure you want to delete the registry value '%1'?"
STRING_DELETE_VALUEALL, "Are you sure you want to delete all registry values in '%1'?"
STRING_DELETE_SUBKEY, "Are you sure you want to delete the registry key '%1'?"
STRING_INVALID_STRING, "reg: The option [/d] must be followed by a valid string\n"
STRING_VALUEALL_FAILED, "reg: Unable to delete all registry values in '%1'\n"
STRING_MATCHES_FOUND, "Search complete. Number of matches found: %1!d!\n"
STRING_INVALID_SYNTAX, "reg: Invalid syntax. "
STRING_INVALID_OPTION, "reg: Invalid option [%1]. "
STRING_REG_HELP, "Type ""REG /?"" for help.\n"
STRING_FUNC_HELP, "Type ""REG %1 /?"" for help.\n"
STRING_VALUE_NOT_SET, "(value not set)"
STRING_YESNO, " (はい(Y)|いいえ(N))"
STRING_YESNOALL, " (はい(Y)|いいえ(N)|すべて(A))"
STRING_CANCELLED, "reg: レジストリ操作はキャンセルされました\n"
STRING_DEFAULT_VALUE, "(デフォルト)"
STRING_DELETE_VALUE, "レジストリ値 '%1' を削除してもよろしいですか?"
STRING_DELETE_VALUEALL, "'%1' 内のすべてのレジストリ値を削除してもよろしいですか?"
STRING_DELETE_SUBKEY, "レジストリ キー '%1' を削除してもよろしいですか?"
STRING_INVALID_STRING, "reg: オプション[/d]の後に有効な文字列を続ける必要があります\n"
STRING_VALUEALL_FAILED, "reg: '%1' のすべてのレジストリ値を削除できません\n"
STRING_MATCHES_FOUND, "検索が完了しました。一致した件数: %1!d!\n"
STRING_INVALID_SYNTAX, "reg: 無効な文法"
STRING_INVALID_OPTION, "reg: 無効なオプション [%1]. "
STRING_REG_HELP, "ヘルプを表示するには、「REG /?」と入力してください。\n"
STRING_FUNC_HELP, "ヘルプを表示するには「REG %1 /?」と入力してください.\n"
STRING_VALUE_NOT_SET, "(未設定の値)"
STRING_IMPORT_USAGE, "REG IMPORT <file>\n\n\
Imports keys, values and data from a given file into the registry.\n\n\
<file>\n\
The name and path of the registry file to import.\n\n"
STRING_IMPORT_USAGE, "REG IMPORT <ファイル>\n\n\
指定されたファイルからキー、値、データをレジストリにインポートします。\n\n\
<ファイル>\n\
インポートするレジストリ ファイルの名前とパス。\n\n"
STRING_FILE_NOT_FOUND, "reg: The file '%1' was not found.\n"
STRING_ESCAPE_SEQUENCE, "reg: Unrecognized escape sequence [\\%1!c!]\n"
STRING_FILE_NOT_FOUND, "reg: ファイル '%1' が見つかりませんでした。\n"
STRING_ESCAPE_SEQUENCE, "reg: 認識されないエスケープシーケンス [\\%1!c!]\n"
STRING_EXPORT_USAGE, "REG EXPORT <key> <file> [/y]\n\n\
Exports a specified registry key (including all subkeys and values)\n\
to a file.\n\n\
<key>\n\
The registry key to export.\n\n\
Format: ROOT\\Subkey\n\n\
ROOT: A predefined registry key. This must be one of the following:\n\n\
STRING_EXPORT_USAGE, "REG EXPORT <キー> <ファイル> [/y]\n\n\
指定されたレジストリ キー (すべてのサブキーと値を含む) をファイルに\n\
エクスポートします。\n\n\
<キー>\n\
エクスポートするレジストリ キー。\n\n\
形式: <ルート>\\<サブキー>\n\n\
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
HKEY_LOCAL_MACHINE | HKLM\n\
HKEY_CURRENT_USER | HKCU\n\
HKEY_CLASSES_ROOT | HKCR\n\
HKEY_USERS | HKU\n\
HKEY_CURRENT_CONFIG | HKCC\n\n\
Subkey: The full path to a registry key under a given ROOT key.\n\n\
<file>\n\
The name and path of the registry file that will be created.\n\
This file must have a .reg extension.\n\n\
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
<ファイル>\n\
作成されるレジストリ ファイルの名前とパス。\n\
このファイルには .reg 拡張子が必要です。\n\n\
/y\n\
Overwrite <file> without prompting for confirmation.\n\n"
確認のプロンプトを表示せずに <ファイル> を上書きします。\n\n"
STRING_INVALID_SYSTEM_KEY, "reg: Invalid system key\n"
STRING_OVERWRITE_FILE, "The file '%1' already exists. Do you want to overwrite it?"
STRING_KEY_NONEXIST, "reg: Unable to find the specified registry key\n"
STRING_KEY_IMPORT_FAILED, "reg: Unable to import the registry key '%1'\n"
STRING_INVALID_SYSTEM_KEY, "reg: 無効なシステム キー\n"
STRING_OVERWRITE_FILE, "ファイル '%1' は既に存在します。上書きしますか?"
STRING_KEY_NONEXIST, "reg: 指定されたレジストリキーが見つかりません\n"
STRING_KEY_IMPORT_FAILED, "reg: レジストリキーをインポートできません '%1'\n"
STRING_REG_VIEW_USAGE, " /reg:32\n\
Access the registry using the 32-bit view.\n\n\
32 ビット ビューを使用してレジストリにアクセスします。\n\n\
/reg:64\n\
Access the registry using the 64-bit view.\n\n"
STRING_ACCESS_DENIED, "reg: Unable to access or create the specified registry key\n"
64 ビット ビューを使用してレジストリにアクセスします。\n\n"
STRING_ACCESS_DENIED, "reg: 指定されたレジストリキーにアクセスまたは作成できません\n"
STRING_COPY_USAGE, "REG COPY <key1> <key2> [/s] [/f]\n\n\
Copies the contents of a specified registry key to another location.\n\
By default, this operation only copies registry values. Use [/s] to\n\
recursively copy all subkeys and values.\n\n\
<key1>, <key2>\n\
Registry keys specifying the source (<key1>) and destination (<key2>)\n\
of the data. If <key2> does not exist, it is created.\n\n\
Format: ROOT\\Subkey\n\n\
ROOT: A predefined registry key. This must be one of the following:\n\n\
STRING_COPY_USAGE, "REG COPY <キー1> <キー2> [/s] [/f]\n\n\
指定されたレジストリ キーの内容を別の場所にコピーします。\n\
デフォルトでは、この操作はレジストリ値のみをコピーします。[/s] を使用して、\n\
すべてのサブキーと値を再帰的にコピーします。\n\n\
<キー1>, <キー2>\n\
データのコピー元(<キー1>) とコピー先 (<キー2>) を指定するレジストリ キー。\n\
<キー2> が存在しない場合は作成されます。\n\n\
形式: <ルート>\\<サブキー>\n\n\
<ルート>: 定義済みのレジストリ キー。次のいずれかである必要があります。\n\n\
HKEY_LOCAL_MACHINE | HKLM\n\
HKEY_CURRENT_USER | HKCU\n\
HKEY_CLASSES_ROOT | HKCR\n\
HKEY_USERS | HKU\n\
HKEY_CURRENT_CONFIG | HKCC\n\n\
Subkey: The full path to a registry key under a given ROOT key.\n\n\
<サブキー>: 指定された <ルート> キーの下のレジストリ キーへの完全なパス。\n\n\
/s\n\
Copy all subkeys and values from <key1> to <key2>.\n\n\
<キー1> から <キー2> にすべてのサブキーと値をコピーします。\n\n\
/f\n\
Overwrite all registry data in <key2> without prompting for confirmation.\n\
This option does not modify subkeys and values that only exist in <key2>.\n\n"
確認のプロンプトを表示せずに、<キー2> 内のすべてのレジストリ\n\
データを上書きします。\n\
このオプションは、<キー2> にのみ存在するサブキーと値を変更しません。\n\n"
STRING_COPY_SRC_DEST_SAME, "reg: The source and destination keys cannot be the same\n"
STRING_COPY_CONFIRM, "The value '%1\\%2' already exists in the destination key. Do you want to overwrite it?"
STRING_COPY_SRC_DEST_SAME, "reg: コピー元キーとコピー先キーは同じにすることはできません\n"
STRING_COPY_CONFIRM, " '%1\\%2' はコピー先キーに既に存在します。上書きしますか?"
}

View File

@@ -1,10 +1,11 @@
/*
* PROJECT: Kończy procesy
* LICENSE: See COPYING in the top level directory
* PROJECT: Task termination utility
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Polish resource file
* COPYRIGHT: Copyright 2018 George Bișoc (george.bisoc@reactos.org)
* Updated by pithwz - Piotr Hetnarowicz (piotrhwz@gmail.com) (April, 2020)
* TRANSLATORS: Copyright 2018 Adam Słaboń <asaillen456esx@gmail.com>
* Copyright 2020-2025 Piotr Hetnarowicz <piotrhwz@gmail.com>
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE
@@ -23,10 +24,10 @@ STRINGTABLE
STRING_ENUM_FAILED, "Błąd: Nie można wyliczyć listy procesów.\n"
STRING_TERMINATE_FAILED, "Błąd: Nie można zakończyć procesu ""%1"".\n"
STRING_SELF_TERMINATION, "Błąd: Proces nie może zakończyć sam siebie.\n"
// STRING_CLOSE_CHILD, "Sent termination signal to process with PID %1!u!, child of PID %2!u!.\n"
STRING_CLOSE_CHILD, "Close message sent to top-level windows of process with PID %1!u!, child of PID %2!u!.\n"
STRING_TERM_CHILD, "The process with PID %1!u! (child process of PID %2!u!) has been terminated.\n"
STRING_TERM_CHILD_FAILED, "Error: Unable to terminate process with PID %1!u!, child of PID %2!u!.\n"
// STRING_CLOSE_CHILD, "Wysłano sygnał zakończenia do procesu o identyfikatorze PID %1!u!, będącego procesem podrzędnym procesu PID %2!u!.\n"
STRING_CLOSE_CHILD, "Wysłano komunikat zamknięcia do okien najwyższego poziomu procesu PID %1!u!, będącego procesem podrzędnym procesu PID %2!u!.\n"
STRING_TERM_CHILD, "Proces o identyfikatorze PID %1!u! (podrzędny procesowi PID %2!u!) został zakończony.\n"
STRING_TERM_CHILD_FAILED, "Błąd: Nie można zakończyć procesu PID %1!u!, będącego procesem podrzędnym PID %2!u!.\n"
STRING_PARAM_TOO_MUCH, "Błąd: Nieprawidłowa składnia. Opcja '%1' nie jest dozwolona więcej niż '%2!d!' razy.\n"
STRING_INVALID_SYNTAX, "Błąd: Nieprawidłowa składnia.\n"
}

View File

@@ -13,11 +13,11 @@
#define WIDTH 800
#define HEIGHT 600
BOOL D3D7Test(HWND hWnd);
BOOL D3D8Test(HWND hWnd);
BOOL D3D9Test(HWND hWnd);
BOOL D3D7Test(GUID *lpDevice, HWND hWnd);
BOOL D3D8Test(GUID *lpDevice, HWND hWnd);
BOOL D3D9Test(GUID *lpDevice, HWND hWnd);
BOOL StartD3DTest(HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
BOOL StartD3DTest(GUID *lpDevice, HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
{
WCHAR szTestDescriptionRaw[256];
WCHAR szTestDescription[256];
@@ -39,13 +39,13 @@ BOOL StartD3DTest(HWND hWnd, HINSTANCE hInstance, WCHAR* pszCaption, INT TestNr)
switch(TestNr){
case 7:
Result = D3D7Test(hWnd);
Result = D3D7Test(lpDevice, hWnd);
break;
case 8:
Result = D3D8Test(hWnd);
Result = D3D8Test(lpDevice, hWnd);
break;
case 9:
Result = D3D9Test(hWnd);
Result = D3D9Test(lpDevice, hWnd);
break;
default:
Result = FALSE;
@@ -70,7 +70,7 @@ static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
return DefWindowProc(hWnd, msg, wParam, lParam);
}
VOID D3DTests()
VOID D3DTests(GUID *lpDevice)
{
WNDCLASSEX winClass;
HWND hWnd;
@@ -116,9 +116,9 @@ VOID D3DTests()
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
goto cleanup;
StartD3DTest(hWnd, hInstance, szCaption, 7);
StartD3DTest(hWnd, hInstance, szCaption, 8);
StartD3DTest(hWnd, hInstance, szCaption, 9);
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 7);
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 8);
StartD3DTest(lpDevice, hWnd, hInstance, szCaption, 9);
cleanup:
DestroyWindow(hWnd);

View File

@@ -8,7 +8,7 @@
#include "precomp.h"
BOOL D3D7Test(HWND hWnd)
BOOL D3D7Test(GUID *lpDevice, HWND hWnd)
{
return FALSE;
}

View File

@@ -8,7 +8,7 @@
#include "precomp.h"
BOOL D3D8Test(HWND hWnd)
BOOL D3D8Test(GUID *lpDevice, HWND hWnd)
{
return FALSE;
}

View File

@@ -8,7 +8,7 @@
#include "precomp.h"
BOOL D3D9Test(HWND hWnd)
BOOL D3D9Test(GUID *lpDevice, HWND hWnd)
{
return FALSE;
}

View File

@@ -8,8 +8,8 @@
#include "precomp.h"
BOOL DDPrimarySurfaceTest(HWND hWnd);
BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen);
BOOL DDPrimarySurfaceTest(GUID *lpDevice, HWND hWnd);
BOOL DDOffscreenBufferTest(GUID *lpDevice, HWND hWnd, BOOL Fullscreen);
VOID DDRedrawFrame(LPDIRECTDRAWSURFACE lpDDSurface);
VOID DDUpdateFrame(LPDIRECTDRAWSURFACE lpDDPrimarySurface ,LPDIRECTDRAWSURFACE lpDDBackBuffer, BOOL Fullscreen, INT *posX, INT *posY, INT *gainX, INT *gainY, RECT *rectDD);
@@ -21,7 +21,7 @@ VOID DDUpdateFrame(LPDIRECTDRAWSURFACE lpDDPrimarySurface ,LPDIRECTDRAWSURFACE l
#define DD_SQUARE_STEP 2
BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT resResult, INT TestNr)
BOOL StartDDTest(GUID *lpDevice, HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT resResult, INT TestNr)
{
WCHAR szTestDescription[256];
WCHAR szCaption[256];
@@ -41,13 +41,13 @@ BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT res
switch(TestNr){
case 1:
Result = DDPrimarySurfaceTest(hWnd);
Result = DDPrimarySurfaceTest(lpDevice, hWnd);
break;
case 2:
Result = DDOffscreenBufferTest(hWnd, FALSE);
Result = DDOffscreenBufferTest(lpDevice, hWnd, FALSE);
break;
case 3:
Result = DDOffscreenBufferTest(hWnd, TRUE);
Result = DDOffscreenBufferTest(lpDevice, hWnd, TRUE);
break;
default:
Result = FALSE;
@@ -67,7 +67,7 @@ BOOL StartDDTest(HWND hWnd, HINSTANCE hInstance, INT resTestDescription, INT res
return FALSE;
}
VOID DDTests()
VOID DDTests(GUID *lpDevice)
{
WNDCLASSEX winClass;
HWND hWnd;
@@ -105,15 +105,15 @@ VOID DDTests()
if(MessageBox(NULL, szDescription, szCaption, MB_YESNO | MB_ICONQUESTION) == IDNO)
return;
StartDDTest(hWnd, hInstance, IDS_DDPRIMARY_DESCRIPTION, IDS_DDPRIMARY_RESULT, 1);
StartDDTest(hWnd, hInstance, IDS_DDOFFSCREEN_DESCRIPTION, IDS_DDOFFSCREEN_RESULT, 2);
StartDDTest(hWnd, hInstance, IDS_DDFULLSCREEN_DESCRIPTION, IDS_DDFULLSCREEN_RESULT, 3);
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDPRIMARY_DESCRIPTION, IDS_DDPRIMARY_RESULT, 1);
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDOFFSCREEN_DESCRIPTION, IDS_DDOFFSCREEN_RESULT, 2);
StartDDTest(lpDevice, hWnd, hInstance, IDS_DDFULLSCREEN_DESCRIPTION, IDS_DDFULLSCREEN_RESULT, 3);
DestroyWindow(hWnd);
UnregisterClass(winClass.lpszClassName, hInstance);
}
BOOL DDPrimarySurfaceTest(HWND hWnd){
BOOL DDPrimarySurfaceTest(GUID *lpDevice, HWND hWnd){
UINT TimerID;
MSG msg;
@@ -121,7 +121,7 @@ BOOL DDPrimarySurfaceTest(HWND hWnd){
LPDIRECTDRAWSURFACE lpDDSurface = NULL;
DDSURFACEDESC DDSurfaceDesc;
if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK)
if(DirectDrawCreate(lpDevice, &lpDD, NULL) != DD_OK)
return FALSE;
if(lpDD->lpVtbl->SetCooperativeLevel(lpDD, hWnd, DDSCL_NORMAL) != DD_OK)
@@ -197,7 +197,7 @@ VOID DDRedrawFrame(LPDIRECTDRAWSURFACE lpDDSurface)
}
BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen){
BOOL DDOffscreenBufferTest(GUID *lpDevice, HWND hWnd, BOOL Fullscreen){
UINT_PTR TimerID, TimerIDUpdate;
LPDIRECTDRAW lpDD;
LPDIRECTDRAWSURFACE lpDDPrimarySurface;
@@ -210,7 +210,7 @@ BOOL DDOffscreenBufferTest(HWND hWnd, BOOL Fullscreen){
POINT wndPoint;
INT posX = 0, posY = 10, xGain = DD_SQUARE_STEP, yGain = DD_SQUARE_STEP;
if(DirectDrawCreate(NULL, &lpDD, NULL) != DD_OK)
if(DirectDrawCreate(lpDevice, &lpDD, NULL) != DD_OK)
return FALSE;
ZeroMemory(&DDSurfaceDesc, sizeof(DDSurfaceDesc));

View File

@@ -305,56 +305,89 @@ InitializeDialog(HWND hwndDlg, PDISPLAY_DEVICEW pDispDevice)
return TRUE;
}
void InitializeDisplayAdapters(PDXDIAG_CONTEXT pContext)
static BOOL WINAPI
DDEnumerateCallback(
IN GUID *lpGuid,
IN LPSTR lpDriverName,
IN LPSTR lpDriverDescription,
IN LPVOID lpContext,
IN HMONITOR hMonitor)
{
DISPLAY_DEVICEW DispDevice;
HWND * hDlgs;
LPWSTR lpDriverDescriptionW;
PDXDIAG_CONTEXT pContext = lpContext;
PDXDIAG_DISPLAY *pDisplayAdapters;
PDXDIAG_DISPLAY pDisplayAdapter;
HWND hwndDlg;
WCHAR szDisplay[20];
WCHAR szText[30];
DWORD dwOffset = 0;
int len;
BOOL ret;
while(TRUE)
/* Convert lpDriverDescription to WCHAR */
len = MultiByteToWideChar(CP_ACP, 0, lpDriverDescription, strlen(lpDriverDescription), NULL, 0);
if (!len)
return FALSE;
lpDriverDescriptionW = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
if (!lpDriverDescriptionW)
return FALSE;
MultiByteToWideChar(CP_ACP, 0, lpDriverDescription, strlen(lpDriverDescription), lpDriverDescriptionW, len);
lpDriverDescriptionW[len] = UNICODE_NULL;
/* Get associated display device */
ZeroMemory(&DispDevice, sizeof(DispDevice));
DispDevice.cb = sizeof(DispDevice);
ret = EnumDisplayDevicesW(lpDriverDescriptionW, 0, &DispDevice, 0);
HeapFree(GetProcessHeap(), 0, lpDriverDescriptionW);
if (!ret)
return TRUE;
pDisplayAdapter = HeapAlloc(GetProcessHeap(), 0, sizeof(DXDIAG_DISPLAY));
if (!pDisplayAdapter)
return FALSE;
if (pContext->NumDisplayAdapter)
pDisplayAdapters = HeapReAlloc(GetProcessHeap(), 0, pContext->DisplayAdapters, (pContext->NumDisplayAdapter + 1) * sizeof(PDXDIAG_DISPLAY));
else
pDisplayAdapters = HeapAlloc(GetProcessHeap(), 0, (pContext->NumDisplayAdapter + 1) * sizeof(PDXDIAG_DISPLAY));
if (!pDisplayAdapters)
{
ZeroMemory(&DispDevice, sizeof(DISPLAY_DEVICEW));
DispDevice.cb = sizeof(DISPLAY_DEVICEW);
if (!EnumDisplayDevicesW(NULL, pContext->NumDisplayAdapter + dwOffset, &DispDevice, 0))
return;
/* skip devices not attached to the desktop and mirror drivers */
if (!(DispDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) || (DispDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))
{
dwOffset++;
continue;
}
if (pContext->NumDisplayAdapter)
hDlgs = HeapReAlloc(GetProcessHeap(), 0, pContext->hDisplayWnd, (pContext->NumDisplayAdapter + 1) * sizeof(HWND));
else
hDlgs = HeapAlloc(GetProcessHeap(), 0, (pContext->NumDisplayAdapter + 1) * sizeof(HWND));
if (!hDlgs)
break;
pContext->hDisplayWnd = hDlgs;
hwndDlg = CreateDialogParamW(hInst, MAKEINTRESOURCEW(IDD_DISPLAY_DIALOG), pContext->hMainDialog, DisplayPageWndProc, (LPARAM)pContext); EnableDialogTheme(hwndDlg);
if (!hwndDlg)
break;
/* initialize the dialog */
InitializeDialog(hwndDlg, &DispDevice);
szDisplay[0] = L'\0';
LoadStringW(hInst, IDS_DISPLAY_DIALOG, szDisplay, sizeof(szDisplay)/sizeof(WCHAR));
szDisplay[(sizeof(szDisplay)/sizeof(WCHAR))-1] = L'\0';
wsprintfW (szText, L"%s %u", szDisplay, pContext->NumDisplayAdapter + 1);
InsertTabCtrlItem(GetDlgItem(pContext->hMainDialog, IDC_TAB_CONTROL), pContext->NumDisplayAdapter + 1, szText);
hDlgs[pContext->NumDisplayAdapter] = hwndDlg;
pContext->NumDisplayAdapter++;
HeapFree(GetProcessHeap(), 0, pDisplayAdapter);
return FALSE;
}
pContext->DisplayAdapters = pDisplayAdapters;
hwndDlg = CreateDialogParamW(hInst, MAKEINTRESOURCEW(IDD_DISPLAY_DIALOG), pContext->hMainDialog, DisplayPageWndProc, (LPARAM)pDisplayAdapter);
EnableDialogTheme(hwndDlg);
if (!hwndDlg)
{
HeapFree(GetProcessHeap(), 0, pDisplayAdapter);
return FALSE;
}
/* initialize the dialog */
InitializeDialog(hwndDlg, &DispDevice);
szDisplay[0] = UNICODE_NULL;
LoadStringW(hInst, IDS_DISPLAY_DIALOG, szDisplay, ARRAYSIZE(szDisplay));
szDisplay[ARRAYSIZE(szDisplay) - 1] = UNICODE_NULL;
wsprintfW(szText, L"%s %u", szDisplay, pContext->NumDisplayAdapter + 1);
InsertTabCtrlItem(GetDlgItem(pContext->hMainDialog, IDC_TAB_CONTROL), pContext->NumDisplayAdapter + 1, szText);
pDisplayAdapter->hDisplayWnd = hwndDlg;
if (lpGuid)
pDisplayAdapter->guid = *lpGuid;
pContext->DisplayAdapters[pContext->NumDisplayAdapter++] = pDisplayAdapter;
return TRUE;
}
void InitializeDisplayAdapters(PDXDIAG_CONTEXT pContext)
{
DirectDrawEnumerateExA(DDEnumerateCallback, pContext, DDENUM_ATTACHEDSECONDARYDEVICES);
}
@@ -362,13 +395,14 @@ INT_PTR CALLBACK
DisplayPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rect;
PDXDIAG_CONTEXT pContext = (PDXDIAG_CONTEXT)GetWindowLongPtr(hDlg, DWLP_USER);
HWND hMainDialog;
PDXDIAG_DISPLAY pDisplay = (PDXDIAG_DISPLAY)GetWindowLongPtr(hDlg, DWLP_USER);
switch (message)
{
case WM_INITDIALOG:
{
pContext = (PDXDIAG_CONTEXT) lParam;
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pContext);
pDisplay = (PDXDIAG_DISPLAY) lParam;
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pDisplay);
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
return TRUE;
}
@@ -378,13 +412,14 @@ DisplayPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
case IDC_BUTTON_TESTDD:
case IDC_BUTTON_TEST3D:
GetWindowRect(pContext->hMainDialog, &rect);
hMainDialog = GetWindow(hDlg, GW_OWNER);
GetWindowRect(hMainDialog, &rect);
/* FIXME log result errors */
if (IDC_BUTTON_TESTDD == LOWORD(wParam))
DDTests();
DDTests(&pDisplay->guid);
else if (IDC_BUTTON_TEST3D == LOWORD(wParam))
D3DTests();
SetWindowPos(pContext->hMainDialog, NULL, rect.left, rect.top, rect.right, rect.bottom, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
D3DTests(&pDisplay->guid);
SetWindowPos(hMainDialog, NULL, rect.left, rect.top, rect.right, rect.bottom, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
break;
}
break;

View File

@@ -84,8 +84,8 @@ DestroyTabCtrlDialogs(PDXDIAG_CONTEXT pContext)
/* destroy display dialogs */
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
{
if (pContext->hDisplayWnd[Index])
DestroyWindow(pContext->hDisplayWnd[Index]);
if (pContext->DisplayAdapters[Index]->hDisplayWnd)
DestroyWindow(pContext->DisplayAdapters[Index]->hDisplayWnd);
}
/* destroy audio dialogs */
@@ -142,7 +142,7 @@ TabCtrl_OnSelChange(PDXDIAG_CONTEXT pContext)
ShowWindow(pContext->hDialogs[Index], SW_HIDE);
for(Index = 0; Index < pContext->NumDisplayAdapter; Index++)
ShowWindow(pContext->hDisplayWnd[Index], SW_HIDE);
ShowWindow(pContext->DisplayAdapters[Index]->hDisplayWnd, SW_HIDE);
for(Index = 0; Index < pContext->NumSoundAdapter; Index++)
ShowWindow(pContext->hSoundWnd[Index], SW_HIDE);
@@ -158,7 +158,7 @@ TabCtrl_OnSelChange(PDXDIAG_CONTEXT pContext)
if (CurSel -1 < pContext->NumDisplayAdapter)
{
ShowWindow(pContext->hDisplayWnd[CurSel-1], SW_SHOW);
ShowWindow(pContext->DisplayAdapters[CurSel-1]->hDisplayWnd, SW_SHOW);
return;
}

View File

@@ -42,7 +42,7 @@ BEGIN
EDITTEXT IDC_STATIC_MEM, 155, 130, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_SWAP, 155, 140, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
EDITTEXT IDC_STATIC_VERSION, 155, 150, 210, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
CHECKBOX "Check for WHQL digital signatures", IDC_WHQL_SIGN_CHECK, 15, 170, 135, 10, WS_DISABLED
CHECKBOX "WHQL デジタル署名を確認する", IDC_WHQL_SIGN_CHECK, 15, 170, 135, 10, WS_DISABLED
END
IDD_DISPLAY_DIALOG DIALOGEX 0, 0, 462, 220
@@ -127,7 +127,7 @@ BEGIN
EDITTEXT IDC_STATIC_ADAPTER_PROVIDER, 335, 60, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
GROUPBOX "ReactX の機能", IDC_STATIC, 5, 97, 452, 70
CONTROL "", IDC_SLIDER_DSOUND, "msctls_trackbar32", TBS_BOTTOM | TBS_AUTOTICKS | WS_TABSTOP, 110, 125, 80, 17
RTEXT "Hardware Sound\nAcceleration Level:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
RTEXT "ハードウェア音声\n加速レベル:", IDC_STATIC, 10, 125, 90, 20, WS_DISABLED
PUSHBUTTON "DirectSound のテスト", IDC_BUTTON_TESTDSOUND, 270, 125, 80, 14, WS_DISABLED
GROUPBOX "注意", IDC_STATIC, 5, 170, 452, 50
EDITTEXT IDC_TEXT_DSOUNDINFO, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
@@ -137,17 +137,17 @@ IDD_MUSIC_DIALOG DIALOGEX 0, 0, 462, 220
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
RTEXT "General MIDI DLS Collection:", IDC_STATIC, 0, 0, 100, 10
RTEXT "General MIDI DLS コレクション:", IDC_STATIC, 0, 0, 100, 10
EDITTEXT IDC_MIDI_DLS_COLLECTION, 105, 0, 250, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
GROUPBOX "Music Ports", IDC_STATIC, 5, 10, 452, 85
GROUPBOX "ReactX Features", IDC_STATIC, 5, 97, 452, 70
LTEXT "Default Port Acceleration:", IDC_STATIC, 15, 120, 95, 17
GROUPBOX "音楽ポート", IDC_STATIC, 5, 10, 452, 85
GROUPBOX "ReactXの機能", IDC_STATIC, 5, 97, 452, 70
LTEXT "デフォルトのポート高速化:", IDC_STATIC, 15, 120, 95, 17
LTEXT "", IDC_STATIC_DEFAULT_PORT_ACCELERATION, 115, 120, 50, 10
PUSHBUTTON "Disable", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
LTEXT "Test using this port:", IDC_STATIC, 180, 105, 100, 10
PUSHBUTTON "無効にする", IDC_BUTTON_DISABLEDMUSIC, 75, 135, 80, 14, WS_DISABLED
LTEXT "このポートを使用してテストします:", IDC_STATIC, 180, 105, 100, 10
LISTBOX IDC_DMUSIC_TEST_LIST, 180, 115, 180, 45, LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Test DirectMusic", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
GROUPBOX "Notes", IDC_STATIC, 5, 170, 452, 50
PUSHBUTTON "DirectMusic をテストする", IDC_BUTTON_TESTDMUSIC, 370, 145, 80, 14, WS_DISABLED
GROUPBOX "注記", IDC_STATIC, 5, 170, 452, 50
EDITTEXT IDC_MUSIC_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
END
@@ -170,11 +170,11 @@ FONT 9, "MS UI Gothic"
BEGIN
GROUPBOX "登録済み DirectPlay サービス プロバイダ", IDC_STATIC, 5, 0, 452, 75
CONTROL "", IDC_LIST_PROVIDER, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 15, 12, 432, 55
GROUPBOX "Registered Lobbyable DirectPlay Applications", IDC_STATIC, 5, 77, 452, 55
GROUPBOX "ReactX Features", IDC_STATIC, 5, 133, 452, 35
PUSHBUTTON "DirectPlay Voice Options", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
PUSHBUTTON "Test DirectPlay", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
GROUPBOX "Notes", IDC_STATIC, 5, 170, 452, 50
GROUPBOX "登録済みのロビー可能な DirectPlay アプリ", IDC_STATIC, 5, 77, 452, 55
GROUPBOX "ReactX の機能", IDC_STATIC, 5, 133, 452, 35
PUSHBUTTON "DirectPlay 音声オプション", IDC_BUTTON_VOICE_OPTIONS, 10, 145, 90, 14, WS_DISABLED
PUSHBUTTON "DirectPlay をテストする", IDC_BUTTON_TESTDPLAY, 130, 145, 80, 14, WS_DISABLED
GROUPBOX "注記", IDC_STATIC, 5, 170, 452, 50
EDITTEXT IDC_NETWORK_NOTES, 15, 182, 432, 30, ES_LEFT | WS_BORDER | ES_READONLY | WS_TABSTOP
END
@@ -182,11 +182,11 @@ IDD_HELP_DIALOG DIALOGEX 0, 0, 462, 220
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 9, "MS UI Gothic"
BEGIN
LTEXT "Still can't find the information you're looking for? Here are some additional things you can do:", IDC_STATIC, 5, 0, 300, 10
PUSHBUTTON "System Information", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
LTEXT "Displays additional system information", IDC_STATIC, 90, 23, 300, 10
PUSHBUTTON "Refresh Rate Override", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
LTEXT "Overrides the Refresh Rate for DirectDraw", IDC_STATIC, 90, 43, 300, 10
LTEXT "探している情報がまだ見つかりませんか? 以下の方法をお試しください。", IDC_STATIC, 5, 0, 300, 10
PUSHBUTTON "システム情報", IDC_BUTTON_SYSINFO, 5, 20, 80, 14, WS_DISABLED
LTEXT "追加のシステム情報を表示します", IDC_STATIC, 90, 23, 300, 10
PUSHBUTTON "リフレッシュ レートのオーバーライド", IDC_BUTTON_DDRAW_REFRESH, 5, 40, 80, 14, WS_DISABLED
LTEXT "DirectDrawのリフレッシュ レートを上書きします", IDC_STATIC, 90, 43, 300, 10
END
STRINGTABLE
@@ -238,17 +238,17 @@ BEGIN
IDS_DDFULLSCREEN_DESCRIPTION "このテストでは、DirectDraw を使って全画面表示モードで描画します。移動している白い矩形が描画されます。続行しますか?"
IDS_DDFULLSCREEN_RESULT "全画面表示モードで移動している白い矩形が見えましたか?"
IDS_FORMAT_ADAPTER_MEM "%u MB"
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u bit)(%uHz)"
IDS_FORMAT_ADAPTER_MODE "%d x %d (%u ビット) (%uHz)"
IDS_OPTION_NO "いいえ"
IDS_D3DTEST_DESCRIPTION "Direct3D インタフェーステストを開始しようとしています。続行しますか?"
IDS_D3DTEST_D3Dx "このテストはハードウェア アクセラーレータ Direct3D %u インターフェイスを使います。"
IDS_OS_VERSION "%s %s (%d.%d, Build %d)"
IDS_DMUSIC_DESC "Description"
IDS_DMUSIC_TYPE "Type"
IDS_DMUSIC_KERNEL "Kernel Mode"
IDS_DMUSIC_IO "In/Out"
IDS_DMUSIC_DLS "Supports DLS"
IDS_DMUSIC_EXT "External"
IDS_DMUSIC_PORT "Default Port"
IDS_DDDISABLE_MSG "This will disable all hardware acceleration for DirectDraw on all display devices.\nDo you wish to continue?\n"
IDS_OS_VERSION "%s %s (%d.%d, ビルド %d)"
IDS_DMUSIC_DESC "説明"
IDS_DMUSIC_TYPE "種類"
IDS_DMUSIC_KERNEL "カーネル モード"
IDS_DMUSIC_IO "入出力"
IDS_DMUSIC_DLS "DLS をサポート"
IDS_DMUSIC_EXT "外部"
IDS_DMUSIC_PORT "デフォルトのポート"
IDS_DDDISABLE_MSG "これにより、すべてのディスプレイ デバイス上の DirectDraw のすべてのハードウェア アクセラレーションが無効になります。\n続行しますか?\n"
END

View File

@@ -26,12 +26,18 @@
#include "resource.h"
typedef struct
{
HWND hDisplayWnd;
GUID guid;
} DXDIAG_DISPLAY, *PDXDIAG_DISPLAY;
typedef struct
{
HWND hMainDialog;
HWND hTabCtrl;
ULONG NumDisplayAdapter;
HWND * hDisplayWnd;
PDXDIAG_DISPLAY * DisplayAdapters;
ULONG NumSoundAdapter;
HWND * hSoundWnd;
HWND hDialogs[5];
@@ -53,10 +59,10 @@ INT_PTR CALLBACK NetworkPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPAR
INT_PTR CALLBACK HelpPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
/* DirectDraw tests */
VOID DDTests(VOID);
VOID DDTests(GUID *lpDevice);
/* Direct3D tests */
VOID D3DTests(VOID);
VOID D3DTests(GUID *lpDevice);
/* DirectSound initialization */
void InitializeDirectSoundPage(PDXDIAG_CONTEXT pContext);

View File

@@ -1,8 +1,10 @@
add_rc_deps(kbswitch.rc ${CMAKE_CURRENT_SOURCE_DIR}/res/kbswitch.ico)
add_executable(kbswitch kbswitch.c kbswitch.rc)
add_executable(kbswitch kbswitch.c imemenu.c kbswitch.rc)
set_module_type(kbswitch win32gui UNICODE)
add_importlibs(kbswitch advapi32 imm32 user32 shell32 shlwapi gdi32 msvcrt kernel32)
target_link_libraries(kbswitch wine)
add_importlibs(kbswitch advapi32 imm32 user32 shell32 shlwapi gdi32 msvcrt kernel32 ntdll)
add_cd_file(TARGET kbswitch DESTINATION reactos/system32 FOR all)
add_subdirectory(kbsdll)
add_subdirectory(indicdll)
add_dependencies(kbswitch indicdll)

View File

@@ -0,0 +1,260 @@
/*
* PROJECT: ReactOS Keyboard Layout Switcher
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: IME menu handling
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#include "kbswitch.h"
#include "imemenu.h"
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(internat);
PIMEMENUNODE g_pMenuList = NULL;
INT g_nNextMenuID = 0;
static BOOL MakeImeMenu(_In_ HMENU hMenu, _In_ const IMEMENUNODE *pMenu);
static VOID
AddImeMenuNode(_In_ PIMEMENUNODE pMenu)
{
if (!g_pMenuList)
{
g_pMenuList = pMenu;
return;
}
pMenu->m_pNext = g_pMenuList;
g_pMenuList = pMenu;
}
static PIMEMENUNODE
AllocateImeMenu(_In_ DWORD itemCount)
{
SIZE_T cbMenu = sizeof(IMEMENUNODE) + (itemCount - 1) * sizeof(IMEMENUITEM);
PIMEMENUNODE pMenu = LocalAlloc(LPTR, cbMenu);
if (!pMenu)
return NULL;
pMenu->m_nItems = itemCount;
AddImeMenuNode(pMenu);
return pMenu;
}
static VOID
GetImeMenuItem(
_In_ HIMC hIMC,
_Out_ PIMEMENUITEMINFO lpImeParentMenu,
_In_ BOOL bRightMenu,
_Out_ PIMEMENUITEM pItem)
{
ZeroMemory(pItem, sizeof(IMEMENUITEM));
pItem->m_Info = *lpImeParentMenu;
if (lpImeParentMenu->fType & IMFT_SUBMENU)
pItem->m_pSubMenu = CreateImeMenu(hIMC, lpImeParentMenu, bRightMenu);
pItem->m_nRealID = pItem->m_Info.wID;
pItem->m_Info.wID = ID_STARTIMEMENU + g_nNextMenuID++;
}
PIMEMENUNODE
CreateImeMenu(
_In_ HIMC hIMC,
_Inout_opt_ PIMEMENUITEMINFO lpImeParentMenu,
_In_ BOOL bRightMenu)
{
const DWORD dwFlags = (bRightMenu ? IGIMIF_RIGHTMENU : 0);
const DWORD dwTypes = IGIMII_CMODE |
IGIMII_SMODE |
IGIMII_CONFIGURE |
IGIMII_TOOLS |
IGIMII_HELP |
IGIMII_OTHER;
DWORD itemCount = ImmGetImeMenuItems(hIMC, dwFlags, dwTypes, lpImeParentMenu, NULL, 0);
if (!itemCount)
return NULL;
PIMEMENUNODE pMenu = AllocateImeMenu(itemCount);
if (!pMenu)
return NULL;
DWORD cbItems = sizeof(IMEMENUITEMINFO) * itemCount;
PIMEMENUITEMINFO pImeMenuItems = LocalAlloc(LPTR, cbItems);
if (!pImeMenuItems)
{
LocalFree(pMenu);
return NULL;
}
itemCount = ImmGetImeMenuItems(hIMC, dwFlags, dwTypes, lpImeParentMenu, pImeMenuItems, cbItems);
if (!itemCount)
{
LocalFree(pImeMenuItems);
LocalFree(pMenu);
return NULL;
}
PIMEMENUITEM pItems = pMenu->m_Items;
for (DWORD iItem = 0; iItem < itemCount; ++iItem)
{
GetImeMenuItem(hIMC, &pImeMenuItems[iItem], bRightMenu, &pItems[iItem]);
}
LocalFree(pImeMenuItems);
return pMenu;
}
static BOOL
FillImeMenuItem(_Out_ LPMENUITEMINFO pItemInfo, _In_ const IMEMENUITEM *pItem)
{
ZeroMemory(pItemInfo, sizeof(MENUITEMINFO));
pItemInfo->cbSize = sizeof(MENUITEMINFO);
pItemInfo->fMask = MIIM_ID | MIIM_STATE | MIIM_DATA;
pItemInfo->wID = pItem->m_Info.wID;
pItemInfo->fState = pItem->m_Info.fState;
pItemInfo->dwItemData = pItem->m_Info.dwItemData;
if (pItem->m_Info.fType)
{
pItemInfo->fMask |= MIIM_FTYPE;
pItemInfo->fType = 0;
if (pItem->m_Info.fType & IMFT_RADIOCHECK)
pItemInfo->fType |= MFT_RADIOCHECK;
if (pItem->m_Info.fType & IMFT_SEPARATOR)
pItemInfo->fType |= MFT_SEPARATOR;
}
if (pItem->m_Info.fType & IMFT_SUBMENU)
{
pItemInfo->fMask |= MIIM_SUBMENU;
pItemInfo->hSubMenu = CreatePopupMenu();
if (!MakeImeMenu(pItemInfo->hSubMenu, pItem->m_pSubMenu))
{
DestroyMenu(pItemInfo->hSubMenu);
pItemInfo->hSubMenu = NULL;
return FALSE;
}
}
if (pItem->m_Info.hbmpChecked && pItem->m_Info.hbmpUnchecked)
{
pItemInfo->fMask |= MIIM_CHECKMARKS;
pItemInfo->hbmpChecked = pItem->m_Info.hbmpChecked;
pItemInfo->hbmpUnchecked = pItem->m_Info.hbmpUnchecked;
}
if (pItem->m_Info.hbmpItem)
{
pItemInfo->fMask |= MIIM_BITMAP;
pItemInfo->hbmpItem = pItem->m_Info.hbmpItem;
}
PCTSTR szString = pItem->m_Info.szString;
if (szString && szString[0])
{
pItemInfo->fMask |= MIIM_STRING;
pItemInfo->dwTypeData = (PTSTR)szString;
pItemInfo->cch = lstrlen(szString);
}
return TRUE;
}
static BOOL
MakeImeMenu(_In_ HMENU hMenu, _In_ const IMEMENUNODE *pMenu)
{
if (!pMenu || !pMenu->m_nItems)
return FALSE;
for (INT iItem = 0; iItem < pMenu->m_nItems; ++iItem)
{
MENUITEMINFO mi = { sizeof(mi) };
if (!FillImeMenuItem(&mi, &pMenu->m_Items[iItem]))
{
ERR("FillImeMenuItem failed\n");
return FALSE;
}
if (!InsertMenuItem(hMenu, iItem, TRUE, &mi))
{
ERR("InsertMenuItem failed\n");
return FALSE;
}
}
return TRUE;
}
HMENU MenuFromImeMenu(_In_ const IMEMENUNODE *pMenu)
{
HMENU hMenu = CreatePopupMenu();
if (!pMenu)
return hMenu;
if (!MakeImeMenu(hMenu, pMenu))
{
DestroyMenu(hMenu);
return NULL;
}
return hMenu;
}
INT
GetRealImeMenuID(_In_ const IMEMENUNODE *pMenu, _In_ INT nFakeID)
{
if (!pMenu || !pMenu->m_nItems || nFakeID < ID_STARTIMEMENU)
return 0;
for (INT iItem = 0; iItem < pMenu->m_nItems; ++iItem)
{
const IMEMENUITEM *pItem = &pMenu->m_Items[iItem];
if (pItem->m_Info.wID == nFakeID)
return pItem->m_nRealID;
if (pItem->m_pSubMenu)
{
INT nRealID = GetRealImeMenuID(pItem->m_pSubMenu, nFakeID);
if (nRealID)
return nRealID;
}
}
return 0;
}
static BOOL
FreeMenuNode(_In_ PIMEMENUNODE pMenuNode)
{
if (!pMenuNode)
return FALSE;
for (INT iItem = 0; iItem < pMenuNode->m_nItems; ++iItem)
{
PIMEMENUITEM pItem = &pMenuNode->m_Items[iItem];
if (pItem->m_Info.hbmpChecked)
DeleteObject(pItem->m_Info.hbmpChecked);
if (pItem->m_Info.hbmpUnchecked)
DeleteObject(pItem->m_Info.hbmpUnchecked);
if (pItem->m_Info.hbmpItem)
DeleteObject(pItem->m_Info.hbmpItem);
}
LocalFree(pMenuNode);
return TRUE;
}
VOID
CleanupImeMenus(VOID)
{
if (!g_pMenuList)
return;
PIMEMENUNODE pNext;
for (PIMEMENUNODE pNode = g_pMenuList; pNode; pNode = pNext)
{
pNext = pNode->m_pNext;
FreeMenuNode(pNode);
}
g_pMenuList = NULL;
g_nNextMenuID = 0;
}

View File

@@ -0,0 +1,38 @@
/*
* PROJECT: ReactOS Keyboard Layout Switcher
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: IME menu handling
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#pragma once
#include <immdev.h>
#define ID_STARTIMEMENU 1000
struct tagIMEMENUNODE;
typedef struct tagIMEMENUITEM
{
IMEMENUITEMINFO m_Info;
UINT m_nRealID;
struct tagIMEMENUNODE *m_pSubMenu;
} IMEMENUITEM, *PIMEMENUITEM;
typedef struct tagIMEMENUNODE
{
struct tagIMEMENUNODE *m_pNext;
INT m_nItems;
IMEMENUITEM m_Items[ANYSIZE_ARRAY];
} IMEMENUNODE, *PIMEMENUNODE;
PIMEMENUNODE
CreateImeMenu(
_In_ HIMC hIMC,
_Inout_opt_ PIMEMENUITEMINFO lpImeParentMenu,
_In_ BOOL bRightMenu);
HMENU MenuFromImeMenu(_In_ const IMEMENUNODE *pMenu);
INT GetRealImeMenuID(_In_ const IMEMENUNODE *pMenu, _In_ INT nFakeID);
VOID CleanupImeMenus(VOID);

View File

@@ -0,0 +1,16 @@
spec2def(indicdll.dll indicdll.spec)
file(GLOB indicdll_rc_deps res/*.*)
add_rc_deps(indicdll.rc ${indicdll_rc_deps})
list(APPEND SOURCE
indicdll.c
indicdll.rc
${CMAKE_CURRENT_BINARY_DIR}/indicdll.def)
add_library(indicdll MODULE ${SOURCE})
set_module_type(indicdll win32dll UNICODE)
target_link_libraries(indicdll wine)
add_importlibs(indicdll user32 comctl32 msvcrt kernel32 ntdll)
add_cd_file(TARGET indicdll DESTINATION reactos/system32 FOR all)

View File

@@ -0,0 +1,276 @@
/*
* PROJECT: ReactOS Keyboard Layout Switcher
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
* PURPOSE: Switching Keyboard Layouts
* COPYRIGHT: Copyright Dmitry Chapyshev (dmitry@reactos.org)
* Copyright Colin Finck (mail@colinfinck.de)
* Copyright 2022-2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#include "../kbswitch.h"
#include "resource.h"
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(internat);
typedef struct tagSHARED_DATA
{
HHOOK hWinHook;
HHOOK hShellHook;
HHOOK hKeyboardHook;
HWND hKbSwitchWnd;
UINT nHotID;
DWORD_PTR dwHotMenuItemData;
} SHARED_DATA, *PSHARED_DATA;
HINSTANCE g_hInstance = NULL;
HANDLE g_hShared = NULL;
PSHARED_DATA g_pShared = NULL;
HANDLE g_hMutex = NULL;
#define MUTEX_TIMEOUT_MS (4 * 1000)
static inline BOOL EnterProtectedSection(VOID)
{
DWORD dwWaitResult = WaitForSingleObject(g_hMutex, MUTEX_TIMEOUT_MS);
if (dwWaitResult == WAIT_OBJECT_0)
return TRUE;
if (dwWaitResult == WAIT_TIMEOUT)
WARN("Timeout while waiting for mutex.\n");
else
WARN("Failed to acquire mutex. Error code: %lu\n", GetLastError());
return FALSE;
}
static inline VOID LeaveProtectedSection(VOID)
{
ReleaseMutex(g_hMutex);
}
static inline VOID
PostMessageToMainWnd(UINT Msg, WPARAM wParam, LPARAM lParam)
{
if (g_pShared->hKbSwitchWnd)
PostMessage(g_pShared->hKbSwitchWnd, Msg, wParam, lParam);
}
static LRESULT CALLBACK
WinHookProc(INT code, WPARAM wParam, LPARAM lParam)
{
if (code < 0)
return CallNextHookEx(g_pShared->hWinHook, code, wParam, lParam);
switch (code)
{
case HCBT_ACTIVATE:
case HCBT_SETFOCUS:
{
HWND hwndFocus = (HWND)wParam;
if (hwndFocus && hwndFocus != g_pShared->hKbSwitchWnd)
PostMessageToMainWnd(WM_WINDOW_ACTIVATE, (WPARAM)hwndFocus, 0);
break;
}
}
return CallNextHookEx(g_pShared->hWinHook, code, wParam, lParam);
}
static LRESULT CALLBACK
ShellHookProc(INT code, WPARAM wParam, LPARAM lParam)
{
if (code < 0)
return CallNextHookEx(g_pShared->hShellHook, code, wParam, lParam);
switch (code)
{
case HSHELL_WINDOWACTIVATED:
{
PostMessageToMainWnd(WM_WINDOW_ACTIVATE, wParam, 0);
break;
}
case HSHELL_LANGUAGE:
{
PostMessageToMainWnd(WM_LANG_CHANGED, wParam, lParam);
break;
}
}
return CallNextHookEx(g_pShared->hShellHook, code, wParam, lParam);
}
static inline BOOL
CheckVirtualKey(UINT vKey, UINT vKey0, UINT vKey1, UINT vKey2)
{
return vKey == vKey0 || vKey == vKey1 || vKey == vKey2;
}
static LRESULT CALLBACK
KeyboardProc(INT code, WPARAM wParam, LPARAM lParam)
{
if (code < 0)
return CallNextHookEx(g_pShared->hKeyboardHook, code, wParam, lParam);
if (code == HC_ACTION)
{
UINT vKey = (UINT)wParam;
LONG keyFlags = HIWORD(lParam);
if (!(keyFlags & KF_UP) && !(keyFlags & KF_REPEAT))
{
BOOL bShiftPressed = (GetKeyState(VK_SHIFT) < 0);
BOOL bAltPressed = (keyFlags & KF_ALTDOWN) || (GetKeyState(VK_MENU) < 0);
BOOL bCtrlPressed = (GetKeyState(VK_CONTROL) < 0);
// Detect Alt+Shift and Ctrl+Shift
if ((bAltPressed && CheckVirtualKey(vKey, VK_SHIFT, VK_LSHIFT, VK_RSHIFT)) ||
(bShiftPressed && CheckVirtualKey(vKey, VK_MENU, VK_LMENU, VK_RMENU)) ||
(bCtrlPressed && CheckVirtualKey(vKey, VK_SHIFT, VK_LSHIFT, VK_RSHIFT)) ||
(bShiftPressed && CheckVirtualKey(vKey, VK_CONTROL, VK_LCONTROL, VK_RCONTROL)))
{
PostMessageToMainWnd(WM_LANG_CHANGED, 0, 0);
}
}
}
return CallNextHookEx(g_pShared->hKeyboardHook, code, wParam, lParam);
}
BOOL APIENTRY
KbSwitchSetHooks(_In_ BOOL bDoHook)
{
TRACE("bDoHook: %d\n", bDoHook);
if (!EnterProtectedSection())
return FALSE;
if (bDoHook)
{
g_pShared->hWinHook = SetWindowsHookEx(WH_CBT, WinHookProc, g_hInstance, 0);
g_pShared->hShellHook = SetWindowsHookEx(WH_SHELL, ShellHookProc, g_hInstance, 0);
g_pShared->hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInstance, 0);
if (g_pShared->hWinHook &&
g_pShared->hShellHook &&
g_pShared->hKeyboardHook)
{
// Find kbswitch window if necessary
if (!g_pShared->hKbSwitchWnd || !IsWindow(g_pShared->hKbSwitchWnd))
{
g_pShared->hKbSwitchWnd = FindWindow(INDICATOR_CLASS, NULL);
TRACE("hKbSwitchWnd: %p\n", g_pShared->hKbSwitchWnd);
}
LeaveProtectedSection();
return TRUE;
}
}
/* Unhook */
if (g_pShared->hKeyboardHook)
{
UnhookWindowsHookEx(g_pShared->hKeyboardHook);
g_pShared->hKeyboardHook = NULL;
}
if (g_pShared->hShellHook)
{
UnhookWindowsHookEx(g_pShared->hShellHook);
g_pShared->hShellHook = NULL;
}
if (g_pShared->hWinHook)
{
UnhookWindowsHookEx(g_pShared->hWinHook);
g_pShared->hWinHook = NULL;
}
LeaveProtectedSection();
return !bDoHook;
}
// indicdll!12
VOID APIENTRY
GetPenMenuData(PUINT pnID, PDWORD_PTR pdwItemData)
{
if (EnterProtectedSection())
{
*pnID = g_pShared->nHotID;
*pdwItemData = g_pShared->dwHotMenuItemData;
LeaveProtectedSection();
}
else
{
WARN("EnterProtectedSection failed\n");
*pnID = 0;
*pdwItemData = 0;
}
}
// indicdll!14
VOID APIENTRY
SetPenMenuData(_In_ UINT nID, _In_ DWORD_PTR dwItemData)
{
if (EnterProtectedSection())
{
g_pShared->nHotID = nID;
g_pShared->dwHotMenuItemData = dwItemData;
LeaveProtectedSection();
}
else
{
WARN("EnterProtectedSection failed\n");
}
}
BOOL WINAPI
DllMain(IN HINSTANCE hinstDLL,
IN DWORD dwReason,
IN LPVOID lpvReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
{
TRACE("DLL_PROCESS_ATTACH\n");
g_hInstance = hinstDLL;
g_hShared = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
0, sizeof(SHARED_DATA), TEXT("InternatSHData"));
if (!g_hShared)
{
ERR("!g_hShared\n");
return FALSE;
}
BOOL bAlreadyExists = GetLastError() == ERROR_ALREADY_EXISTS;
TRACE("bAlreadyExists: %d\n", bAlreadyExists);
g_pShared = (PSHARED_DATA)MapViewOfFile(g_hShared, FILE_MAP_WRITE, 0, 0, 0);
if (!g_pShared)
{
ERR("!g_pShared\n");
return FALSE;
}
if (!bAlreadyExists)
ZeroMemory(g_pShared, sizeof(*g_pShared));
g_hMutex = CreateMutex(NULL, FALSE, TEXT("INDICDLL_PROTECTED"));
if (!g_hMutex)
{
ERR("Failed to create mutex\n");
return FALSE;
}
break;
}
case DLL_PROCESS_DETACH:
{
TRACE("DLL_PROCESS_DETACH\n");
if (g_hMutex)
CloseHandle(g_hMutex);
UnmapViewOfFile(g_pShared);
CloseHandle(g_hShared);
break;
}
}
return TRUE;
}

View File

@@ -0,0 +1,15 @@
#include "resource.h"
#define REACTOS_VERSION_DLL
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Keyboard Layout Switcher"
#define REACTOS_STR_INTERNAL_NAME "indicdll"
#define REACTOS_STR_ORIGINAL_FILENAME "indicdll.dll"
#include <reactos/version.rc>
IDI_IME_OPEN ICON "res/10.ico"
IDI_IME_CLOSED ICON "res/11.ico"
IDI_IME_DISABLED ICON "res/12.ico"
IDI_KOREAN_A_HALF ICON "res/13.ico"
IDI_KOREAN_A_FULL ICON "res/14.ico"
IDI_KOREAN_JR_HALF ICON "res/15.ico"
IDI_KOREAN_JR_FULL ICON "res/16.ico"

View File

@@ -0,0 +1,3 @@
1 stdcall KbSwitchSetHooks(long)
12 stdcall GetPenMenuData(ptr ptr)
14 stdcall SetPenMenuData(long long)

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1,8 @@
#define IDI_IME_OPEN 10
#define IDI_IME_CLOSED 11
#define IDI_IME_DISABLED 12
#define IDI_KOREAN_A_HALF 13
#define IDI_KOREAN_A_FULL 14
#define IDI_KOREAN_JR_HALF 15
#define IDI_KOREAN_JR_FULL 16

View File

@@ -1,12 +0,0 @@
spec2def(kbsdll.dll kbsdll.spec)
list(APPEND SOURCE
kbsdll.c
kbsdll.rc
${CMAKE_CURRENT_BINARY_DIR}/kbsdll.def)
add_library(kbsdll MODULE ${SOURCE})
set_module_type(kbsdll win32dll UNICODE)
add_importlibs(kbsdll user32 comctl32 msvcrt kernel32)
add_cd_file(TARGET kbsdll DESTINATION reactos/system32 FOR all)

View File

@@ -1,114 +0,0 @@
/*
* PROJECT: ReactOS Keyboard Layout Switcher
* FILE: base/applications/kbswitch/kbsdll/kbsdll.c
* PROGRAMMER: Dmitry Chapyshev <dmitry@reactos.org>
*
*/
#include "../kbswitch.h"
HHOOK hWinHook = NULL;
HHOOK hShellHook = NULL;
HINSTANCE hInstance = NULL;
HWND hKbSwitchWnd = NULL;
static VOID
PostMessageToMainWnd(UINT Msg, WPARAM wParam, LPARAM lParam)
{
PostMessage(hKbSwitchWnd, Msg, wParam, lParam);
}
LRESULT CALLBACK
WinHookProc(int code, WPARAM wParam, LPARAM lParam)
{
if (code < 0)
{
return CallNextHookEx(hWinHook, code, wParam, lParam);
}
switch (code)
{
case HCBT_SETFOCUS:
{
HWND hwndFocus = (HWND)wParam;
if (hwndFocus && hwndFocus != hKbSwitchWnd)
{
PostMessageToMainWnd(WM_WINDOW_ACTIVATE, wParam, lParam);
}
}
break;
}
return CallNextHookEx(hWinHook, code, wParam, lParam);
}
LRESULT CALLBACK
ShellHookProc(int code, WPARAM wParam, LPARAM lParam)
{
if (code < 0)
{
return CallNextHookEx(hShellHook, code, wParam, lParam);
}
switch (code)
{
case HSHELL_LANGUAGE:
{
PostMessageToMainWnd(WM_LANG_CHANGED, wParam, lParam);
}
break;
}
return CallNextHookEx(hShellHook, code, wParam, lParam);
}
BOOL WINAPI
KbSwitchSetHooks(VOID)
{
hWinHook = SetWindowsHookEx(WH_CBT, WinHookProc, hInstance, 0);
hShellHook = SetWindowsHookEx(WH_SHELL, ShellHookProc, hInstance, 0);
if (!hWinHook || !hShellHook)
{
return FALSE;
}
return TRUE;
}
VOID WINAPI
KbSwitchDeleteHooks(VOID)
{
if (hWinHook)
{
UnhookWindowsHookEx(hWinHook);
hWinHook = NULL;
}
if (hShellHook)
{
UnhookWindowsHookEx(hShellHook);
hShellHook = NULL;
}
}
BOOL WINAPI
DllMain(IN HINSTANCE hinstDLL,
IN DWORD dwReason,
IN LPVOID lpvReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
{
hInstance = hinstDLL;
hKbSwitchWnd = FindWindow(szKbSwitcherName, NULL);
if (!hKbSwitchWnd)
{
return FALSE;
}
}
break;
}
return TRUE;
}

View File

@@ -1,5 +0,0 @@
#define REACTOS_VERSION_DLL
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Keyboard Layout Switcher"
#define REACTOS_STR_INTERNAL_NAME "kbsdll"
#define REACTOS_STR_ORIGINAL_FILENAME "kbsdll.dll"
#include <reactos/version.rc>

View File

@@ -1,2 +0,0 @@
@ stdcall KbSwitchSetHooks()
@ stdcall KbSwitchDeleteHooks()

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
#pragma once
#include <stdarg.h>
#include <stdlib.h>
#include <windef.h>
#include <winbase.h>
#include <winuser.h>
@@ -10,20 +10,39 @@
#include <shellapi.h>
#include <tchar.h>
#include <strsafe.h>
#include <ime/indicml.h> /* INDICATOR_CLASS, INDICM_... */
#include "resource.h"
#include "indicdll/resource.h"
// Character Count of a layout ID like "00000409"
#define CCH_LAYOUT_ID 8
#define CCH_LAYOUT_ID 8 // Character Count of a layout ID like "00000409"
#define CCH_ULONG_DEC 10 // Maximum Character Count of a ULONG in decimal
// Maximum Character Count of a ULONG in decimal
#define CCH_ULONG_DEC 10
// Far East Language IDs
#define LANGID_CHINESE_SIMPLIFIED MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
#define LANGID_CHINESE_TRADITIONAL MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
#define LANGID_JAPANESE MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT)
#define LANGID_KOREAN MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT)
#define WM_KEY_PRESSED (WM_USER + 10100)
#define WM_LANG_CHANGED (WM_USER + 10200)
#define WM_WINDOW_ACTIVATE (WM_USER + 10300)
typedef BOOL (WINAPI *PKBSWITCHSETHOOKS) (VOID);
typedef VOID (WINAPI *PKBSWITCHDELETEHOOKS) (VOID);
#define IME_STATUS_NO_IME 0
#define IME_STATUS_IME_CLOSED 1
#define IME_STATUS_IME_OPEN 2
#define IME_STATUS_IME_NATIVE 4
#define IME_STATUS_IME_FULLSHAPE 8
TCHAR szKbSwitcherName[] = _T("kbswitcher");
static inline BOOL
IsWndClassName(_In_opt_ HWND hwndTarget, PCTSTR pszName)
{
TCHAR szClass[32];
GetClassName(hwndTarget, szClass, _countof(szClass));
return lstrcmpi(szClass, pszName) == 0;
}
static inline BOOL
IsConsoleWnd(_In_opt_ HWND hwndTarget)
{
return IsWndClassName(hwndTarget, TEXT("ConsoleWindowClass"));
}

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "Из&ход", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -14,3 +14,13 @@ BEGIN
MENUITEM "&Ukončit", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "&Beenden", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "E&xit", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "&Salir", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "V&älju", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "Quitt&er", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "&יציאה", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "&Esci", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "終了(&E)", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "入力システム (IME) - オン"
IDS_IME_OFF "入力システム (IME) - オフ"
IDS_SOFTKBD_ON "ソフト キーボード - オン"
IDS_SOFTKBD_OFF "ソフト キーボード - オフ"
IDS_SHOWTOOLBAR "ツールバーを表示する"
IDS_INPUTSYSTEM "入力システム (IME) の設定..."
END

View File

@@ -11,3 +11,13 @@ BEGIN
MENUITEM "&Baigti", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "&Avslutt", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -17,3 +17,13 @@ BEGIN
MENUITEM "&Wyjście", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -11,3 +11,13 @@ BEGIN
MENUITEM "&Sair", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -16,3 +16,13 @@ BEGIN
MENUITEM "&Sair", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -16,3 +16,13 @@ BEGIN
MENUITEM "I&eșire", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -9,3 +9,13 @@ BEGIN
MENUITEM "&Выход", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -13,3 +13,13 @@ BEGIN
MENUITEM "&Zavrieť", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -13,3 +13,13 @@ BEGIN
MENUITEM "&Dil", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -11,3 +11,13 @@ BEGIN
MENUITEM "&Avsluta", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -11,3 +11,13 @@ BEGIN
MENUITEM "&Çıkış", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -17,3 +17,13 @@ BEGIN
MENUITEM "В&ихід", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -17,3 +17,13 @@ BEGIN
MENUITEM "退出(&E)", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -17,3 +17,13 @@ BEGIN
MENUITEM "結束(&E)", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -17,3 +17,13 @@ BEGIN
MENUITEM "結束(&E)", ID_EXIT
END
END
STRINGTABLE
BEGIN
IDS_IME_ON "Input System (IME) - ON"
IDS_IME_OFF "Input System (IME) - OFF"
IDS_SOFTKBD_ON "Soft Keyboard - ON"
IDS_SOFTKBD_OFF "Soft Keyboard - OFF"
IDS_SHOWTOOLBAR "Show Toolbar"
IDS_INPUTSYSTEM "Input System (IME) configuration..."
END

View File

@@ -1,12 +1,24 @@
#pragma once
/* Icons */
#define IDI_MAIN 100
#define IDI_MAIN 150
/* Menus */
#define IDR_POPUP 12000
#define IDR_POPUP 100
/* Strings */
#define IDS_IME_ON 300
#define IDS_IME_OFF 301
#define IDS_SOFTKBD_ON 302
#define IDS_SOFTKBD_OFF 303
#define IDS_SHOWTOOLBAR 304
#define IDS_INPUTSYSTEM 305
/* Menu items */
#define ID_EXIT 10001
#define ID_PREFERENCES 10002
#define ID_NEXTLAYOUT 10003
#define ID_EXIT 100
#define ID_PREFERENCES 101
#define ID_INPUTSYSTEM 252
#define ID_IMEONOFF 500
#define ID_SOFTKBDONOFF 501
#define ID_SHOWTOOLBAR 502
#define ID_LANG_BASE 1000

View File

@@ -140,6 +140,7 @@ FreeLdrPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
hFreeLdrDialog = hDlg;
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
InitializeFreeLDRDialog(hDlg);
DisableAllExcept(hDlg, IDC_LIST_BOX); // FIXME: Implement saving
return TRUE;
case WM_COMMAND:
switch(HIWORD(wParam))

View File

@@ -80,6 +80,14 @@ BOOL EnableDialogTheme(HWND hwnd)
return FALSE;
}
}
VOID DisableAllExcept(HWND hTabDlg, UINT idExcept)
{
HWND hSkip = GetDlgItem(hTabDlg, idExcept);
for (HWND hWnd = NULL; (hWnd = FindWindowExW(hTabDlg, hWnd, NULL, NULL)) != NULL;)
EnableWindow(hWnd, hWnd == hSkip);
}
BOOL OnCreate(HWND hWnd)
{
TCHAR szTemp[256];
@@ -135,6 +143,10 @@ BOOL OnCreate(HWND hWnd)
MsConfig_OnTabWndSelChange();
// FIXME: We don't support applying anything
EnableWindow(GetDlgItem(hWnd, IDOK), FALSE);
EnableWindow(GetDlgItem(hWnd, IDC_BTN_APPLY), FALSE);
EnableWindow(GetDlgItem(hWnd, IDC_BTN_HELP), FALSE);
return TRUE;
}

View File

@@ -1,3 +1,5 @@
#pragma once
extern HINSTANCE hInst;
VOID DisableAllExcept(HWND hTabDlg, UINT idExcept);

View File

@@ -67,7 +67,26 @@ ServicesPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
(void)ListView_InsertColumn(hServicesListCtrl, 3, &column);
GetServices();
DisableAllExcept(hDlg, IDC_SERVICES_LIST); // FIXME: Implement saving
return TRUE;
case WM_NOTIFY:
if (wParam == IDC_SERVICES_LIST)
{
NMLISTVIEW *pnmlv = (NMLISTVIEW*)lParam;
UINT toggled = (pnmlv->uOldState ^ pnmlv->uNewState) & LVIS_STATEIMAGEMASK;
if (pnmlv->hdr.code == LVN_ITEMCHANGING && (pnmlv->uChanged & LVIF_STATE) && toggled)
{
// Only allow checkbox changes during WM_INITDIALOG
if (!IsWindowEnabled(GetDlgItem(hDlg, IDC_BTN_SERVICES_ACTIVATE)))
{
MessageBeep(-1);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, TRUE);
return TRUE;
}
}
}
break;
}
return 0;

View File

@@ -65,8 +65,26 @@ StartupPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
//FIXME: What about HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
//FIXME: Common Startup (startmenu)
DisableAllExcept(hDlg, IDC_STARTUP_LIST); // FIXME: Implement saving
return TRUE;
case WM_NOTIFY:
if (wParam == IDC_STARTUP_LIST)
{
NMLISTVIEW *pnmlv = (NMLISTVIEW*)lParam;
UINT toggled = (pnmlv->uOldState ^ pnmlv->uNewState) & LVIS_STATEIMAGEMASK;
if (pnmlv->hdr.code == LVN_ITEMCHANGING && (pnmlv->uChanged & LVIF_STATE) && toggled)
{
// Only allow checkbox changes during WM_INITDIALOG
if (!IsWindowEnabled(GetDlgItem(hDlg, IDC_BTN_STARTUP_ACTIVATE)))
{
MessageBeep(-1);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, TRUE);
return TRUE;
}
}
}
break;
}
return 0;

View File

@@ -94,6 +94,7 @@ SystemPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
hSystemDialog = hDlg;
SetWindowPos(hDlg, NULL, 10, 32, 0, 0, SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
InitializeSystemDialog(hDlg);
DisableAllExcept(hDlg, IDC_SYSTEM_TREE); // FIXME: Implement saving
return TRUE;
}
}

View File

@@ -4,7 +4,7 @@
* PURPOSE: Event Log Viewer main file.
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
#include "eventvwr.h"
@@ -1440,7 +1440,7 @@ LONG EventLogFilter_Release(IN PEVENTLOGFILTER EventLogFilter)
void
TrimNulls(LPWSTR s)
{
WCHAR *c;
PWCHAR c;
if (s != NULL)
{
@@ -1451,17 +1451,20 @@ TrimNulls(LPWSTR s)
}
}
DWORD
SIZE_T
GetExpandedFilePathName(
IN LPCWSTR ComputerName OPTIONAL,
IN LPCWSTR lpFileName,
OUT LPWSTR lpFullFileName OPTIONAL,
IN DWORD nSize)
_In_opt_ PCWSTR ComputerName,
_In_ PCWSTR FileName,
_Out_writes_z_(nSize) PWSTR pFullFileName,
_In_ SIZE_T nSize)
{
SIZE_T dwLength;
if (nSize == 0)
return 0;
/* Determine the needed size after expansion of any environment strings */
dwLength = ExpandEnvironmentStringsW(lpFileName, NULL, 0);
dwLength = ExpandEnvironmentStringsW(FileName, NULL, 0);
if (dwLength == 0)
{
/* We failed, bail out */
@@ -1487,15 +1490,14 @@ GetExpandedFilePathName(
if (dwLength > nSize)
{
/* No, return the needed size in characters (includes NULL-terminator) */
*pFullFileName = UNICODE_NULL;
return dwLength;
}
/* Now expand the file path */
ASSERT(dwLength <= nSize);
/* Expand any existing environment strings */
if (ExpandEnvironmentStringsW(lpFileName, lpFullFileName, dwLength) == 0)
if (ExpandEnvironmentStringsW(FileName, pFullFileName, dwLength) == 0)
{
/* We failed, bail out */
return 0;
@@ -1508,16 +1510,16 @@ GetExpandedFilePathName(
/* Note that we previously skipped any potential leading backslashes */
/* Replace ':' by '$' in the drive letter */
if (*lpFullFileName && lpFullFileName[1] == L':')
lpFullFileName[1] = L'$';
if (*pFullFileName && pFullFileName[1] == L':')
pFullFileName[1] = L'$';
/* Prepend the computer name */
MoveMemory(lpFullFileName + 2 + wcslen(ComputerName) + 1,
lpFullFileName, dwLength * sizeof(WCHAR) - (2 + wcslen(ComputerName) + 1) * sizeof(WCHAR));
lpFullFileName[0] = L'\\';
lpFullFileName[1] = L'\\';
wcsncpy(lpFullFileName + 2, ComputerName, wcslen(ComputerName));
lpFullFileName[2 + wcslen(ComputerName)] = L'\\';
MoveMemory(pFullFileName + 2 + wcslen(ComputerName) + 1,
pFullFileName, dwLength * sizeof(WCHAR) - (2 + wcslen(ComputerName) + 1) * sizeof(WCHAR));
pFullFileName[0] = L'\\';
pFullFileName[1] = L'\\';
wcsncpy(pFullFileName + 2, ComputerName, wcslen(ComputerName));
pFullFileName[2 + wcslen(ComputerName)] = L'\\';
}
/* Return the number of stored characters (includes NULL-terminator) */
@@ -1525,27 +1527,38 @@ GetExpandedFilePathName(
}
BOOL
GetEventMessageFileDLL(IN LPCWSTR lpLogName,
IN LPCWSTR SourceName,
IN LPCWSTR EntryName,
OUT PWCHAR lpModuleName) // TODO: Add IN DWORD BufLen
GetEventMessageFileDLL(
_In_ PCWSTR LogName,
_In_ PCWSTR SourceName,
_In_ PCWSTR EntryName,
_Out_writes_z_(cchName) PWSTR pModuleName,
_In_ SIZE_T cchName)
{
BOOL Success = FALSE;
LONG Result;
DWORD dwType, dwSize;
WCHAR szModuleName[MAX_PATH];
WCHAR szKeyName[MAX_PATH];
PWSTR KeyPath;
SIZE_T cbKeyPath;
HKEY hLogKey = NULL;
HKEY hSourceKey = NULL;
StringCbCopyW(szKeyName, sizeof(szKeyName), EVENTLOG_BASE_KEY);
StringCbCatW(szKeyName, sizeof(szKeyName), lpLogName);
if (cchName == 0)
return FALSE;
Result = RegOpenKeyExW(hkMachine,
szKeyName,
0,
KEY_READ,
&hLogKey);
cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(LogName) + 1) * sizeof(WCHAR);
KeyPath = HeapAlloc(GetProcessHeap(), 0, cbKeyPath);
if (!KeyPath)
{
ShowWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
StringCbCopyW(KeyPath, cbKeyPath, EVENTLOG_BASE_KEY);
StringCbCatW(KeyPath, cbKeyPath, LogName);
Result = RegOpenKeyExW(hkMachine, KeyPath, 0, KEY_READ, &hLogKey);
HeapFree(GetProcessHeap(), 0, KeyPath);
if (Result != ERROR_SUCCESS)
return FALSE;
@@ -1554,11 +1567,9 @@ GetEventMessageFileDLL(IN LPCWSTR lpLogName,
0,
KEY_QUERY_VALUE,
&hSourceKey);
RegCloseKey(hLogKey);
if (Result != ERROR_SUCCESS)
{
RegCloseKey(hLogKey);
return FALSE;
}
dwSize = sizeof(szModuleName);
Result = RegQueryValueExW(hSourceKey,
@@ -1569,34 +1580,42 @@ GetEventMessageFileDLL(IN LPCWSTR lpLogName,
&dwSize);
if ((Result != ERROR_SUCCESS) || (dwType != REG_EXPAND_SZ && dwType != REG_SZ))
{
szModuleName[0] = UNICODE_NULL;
*szModuleName = UNICODE_NULL;
}
else
{
/* NULL-terminate the string and expand it */
szModuleName[dwSize / sizeof(WCHAR) - 1] = UNICODE_NULL;
GetExpandedFilePathName(lpComputerName, szModuleName, lpModuleName, ARRAYSIZE(szModuleName));
Success = TRUE;
Success =
(GetExpandedFilePathName(lpComputerName, szModuleName,
pModuleName, cchName) != 0 && *pModuleName);
}
RegCloseKey(hSourceKey);
RegCloseKey(hLogKey);
return Success;
}
BOOL
GetEventCategory(IN LPCWSTR KeyName,
IN LPCWSTR SourceName,
IN PEVENTLOGRECORD pevlr,
OUT PWCHAR CategoryName) // TODO: Add IN DWORD BufLen
GetEventCategory(
_In_ PCWSTR KeyName,
_In_ PCWSTR SourceName,
_In_ PEVENTLOGRECORD pevlr,
_Out_writes_z_(cchName) PWSTR CategoryName,
_In_ SIZE_T cchName)
{
BOOL Success = FALSE;
WCHAR szMessageDLL[MAX_PATH];
LPWSTR lpMsgBuf = NULL;
LPWSTR lpMsgBuf;
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_CATEGORY_MESSAGE_FILE, szMessageDLL))
if (cchName == 0)
return FALSE;
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_CATEGORY_MESSAGE_FILE,
szMessageDLL, _countof(szMessageDLL)))
{
goto Quit;
}
/* Retrieve the message string without appending extra newlines */
lpMsgBuf =
@@ -1612,7 +1631,7 @@ GetEventCategory(IN LPCWSTR KeyName,
TrimNulls(lpMsgBuf);
/* Copy the category name */
StringCchCopyW(CategoryName, MAX_PATH, lpMsgBuf);
StringCchCopyW(CategoryName, cchName, lpMsgBuf);
/* Free the buffer allocated by FormatMessage */
LocalFree(lpMsgBuf);
@@ -1626,7 +1645,7 @@ Quit:
{
if (pevlr->EventCategory != 0)
{
StringCchPrintfW(CategoryName, MAX_PATH, L"(%lu)", pevlr->EventCategory);
StringCchPrintfW(CategoryName, cchName, L"(%lu)", pevlr->EventCategory);
Success = TRUE;
}
}
@@ -1634,12 +1653,14 @@ Quit:
return Success;
}
BOOL // NOTE: Used by evtdetctl.c
GetEventMessage(IN LPCWSTR KeyName,
IN LPCWSTR SourceName,
IN PEVENTLOGRECORD pevlr,
OUT PWCHAR EventText) // TODO: Add IN DWORD BufLen
// NOTE: Used by evtdetctl.c
BOOL
GetEventMessage(
_In_ PCWSTR KeyName,
_In_ PCWSTR SourceName,
_In_ PEVENTLOGRECORD pevlr,
_Out_writes_z_(cchText) PWSTR EventText,
_In_ SIZE_T cchText)
{
BOOL Success = FALSE;
DWORD i;
@@ -1647,26 +1668,36 @@ GetEventMessage(IN LPCWSTR KeyName,
WCHAR SourceModuleName[1024];
WCHAR ParameterModuleName[1024];
BOOL IsParamModNameCached = FALSE;
LPWSTR lpMsgBuf = NULL;
LPWSTR lpMsgBuf;
LPWSTR szStringArray, szMessage;
LPWSTR *szArguments;
if (cchText == 0)
return FALSE;
/* Get the event string array */
szStringArray = (LPWSTR)((LPBYTE)pevlr + pevlr->StringOffset);
/* NOTE: GetEventMessageFileDLL can return a comma-separated list of DLLs */
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_MESSAGE_FILE, SourceModuleName))
if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_MESSAGE_FILE,
SourceModuleName, _countof(SourceModuleName)))
{
goto Quit;
}
/* Allocate space for insertion strings */
szArguments = HeapAlloc(GetProcessHeap(), 0, pevlr->NumStrings * sizeof(LPVOID));
if (!szArguments)
goto Quit;
// TODO: Revisit this whole IsParamModNameCached later,
// see commits c1ecc98f60 (r71368) and d5ba2a3784 (r71958).
*ParameterModuleName = UNICODE_NULL; // TEMP fix in case GetEventMessageFileDLL fails.
if (!IsParamModNameCached)
{
/* Now that the parameter file list is loaded, no need to reload it at the next run! */
IsParamModNameCached = GetEventMessageFileDLL(KeyName, SourceName, EVENT_PARAMETER_MESSAGE_FILE, ParameterModuleName);
IsParamModNameCached = GetEventMessageFileDLL(KeyName, SourceName, EVENT_PARAMETER_MESSAGE_FILE,
ParameterModuleName, _countof(ParameterModuleName));
// FIXME: If the string loading failed the first time, no need to retry it just after???
}
@@ -1679,7 +1710,7 @@ GetEventMessage(IN LPCWSTR KeyName,
/*
* HACK:
* We do some hackish preformatting of the cached event strings...
* That's because after we pass the string to FormatMessage
* That's because below, we pass the string to FormatMessage
* (via GetMessageStringFromDllList) with the FORMAT_MESSAGE_ARGUMENT_ARRAY
* flag, instead of ignoring the insertion parameters and do the formatting
* by ourselves. Therefore, the resulting string should have the parameter
@@ -1737,7 +1768,7 @@ GetEventMessage(IN LPCWSTR KeyName,
}
/* Copy the event text */
StringCchCopyW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, lpMsgBuf);
StringCchCopyW(EventText, cchText, lpMsgBuf);
/* Free the buffer allocated by FormatMessage */
LocalFree(lpMsgBuf);
@@ -1748,17 +1779,31 @@ GetEventMessage(IN LPCWSTR KeyName,
Quit:
if (!Success)
{
/* Get a read-only pointer to the "event-not-found" string */
lpMsgBuf = HeapAlloc(GetProcessHeap(), 0, EVENT_MESSAGE_EVENTTEXT_BUFFER * sizeof(WCHAR));
LoadStringW(hInst, IDS_EVENTSTRINGIDNOTFOUND, lpMsgBuf, EVENT_MESSAGE_EVENTTEXT_BUFFER);
StringCchPrintfW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, lpMsgBuf, (pevlr->EventID & 0xFFFF), SourceName);
/* Get a read-only pointer to the "Event-Not-Found" string */
SIZE_T cchResLen =
LoadStringW(hInst, IDS_EVENTSTRINGIDNOTFOUND, (PWSTR)&szMessage, 0);
lpMsgBuf = HeapAlloc(GetProcessHeap(), 0, (cchResLen + 1) * sizeof(WCHAR));
if (lpMsgBuf)
{
StringCchCopyNW(lpMsgBuf, cchResLen + 1, szMessage, cchResLen);
szMessage = lpMsgBuf;
}
else
{
/* Use a hardcoded format string */
szMessage = L"Event ID ( %lu ), Source ( %s )\n\n";
}
StringCchPrintfW(EventText, cchText, szMessage, (pevlr->EventID & 0xFFFF), SourceName);
if (lpMsgBuf)
HeapFree(GetProcessHeap(), 0, lpMsgBuf);
/* Append the strings */
szMessage = szStringArray;
for (i = 0; i < pevlr->NumStrings; i++)
{
StringCchCatW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, szMessage);
StringCchCatW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, L"\n");
StringCchCatW(EventText, cchText, szMessage);
StringCchCatW(EventText, cchText, L"\n");
szMessage += wcslen(szMessage) + 1;
}
}
@@ -1767,49 +1812,56 @@ Quit:
}
VOID
GetEventType(IN WORD dwEventType,
OUT PWCHAR eventTypeText) // TODO: Add IN DWORD BufLen
GetEventType(
_In_ WORD dwEventType,
_Out_writes_z_(cchText) PWSTR pszEventType,
_In_ SIZE_T cchText)
{
switch (dwEventType)
{
case EVENTLOG_ERROR_TYPE:
LoadStringW(hInst, IDS_EVENTLOG_ERROR_TYPE, eventTypeText, MAX_LOADSTRING);
LoadStringW(hInst, IDS_EVENTLOG_ERROR_TYPE, pszEventType, cchText);
break;
case EVENTLOG_WARNING_TYPE:
LoadStringW(hInst, IDS_EVENTLOG_WARNING_TYPE, eventTypeText, MAX_LOADSTRING);
LoadStringW(hInst, IDS_EVENTLOG_WARNING_TYPE, pszEventType, cchText);
break;
case EVENTLOG_INFORMATION_TYPE:
LoadStringW(hInst, IDS_EVENTLOG_INFORMATION_TYPE, eventTypeText, MAX_LOADSTRING);
LoadStringW(hInst, IDS_EVENTLOG_INFORMATION_TYPE, pszEventType, cchText);
break;
case EVENTLOG_SUCCESS:
LoadStringW(hInst, IDS_EVENTLOG_SUCCESS, eventTypeText, MAX_LOADSTRING);
LoadStringW(hInst, IDS_EVENTLOG_SUCCESS, pszEventType, cchText);
break;
case EVENTLOG_AUDIT_SUCCESS:
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_SUCCESS, eventTypeText, MAX_LOADSTRING);
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_SUCCESS, pszEventType, cchText);
break;
case EVENTLOG_AUDIT_FAILURE:
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_FAILURE, eventTypeText, MAX_LOADSTRING);
LoadStringW(hInst, IDS_EVENTLOG_AUDIT_FAILURE, pszEventType, cchText);
break;
default:
LoadStringW(hInst, IDS_EVENTLOG_UNKNOWN_TYPE, eventTypeText, MAX_LOADSTRING);
LoadStringW(hInst, IDS_EVENTLOG_UNKNOWN_TYPE, pszEventType, cchText);
break;
}
}
BOOL
GetEventUserName(IN PEVENTLOGRECORD pelr,
IN OUT PSID *pLastSid,
OUT PWCHAR pszUser) // TODO: Add IN DWORD BufLen
GetEventUserName(
_In_ PEVENTLOGRECORD pelr,
_Inout_ PSID *pLastSid,
_Out_writes_z_(cchUser) PWSTR pszUser,
_In_ SIZE_T cchUser)
{
PSID pCurrentSid;
PWSTR StringSid;
WCHAR szName[1024];
WCHAR szDomain[1024];
SID_NAME_USE peUse;
DWORD cchName = ARRAYSIZE(szName);
DWORD cchDomain = ARRAYSIZE(szDomain);
DWORD cchName = _countof(szName);
DWORD cchDomain = _countof(szDomain);
BOOL Success = FALSE;
if (cchUser == 0)
return FALSE;
/* Point to the SID */
pCurrentSid = (PSID)((LPBYTE)pelr + pelr->UserSidOffset);
@@ -1840,15 +1892,15 @@ GetEventUserName(IN PEVENTLOGRECORD pelr,
&cchDomain,
&peUse))
{
StringCchCopyW(pszUser, MAX_PATH, szName);
StringCchCopyW(pszUser, cchUser, szName);
Success = TRUE;
}
else if (ConvertSidToStringSidW(pCurrentSid, &StringSid))
{
/* Copy the string only if the user-provided buffer is big enough */
if (wcslen(StringSid) + 1 <= MAX_PATH) // + 1 for NULL-terminator
if (wcslen(StringSid) + 1 <= cchUser) // + 1 for NULL-terminator
{
StringCchCopyW(pszUser, MAX_PATH, StringSid);
StringCchCopyW(pszUser, cchUser, StringSid);
Success = TRUE;
}
else
@@ -1978,7 +2030,6 @@ EnumEventsThread(IN LPVOID lpParameter)
BOOL bResult = TRUE; /* Read succeeded */
HANDLE hProcessHeap = GetProcessHeap();
PSID pLastSid = NULL;
INT nItems;
UINT uStep = 0, uStepAt = 0, uPos = 0;
@@ -1998,7 +2049,8 @@ EnumEventsThread(IN LPVOID lpParameter)
SYSTEMTIME time;
LVITEMW lviEventItem;
EnableEventDetailsButtons(hwndEventDetails, FALSE);
/* Disable the Previous/Next buttons */
SendMessageW(hwndEventDetails, EVT_DISPLAY, FALSE, (LPARAM)-1);
/* Save the current event log filter globally */
EventLogFilter_AddRef(EventLogFilter);
@@ -2190,15 +2242,19 @@ EnumEventsThread(IN LPVOID lpParameter)
GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &time, NULL, szLocalTime, ARRAYSIZE(szLocalTime));
/* Get the username that generated the event, and filter it */
lpszUsername = GetEventUserName(pEvlrTmp, &pLastSid, szUsername) ? szUsername : szNoUsername;
lpszUsername = GetEventUserName(pEvlrTmp, &pLastSid,
szUsername, _countof(szUsername))
? szUsername : szNoUsername;
if (!FilterByString(EventLogFilter->Users, lpszUsername))
goto SkipEvent;
// TODO: Filter by event ID and category
GetEventType(pEvlrTmp->EventType, szEventTypeText);
GetEventType(pEvlrTmp->EventType, szEventTypeText, _countof(szEventTypeText));
lpszCategoryName = GetEventCategory(EventLog->LogName, lpszSourceName, pEvlrTmp, szCategory) ? szCategory : szNoCategory;
lpszCategoryName = GetEventCategory(EventLog->LogName, lpszSourceName, pEvlrTmp,
szCategory, _countof(szCategory))
? szCategory : szNoCategory;
StringCbPrintfW(szEventID, sizeof(szEventID), L"%u", (pEvlrTmp->EventID & 0xFFFF));
StringCbPrintfW(szCategoryID, sizeof(szCategoryID), L"%u", pEvlrTmp->EventCategory);
@@ -2265,9 +2321,6 @@ Quit:
/* All events loaded */
Cleanup:
nItems = ListView_GetItemCount(hwndListView);
EnableEventDetailsButtons(hwndEventDetails, (nItems > 0));
ShowWindow(hwndStatusProgress, SW_HIDE);
SendMessageW(hwndListView, LVM_PROGRESS, 0, FALSE);
@@ -2298,6 +2351,11 @@ Cleanup:
/* Resume list view redraw */
SendMessageW(hwndListView, WM_SETREDRAW, TRUE, 0);
/* Re-enable the Previous/Next buttons, keeping the current event details
* displayed, if any. Don't auto-select the first list item but wait for
* the user to do it. */
SendMessageW(hwndEventDetails, EVT_DISPLAY, FALSE, 0);
EventLogFilter_Release(EventLogFilter);
CloseHandle(hStopEnumEvent);
@@ -2710,14 +2768,16 @@ MyRegisterClass(HINSTANCE hInstance)
BOOL
GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
OUT PWCHAR lpModuleName, // TODO: Add IN DWORD BufLen
OUT PDWORD pdwMessageID)
GetDisplayNameFileAndID(
_In_ PCWSTR LogName,
_Out_writes_z_(cchName) PWSTR pModuleName,
_In_ SIZE_T cchName,
_Out_ PDWORD pdwMessageID)
{
BOOL Success = FALSE;
LONG Result;
HKEY hLogKey;
WCHAR *KeyPath;
PWSTR KeyPath;
SIZE_T cbKeyPath;
DWORD dwType, cbData;
DWORD dwMessageID = 0;
@@ -2726,7 +2786,10 @@ GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
/* Use a default value for the message ID */
*pdwMessageID = 0;
cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(lpLogName) + 1) * sizeof(WCHAR);
if (cchName == 0)
return FALSE;
cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(LogName) + 1) * sizeof(WCHAR);
KeyPath = HeapAlloc(GetProcessHeap(), 0, cbKeyPath);
if (!KeyPath)
{
@@ -2735,7 +2798,7 @@ GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
}
StringCbCopyW(KeyPath, cbKeyPath, EVENTLOG_BASE_KEY);
StringCbCatW(KeyPath, cbKeyPath, lpLogName);
StringCbCatW(KeyPath, cbKeyPath, LogName);
Result = RegOpenKeyExW(hkMachine, KeyPath, 0, KEY_QUERY_VALUE, &hLogKey);
HeapFree(GetProcessHeap(), 0, KeyPath);
@@ -2754,14 +2817,15 @@ GetDisplayNameFileAndID(IN LPCWSTR lpLogName,
&cbData);
if ((Result != ERROR_SUCCESS) || (dwType != REG_EXPAND_SZ && dwType != REG_SZ))
{
szModuleName[0] = UNICODE_NULL;
*szModuleName = UNICODE_NULL;
}
else
{
/* NULL-terminate the string and expand it */
szModuleName[cbData / sizeof(WCHAR) - 1] = UNICODE_NULL;
GetExpandedFilePathName(lpComputerName, szModuleName, lpModuleName, ARRAYSIZE(szModuleName));
Success = TRUE;
Success =
(GetExpandedFilePathName(lpComputerName, szModuleName,
pModuleName, cchName) != 0 && *pModuleName);
}
/*
@@ -2938,8 +3002,8 @@ BuildLogListAndFilterList(IN LPCWSTR lpComputerName)
/* Get the display name for the event log */
lpDisplayName = NULL;
ZeroMemory(szModuleName, sizeof(szModuleName));
if (GetDisplayNameFileAndID(LogName, szModuleName, &dwMessageID))
*szModuleName = UNICODE_NULL;
if (GetDisplayNameFileAndID(LogName, szModuleName, _countof(szModuleName), &dwMessageID))
{
/* Retrieve the message string without appending extra newlines */
lpDisplayName =
@@ -3342,7 +3406,7 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
MB_OK | MB_ICONERROR);
break;
}
SendMessageW(hwndEventDetails, EVT_DISPLAY, 0, (LPARAM)pnmv->iItem);
SendMessageW(hwndEventDetails, EVT_DISPLAY, TRUE, (LPARAM)pnmv->iItem);
}
break;
}
@@ -3855,9 +3919,9 @@ InitPropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
LPWSTR FileName;
HKEY hLogKey;
WCHAR *KeyPath;
DWORD cbData;
PWSTR KeyPath;
SIZE_T cbKeyPath;
DWORD cbData;
if (EventLog->Permanent)
{
@@ -3927,7 +3991,7 @@ Quit:
if (FileName && *FileName)
{
/* Expand the file name. If the log file is on a remote computer, retrieve the network share form of the file name. */
GetExpandedFilePathName(EventLog->ComputerName, FileName, wszBuf, ARRAYSIZE(wszBuf));
GetExpandedFilePathName(EventLog->ComputerName, FileName, wszBuf, _countof(wszBuf));
FileName = wszBuf;
}
else
@@ -4038,7 +4102,7 @@ SavePropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
LONG Result;
DWORD dwMaxSize = 0, dwRetention = 0;
HKEY hLogKey;
WCHAR *KeyPath;
PWSTR KeyPath;
SIZE_T cbKeyPath;
if (!EventLog->Permanent)
@@ -4347,9 +4411,9 @@ EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
cxOld = rcWnd.right - rcWnd.left;
cyOld = rcWnd.bottom - rcWnd.top;
/* Show event info in dialog control */
iEventItem = (lParam != 0 ? ((PEVENTDETAIL_INFO)lParam)->iEventItem : 0);
SendMessageW(hWndDetailsCtrl, EVT_DISPLAY, 0, (LPARAM)iEventItem);
/* Display the event info in the dialog */
iEventItem = (lParam != 0 ? ((PEVENTDETAIL_INFO)lParam)->iEventItem : -1);
SendMessageW(hWndDetailsCtrl, EVT_DISPLAY, TRUE, (LPARAM)iEventItem);
// SetWindowPos(hWndDetailsCtrl, NULL,
// 0, 0,

View File

@@ -4,7 +4,7 @@
* PURPOSE: Event Log Viewer header.
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
#ifndef _EVENTVWR_PCH_

View File

@@ -4,7 +4,7 @@
* PURPOSE: Event Details Control.
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
#include "eventvwr.h"
@@ -12,19 +12,36 @@
#include <shellapi.h>
/**
* @brief
* ReactOS-only feature:
* Enable or disable support for copying event info text using space padding
* between header titles and data, when pressing the SHIFT key while clicking
* on the "Copy" button, instead of using TABs as separators.
*
* @see CopyEventEntry().
**/
#define COPY_EVTTEXT_SPACE_PADDING_MODE
// FIXME:
#define EVENT_MESSAGE_EVENTTEXT_BUFFER (1024*10)
extern WCHAR szTitle[];
extern HWND hwndListView;
extern BOOL
GetEventMessage(IN LPCWSTR KeyName,
IN LPCWSTR SourceName,
IN PEVENTLOGRECORD pevlr,
OUT PWCHAR EventText);
GetEventMessage(
_In_ PCWSTR KeyName,
_In_ PCWSTR SourceName,
_In_ PEVENTLOGRECORD pevlr,
_Out_writes_z_(cchText) PWSTR EventText,
_In_ SIZE_T cchText);
typedef struct _DETAILDATA
{
/* The event record being displayed */
PEVENTLOGRECORD pevlr;
/* Data initialized from EVENTDETAIL_INFO */
PEVENTLOGFILTER EventLogFilter;
INT iEventItem;
@@ -38,60 +55,71 @@ typedef struct _DETAILDATA
} DETAILDATA, *PDETAILDATA;
static
VOID
DisplayEventData(
_In_ HWND hDlg,
_In_ PDETAILDATA pDetailData);
static
VOID
DisplayEvent(
_In_ HWND hDlg,
_In_ PDETAILDATA pDetailData)
{
/* Mapping of ListView column index to corresponding dialog control ID */
static const WORD lvColsToDlgItemIDs[] =
{
IDC_EVENTTYPESTATIC, IDC_EVENTDATESTATIC, IDC_EVENTTIMESTATIC,
IDC_EVENTSOURCESTATIC, IDC_EVENTCATEGORYSTATIC, IDC_EVENTIDSTATIC,
IDC_EVENTUSERSTATIC, IDC_EVENTCOMPUTERSTATIC,
};
PEVENTLOGRECORD pevlr;
PEVENTLOGFILTER EventLogFilter = pDetailData->EventLogFilter;
INT iItem = pDetailData->iEventItem;
LVITEMW li;
PEVENTLOGRECORD pevlr;
USHORT i;
BOOL bEventData;
WCHAR szEventType[MAX_PATH];
WCHAR szTime[MAX_PATH];
WCHAR szDate[MAX_PATH];
WCHAR szUser[MAX_PATH];
WCHAR szComputer[MAX_PATH];
WCHAR szSource[MAX_PATH];
WCHAR szCategory[MAX_PATH];
WCHAR szEventID[MAX_PATH];
WCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER];
/* Retrieve and cache the pointer to the selected event item */
LVITEMW li;
li.mask = LVIF_PARAM;
li.iItem = iItem;
li.iSubItem = 0;
ListView_GetItem(hwndListView, &li);
pevlr = pDetailData->pevlr = (PEVENTLOGRECORD)li.lParam;
pevlr = (PEVENTLOGRECORD)li.lParam;
ListView_GetItemText(hwndListView, iItem, 0, szEventType, ARRAYSIZE(szEventType));
ListView_GetItemText(hwndListView, iItem, 1, szDate, ARRAYSIZE(szDate));
ListView_GetItemText(hwndListView, iItem, 2, szTime, ARRAYSIZE(szTime));
ListView_GetItemText(hwndListView, iItem, 3, szSource, ARRAYSIZE(szSource));
ListView_GetItemText(hwndListView, iItem, 4, szCategory, ARRAYSIZE(szCategory));
ListView_GetItemText(hwndListView, iItem, 5, szEventID, ARRAYSIZE(szEventID));
ListView_GetItemText(hwndListView, iItem, 6, szUser, ARRAYSIZE(szUser));
ListView_GetItemText(hwndListView, iItem, 7, szComputer, ARRAYSIZE(szComputer));
SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, szDate);
SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, szTime);
SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, szUser);
SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, szSource);
SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, szComputer);
SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, szCategory);
SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, szEventID);
SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, szEventType);
for (i = 0; i < _countof(lvColsToDlgItemIDs); ++i)
{
PWSTR pszBuffer = szEventText;
if (lvColsToDlgItemIDs[i] == IDC_EVENTSOURCESTATIC)
{
/* Use a separate buffer to store the source; used below */
pszBuffer = szSource;
ListView_GetItemText(hwndListView, iItem, i,
szSource, _countof(szSource));
}
else
{
ListView_GetItemText(hwndListView, iItem, i,
szEventText, _countof(szEventText));
}
SetDlgItemTextW(hDlg, lvColsToDlgItemIDs[i], pszBuffer);
}
bEventData = (pevlr->DataLength > 0);
EnableDlgItem(hDlg, IDC_BYTESRADIO, bEventData);
EnableDlgItem(hDlg, IDC_WORDRADIO, bEventData);
EnableDlgItem(hDlg, IDC_WORDSRADIO, bEventData);
// FIXME: At the moment we support only one event log in the filter
GetEventMessage(EventLogFilter->EventLogs[0]->LogName, szSource, pevlr, szEventText);
GetEventMessage(EventLogFilter->EventLogs[0]->LogName, szSource, pevlr,
szEventText, _countof(szEventText));
SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, szEventText);
DisplayEventData(hDlg, pDetailData);
}
static
@@ -179,22 +207,17 @@ DisplayEventData(
_In_ HWND hDlg,
_In_ PDETAILDATA pDetailData)
{
PEVENTLOGRECORD pevlr = pDetailData->pevlr;
BOOL bDisplayWords = pDetailData->bDisplayWords;
INT iItem = pDetailData->iEventItem;
LVITEMW li;
PEVENTLOGRECORD pevlr;
LPBYTE pData;
UINT i, uOffset;
UINT uBufferSize, uLineLength;
PWCHAR pTextBuffer, pLine;
li.mask = LVIF_PARAM;
li.iItem = iItem;
li.iSubItem = 0;
ListView_GetItem(hwndListView, &li);
if (!pevlr)
return;
pevlr = (PEVENTLOGRECORD)li.lParam;
if (pevlr->DataLength == 0)
{
SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
@@ -241,83 +264,291 @@ DisplayEventData(
HeapFree(GetProcessHeap(), 0, pTextBuffer);
}
static
HFONT
CreateMonospaceFont(VOID)
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
static inline
int my_cType3ToWidth(WORD wType, wchar_t ucs)
{
LOGFONTW tmpFont = {0};
HFONT hFont;
HDC hDC;
hDC = GetDC(NULL);
tmpFont.lfHeight = -MulDiv(8, GetDeviceCaps(hDC, LOGPIXELSY), 72);
tmpFont.lfWeight = FW_NORMAL;
wcscpy(tmpFont.lfFaceName, L"Courier New");
hFont = CreateFontIndirectW(&tmpFont);
ReleaseDC(NULL, hDC);
return hFont;
if (wType & C3_HALFWIDTH)
return 1;
else if (wType & (C3_FULLWIDTH | C3_KATAKANA | C3_HIRAGANA | C3_IDEOGRAPH))
return 2;
/*
* HACK for Wide Hangul characters not recognized by GetStringTypeW(CT_CTYPE3)
* See:
* https://unicode.org/reports/tr11/
* https://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt
* https://www.unicode.org/Public/UCD/latest/ucd/extracted/DerivedEastAsianWidth.txt
* (or the /Public/UNIDATA/ files)
*/
else if ((ucs >= 0x1100 && ucs <= 0x115F) || (ucs >= 0x302E && ucs <= 0x302F) ||
(ucs >= 0x3131 && ucs <= 0x318E) || (ucs >= 0x3260 && ucs <= 0x327F) ||
(ucs >= 0xA960 && ucs <= 0xA97C) || (ucs >= 0xAC00 && ucs <= 0xD7A3))
return 2;
else if (wType & (C3_SYMBOL | C3_KASHIDA | C3_LEXICAL | C3_ALPHA))
return 1;
else // if (wType & (C3_NONSPACING | C3_DIACRITIC | C3_VOWELMARK | C3_HIGHSURROGATE | C3_LOWSURROGATE | C3_NOTAPPLICABLE))
return 0;
}
int my_wcwidth(wchar_t ucs)
{
WORD wType = 0;
GetStringTypeW(CT_CTYPE3, &ucs, sizeof(ucs)/sizeof(WCHAR), &wType);
return my_cType3ToWidth(wType, ucs);
}
int my_wcswidth(const wchar_t *pwcs, size_t n)
{
int width = 0;
PWORD pwType, pwt;
pwType = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, n * sizeof(WORD));
if (!pwType)
return 0;
if (!GetStringTypeW(CT_CTYPE3, pwcs, n, pwType))
goto Quit;
for (pwt = pwType; n-- > 0; ++pwt, ++pwcs)
{
width += my_cType3ToWidth(*pwt, *pwcs);
}
Quit:
HeapFree(GetProcessHeap(), 0, pwType);
return width;
}
#endif // COPY_EVTTEXT_SPACE_PADDING_MODE
/**
* @brief
* Retrieves the already-gathered event information, structure it in
* text format and copy it into the clipboard for user consumption.
*
* The copied event information has the following text format, where
* each text line ends with CR-LF newlines:
* ```
* Event Type: <event_type>\r\n
* Event Source: <event_source>\r\n
* Event Category: <event_cat>\r\n
* Event ID: <event_id>\r\n
* Date: <event_date>\r\n
* Time: <event_time>\r\n
* User: <event_user>\r\n
* Computer: <event_computer>\r\n
* Description:\r\n
* <event_description>\r\n
* Data:\r\n
* <event...
* ...data...
* ...if any>\r\n
* ```
*
* For the single-line fields, the spacing between the header title and
* information is either a TAB (default), to facilitate data import in
* spreadsheet programs, or space-padding (when the user presses the
* SHIFT key while copying the data) to prettify information display.
* (This latter functionality is supported only if the program is compiled
* with the @b COPY_EVTTEXT_SPACE_PADDING_MODE define.)
**/
static
VOID
CopyEventEntry(HWND hWnd)
CopyEventEntry(
_In_ HWND hWnd)
{
WCHAR tmpHeader[512];
WCHAR szEventType[MAX_PATH];
WCHAR szSource[MAX_PATH];
WCHAR szCategory[MAX_PATH];
WCHAR szEventID[MAX_PATH];
WCHAR szDate[MAX_PATH];
WCHAR szTime[MAX_PATH];
WCHAR szUser[MAX_PATH];
WCHAR szComputer[MAX_PATH];
WCHAR evtDesc[EVENT_MESSAGE_EVENTTEXT_BUFFER];
ULONG size = 0;
LPWSTR output;
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
static const LONG nTabWidth = 4;
#endif
static const WCHAR szCRLF[] = L"\r\n";
struct
{
WORD uHdrID; // Header string resource ID.
WORD nDlgItemID; // Dialog control ID containing the corresponding info.
WORD bSameLine : 1; // Info follows header on same line (TRUE) or not (FALSE).
WORD bOptional : 1; // Omit if info is empty (TRUE) or keep it (FALSE).
PCWCH pchHdrText; // Pointer to header string resource.
SIZE_T cchHdrLen; // Header string length (number of characters).
SIZE_T cchInfoLen; // Info string length (number of characters).
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
UINT nHdrWidth; // Display width of the header string.
UINT nSpacesPad; // Padding after header in number of spaces.
#endif
} CopyData[] =
{
{IDS_COPY_EVTTYPE, IDC_EVENTTYPESTATIC , TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTSRC , IDC_EVENTSOURCESTATIC , TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTCAT , IDC_EVENTCATEGORYSTATIC, TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTID , IDC_EVENTIDSTATIC , TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTDATE, IDC_EVENTDATESTATIC , TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTTIME, IDC_EVENTTIMESTATIC , TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTUSER, IDC_EVENTUSERSTATIC , TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTCOMP, IDC_EVENTCOMPUTERSTATIC, TRUE , FALSE, NULL, 0, 0},
{IDS_COPY_EVTTEXT, IDC_EVENTTEXTEDIT , FALSE, FALSE, NULL, 0, 0},
{IDS_COPY_EVTDATA, IDC_EVENTDATAEDIT , FALSE, TRUE , NULL, 0, 0},
};
USHORT i;
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
BOOL bUsePad; // Use space padding (TRUE) or not (FALSE, default).
UINT nMaxHdrWidth = 0;
#endif
SIZE_T size = 0;
PWSTR output;
PWSTR pszDestEnd;
size_t cchRemaining;
HGLOBAL hMem;
/* Try to open the clipboard */
if (!OpenClipboard(hWnd))
return;
/* Get the formatted text needed to place the content into */
size += LoadStringW(hInst, IDS_COPY, tmpHeader, ARRAYSIZE(tmpHeader));
/* Grab all the information and get it ready for the clipboard */
size += GetDlgItemTextW(hWnd, IDC_EVENTTYPESTATIC, szEventType, ARRAYSIZE(szEventType));
size += GetDlgItemTextW(hWnd, IDC_EVENTSOURCESTATIC, szSource, ARRAYSIZE(szSource));
size += GetDlgItemTextW(hWnd, IDC_EVENTCATEGORYSTATIC, szCategory, ARRAYSIZE(szCategory));
size += GetDlgItemTextW(hWnd, IDC_EVENTIDSTATIC, szEventID, ARRAYSIZE(szEventID));
size += GetDlgItemTextW(hWnd, IDC_EVENTDATESTATIC, szDate, ARRAYSIZE(szDate));
size += GetDlgItemTextW(hWnd, IDC_EVENTTIMESTATIC, szTime, ARRAYSIZE(szTime));
size += GetDlgItemTextW(hWnd, IDC_EVENTUSERSTATIC, szUser, ARRAYSIZE(szUser));
size += GetDlgItemTextW(hWnd, IDC_EVENTCOMPUTERSTATIC, szComputer, ARRAYSIZE(szComputer));
size += GetDlgItemTextW(hWnd, IDC_EVENTTEXTEDIT, evtDesc, ARRAYSIZE(evtDesc));
size++; /* Null-termination */
size *= sizeof(WCHAR);
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
/* Use space padding only if the user presses SHIFT */
bUsePad = !!(GetKeyState(VK_SHIFT) & 0x8000);
#endif
/*
* Consolidate the information into one big piece and
* sort out the memory needed to write to the clipboard.
* Grab all the information and get it ready for the clipboard.
*/
hMem = GlobalAlloc(GMEM_MOVEABLE, size);
if (hMem == NULL) goto Quit;
/* Calculate the necessary string buffer size */
for (i = 0; i < _countof(CopyData); ++i)
{
/* Retrieve the event info string length (without NUL terminator) */
CopyData[i].cchInfoLen = GetWindowTextLengthW(GetDlgItem(hWnd, CopyData[i].nDlgItemID));
/* If no data is present and is optional, ignore it */
if ((CopyData[i].cchInfoLen == 0) && CopyData[i].bOptional)
continue;
/* Load the header string from resources */
CopyData[i].cchHdrLen = LoadStringW(hInst, CopyData[i].uHdrID, (PWSTR)&CopyData[i].pchHdrText, 0);
size += CopyData[i].cchHdrLen;
if (CopyData[i].bSameLine)
{
/* The header and info are on the same line */
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
if (bUsePad)
{
/* Retrieve the maximum header string displayed
* width for computing space padding later */
CopyData[i].nHdrWidth = my_wcswidth(CopyData[i].pchHdrText, CopyData[i].cchHdrLen);
nMaxHdrWidth = max(nMaxHdrWidth, CopyData[i].nHdrWidth);
}
else
#endif
{
/* Count a TAB separator */
size++;
}
}
else
{
/* The data is on a separate line, count a newline */
size += _countof(szCRLF)-1;
}
/* Count the event info string and the newline that follows it */
size += CopyData[i].cchInfoLen;
size += _countof(szCRLF)-1;
}
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
if (bUsePad)
{
/* Round nMaxHdrWidth to the next TAB width, and
* compute the space padding for each field */
UINT nSpaceWidth = 1; // my_wcwidth(L' ');
nMaxHdrWidth = ((nMaxHdrWidth / nTabWidth) + 1) * nTabWidth;
for (i = 0; i < _countof(CopyData); ++i)
{
/* If no data is present and is optional, ignore it */
if ((CopyData[i].cchInfoLen == 0) && CopyData[i].bOptional)
continue;
/* If the data is on a separate line, ignore padding */
if (!CopyData[i].bSameLine)
continue;
/* Compute the padding */
CopyData[i].nSpacesPad = (nMaxHdrWidth - CopyData[i].nHdrWidth) / nSpaceWidth;
size += CopyData[i].nSpacesPad;
}
}
#endif // COPY_EVTTEXT_SPACE_PADDING_MODE
/* Add NUL-termination */
size++;
/*
* Consolidate the information into a single buffer to copy in the clipboard.
*/
hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, size * sizeof(WCHAR));
if (!hMem)
goto Quit;
output = GlobalLock(hMem);
if (output == NULL)
if (!output)
{
GlobalFree(hMem);
goto Quit;
}
StringCbPrintfW(output, size,
tmpHeader, szEventType, szSource, szCategory, szEventID,
szDate, szTime, szUser, szComputer, evtDesc);
/* Build the string */
pszDestEnd = output;
cchRemaining = size;
for (i = 0; i < _countof(CopyData); ++i)
{
SIZE_T sizeDataStr;
/* If no data is present and is optional, ignore it */
if ((CopyData[i].cchInfoLen == 0) && CopyData[i].bOptional)
continue;
/* Copy the header string */
StringCchCopyNExW(pszDestEnd, cchRemaining,
CopyData[i].pchHdrText, CopyData[i].cchHdrLen,
&pszDestEnd, &cchRemaining, 0);
if (CopyData[i].bSameLine)
{
/* The header and info are on the same line, add
* either the space padding or the TAB separator */
#ifdef COPY_EVTTEXT_SPACE_PADDING_MODE
if (bUsePad)
{
UINT j = CopyData[i].nSpacesPad;
while (j--)
{
*pszDestEnd++ = L' ';
cchRemaining--;
}
}
else
#endif
{
*pszDestEnd++ = L'\t';
cchRemaining--;
}
}
else
{
/* The data is on a separate line, add a newline */
StringCchCopyExW(pszDestEnd, cchRemaining, szCRLF,
&pszDestEnd, &cchRemaining, 0);
}
/* Copy the event info */
sizeDataStr = min(cchRemaining, CopyData[i].cchInfoLen + 1);
sizeDataStr = GetDlgItemTextW(hWnd, CopyData[i].nDlgItemID, pszDestEnd, sizeDataStr);
pszDestEnd += sizeDataStr;
cchRemaining -= sizeDataStr;
/* A newline follows the data */
StringCchCopyExW(pszDestEnd, cchRemaining, szCRLF,
&pszDestEnd, &cchRemaining, 0);
}
/* NUL-terminate the buffer */
*pszDestEnd++ = UNICODE_NULL;
cchRemaining--;
GlobalUnlock(hMem);
@@ -651,7 +882,7 @@ OnSize(HWND hDlg, PDETAILDATA pData, INT cx, INT cy)
0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
hItemWnd = GetDlgItem(hDlg, IDC_WORDRADIO);
hItemWnd = GetDlgItem(hDlg, IDC_WORDSRADIO);
GetWindowRect(hItemWnd, &rect);
MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
// OffsetRect(&rect, 0, y);
@@ -728,6 +959,67 @@ OnSize(HWND hDlg, PDETAILDATA pData, INT cx, INT cy)
}
}
static
VOID
EnableNavigationArrows(
_In_ HWND hDlg,
_In_ BOOL bEnable)
{
/* Enable Previous/Next only if there is more than one item in the list */
if (bEnable)
bEnable &= (ListView_GetItemCount(hwndListView) > 1);
EnableDlgItem(hDlg, IDC_PREVIOUS, bEnable);
EnableDlgItem(hDlg, IDC_NEXT, bEnable);
}
static
VOID
ClearContents(
_In_ HWND hDlg)
{
/* Disable the Previous/Next and Copy buttons */
EnableNavigationArrows(hDlg, FALSE);
EnableDlgItem(hDlg, IDC_COPY, FALSE);
/* Disable the Bytes/Words mode buttons */
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
/* Clear the data fields */
SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, L"");
SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, L"");
SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
}
static
HFONT
CreateMonospaceFont(VOID)
{
LOGFONTW tmpFont = {0};
HFONT hFont;
HDC hDC;
hDC = GetDC(NULL);
tmpFont.lfHeight = -MulDiv(8, GetDeviceCaps(hDC, LOGPIXELSY), 72);
tmpFont.lfWeight = FW_NORMAL;
wcscpy(tmpFont.lfFaceName, L"Courier New");
hFont = CreateFontIndirectW(&tmpFont);
ReleaseDC(NULL, hDC);
return hFont;
}
static
VOID
InitDetailsDlgCtrl(HWND hDlg, PDETAILDATA pData)
@@ -759,8 +1051,22 @@ InitDetailsDlgCtrl(HWND hDlg, PDETAILDATA pData)
/* Note that the RichEdit control never gets themed under WinXP+; one would have to write code to simulate Edit-control theming */
SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDSRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
SendDlgItemMessageW(hDlg, IDC_EVENTDATAEDIT, WM_SETFONT, (WPARAM)pData->hMonospaceFont, (LPARAM)TRUE);
//ClearContents(hDlg);
if (pData->iEventItem != -1)
{
EnableNavigationArrows(hDlg, TRUE);
EnableDlgItem(hDlg, IDC_COPY, TRUE);
}
else
{
EnableNavigationArrows(hDlg, FALSE);
EnableDlgItem(hDlg, IDC_COPY, FALSE);
}
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
}
/* Message handler for Event Details control */
@@ -806,6 +1112,8 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
pData->scPos.x = pData->scPos.y = 0;
InitDetailsDlgCtrl(hDlg, pData);
/* NOTE: Showing the event (if any) is currently delayed to later */
// SendMessageW(hDlg, EVT_DISPLAY, TRUE, (LPARAM)pData->iEventItem);
// OnSize(hDlg, pData, pData->cxOld, pData->cyOld);
return (INT_PTR)TRUE;
@@ -821,17 +1129,58 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
return (INT_PTR)TRUE;
case EVT_SETFILTER:
{
/* Disable the display first, before changing the current filter */
pData->pevlr = NULL;
pData->iEventItem = -1;
ClearContents(hDlg);
pData->EventLogFilter = (PEVENTLOGFILTER)lParam;
return (INT_PTR)TRUE;
}
case EVT_DISPLAY:
{
pData->iEventItem = (INT)lParam;
if (pData->EventLogFilter)
if (wParam)
{
/* Show event info in control */
DisplayEvent(hDlg, pData);
DisplayEventData(hDlg, pData);
INT iEventItem = (INT)lParam;
/* If no filter is set, don't change anything */
if (!pData->EventLogFilter)
return (INT_PTR)TRUE;
/* If we re-enable display from previously disabled state, re-enable the buttons */
if ((pData->iEventItem == -1) && (iEventItem != -1))
{
EnableNavigationArrows(hDlg, TRUE);
EnableDlgItem(hDlg, IDC_COPY, TRUE);
}
else
/* If we disable display from previously enabled state, clear and disable it */
if ((pData->iEventItem != -1) && (iEventItem == -1))
{
ClearContents(hDlg);
}
/* Set the new item */
pData->pevlr = NULL;
pData->iEventItem = iEventItem;
/* Display the event info, if there is one */
if (pData->iEventItem != -1)
DisplayEvent(hDlg, pData);
}
else
{
/* Enable or disable the Previous/Next buttons,
* but keep the existing contents, if any */
EnableNavigationArrows(hDlg, (lParam != -1));
// HACK: Disable the Bytes/Words mode buttons
// because we won't have access anymore to the
// event data. (This will be fixed in the future.)
pData->pevlr = NULL; // Invalidate also the cache.
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
}
return (INT_PTR)TRUE;
}
@@ -843,25 +1192,33 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
case IDC_NEXT:
{
BOOL bPrev = (LOWORD(wParam) == IDC_PREVIOUS);
INT iItem, iSel, nItems = ListView_GetItemCount(hwndListView);
WCHAR szText[200];
INT nItems = ListView_GetItemCount(hwndListView);
INT iItem, iSel;
if (nItems <= 0) /* No items? */
break;
/* Get the index of the first selected item */
iSel = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED);
/* Select the previous/next item from our current one */
iItem = ListView_GetNextItem(hwndListView, -1, LVNI_ALL | LVNI_SELECTED);
iItem = ListView_GetNextItem(hwndListView, iItem,
iItem = ListView_GetNextItem(hwndListView, iSel,
(bPrev ? LVNI_ABOVE : LVNI_BELOW));
if (iItem < 0 || iItem >= nItems)
{
LoadStringW(hInst,
(bPrev ? IDS_CONTFROMEND : IDS_CONTFROMBEGINNING),
szText, _countof(szText));
if (MessageBoxW(hDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) == IDNO)
break;
/* Confirm selection restart only if an item was previously
* selected. If not, just proceed with default selection. */
if (iSel != -1)
{
WCHAR szText[200];
LoadStringW(hInst,
(bPrev ? IDS_CONTFROMEND : IDS_CONTFROMBEGINNING),
szText, _countof(szText));
if (MessageBoxW(hDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) != IDYES)
break;
}
/* Determine from where to restart */
/* Determine where to restart from */
iItem = (bPrev ? (nItems - 1) : 0);
}
@@ -883,14 +1240,12 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
LVIS_FOCUSED | LVIS_SELECTED);
ListView_EnsureVisible(hwndListView, iItem, FALSE);
pData->pevlr = NULL;
pData->iEventItem = iItem;
/* Show event info in control */
/* Display the event info */
if (pData->EventLogFilter)
{
DisplayEvent(hDlg, pData);
DisplayEventData(hDlg, pData);
}
return (INT_PTR)TRUE;
}
@@ -900,15 +1255,11 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
return (INT_PTR)TRUE;
case IDC_BYTESRADIO:
case IDC_WORDRADIO:
{
case IDC_WORDSRADIO:
pData->bDisplayWords = (LOWORD(wParam) == IDC_WORDSRADIO);
if (pData->EventLogFilter)
{
pData->bDisplayWords = (LOWORD(wParam) == IDC_WORDRADIO);
DisplayEventData(hDlg, pData);
}
return (INT_PTR)TRUE;
}
default:
break;
@@ -959,11 +1310,3 @@ CreateEventDetailsCtrl(HINSTANCE hInstance,
MAKEINTRESOURCEW(IDD_EVENTDETAILS_CTRL),
hParentWnd, EventDetailsCtrl, lParam);
}
VOID
EnableEventDetailsButtons(HWND hWnd, BOOL bEnable)
{
EnableDlgItem(hWnd, IDC_PREVIOUS, bEnable);
EnableDlgItem(hWnd, IDC_NEXT, bEnable);
EnableDlgItem(hWnd, IDC_COPY, bEnable);
}

View File

@@ -4,7 +4,7 @@
* PURPOSE: Event Details Control.
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
*/
#pragma once
@@ -24,5 +24,3 @@ HWND
CreateEventDetailsCtrl(HINSTANCE hInstance,
HWND hParentWnd,
LPARAM lParam);
VOID EnableEventDetailsButtons(HWND hWnd, BOOL bEnable);

View File

@@ -105,9 +105,9 @@ BEGIN
LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "&Данни:", IDC_DETAILS_STATIC, 8, 140, 25, 8
AUTORADIOBUTTON "&Байтове", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Думи", IDC_WORDRADIO, 85, 140, 34, 8
AUTORADIOBUTTON "&Думи", IDC_WORDSRADIO, 85, 140, 34, 8
LTEXT "&Данни:", IDC_DETAILS_STATIC, 8, 140, 25, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Event Type:"
IDS_COPY_EVTSRC "Event Source:"
IDS_COPY_EVTCAT "Event Category:"
IDS_COPY_EVTID "Event ID:"
IDS_COPY_EVTDATE "Date:"
IDS_COPY_EVTTIME "Time:"
IDS_COPY_EVTUSER "User:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Description:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -81,17 +81,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
LTEXT "&Datum:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Zdroj:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Zdroj:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Čas:", IDC_STATIC, 8, 15, 31, 8
LTEXT "Č&as:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Kategorie:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Kategorie:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Typ:", IDC_STATIC, 8, 25, 31, 8
LTEXT "T&yp:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "ID události:", IDC_STATIC, 103, 25, 36, 8
LTEXT "&ID události:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Uživatel:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
@@ -105,9 +105,9 @@ BEGIN
LTEXT "&Popis:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "&Byty", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Slova", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -203,7 +203,7 @@ END
STRINGTABLE
BEGIN
IDS_BYTES_FORMAT "byty" // "%s bytes"
IDS_BYTES_FORMAT "bajtů" // "%s bytes"
// "%1!ls! (%2!ls! bytes)"
END
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Typ: %s\r\n\
Zdroj: %s\r\n\
Kategorie: %s\r\n\
ID: %s\r\n\
Datum: %s\r\n\
Čas: %s\r\n\
Uživatel: %s\r\n\
Počítač: %s\r\n\
Popis:\r\n%s"
IDS_COPY_EVTTYPE "Typ:"
IDS_COPY_EVTSRC "Zdroj:"
IDS_COPY_EVTCAT "Kategorie:"
IDS_COPY_EVTID "ID události:"
IDS_COPY_EVTDATE "Datum:"
IDS_COPY_EVTTIME "Čas:"
IDS_COPY_EVTUSER "Uživatel:"
IDS_COPY_EVTCOMP "Počítač:"
IDS_COPY_EVTTEXT "Popis:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
LTEXT "&Datum:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Quelle:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Quelle:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Zeit:", IDC_STATIC, 8, 15, 31, 8
LTEXT "&Zeit:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Kategorie:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Kategorie:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Typ:", IDC_STATIC, 8, 25, 31, 8
LTEXT "&Typ:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Ereignis-ID:", IDC_STATIC, 103, 25, 36, 8
LTEXT "E&reignis-ID:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Benutzer:", IDC_STATIC, 8, 35, 36, 8
LTEXT "B&enutzer:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8
LTEXT "C&omputer:", IDC_STATIC, 8, 45, 36, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -106,9 +106,9 @@ BEGIN
LTEXT "&Bezeichnung:", IDC_STATIC, 8, 65, 45, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&aten:", IDC_DETAILS_STATIC, 8, 140, 24, 8
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Wörter", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "D&aten:", IDC_DETAILS_STATIC, 8, 140, 24, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -222,16 +222,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Typ: %s\r\n\
Quelle: %s\r\n\
Kategorie: %s\r\n\
Ereignis-ID: %s\r\n\
Datum: %s\r\n\
Zeit: %s\r\n\
Benutzer: %s\r\n\
Computer: %s\r\n\
Beschreibung:\r\n%s"
IDS_COPY_EVTTYPE "Typ:"
IDS_COPY_EVTSRC "Quelle:"
IDS_COPY_EVTCAT "Kategorie:"
IDS_COPY_EVTID "Ereignis-ID:"
IDS_COPY_EVTDATE "Datum:"
IDS_COPY_EVTTIME "Zeit:"
IDS_COPY_EVTUSER "Benutzer:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Beschreibung:"
IDS_COPY_EVTDATA "Daten:"
END
STRINGTABLE

View File

@@ -81,17 +81,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Ημερομηνία:", IDC_STATIC, 8, 5, 31, 8
LTEXT "&Ημερομηνία:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Πηγή:", IDC_STATIC, 103, 5, 36, 8
LTEXT "Πη&γή:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Ώρα:", IDC_STATIC, 8, 15, 31, 8
LTEXT "&Ώρα:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Κατηγορία:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Κατηγορία:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Τύπος:", IDC_STATIC, 8, 25, 31, 8
LTEXT "&Τύπος:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "EventID:", IDC_STATIC, 103, 25, 36, 8
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Χρήστης:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
@@ -105,9 +105,9 @@ BEGIN
LTEXT "&Περιγραφή:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "Δ&εδομένα:", IDC_DETAILS_STATIC, 8, 140, 40, 8
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 49, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 87, 140, 34, 8
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 87, 140, 34, 8
LTEXT "Δ&εδομένα:", IDC_DETAILS_STATIC, 8, 140, 40, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Event Type:"
IDS_COPY_EVTSRC "Event Source:"
IDS_COPY_EVTCAT "Event Category:"
IDS_COPY_EVTID "Event ID:"
IDS_COPY_EVTDATE "Date:"
IDS_COPY_EVTTIME "Time:"
IDS_COPY_EVTUSER "User:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Description:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -83,21 +83,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Date:", IDC_STATIC, 8, 5, 31, 8
LTEXT "D&ate:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Source:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Source:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Time:", IDC_STATIC, 8, 15, 31, 8
LTEXT "Ti&me:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Category:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Category:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Type:", IDC_STATIC, 8, 25, 31, 8
LTEXT "Typ&e:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Event ID:", IDC_STATIC, 103, 25, 36, 8
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&User:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8
LTEXT "C&omputer:", IDC_STATIC, 8, 45, 36, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -107,9 +107,9 @@ BEGIN
LTEXT "&Description:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -223,16 +223,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Event Type:"
IDS_COPY_EVTSRC "Event Source:"
IDS_COPY_EVTCAT "Event Category:"
IDS_COPY_EVTID "Event ID:"
IDS_COPY_EVTDATE "Date:"
IDS_COPY_EVTTIME "Time:"
IDS_COPY_EVTUSER "User:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Description:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -84,17 +84,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Fecha:", IDC_STATIC, 8, 5, 31, 8
LTEXT "&Fecha:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Origen:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Origen:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Hora:", IDC_STATIC, 8, 15, 31, 8
LTEXT "&Hora:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Categoría:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Categoría:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
LTEXT "&Tipo:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "ID de evento:", IDC_STATIC, 103, 25, 36, 8
LTEXT "&ID de evento:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Usuario:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
@@ -108,9 +108,9 @@ BEGIN
LTEXT "&Descripción:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&atos:", IDC_DETAILS_STATIC, 8, 140, 25, 8
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "D&atos:", IDC_DETAILS_STATIC, 8, 140, 25, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -224,16 +224,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Tipo de evento: %s\r\n\
Fuente del evento: %s\r\n\
Categ. del evento: %s\r\n\
ID del evento: %s\r\n\
Fecha: %s\r\n\
Hora: %s\r\n\
Usuario: %s\r\n\
Equipo: %s\r\n\
Descripción:\r\n%s"
IDS_COPY_EVTTYPE "Tipo de evento:"
IDS_COPY_EVTSRC "Fuente del evento:"
IDS_COPY_EVTCAT "Categ. del evento:"
IDS_COPY_EVTID "ID de evento:"
IDS_COPY_EVTDATE "Fecha:"
IDS_COPY_EVTTIME "Hora:"
IDS_COPY_EVTUSER "Usuario:"
IDS_COPY_EVTCOMP "Equipo:"
IDS_COPY_EVTTEXT "Descripción:"
IDS_COPY_EVTDATA "Datos:"
END
STRINGTABLE

View File

@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Date :", IDC_STATIC, 8, 5, 31, 8
LTEXT "D&ate :", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Source :", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Source :", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Heure :", IDC_STATIC, 8, 15, 31, 8
LTEXT "&Heure :", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Catégorie :", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Catégorie :", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Type :", IDC_STATIC, 8, 25, 31, 8
LTEXT "&Type :", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Événement :", IDC_STATIC, 103, 25, 36, 8
LTEXT "É&vénement :", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Utilisateur :", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Ordinateur :", IDC_STATIC, 8, 45, 36, 8
LTEXT "O&rdinateur :", IDC_STATIC, 8, 45, 36, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -106,9 +106,9 @@ BEGIN
LTEXT "&Description :", IDC_STATIC, 8, 65, 45, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "Données :", IDC_DETAILS_STATIC, 8, 140, 35, 8//FIXME: add accel
AUTORADIOBUTTON "&Octets", IDC_BYTESRADIO, 50, 140, 34, 8
AUTORADIOBUTTON "&Mots", IDC_WORDRADIO, 88, 140, 34, 8
AUTORADIOBUTTON "&Mots", IDC_WORDSRADIO, 88, 140, 34, 8
LTEXT "Do&nnées :", IDC_DETAILS_STATIC, 8, 140, 35, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -149,7 +149,7 @@ BEGIN
UDS_AUTOBUDDY | UDS_ARROWKEYS, 210, 165, 10, 14
LTEXT "jours", IDC_STATIC, 215, 168, 20, 8
PUSHBUTTON "Paramètres par &défaut", IDC_RESTOREDEFAULTS, 156, 183, 80, 14
AUTOCHECKBOX "Utiliser une connection à &basse vitesse", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10
AUTOCHECKBOX "Utiliser une connexion à &basse vitesse", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10
PUSHBUTTON "&Effacer le journal", ID_CLEARLOG, 180, 213, 65, 14
END
@@ -168,8 +168,8 @@ BEGIN
IDS_CLEAREVENTS_MSG "Voulez-vous enregistrer ce journal d'événements avant de l'effacer ?"
IDS_RESTOREDEFAULTS "Voulez-vous vraiment réinitialiser tous les paramètres pour ce journal aux valeurs par défaut ?"
IDS_EVENTSTRINGIDNOTFOUND "La description pour l'événement d'ID ( %lu ) dans la source ( %s ) ne peut être trouvée. L'ordinateur local pourrait ne pas avoir les informations registres nécessaires ou les fichiers DLL de message pour afficher les messages depuis un ordinateur distant.\n\nLes informations suivantes font partie de l'événement :\n\n"
IDS_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
IDS_CONTFROMBEGINNING "Vous avez atteint la fin du journal d'événements. Voulez-vous continuer depuis le début ?"
IDS_CONTFROMEND "Vous avez atteint le début du journal d'événements. Voulez-vous continuer depuis la fin ?"
END
STRINGTABLE
@@ -222,16 +222,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Type d'événement : %s\r\n\
Source de l'événement : %s\r\n\
Catégorie de l'événement : %s\r\n\
ID de l'événement : %s\r\n\
Date : %s\r\n\
Heure : %s\r\n\
Utilisateur : %s\r\n\
Ordinateur : %s\r\n\
Description :\r\n%s"
IDS_COPY_EVTTYPE "Type de l'événement :"
IDS_COPY_EVTSRC "Source de l'événement :"
IDS_COPY_EVTCAT "Catégorie de l'événement :"
IDS_COPY_EVTID "ID de l'événement :"
IDS_COPY_EVTDATE "Date :"
IDS_COPY_EVTTIME "Heure :"
IDS_COPY_EVTUSER "Utilisateur :"
IDS_COPY_EVTCOMP "Ordinateur :"
IDS_COPY_EVTTEXT "Description :"
IDS_COPY_EVTDATA "Données :"
END
STRINGTABLE

View File

@@ -105,9 +105,9 @@ BEGIN
LTEXT "תיאור:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "נתונים:", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "בתים", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "מילים", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "מילים", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "נתונים:", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Event Type:"
IDS_COPY_EVTSRC "Event Source:"
IDS_COPY_EVTCAT "Event Category:"
IDS_COPY_EVTID "Event ID:"
IDS_COPY_EVTDATE "Date:"
IDS_COPY_EVTTIME "Time:"
IDS_COPY_EVTUSER "User:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Description:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Sorgente:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Sorgente:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Ore:", IDC_STATIC, 8, 15, 31, 8
LTEXT "&Ore:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Categoria:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Categoria:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
LTEXT "T&ipo:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "IDEvento:", IDC_STATIC, 103, 25, 36, 8
LTEXT "ID &Evento:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&UTente:", IDC_STATIC, 8, 35, 36, 8
LTEXT "&Utente:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8
LTEXT "Co&mputer:", IDC_STATIC, 8, 45, 36, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -106,9 +106,9 @@ BEGIN
LTEXT "&Descrizione:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&ati:", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "Da&ti:", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -222,16 +222,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Event Type:"
IDS_COPY_EVTSRC "Event Source:"
IDS_COPY_EVTCAT "Event Category:"
IDS_COPY_EVTID "Event ID:"
IDS_COPY_EVTDATE "Date:"
IDS_COPY_EVTTIME "Time:"
IDS_COPY_EVTUSER "User:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Description:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -106,9 +106,9 @@ BEGIN
LTEXT "説明(&D):", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "データ(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "バイト(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "ワード(&W)", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "ワード(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "データ(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -222,16 +222,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
イベントの種類: %s\r\n\
イベントのソース: %s\r\n\
イベントのカテゴリ: %s\r\n\
イベント ID: %s\r\n\
日付: %s\r\n\
時刻: %s\r\n\
ユーザー: %s\r\n\
コンピューター: %s\r\n\
説明:\r\n%s"
IDS_COPY_EVTTYPE "イベントの種類:"
IDS_COPY_EVTSRC "イベントのソース:"
IDS_COPY_EVTCAT "イベントのカテゴリ:"
IDS_COPY_EVTID "イベント ID:"
IDS_COPY_EVTDATE "日付:"
IDS_COPY_EVTTIME "時刻:"
IDS_COPY_EVTUSER "ユーザー:"
IDS_COPY_EVTCOMP "コンピューター:"
IDS_COPY_EVTTEXT "説明:"
IDS_COPY_EVTDATA "データ:"
END
STRINGTABLE

View File

@@ -105,9 +105,9 @@ BEGIN
LTEXT "설명(&D):", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "데이터(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "바이트(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "글자(&W)", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "글자(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "데이터(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Event Type:"
IDS_COPY_EVTSRC "Event Source:"
IDS_COPY_EVTCAT "Event Category:"
IDS_COPY_EVTID "Event ID:"
IDS_COPY_EVTDATE "Date:"
IDS_COPY_EVTTIME "Time:"
IDS_COPY_EVTUSER "User:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Description:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Dato:", IDC_STATIC, 8, 5, 31, 8
LTEXT "D&ato:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Kilde:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Kilde:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Tid:", IDC_STATIC, 8, 15, 31, 8
LTEXT "Ti&d:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Kategori:", IDC_STATIC, 103, 15, 36, 8
LTEXT "Katego&ri:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Type:", IDC_STATIC, 8, 25, 31, 8
LTEXT "Typ&e:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Hendelse ID:", IDC_STATIC, 103, 25, 36, 8
LTEXT "&Hendelse ID:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Bruker:", IDC_STATIC, 8, 35, 36, 8
LTEXT "Br&uker:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Datamaskin:", IDC_STATIC, 8, 45, 36, 8
LTEXT "Data&maskin:", IDC_STATIC, 8, 45, 36, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -105,9 +105,9 @@ BEGIN
LTEXT "&Beskrivelse:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "&Tegn", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Ord", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "Teg&n", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Ord", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Event Type:"
IDS_COPY_EVTSRC "Event Source:"
IDS_COPY_EVTCAT "Event Category:"
IDS_COPY_EVTID "Event ID:"
IDS_COPY_EVTDATE "Date:"
IDS_COPY_EVTTIME "Time:"
IDS_COPY_EVTUSER "User:"
IDS_COPY_EVTCOMP "Computer:"
IDS_COPY_EVTTEXT "Description:"
IDS_COPY_EVTDATA "Data:"
END
STRINGTABLE

View File

@@ -108,9 +108,9 @@ BEGIN
LTEXT "&Opis:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&ane:", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Słowa", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Słowa", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "D&ane:", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -224,16 +224,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Typ zdarzenia: %s\r\n\
Źródło zdarzenia: %s\r\n\
Kategoria zdarzenia: %s\r\n\
Idnetyfikator Zdarzenia: %s\r\n\
Data: %s\r\n\
Czas: %s\r\n\
Użytkownik: %s\r\n\
Komputer: %s\r\n\
Opis:\r\n%s"
IDS_COPY_EVTTYPE "Typ zdarzenia:"
IDS_COPY_EVTSRC "Źródło zdarzenia:"
IDS_COPY_EVTCAT "Kategoria zdarzenia:"
IDS_COPY_EVTID "Identyfikator zdarzenia:"
IDS_COPY_EVTDATE "Data:"
IDS_COPY_EVTTIME "Czas:"
IDS_COPY_EVTUSER "Użytkownik:"
IDS_COPY_EVTCOMP "Komputer:"
IDS_COPY_EVTTEXT "Opis:"
IDS_COPY_EVTDATA "Dane:"
END
STRINGTABLE

View File

@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Fonte:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Fonte:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Tempo:", IDC_STATIC, 8, 15, 31, 8
LTEXT "T&empo:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Categoria:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Categoria:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
LTEXT "&Tipo:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "EventID:", IDC_STATIC, 103, 25, 36, 8
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Usuário:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Computador:", IDC_STATIC, 8, 45, 36, 8
LTEXT "Co&mputador:", IDC_STATIC, 8, 45, 36, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -105,9 +105,9 @@ BEGIN
LTEXT "&Descrição:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -211,7 +211,7 @@ STRINGTABLE
BEGIN
IDS_COLUMNTYPE "Tipo"
IDS_COLUMNDATE "Data"
IDS_COLUMNTIME "Hora"
IDS_COLUMNTIME "Tempo"
IDS_COLUMNSOURCE "Fonte"
IDS_COLUMNCATEGORY "Categoria"
IDS_COLUMNEVENT "Evento"
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Event Type: %s\r\n\
Event Source: %s\r\n\
Event Category: %s\r\n\
Event ID: %s\r\n\
Date: %s\r\n\
Time: %s\r\n\
User: %s\r\n\
Computer: %s\r\n\
Description:\r\n%s"
IDS_COPY_EVTTYPE "Tipo de evento:"
IDS_COPY_EVTSRC "Fonte do evento:"
IDS_COPY_EVTCAT "Categoria:"
IDS_COPY_EVTID "ID do evento:"
IDS_COPY_EVTDATE "Data:"
IDS_COPY_EVTTIME "Tempo:"
IDS_COPY_EVTUSER "Usuário:"
IDS_COPY_EVTCOMP "Computador:"
IDS_COPY_EVTTEXT "Descrição:"
IDS_COPY_EVTDATA "Dados:"
END
STRINGTABLE

View File

@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 50, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Origem:", IDC_STATIC, 103, 5, 36, 8
LTEXT "O&rigem:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Hora:", IDC_STATIC, 8, 15, 31, 8
LTEXT "&Hora:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 50, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Categoria:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Categoria:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
LTEXT "&Tipo:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 50, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "EventID:", IDC_STATIC, 103, 25, 36, 8
LTEXT "Event &ID:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Utilizador:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 50, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Computador:", IDC_STATIC, 8, 45, 40, 8
LTEXT "Co&mputador:", IDC_STATIC, 8, 45, 40, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 50, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -105,9 +105,9 @@ BEGIN
LTEXT "&Descrição:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -203,7 +203,7 @@ END
STRINGTABLE
BEGIN
IDS_BYTES_FORMAT "bytes" // "%s bytes"
IDS_BYTES_FORMAT "bajtów" // "%s bytes"
// "%1!ls! (%2!ls! bytes)"
END
@@ -221,16 +221,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Tipo de evento: %s\r\n\
Origem do evento: %s\r\n\
Categoria: %s\r\n\
ID do Evento: %s\r\n\
Data: %s\r\n\
Hora: %s\r\n\
Utilizador: %s\r\n\
Computador: %s\r\n\
Descrição:\r\n%s"
IDS_COPY_EVTTYPE "Tipo de evento:"
IDS_COPY_EVTSRC "Origem do evento:"
IDS_COPY_EVTCAT "Categoria:"
IDS_COPY_EVTID "ID do evento:"
IDS_COPY_EVTDATE "Data:"
IDS_COPY_EVTTIME "Hora:"
IDS_COPY_EVTUSER "Utilizador:"
IDS_COPY_EVTCOMP "Computador:"
IDS_COPY_EVTTEXT "Descrição:"
IDS_COPY_EVTDATA "Dados:"
END
STRINGTABLE

View File

@@ -83,21 +83,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Dată:", IDC_STATIC, 8, 5, 31, 8
LTEXT "D&ată:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Sursă:", IDC_STATIC, 103, 5, 36, 8
LTEXT "&Sursă:", IDC_STATIC, 103, 5, 36, 8
EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Oră:", IDC_STATIC, 8, 15, 31, 8
LTEXT "O&ră:", IDC_STATIC, 8, 15, 31, 8
EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Categorie:", IDC_STATIC, 103, 15, 36, 8
LTEXT "&Categorie:", IDC_STATIC, 103, 15, 36, 8
EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "Tip:", IDC_STATIC, 8, 25, 31, 8
LTEXT "T&ip:", IDC_STATIC, 8, 25, 31, 8
EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "ID Eveniment:", IDC_STATIC, 103, 25, 36, 8
LTEXT "ID &eveniment:", IDC_STATIC, 103, 25, 36, 8
EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Utilizator:", IDC_STATIC, 8, 35, 36, 8
EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
LTEXT "&Calculator:", IDC_STATIC, 8, 45, 36, 8
LTEXT "Ca&lculator:", IDC_STATIC, 8, 45, 36, 8
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
@@ -107,9 +107,9 @@ BEGIN
LTEXT "&Descriere:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "D&ate:", IDC_DETAILS_STATIC, 8, 140, 20, 8
AUTORADIOBUTTON "&8 biți", IDC_BYTESRADIO, 39, 140, 34, 8
AUTORADIOBUTTON "&16 biți", IDC_WORDRADIO, 77, 140, 34, 8
AUTORADIOBUTTON "&16 biți", IDC_WORDSRADIO, 77, 140, 34, 8
LTEXT "Da&te:", IDC_DETAILS_STATIC, 8, 140, 20, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -205,7 +205,7 @@ END
STRINGTABLE
BEGIN
IDS_BYTES_FORMAT "octeți" // "%s bytes"
IDS_BYTES_FORMAT "octeţi" // "%s bytes"
// "%1!ls! (%2!ls! bytes)"
END
@@ -218,21 +218,21 @@ BEGIN
IDS_COLUMNCATEGORY "Categorie"
IDS_COLUMNEVENT "Eveniment"
IDS_COLUMNUSER "Utilizator"
IDS_COLUMNCOMPUTER "Computer"
IDS_COLUMNCOMPUTER "Calculator"
END
STRINGTABLE
BEGIN
IDS_COPY "\
Tip eveniment: %s\r\n\
Sursă eveniment: %s\r\n\
Categorie eveniment: %s\r\n\
ID eveniment: %s\r\n\
Dată: %s\r\n\
Oră: %s\r\n\
Utilizator: %s\r\n\
Computer: %s\r\n\
Descriere:\r\n%s"
IDS_COPY_EVTTYPE "Tip eveniment:"
IDS_COPY_EVTSRC "Sursă eveniment:"
IDS_COPY_EVTCAT "Categorie eveniment:"
IDS_COPY_EVTID "ID eveniment:"
IDS_COPY_EVTDATE "Dată:"
IDS_COPY_EVTTIME "Oră:"
IDS_COPY_EVTUSER "Utilizator:"
IDS_COPY_EVTCOMP "Calculator:"
IDS_COPY_EVTTEXT "Descriere:"
IDS_COPY_EVTDATA "Date:"
END
STRINGTABLE

View File

@@ -109,9 +109,9 @@ BEGIN
LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
LTEXT "&Данные:", IDC_DETAILS_STATIC, 8, 140, 30, 8
AUTORADIOBUTTON "&Байты", IDC_BYTESRADIO, 49, 140, 34, 8
AUTORADIOBUTTON "&Слова", IDC_WORDRADIO, 87, 140, 34, 8
AUTORADIOBUTTON "&Слова", IDC_WORDSRADIO, 87, 140, 34, 8
LTEXT "&Данные:", IDC_DETAILS_STATIC, 8, 140, 30, 8
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
@@ -225,16 +225,16 @@ END
STRINGTABLE
BEGIN
IDS_COPY "\
Тип события: %s\r\n\
Источник события: %s\r\n\
Категория события: %s\r\n\
ID события: %s\r\n\
Дата: %s\r\n\
Время: %s\r\n\
Пользователь: %s\r\n\
Компьютер: %s\r\n\
Описание:\n%s"
IDS_COPY_EVTTYPE "Тип события:"
IDS_COPY_EVTSRC "Источник события:"
IDS_COPY_EVTCAT "Категория события:"
IDS_COPY_EVTID "ID события:"
IDS_COPY_EVTDATE "Дата:"
IDS_COPY_EVTTIME "Время:"
IDS_COPY_EVTUSER "Пользователь:"
IDS_COPY_EVTCOMP "Компьютер:"
IDS_COPY_EVTTEXT "Описание:"
IDS_COPY_EVTDATA "Данные:"
END
STRINGTABLE

Some files were not shown because too many files have changed in this diff Show More