
3.0.18 / 17-08-2021
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
...
Most Recent Changes
--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