3.3.3 / 01-01-2024
DS4Windows
Accuracy
Performance
Features
DS4Windows is a portable program that allows you to use a PlayStation DualShock 4 on your PC by emulating a Xbox 360 controller. This project is actually a fork of the work of Jays2Kings, which can be found on the old project website at DS4windows.
Also, preliminary JoyCon support has been added.
...
Most Recent Changes
Make sure to download the .NET 6 Runtime before updating:
NET Runtime x64 / NET Runtime x86
--3.3.3--
Fixed auto profile routine when a device does not exist for an input slot
Update Portuguese translation. Contribution by Denellyne
Close ProfileMigration instances in unit tests when finished
Removed unused Net8NoticeWindow class
Fixed Jays2Kings stick dead zone migration check. Carry over non-zero dead zone choice
--3.3.2--
Various fixes for ProfileDTO class to fix reading of retro profiles
Fixed default maxZone for TouchMouseStick
Added test to check output XML string after profile migration
Fixed hip fire time profile settings
Fixed some translation string keys in Profile Editor
--3.3.1--
Fixed use of SocketAsyncEventArgs for .NET 8. Allows clients to disconnect and reconnect as expected
Use ManualResetEvent timeout as a precaution for HaltReportingRunAction method
Fixed length of macroDone array. Added const to enforce array length. Fixes macro binding for Switch, JoyCon, DSE exclusive buttons
--3.3.0--
Update project to target .NET 8 Desktop Runtime
Updated bundled libraries to target .NET 8
Added initial unit test project to solution
Updated use of ProfileMigration class
Changed how migrated XML string is grabbed from ProfileMigration class
Fixed issues with converting of older profiles from earlier DS4Windows versions including Jays2Kings builds
Force waiting for mapper routine to be over before switching profiles. Fixes BT lightbar issues primarily with DualSense
Unregister DataContext used to link VMs early. Purge memory early and reduce memory usage. Thanks to kurtanr for figuring out the problem
Loosen analog to mouse wheel mapping
Increased RWC for FlickStick in editor. Allow upper limit of 200
Changed technique for stopping mapping routine from input thread. Allows some routines to still run while profile loading is in progress
Make sure XmlReader instance is closed after using ProfileMigration class
Quick UDP server startup tweaks
Add missing button ids to the gyroTriggerItems. Contribution by christranq
DualSense LED: Swap player 4 & player 6. Contribution by RobbyCBennett
--3.2.21--
Updated ViGEmClient to work around IOCTL_VIGEM_WAIT_DEVICE_READY timeout when resuming from sleep. The problem affected normal operation as well. Just not that often
Clear some memory references early in ProfileEditor. Contribution by kurtanr
Fixed new line in translation string. Contribution by DraakjeYoblama
Dutch strings update. Contribution by DraakjeYoblama
Updated zn-hans translation. Contribution by CrazyHPi
Russian translation update. Contribution by mentalsolin
Attempt to load DS4Windows config when loading WelcomeDialog for a separate process. Makes sure set translation choice is used
Enable localization for LogMessageDisplay window
Added check for last check task when starting app update
Enable .NET 8 nag window
--3.2.20--
Bump DotNetProjects.Extended.Wpf.Toolkit from 5.0.103 to 5.0.106
Fixed some Gyro trigger indexes. Make sure Touchpad relate triggers work again
Added DSE buttons for use as shift trigger. Actually allow JoyCon side buttons to work for shift triggers
Abstract resource paths more. Allows easier renaming of assembly. Minor consequnces in the VS XAML editor though
Consolidate gyro trigger context menu lists in Profile Editor
Added Malay translation. Contribution by shoen1x
Use FileVersion prop for grabbing assembly version instead. More helpful for .NET 8 usage than right now
Updated FakerInputDLL files
Hide some ViGEmBus messages in Profile Editor regarding passthru when using supported versions. Small tweak
Use ViGEmBus version check for lightbar passthru message as well
add Resources.zh-hans.resx for Chinese simplified translation. Contribution by CrazyHPi
update Strings.zh-Hans.resx for Chinese simplified translation. Contribution by CrazyHPi
Marked more strings in GUI for translation. It will not affect this version obviously
Removed use of deprecated LocText extension. Now use BLoc extension instead. Only used to render one string in Profile Editor previously
Skip trying to reset UDP server connection if requested the server to stop
Fixed Load a Profile Special Action unload trigger list header in Dark theme
Changed display text for Side L and Side R buttons in unload trigger list
--3.2.19--
Tweaked HidHide whitelist app check to work behind a junction directory. Scoop install
Updated some installer URLs in the WelcomeDialog window. Updated linked ViGEmBus installer to version 1.22.0
Changing source code license to GPL version 3. Added notices
Added GPL version 3 text to About window
Perform junction directory check at startup. Use real install path for exepath if found
--3.2.18--
Fixed HidHide registry check when key does not exist
Fixed Gyro Mouse Joystick trigger indexes for some triggers. DualSense Edge triggers in particular
Updated SharpOSC libraries
Fixed default app setting for JoyCon LinkMode option
Added Turkish translation. Contribution by onuralpyilkin
Changed helpURL for SendInput warning message
--3.2.17--
Fix disconnect of DS4 connected to Sony WA when Stop button is used
Revert back to having Launch Program special action run as current user
Take CollectionView into account when removing a Special Action from list
--3.2.16--
Changed SetupAPI calls used to grab device information. Needed for fake USB DS4 device in some cases
--3.2.15--
Show blank panel for DS3 in registration window
Check for vendor-defined HID devices based on HID Capabilities instead of description. Contribution by Kanuan
Changed props in HidDeviceCapabilities class to be full properties
Changed HidDeviceAttributes class to use full properties
Changed auto props in HidDevice to use full properties
Have Launch Program Special Action try to de-elevate when launching a program
Removed Nefarius.Utilities.DeviceManagement AnyCPU library dependency. Do virtual device check in program code instead
--3.2.14--
Virtual DS4 trigger modes, Greek translation, Indonesia translation, HidHide inverse cloak
Removed social accounts from app
Added style resource for first launch window
Check for inverse application cloak HidHide setting. Skip checking HidHide whitelist if option is enabled
Allow DS4 output to not report virtual trigger button state
Added small exception handling for single app instance check
Updated Nefarius.ViGEm.Client.dll files with fixed userdata args for adding notification callback
Display Windows error code for unknown ViGEmFailure in the Log
Added Greek translation. Contribution by trlef19
Added Indonesia translation. Contribution by Adamsw72
Added extra user documentation to repo. Edited README.md. Contribution by Oliver-Noah
Expose secondary joined JoyCon SideL and SideR buttons in mapper. Use DS FnL and FnR codes
Allow DS4 trigger button output only
Allow virtual DS4 trigger behavior combobox strings to be translatable
--3.2.13--
Added Resource workaround in project file to remove then add files. Performance bump. .NET is a weird beast.
Added missing JoyCon controls for Special Actions Unload Triggers
Added remainder cutoff for Touchpad Mouse and Gyro Mouse
Added FirstLaunchUtilWindow. Currently used to specify which devices the mapper should read
Added extra attribution for DsHidMini project in first launch window
Change single app instance check to use EventWaitHandleAcl.TryOpenExisting
Added profile switch notifications for Auto Profile system
Added implicit Default theme logic. Have default app theme change based on Windows app color setting
Prevent lock recursion in OutputSlotManager if ViGEmFailure is encountered
Added Vietnamese language. Contribution by taolatao147
--3.2.12--
ixed DS3 support not being able to be enabled. Contribution by sunnyqeen
Updated german translation. Contribution by PaulWentzel
Added Finnish translation. Contribution by eemijun
Attempt to adjust JoyCon stick axis ranges based on initial axis coordinates
Decreased wait period after resume. Reduced to 5 seconds. Likely a mistake
Dispose notify icon early before closing program. At least H.NotifyIcon errors will show up in the Log upon quitting
Fixed RS stick calibration parsing for JoyCon and Switch Pro controllers
Changed routine to find HidHideClient program. Use registry info to attempt to find HidHide location
Added extra safeguard if profiles list is empty. Prevents crash
--3.2.11--
Gyro Mouse Joystick jitter compensation, DS3 support tweaks, fixes
.NET Runtime x64
Added task logging to resume method
Increase wait period in resume routine
Updated HidHide installer link to version 1.2.128.0
Changed boundary check for main window placement on startup
Added jitter compensation to Gyro Mouse Joystick
Make DS3 device support optional. Separate it from DS4 Controller Support
Lowered JoyCon LS X- boundary when no user calibration is present
Updated FakerInputDll.dll files with file write flag fix
Fixed initial saving of default enable status for non-DS4 controllers. Mainly changes saving to AppData folder
Updated French translation. Contribution by EnzoChaussivert
Fixed restoring of Window position on multi-monitor systems. Contribution by kurtanr
--3.2.10--
Added jitter compensation routine for Gyro Mouse
Move output handler init and disconnect calls to ControlService Start and Stop routines
Changed suspend and resume routines
Added extra exception handling for tray notification failure
Use DetermineConnectionType in PostInit of DS3Device. Contribution by SunnyQeen
Fixed a crash when open device options with null option. Contribution by SunnyQeen
Add InterpretingOscMonitoring Option. Contribution by xAdler
Added some OSC translation strings. Contribution by xAdler
Added OSC monitoring message interpreting. Contribution by xAdler
Added OSC trigger control. Contribution by xAdler
Added additional mapping checks in ProfileDTO MapFrom routine
Changed how macros are saved from binding window. Do not reset shift trigger
Support Horipad 4 FPS. Contribution by markguleno
Fixed custom led mode. Contribution by MatrixDJ96
--3.2.9--
DualSense Edge input support (FnL FnR BLP BRP), Special Actions delay tag fix
Fixed changing of Trigger Effect while switching profiles with DualSense controller
Allow LSVerticalScale and RSVerticalScale to save values > 1.0. Contribution by Katalysta
Updated Italian translation. Contribution by MarkThat
Increased LS and RS Vertical Scale max to 4.0
Check for string length from HidD_GetSerialNumberString call from possible invalid response from hardware
Added extra locking for LoggerHolder
DualSense Edge input support (FnL FnR BLP BRP). Contribution by steffalon
Added subtype property for DualSenseDevice class
Added COMException catching when adding hook for power events
Removed message regarding Middle Mouse closing app in tray menu. Windows 11 no longer supports this at least right now
Added DualShock 3 support using DsHidMini driver (SXS) or Sony Sixaxis driver. Contribution by SunnyQeen
Added logging when reading of Actions.xml fails
Changed processing of Delay tags for Actions.xml. Fixes some cases where recent DS4Windows no longer reads Special Action files from older versions
Fixed outer bounds when using smoothing for 360 Gyro Steering
Fixed anti-dead zone interpretation for 360 Gyro Steering stick output. Applies to Xbox 360 and DS4 output (not VJoy)
Added Playmax PS4 controller. Contribution by nzgamer41
--3.2.8--
Corrected list display of Press Key special action regarding Toggle status
No longer enforce en-US values for Custom Bezier curve string. Might be a mistake
Fixed saving of options for Macro special action. Model problem
Check tray icon has been created before trying to show notification
Fixed DS4KeyType check for shift modifier when multiple flags are used
Ignore None KeyType flag for shift modifier
Simplify shift modifier key type saving
Fixed loading of Gyro Mouse Joystick trigger eval condition
Added extra precautions when disconnecting from FakerInput
Adding initial DualSense Edge support. Contribution by dezerving
Updated zh-cn translatation. Contribution by jyc001
Grab firmware info for DualSense controller
--3.2.7--
Fixed loading of Unload Trigger for Load Profile special action
Fixed model for Press Key special action regarding Toggle status
Changed Press Key special action keyType to reflect Toggle status. Was broken before version 3.2
--3.2.6--
Fixed key type and trigger assignments for shift actions
Fixed bindings for shift button and macro actions
--3.2.5--
Fixed some default values for app settings
Extra app settings checks. Re-establish some app settings defaults
Set AbsRegionDisplay to empty string by default
--3.2.4--
Fixed loading of Launch Program Special Actions arguments
--3.2.3--
Fixed saving and loading of Shift Modifier trigger
--3.2.2--
Fixed saving of Launch Program special action
Fixed Macro and Press Key Special Actions
--3.2.1--
Fixed wait period offset for automatic added wait times in macro editor
Fixed serializing of Special Actions
Fixed saving of Special Actions to Actions.xml
Fixed delay time usage for some Special Action types
--3.2.0--
Migrate app settings and profile readers to use XmlSerializer DTO classes
Small tweaks for JoyCon base init
Tweaked Switch Pro init
Fixed Gyro Mouse toggle profile setting
Experimental support for JoyCon Charging Grip support
Force cancel stalled IO operations when stopping input thread loop
Reset DS4State while removing JoyCon device
Added simple haptic dirty flag
Tweaked hue changing for lightbar Rainbow mode
Made SideL and SideR available as Gyro triggers
Changed rainbow label. Value actually affects lightness level, not saturation
Updated note regarding stick rotation setting
Add extra macro wait periods if delays are not already in use. Tried to keep the old Jay2Kings behavior but it is time to change things
Fixed device type set for JoyConControllerOptions instance
Bump NLog from 5.1.0 to 5.1.1
Updated references to Swedish locale assembly
Bundle custom Nefarius.Utilities.DeviceManagement. Minimal build changes
Fixed crash on updating tooltip if Windows Explorer is not running for some reason. Contribution by V-Olk
Updated Russian translation. Contribution by V-Olk
Fixed default value of UseLang in AppSettingsDTO
--3.1.12--
Updated NuGet packages. H.NotifyIcon.Wpf, MdXaml, NLog, System.Management
Moved some DualSense rumble settings into Profiles. Contribution by Kanuan
Ignore invalid OscPacket that might come through
Changed counter use for Hotplug routine
Removed old DS4 BT output counter workaround. Was only needed when using the Control endpoint
Fixed RS outer binding
Fixed bad copy pasta for SideR control value in special actions
--3.1.11--
Fixed loading of language assemblies from Lang folder
Update Traditional Chinese assembly. Contribution by syaoran
Fixed snap to center Y axis coordinate for control abs mouse
Tweaks to DS4 BT output support. Revert back to using output report 0x11
Take payload length into account besides just array length. Strip 0xA0 data magic byte from output packet
Added workflows for issue moderation automation. Contribution by nefarius
Check current virtual desktop display bounds when restoring window position on startup
Added Poast social link in About window
Tweaked Switch Pro init routine. Increased initial USB delay, tweaked modeswitch command
Removed use of old ControlService busThread. Utilize Dispatcher
Fixed rsync ignore rules for default translation assemblies
--3.1.10--
Added Mouse instance null check when performing PreLoadReset before profile loading
Added absolute mouse output support for bindable controls
Removed references to old BitTube channel
Added WpfScreenHelper NuGet package to dependencies
Use absolute mouse region display coordinate translation for Touchpad abs mouse
Removed App references to MemoryMappedViewAccessor objects for cmd interface. Create as needed. Snappier app as a result
--3.1.9--
Updated ViGEm.NET libraries. Includes check for IOCTL_DS4_AWAIT_OUTPUT_AVAILABLE status. Contribution by Nefarius
Added check that AwaitBufferThread has reached inner loop before attempting to Interrupt thread
Fixed Gyro Mouse Joystick output for vertical axes
--3.1.8--
Implemented Touchpad Mouse Joystick output support. Virtual DS4 feedback fixes contributed by Nefarius
Added working directory info for startup lnk file
Display input slot number in Output Slots tab
Force update TooltipText in GUI thread
Implementation of Touch Mouse Joystick
Fixed log message generation when virtual pad plugin fails
Abstract post action stick axis state changing for use with Mouse Joystick routines
Display some input device information in Output Slots section
Added some device number checks in ProfileSettingsVM. Avoids test index
Fixed Keypad Decimal mapping for FakerInput
Fixes for virtual DS4 output feedback support from ViGEm project. Contribution by Nefarius
Updated ViGEmClient and ViGEm.NET libraries. Contribution by Nefarius
Virtual DS4 output feedback support re-enabled. Contribution by Nefarius
--3.1.7--
Implemented stick delta acceleration options for LS and RS, new devices added to known device list, exclusion filter added by Nefarius for virtual DS4 device check
Added stick delta acceleration options for LS and RS
Added extra UAC Warning to Log when using SendInput event generator. Contribution by Yohoki
Changed URL parser for link generation in LogMessageDisplay window
Changed XInput output slot display routine. Contribution by Ygor
Added Touchpad virtual button activation mode options. Adds ability for activation on Touchpad Touch and Touchpad Release
Added newer possible HidHide locations to HidHide client search routine
Updated some NuGet packages. H.NotifyIcon.Wpf, MdXaml, Nefarius.Utilities.DeviceManagement
Updated linked ViGEmBus version to 1.21.442.0. Now listed as a stable release
Lowered eventDispatcherThread priority to BelowNormal; Event loop primarily used for hotplug and output device plugin and removal
Added PowerA FUSION Wired Fightpad for PS4 to known device list. Contribution by Ygov
Added Thrustmaster eSwap Pro to known device list. Contribution by SakifX9
Arabic language translation updated. Contribution by Ahmed
Added reWASD and VirtualHere to new exclusion filter for virtual device check. Contribution by Nefarius
Changed duration for multimedia timer in app. Not really used now but it would allow sleep times less than 16 ms in app
Unfortunately had to disable virtual DS4 feedback support again. Routine only worked reliably with one controller
--3.1.6--
Updated DS4Windows.deps.json file
Made sure to bundle latest Lang assembly folder
--3.1.5--
Several bug fixes and tweaks. Support for output XInput slot number display. Updated virtual DS4 device check made by nefarius. Initial support for updated ViGEmBus DS4 full output payload (rumble + lightbar) support. Requires latest pre-release ViGEmBus driver (AwaitRawOutputReport calls) to work. Probably a little premature
Updated German translation. Contribution by h1nnak
Added Added Razer Raion Fightpad PS4 to known devices. Contribution by Ygor Vaz
Updated NLog package to version 5.0.4
Updated H.NotifyIcon.Wpf package to version 2.0.64
Updated bundled ViGEm.NET libraries
Fixed wrong UI binging used for RSAntiSnapback. Contribution by Kanuan
Fixed Hip Fire Delay settings not saving. Contribution by Kanuan
Fixed preset option using wrong preset. Contribution by Kanuan
Fixed Flick Stick Min Angle settings not saving. Contribution by Kanuan
Set DualSense's Lightbar to white when stopping DS4Windows. Contribution by Kanuan
Added AutoProfile target EXE to Hidhide. Contribution by Yohoki
Added Auto-Profile Target to HidHide's Whitelist. Contribution by Yohoki
Fixed LF byte for rumble frequency with Switch Pro and JoyCon
Added reference to Nefarius.Utilities.DeviceManagement package. Contribution by nefarius
Hardened virtual device check using Nefarius.Utilities.DeviceManagement package. New check detects and skips reWASD created virtual DS4 controllers. Contribution by nefarius
Updated Driver Installer window to link to HidHide 1.2.98
Display XInput slot num in output slots panel
Added Filename to LogDebug when adding/removing EXE entry for HIDHide's whitelist. Contribution by Yohoki
Updated README file with updated instructions and pictures. Contribution by dpearson2699
Activated Improved Rumble Emulation for DualSense controllers using newer firmware. Set DualSense's default rumble strength level to High. Contribution by Ygor Vaz
Increased max amplitude for Switch Pro rumble. Increases max rumble output
Added initial support for updated ViGEmBus DS4 full output payload (rumble + lightbar) support. Requires latest pre-release ViGEmBus driver (AwaitRawOutputReport calls) to work.
--3.1.4--
Just a fix related to TaskbarIcon changes from the previous release
Changed when CustomName is defined for TaskbarIcon. Fixes Custom Name Exe option with TaskbarIcon workaround
--3.1.3--
Mainly wanted to push out the tray icon fix
Changed startup device init and hotplug to unify code routines
Changed minimum sensitivity for LS and RS
Updated H.NotifyIcon package to version 2.0.60
Implemented workaround for H.NotifyIcon disposing TaskbarIcon instance after display scaling changes and RDP sessions
Updated NLog package to version 5.0.2
Small change to display of Binding window panels when bringing up macro recorder
Added credit notes for vJoyInterfaceCS
Changed ViGEmPluginFailure string text. Removed reference to old PurgeOldXInput project
--3.1.2--
OSC Server added by GreySole, tray icon fix when using Custom Exe Name setting, Removed Speaker volume feature flag for DS4 output report
Hide alpha slider from color picker window
Changed some translation files locations based on .NET 6 locale changes
Added OSC Server and Sender. Contribution by GreySole
Updated H.NotifyIcon NuGet package
Use new H.NotifyIcon property for handling tray icon identifier
Removed Speaker volume feature flag from DS4 output report
Minor tweak for ReadLocker wrapper class
Added H.NotifyIcon to About Extras tab
Removed DS4Audio class from project
Disabled failed fake DS4 detection. Did not really work for its purpose based on reports
Fixed Rename Profile window to use app theme colors
Slightly alter how loading a temp profile is performed
--3.1.1--
Changed gyro output mode output behavior for joined JoyCon controllers. Run output early for Gyro Mouse and Gyro Mouse-like Joystick
Updated many project dependency NuGet packages and DLL files
Migrated project to use H.NotifyIcon.Wpf package
Added extra CONNRESET IOControl call for ReceiveCallback method in UDP server. Avoids potential memory leak within UDP server in .NET 6. The call should have probably existed beforehand
Switched main UDP message rsp to convert payload from a struct. Faster and simpler
Added dependabot to GitHub actions. Contribution by sitiom
Slightly tweaked Suspend and Resume power routines
Fixed DS4Updater download URL redirect when automatic download fails
Fixed initial data bindings for Auto Profile section
Have Full Pull Dual Stage triggers use raw input range rather than interpreted. Might have to change how Full Pull is handled later
Changed WelcomeDialog to use Windows temp folder while downloading rather than program folder. Would mainly affect when DS4Windows is run from a read-only folder (shouldn't be the case on a proper setup)
Removed Mastodon and Minds social media links from About window. No longer support Mastodon as a whole. DS4Windows actually got banned from Minds
Added extra project links and notes to About window
Allow joined JoyCons to transmit unique Gyro data to UDP server. Mimics behavior of BetterJoy for two JoyCon controllers linked together
Changed HidHide download link to point to version 1.1.50.0. Approved release
Enforce 6 normal key maximum for fake virtual keyboard in FakerInput handler. Pretty sure some reports were from people abusing said limit
Removed old .NET 5 workaround for single process instance checking. Use EventWaitHandleAcl.OpenExisting included with .NET 6. Contribution by sitiom
Fixed touchpad counter reading with DualSense. Needed for Touchpad passthru for virtual DS4 Extended output to work. Contribution by Kanuan
--3.1.0--
Probably only going to support this project again for a short period of time. Maybe until the end of 2022. Also, this build targets .NET 6 so you might need to install a new .NET
Runtime package before the updated DS4Windows build will run.
Have project target .NET 6. Good performance jump. Make sure to download the .NET 6 Runtime before updating (NET Runtime x64 / NET Runtime x86)
Updated extra libs to target .NET 6
Remove the use of the DS4Audio monitor class for select devices. Use appropriate DS4 feature flags instead. Will likely fix headphone muting issues while rumble is active for several third party DS4 controllers
Changed expanded output range for Gyro Mouse-like Joystick
Added additional checks for HidHideClient path
Changed gyro mode subcommand calls for Switch Pro and JoyCon controllers
Added try catch for initial outputKBMHandler connect call. Skip over failed FakerInput connection and attempt to fall back to SendInput
Changed Backslash OEM key alias for FakerInput mapping
Corrected current gyro toggle flags. Could have impacted profile switching
Raise default warning intervals used for controller readings control and lightbar flashing
Removed several DS4 BT Windows 7 workarounds. Seriously, Win 7 support is done. 8.1 is almost EOL
Fixed use of WIN64 compilation symbol for HID serial reading routine. Visual Studio probably stripped it with the .NET 5 migration
Bundled updated XInputChecker and DS4Updater that target .NET 6
Binaries are no longer digitally signed. No longer have a valid OV certificate anymore. Going to make distribution harder
--3.0.18--
Added output Stick and Axis options for Gyro Mouse Joystick
Use TabControl to contain gyro output panels. Simplifies XAML
Re-enabled DS4 emulation support
--3.0.17--
Added fake DS4 FrameCounter field for DualSense, Switch Pro and JoyCon devices
Increased default Idle Disconnect time to 15 min
Disabled DS4 controller emulation support. Can't have nice things
Only perform output slot lookup in virtual device plugin routine when emulating a controller
Check for device removal status before adding device to main view list. Fixes initial Switch Pro disconnect on hotplug when controller battery is dead
--3.0.16--
Changed mapper to copy timestamp data from original input state object. Used for DS4 Gyro Passthru
--3.0.15--
Changed ControllerListViewModel locking strategy for non-Sony DS4s that might fail the initial handshake
Removed OnlyInputData0x01 hack for fake DS4 controllers (fake DS4 using Sony VID+PID combo)
No longer provide support for knockoff fake DS4 controllers
Changed Lightbar TabItem in Profile Editor to use embedded TabControl
Added warning text for Lightbar Passthru mode stating the old feature is currently disabled
Fixed combo box cutoff in Dark theme. Contribution by Sajidur78
Updated Brazilian Portuguese translation pack. Contribution by nelitow0.15
--3.0.14--
Updated FakerInputWrapper libraries for F13 - F24 key support
Added F13 to F24 keys for FakerInput mapping
Decreased button wheel delta. Increased button wheel sensitivity. Now uses 150 ms for time delta
Updated FakerInputWrapper libraries. Fixes array bounds check for KeyboardReport
Fixes for Stick Outer Btn bindings
Added ManagementException catch for initial connection. Apparently it can be thrown in that call.
Expanded max output limits for LS and RS
Re-design dark theme and use theme colors in AutoProfiles. Contribution by Sajidur78
Changed DualSense trigger Full Click resistance depending on profile settings
Changes to better handle connection failure for Switch Pro and JoyCon devices
--3.0.13--
Another fix for EnhancedKey usage for FakerInput mapping
Bundled PurgeOldXInput 0.1.2
--3.0.12--
Removed old Input Curve options
Corrected coordinate system for Stick to Mouse Wheel
Fixed saving of Max Output Force options
Expand output for Gyro Mouse Joystick Max Output routine. Make sure maximum output can be achieved. Likely would not achieve a completely straight line when using Gyro.
Expanded macrodone array. Fixes some macro bindings for later virtual buttons
Added 'Hide DS4 Controller' option back in again
Increased button mouse wheel delta. Decreases wheel sensitivity
Unified late profile options checks
Increased resistance range for DualSense trigger Full Click
--3.0.11--
Group and move Virtual Controller options in Other tab. Contribution by Kanuan
Fixed MODIFIER_ENHANCED value for FakerInput mapping
Fixed Alt, Windows, and other modifier keys mapping for FakerInput
Fixed Stick to Mouse Wheel routine for SendInput output
Fixed tray menu profile selection for names with underscores
Added many tooltip strings in Profile Editor
Fixed RenameProfileWindow closing early due to early DialogResult assignment. Property calls Close on the Window
Removed BitChute social link
Fixed display of CheckEveryUnit combobox in Settings tab. Not sure when VS changed that portion of the XAML
Removed obsolete 'Hide DS4 Controller' option again. Can't have options
Added ScrollViewer to Other tab in Profile Editor. Enough controls in tab to justify it
Added force option for LS and RS MaxOutput. Allow 100% forced circular max output for sticks
Made Capture, SL, and SR buttons mappable
Created Outer Button bindings for LS and RS. Allows extra distance action for the sticks like Walk or Sprint
Display Touchpad X and Y in Controller Readings tab
Increased HID report input buffer to 3 rather than 2. Not sure it will really matter
Disabled broken DS4 feedback support again. Can't have semi-nice things. Don't bring it up again until at least the next ViGEmBus driver update
Added change to not send Profile loaded message for secondary JoyCon in Joined mode
--3.0.10--
Removed virtual device plug/unplug delay
Removed Dispatcher and thread from OutputSlotManager
Another fix to hopefully sort out Special Action items properly
Allow profiles to be renamed from within app using Profiles tab
'Hold for X secs' special actions now support decimal values. Contribution by mika-n
DeviceOptions has a new 'Verbose log messages' option. Contribution by mika-n
Fixed coordinate system for Stick to Mouse Wheel calculations
Reset mouse position for FakerInput on Sync method. Fixes some mouse related actions conflicting with FakerInput output handler
Updated Touchpad scroll support to use new coordinate system
Updated Strings.ru.resx. Contribution by shikulja
--3.0.9--
Fixed obtaining source index item for Special Action list
Allow Touchpad Click as an output for Macros
Delay log message for virtual device association
Updated ViGEmPluginFailure message to make reference to PurgeOldXInput utility
Added PurgeOldXInput utility to Tools folder. Might be useful for deleting invalid virtual Xbox 360 controllers
Updated Japanese translation. Contribution by toshixm
Updated Czech translation. Contribution by MikeCZ23
Bundled DS4Updater 1.5.5
--3.0.8--
Fixed Special Action sorting to sort by user defined Action name
Removed support for HidGuardian completely. HidHide is the only supported HID device blocking driver now
--3.0.7--
Added slot# log messages to a gamepad connect/disconnect handler and 'permanent' slot debug msg. Contribution by mika-n
Small special action fix when action trigger is somehow flagged as None
Added support for virtual KB+M driver FakerInput v. 0.1. Needed to play Valorant and other apps that block SendInput events.
Sort Special Action list by action name
Fixed event order issue that caused output slots to not get disconnected
Reduced mouse remainder cutoff to the hundredths place
Fixed OutSlotDevice check to make sure Permanent slots are detached on service stop
--3.0.6--
Re-compiled program and tools. Signed binaries
Almost identical to version 3.0.5
--3.0.5--
Fixed copying of app config file for fake named exe
Now copy deps file for fake named exe
Fixed initial Config folder selection dialog when multiple configs (Program Folder and AppData) are found. Make sure to display option to delete one of the configs
Updated DotNetProjects.Extended.Wpf.Toolkit to version 4.6.97
Updated MdXaml to version 1.10.0
Updated NLog to version 4.7.9
Check if DS4Windows program folder is actually AppData subfolder when locating program config. Treat case as Program Folder option
Added All Files option for Launch Program special action File Dialog. Use Explorer to launch associated program for an arbitrary file
Bundled HidNinja 0.3.2
Bundled XInputChecker 0.1.2
--3.0.4--
Support for DS3 gamepad as vendor defined device over DsHidMini driver. Contribution by mika-n
Now issue immediate virtual device unplug upon Windows suspend
Changed ViGEmBus lookup routine to perform a list based lookup for potential drivers. Attempt to discover newest version from version info
Changed ViGEmClient library to attempt to connect to newest available version of ViGEmBus on a system rather than the first version found
Set all controller slots to use the Default profile initially when making a new config
Immediately issue unplug of all virtual controllers when pressing main Stop button
Initial implementation of HidHide integration. Display key icon for HidHide hidden device. Insert DS4Windows.exe into whitelist at startup if necessary
Changed method of obtaining current executable file location. Needed due to assembly changes in .NET 5 breaking support for custom exe filenames
Added HidHide installer link to Welcome dialog window
Added HidHide Configuration Client app link in Settings tab
Hide HidNinja link in Settings tab if HidGuardian is not installed
Show the text value of 'Max Saturation' lightbar setting. Contribution by sabihoshi
Changed Launch Program special action to use UseShellExecute
--3.0.3---
Fixed Open Program Folder link in tray menu
Lessen ViGEmBus restriction for now. Allow connecting to ViGEmBus 1.16.112.0. PLEASE DON'T MAKE ME REGRET THIS.
--3.0.2--
Use UseShellExecute for ProcessStartInfo in more places for .NET 5 changes
DS4Windows updater message update. Contribution RedDevilus
German translation update. Contribution by jmg2k
Added Portuguese (Portugal) translation. Contribution by joaopedrogome
Add cmd line command for 'Change led color'. Contribution by bernspedras
Muted blues used in Dark theme. Contribution by AnessZurba
Added some exception handling for XML in ProfileMigration
Added output controller option to Preset Window for certain Presets. Change profile values based on output controller type.
Added some precautions for possible empty devicePath string
Changed GroupBox template for Dark theme
Now enforcing ViGEmBus minimum supported version. Targetting ViGEmBus 1.17.333.0
Fixed ProcessStartInfo for ViGEmBus installer launching with .NET 5
Refresh internal data about ViGEmBus on service startup
--3.0.1--
Fixed launching of HidGuardHelper for .NET 5 usage
Fixed URL string generation for updater version redirect on download failure
Fixed a few typos in the English strings. Contribution by instilledbee
Bundled HidGuardHelper 0.2.0
--3.0.0--
DS4Windows now targets .NET 5
Changed ViGEm libraries to target .NET Core 3.1
Now use MdXaml rather than Markdown.Xaml for Changelog text rendering
Removed Newtonsoft.Json library dependency
Removed use of .NET 5 Runtime check nag window
Fixed UDP Server locking device input in .NET 5. Caused by API change for SocketAsyncEventArgs
Moved app config loading to occur after logger is created
Change extras flag to take current DS4Control into account
Added additionalProbingPaths to runtimeconfig.json
Use UseShellExecute for ProcessStartInfo. Due to Process.Start change in .NET 5
Added newer bat self deletion routine. Make sure to return 0 status code in process when performing bat self-delete
--2.2.15--
Ignore duplicate device when in Shared mode
Added extra processing to Version string for .NET 5 and later. Expecting Microsoft to use their own standard was a mistake
Changed URL used for .NET 5 Runtime download
--2.2.14--
Implemented stick vertical scale
Reduce attribute checks for stick interpretation
Check for minimum .NET version on startup. Temporary measure warning about future upgrade
Last version of DS4Windows to target .NET Framework. Next version will target .NET 5
--2.2.13--
Have device hotplug routine enforce profile settings when using a temp auto profile
Bundled DS4Updater 1.4.7
--2.2.12--
Fixed CRC32 error counter for DualSense device class
Fixed bad copy pasta regarding device setting wheel calibration saving
Added error checking with device wheel calibration loading
--2.2.11--
Implemented newer feedback handler routine for virtual DS4 devices. Added virtual DS4 rumble back in
Now sure to use continuous calibration routine for non-DS4 devices
Changed severity of ViGEmPluginFailure message. Now indicates that a user should probably reboot Windows if it happens
Fixed JoyCon R Gyro Roll. Old value was inverted
Copy modified JoyCon current state for use in UDP server
Only display device in UDP server if it is a primary device. Mainly needed due to JoyCon R in Joined JoyCon mode
Added exception catching when saving Actions xml file. File corruption will now cause the file to be written from scratch
Use Task error log helper for some background service tasks. Allows some extra possible error messages to show up in the Log
Simplify UDP motion event creation. Allow motion event to be created when enabling UDP server
Make Flash at High Latency default to 50 ms
Dark Theme color changes. Color contrast has been reduced. Contribution by AnessZurba
Skip writing device wheel calibraton nodes if empty
Now use estimated wheel center values if controller config has an empty entry. Problem caused some app instability and memory bloating due to excessive log messages in Log tab (over 1GB RAM usage)
Implemented axial dead zone and related settings
Fixed ColorByBattery panel visibility for first open. Contribution by MakiseKurisu
Changes for continuous calibration routine for Sony Wireless Adapter connections. Contribution by MakiseKurisu
Tweaked profile loading for some older fallback options
--2.2.10--
Change Disconnect command syntax to allow all wireless controllers to get disconnected
Increased GUI enforced max Trackball Friction value to 20.0
Slightly edited colors used in Dark theme
Disabled virtual DS4 feedback routine again
Allow Joined JoyCon support. Joined link mode is now the default
Changed L1 binding for KB+M and Gyro preset profile. Make Unbound
Fixed macroRecorder bug where MUTE control threw an exception because it is not in macroDS4Values array. Contribution by mika-n
Fixed wrong on-screen button indexes while remapping using 'readout' feature. Contribution by mika-n
Added artificial VID/PID for DualShock 3 running under DsHidMini drivers. Contribution by nefarius
Bundle HidNinja 0.2.3
--2.2.9--
Profile settings fuzz option hang fix. Contribution by RokasKil
Anti-snapback stick settings added. Contribution by RokasKil
.NET 5 progress complete. Will keep net5 branch updated regularly until used in public build. Contribution by sitiom
Fixed index out of bounds error when loading profiles in virtual output device check
Fixed current item selection for right click Disconnect BT
Removed references to Frog site. No longer posting updates there
Changed initial trackball velocity calculations to attempt to make numbers more uniform across devices
Added Disconnect command line option
Disable macro mode combobox when opening Macro used in a Multi-Action Button special action
Take out nag disclaimer window regarding Hide DS4 Controller option
--2.2.15--
Ignore duplicate device when in Shared mode
Added extra processing to Version string for .NET 5 and later. Expecting Microsoft to use their own standard was a mistake
Changed URL used for .NET 5 Runtime download
--2.2.14--
Implemented stick vertical scale
Reduce attribute checks for stick interpretation
Check for minimum .NET version on startup. Temporary measure warning about future upgrade
Last version of DS4Windows to target .NET Framework. Next version will target .NET 5
--2.2.13--
Have device hotplug routine enforce profile settings when using a temp auto profile
Bundled DS4Updater 1.4.7
--2.2.12--
Fixed CRC32 error counter for DualSense device class
Fixed bad copy pasta regarding device setting wheel calibration saving
Added error checking with device wheel calibration loading
--2.2.11--
Implemented newer feedback handler routine for virtual DS4 devices. Added virtual DS4 rumble back in
Now sure to use continuous calibration routine for non-DS4 devices
Changed severity of ViGEmPluginFailure message. Now indicates that a user should probably reboot Windows if it happens
Fixed JoyCon R Gyro Roll. Old value was inverted
Copy modified JoyCon current state for use in UDP server
Only display device in UDP server if it is a primary device. Mainly needed due to JoyCon R in Joined JoyCon mode
Added exception catching when saving Actions xml file. File corruption will now cause the file to be written from scratch
Use Task error log helper for some background service tasks. Allows some extra possible error messages to show up in the Log
Simplify UDP motion event creation. Allow motion event to be created when enabling UDP server
Make Flash at High Latency default to 50 ms
Dark Theme color changes. Color contrast has been reduced. Contribution by AnessZurba
Skip writing device wheel calibraton nodes if empty
Now use estimated wheel center values if controller config has an empty entry. Problem caused some app instability and memory bloating due to excessive log messages in Log tab (over 1GB RAM usage)
Implemented axial dead zone and related settings
Fixed ColorByBattery panel visibility for first open. Contribution by MakiseKurisu
Changes for continuous calibration routine for Sony Wireless Adapter connections. Contribution by MakiseKurisu
Tweaked profile loading for some older fallback options
--2.2.10--
Change Disconnect command syntax to allow all wireless controllers to get disconnected
Increased GUI enforced max Trackball Friction value to 20.0
Slightly edited colors used in Dark theme
Disabled virtual DS4 feedback routine again
Allow Joined JoyCon support. Joined link mode is now the default
Changed L1 binding for KB+M and Gyro preset profile. Make Unbound
Fixed macroRecorder bug where MUTE control threw an exception because it is not in macroDS4Values array. Contribution by mika-n
Fixed wrong on-screen button indexes while remapping using 'readout' feature. Contribution by mika-n
Added artificial VID/PID for DualShock 3 running under DsHidMini drivers. Contribution by nefarius
Bundle HidNinja 0.2.3
--2.2.9--
Profile settings fuzz option hang fix. Contribution by RokasKil
Anti-snapback stick settings added. Contribution by RokasKil
.NET 5 progress complete. Will keep net5 branch updated regularly until used in public build. Contribution by sitiom
Fixed index out of bounds error when loading profiles in virtual output device check
Fixed current item selection for right click Disconnect BT
Removed references to Frog site. No longer posting updates there
Changed initial trackball velocity calculations to attempt to make numbers more uniform across devices
Added Disconnect command line option
Disable macro mode combobox when opening Macro used in a Multi-Action Button special action
Take out nag disclaimer window regarding Hide DS4 Controller option
--2.2.8--
Fixed resetting of trigger values for Two Stage modes
Removed references to old Discord server
Pull gyro calibration sampling routine out to its own method
Fixed normal button binding to Touchpad Click output
Attempt to go to DS4Updater Release page if automatic download of updater failed
Added GitHub link to Social row in About window
Fixed x86 ViGEm installer URL
--2.2.7--
Added delay time to Gyro Directional Swipe action
Fixed populate of Gyro Directional Swipe and Gyro Controls triggers buttons
Lowered touchpad slide distance for Controls mode
Fixed Steering Wheel calibration Special Action saving
Allow resetting of extras for Trigger soft pull and full pull
Allow resetting Extras bound to Gyro Swipe actions
Now officially only support Windows 10 and later. THANKS MICROSOFT
Added BatteryPercentage mode for DualSense Player LED Bar
Fixed Switch Pro and JoyCon AccelY coordinate used by UDP Server
Fixed profile cancelling for the test index
Tweaked disable device time for Exclusive mode routine
Removed DynamicResource lookups for Special Action Editor
.NET 5 port in progress
Added App instance check to work around Design mode in .NET 5.0
Changed Browse Programs fallback value in Profile Editor for .NET 5.0
Changed method to strip null terminated strings
Added Gyro Calibration button to Gyro Mouse StackPanel
Updated ViGEmClient library to use notification queue
Fixed critical notification callback bug in ViGEm.NET library
Bundled DS4Updater 1.4.6
Added updated ScpVBus build
--2.2.6--
Fixed Gyro Mouse Joystick trigger selection
Corrected Gyro Mouse and Gyro Mouse Joystick toggle flags
Put Gyro Calibration button in other Gyro mode panels
Added Mute LED mode for DualSense device options
Fixed default virtual Touchpad button bindings
Corrected Special Action regression
Including updated ScpVBus build
Fixed sync between button mouse sens and active mouse sens in Profile Editor
Changed DualSense blanking flags used for initial connection and detach
Now use defined ControlActionData for mapped actions rather than unboxing object references. Speeds up the mapping routine a good amount.
Hebrew translation added to project file. Translation was never added in
Allow Gyro triggers for Gyro Controls mode
Reset Gyro Controls output accel values to 0 for each poll
Driver installer window now takes arch into account when downloading the latest ViGEm installer. It uses a different setup file for each arch
Disable Xbox 360 installer button in Welcome Dialog if running on Win8 or greater
Added toggle mode to Gyro Controls
Added ScrollViewer for Gyro tab
Increased Full Click trigger effect resistance a bit
Use fake HW serial to index SonyWA connections. Should allow multiple Sony dongles to work
Allow audio volume searching for Nacon Rev Pro v.2 controller.
Added DS4 setting to attempt to change output report features for copycat controllers
--2.2.5--
Fixed SelectedValue display in Dark theme for some dynamic ComboBox controls
Added Gyro Directional Swipe output mode
Updated ScpVBus build with version 2.2.4 changes
--2.2.4--
Added an extra precaution to unplug any permanent output devices upon service stop. ViGEmBus should handle this already but just want to make sure.
Updated Polish translation. Contribution by gregory678
Changed locking strategy for ControllerSlotManager collection
Fixed right click disconnect slot index for new sorted list
Implemented a variant of Two Stage Triggers
Added Trigger effects presets. Currently only useful for the DualSense controller
Added averaging gyro calibration upon device connection. Contribution by firodj
Skip unknown DS4Controls names while loading a profile
Fixed issue with missingSettings being set for fallback value lookup on Profile load. Constantly re-saved profiles
Only reset outDevTypeTemp on full profile save. Ensured proper controller image is used in Binding window after clicking Apply in Profile Editor
Change arrangement of lit LED lights for DualSense controller
Allow Touchpad Click button passthru with Mouse and Controls mode
Changed device type settings. Now use device specific (serial) settings. Now saved to ControllerConfigs.xml
Added check for valid output report types upon DS4 BT device connection. Can revert to using output report 0x11 if needed. Not sure if it will matter
Ignore output plugin routine and other calls if requested profile file does not exist
--2.2.3--
Have app ignore embedded color profile for rainbowCCrop image. Fixes Profile Editor crashing app on some systems
Supports .BAT/.CMD batch scripts in specAction LaunchProgram. Contribution by mika-n
Added Hebrew translation. Contribution by avsha114
Corrected Touchpad Resolution Y Max for DS4 and DualSense
Fixed crash when right click disconnect is done twice and GUI has not changed yet. More of a pre-caution than anything
Gioteck VX4 gamepad support. Contribution by mika-n
Fixed passthru panels showing up properly for Touchpad and Gyro
Pushing half-baked controller options window
Change DupBox placeholder text behavior
Removed Parler link from About window for now. RIP Parler
Now use device specific Gyro Mouse sensitivity values
Decreased sensitivity of DualSense Gyro Mouse slightly
Added placeholder help text for window title auto profile field
Fixed window style for Updater window
Allow Home LED to be disabled for Switch Pro and JoyCon
Fixed app config loading. Stopped extra config saves on program launch from missingSetting being set unintentionally
Added more white variation of images for use in Dark theme
Make custom Bezier curve perform circular interpolation rather than per axis
Use ControlService event dispatcher for synchronization on device unplug
Fixed Gyro Mouse and Mouse Joystick Smoothing panels visibility in Profile Editor under certain scenarios
Fixed a bug in autoProfile set Path handler. Contribution by mika-n
Lowered default rumble emulation strength of DualSense controller
Allow configurable rumble strength setting for DualSense controllers. Will likely change later
Now use player LEDs on Switch Pro, JoyCon, and DualSense controllers. Used to display input device slot number
Display input slot number in controller list
Now sort main controller list by device index
Changed output device pluging routine. Stop DS4Windows service if ViGEm device connect call fails
Changed default dead zone for KBM profile templates
Only output DS4 touchpad button click when in Passthru mode
Make sure to refresh gyro mouse smoothing combobox indexes after loading from a preset
Bundled DS4Updater 1.4.5
--2.2.2--
Put lock block in for DS4 USB output routine
Import newer ViGEm.NET libraries for ViGEmBus 1.17.333.0 extended support
Allow passthru of Touchpad and Gyro to output virtual DS4. Requires ViGEmBus 1.17.333.0 and Windows 10
Put note about DS4Windows assembly architecture in Log. Needed to diagnose Exclusive mode problems.
No longer reset X360 report data each gamepad poll
Fixed Touchpad Swipe and Gyro Tilt controls index values for Profile Editor controls
Fixed some 8 controller bugs. Make sure to save set profile and load setting
Don't reset auto profile flags on device removal
Sort auto profile list by app file name
Allow binding to Mute button in Special Action editor
Added DualSense Mute button to Gyro and Touchpad triggers
Allow Mute button as a Shift Trigger
Use a WrapPanel for Utils section
Fixed crash on Windows 7 when attempting to download ViGEm installer. Side effect of targeting .NET Framework 4.8
Remove Aero2 assembly reference
Changed output method used for Windows 7 BT DS4 devices. Forced to use Control endpoint on Windows 7
Have driver installer window choose different ViGEmBus installer depending on detected Windows OS install