Version 3.1.0

  • Have project target .NET 6. Good performance jump. Make sure to download the .NET 6 Runtime before updating.
  • 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

Version 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


Version 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


Version 3.0.16

  • Changed mapper to copy timestamp data from original input state object. Used for DS4 Gyro Passthru


Version 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 nelitow


Version 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


Version 3.0.13

  • Another fix for EnhancedKey usage for FakerInput mapping
  • Bundled PurgeOldXInput 0.1.2


Version 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


Version 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


Version 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 Contribution by shikulja


Version 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


Version 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


Version 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


Version 3.0.6

  • Re-compiled program and tools. Signed binaries
  • Almost identical to version 3.0.5


Version 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


Version 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


Version 3.0.3

  • Fixed Open Program Folder link in tray menu
  • Lessen ViGEmBus restriction for now. Allow connecting to ViGEmBus PLEASE DON’T MAKE ME REGRET THIS.


Version 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


Version 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


Version 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


Version 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


Version 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


Version 2.2.13

  • Have device hotplug routine enforce profile settings when using a temp auto profile
  • Bundled DS4Updater 1.4.7


Version 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


Version 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


Version 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


Version 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


Version 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


Version 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


Version 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


Version 2.2.5

  • 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


Version 2.2.4

  • 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


Version 2.2.3

  • 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


Version 2.2.2

  • 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


Version 2.2.1

  • Put lock block in for DS4 USB output routine


Version 2.2.0

  • 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


Version 2.1.23

  • Updated App.config file with proper .NET Framework version
  • Added support for mapping DualSense Mute button
  • Fixed Dark theme crashing app in Windows 7. Removed Aero2 elements from Dark theme.
  • Disable apply button when creating a new profile. Further enforce current flow
  • Added feature set check before generating CRC-32 output data
  • Fixed theme style for SaveWhere window
  • Corrected KeyDown and KeyUp images in Macro editor
  • Split DS4HapticState to two structs. Separate force feedback data from lightbar color
  • Added -command cycle cmd flag. Allows for an easy on/off shortcut without having to set any conditions. Contribution by wingfixer
  • Changed AutoProfile EXE file extension check to be case-sensitive. Contribution by mika-n
  • Added MinWidth back in Dark theme for combobox. Was removed with Aero2 tags.
  • Updated Russian translation file. Contribution by shikulja
  • Don’t display data write failure if device is known to be disconnecting. Hopefully eliminates excessive gamepad write failure log messages when Idle Disconnect is executed.
  • Tweaked axis scaling to output Xbox 360 axis. Low end now can scale to 0 properly.


Version 2.1.22

  • Make sure profile name textbox is enabled by default again


Version 2.1.21

  • Grab proper image for Exclusive access display


Version 2.1.20

  • Changed project file to allow building app with msbuild
  • Use custom window for displaying Log messages. Can highlight text and click URLs
  • Send empty output report before closing a DualSense device. Resets rumble emulation flag to allow haptics to work again
  • Fixed -command Shutdown cmdline option. Contribution by mika-n
  • Updated Russian translation. Contribution by shikulja
  • Allow longer periods of rumble with DualSense
  • Changed battery max value for DualSense
  • Increased delay before hotplug device check
  • Added button mouse vertical scale
  • Changed Subcommand routine for Switch Pro and JoyCon classes
  • Updated Polish translation. Contribution by gregory678
  • Added Brook Mars controller support. Contribution by Кладовая
  • Implemented a Dark theme for the GUI
  • Fixed Change Light extras setting loading in Binding window. Keep setting in tact
  • Changed buffer size for DS4 FileStream instance
  • Now use Interrupt endpoint for DS4 BT output reports
  • Fixed out-of-bounds access when enabling square stick. Contribution by hpesoj
  • Added Arabic translation. Contribution by xLive
  • Added 7-Zip archive for updated ScpVBus build for regression testing


Version 2.1.19

  • Fixed translation loading


Version 2.1.18

  • Lowered intensity of rumble effect for DualSense
  • Rumble and lightbar support for DualSense now work over BT
  • Added Rotate options to the Preset Menu in the Profile Editor. Useful for mapping a single JoyCon
  • Disable DualSense Mic LED for now
  • Edit language used for Run At Startup options to make intent more clear. Contribution by olokos
  • Updated Ukrainian localization. Contribution by dondrakon1
  • Added Hungarian translation. Contribution by rocketbucket10
  • Experimental rumble for DS4 emulation. Make support a profile option. Contribution by mika-n
  • Added New Battery and Charging command line query options to return the battery value and the charging status. Contribution by mika-n
  • Updated target .NET Framework to version 4.8. Contribution by dante38
  • Disable Output Slots section when service is not running
  • New outputSlot related command line interfaces. Contribution by mika-n


Version 2.1.17

  • Implemented JoyCon support
  • Implemented DualSense support. Lightbar and rumble support only work with USB for now
  • Added workaround for DS4 reader when a duplicate timestamp is in a report. Fixes smoothing for UDP server output
  • Populate totalMicroSec in JoyConDevice and SwitchProDevice. Used in the UDP server output
  • Enabled Idle Disconnect for SwitchPro and JoyCon


Version 2.1.16

  • Allow inserting wait periods in macro sequence
  • Disable IdleDisconnect by default
  • Updated URL for Gamepad Tester
  • Added initial Flick Stick support
  • Various refactors to somewhat abstract controller type from mapper code
  • Added initial mapping support for the Switch Pro controller
  • Increased default flash warning interval in Settings. Now defaults to 40 ms
  • Changed connection type check depending on the input device
  • Added an extra Reset call for ManualResetEventSlim for DS4Device
  • Allow task startup if running on battery power
  • Added fuzz setting for 360 Steering Wheel mode
  • Hide DS4 Controller option re-enabled. Contribution by Yohoki
  • Chinese (Traditional, Taiwan) Translations Updated. Contribution by SyaoranChang
  • Ukrainian translation added. Contribution by atimonder1
  • Put null check when checking for new input devices. Necessary for new input device check refactor.
  • Bundled HidNinja 0.2.2


Version 2.1.15

  • Found a way to pass URL to Explorer and have the shell not interpret it. Removes cmd window appearing
  • Disable Program Folder panel on initial config window when location cannot be written to
  • Moved main touchpad options to a tab in the Profile Editor
  • Moved items in DS4 Canvas around. Top Touch hover image now appears above Lightbar button
  • Only reset rumble on extras deactivatoin if extras has rumble enabled
  • Allow Touchpad Click to be used as a Gyro trigger
  • Added an initial Touchpad Absolute Mouse implementation
  • Make sure to isolate Touchpad double tap check to Mouse mode
  • Added rotation setting to Touchpad Mouse
  • Make No Controller Connected message dynamic. Show updated controller limit depending on build
  • Increased interval for flashing latency warning
  • Added minimum threshold to Touchpad Relative Mouse
  • Added Min Threshold setting for Gyro Mouse
  • Updated Dutch Translation. Contribution by RedDevilus
  • Updated French Translation. Contribution by RedDevilus
  • Added translation contributors to About window finally
  • Disable ViGEm install button while installation process is active


Version 2.1.14

  • More max controller 4 value changes to use Global.MAX_DS4_CONTROLLER_COUNT parameter. Contribution by mika-n
  • Corrected bindings for AutoProfiles controls
  • Fixed trigger bindings in KB+M presets
  • No longer skip profile migration for version 1 profiles (Jays2Kings)


Version 2.1.13

  • Added FORCE_4_INPUT compilation symbol
  • Another place for bumping up test profile index


Version 2.1.12

  • Fixed test profile index use for Windows 7
  • Found more places where controller limit check was needed


Version 2.1.11

  • Added clamping on LS and RS dead zones in profile reader
  • Corrected test profile index when launching Profile Editor from Profiles tab


Version 2.1.10

  • Allow Black icon image for tray icon
  • Changes to allow a maximum of 8 input controllers. The old limit was 4.
  • Leave custom lightbar color active after macro if ‘Keep key state’ is set. Contribution by mika-n
  • Added One Euro Filter to UDP Server mapping
  • Added simple Presets window for Profile Editor
  • Changed some Gyro Controls checks in mapping routine. Old routine could have activated any set Gyro Controls buttons even while Gyro Mouse Joystick is used
  • Added a Changelog viewer window to project
  • Remove temp profile association on device removal
  • Fixed profile save name check for Save method in Profile Editor
  • Changed Quick Charge check to delay disconnecting BT controller until USB controller is detected. Allows USB wall chargers to be used to charge a DS4 and not interfere.
  • Fixed profile save on profile migration


Version 2.1.9

  • Added XInputChecker link
  • Fixed null pointer issues in Macro Editor when using Preset options


Version 2.1.8

  • Added WIN64 compilation symbol back in
  • Added Touchpad Click as an output binding
  • Added support for SnakeByte Game:Pad 4S gamepad. Contribution by mika-n
  • Implemented fuzz routine for LS and RS. Delta value before stick coordinates are updated
  • Changed assembly references. Found a way to safely use AggressiveInlining
  • Increased initial service start delay
  • Do not change window size if it is currently larger than default Profile Editor size
  • Added note about Edge to Exclusive mode error message
  • Fixed app crash when TaskService COM objects don’t work. Contribution by mika-n


Version 2.1.7

  • Fixed ‘index out of bounds’ error for localization string when default profile is not found. Contribution by mika-n
  • Updated build script to bundle newer translation packs
  • Updated Spanish translation. Contribution by peter9811


Version 2.1.6

  • Removed LBRY social link and resources
  • Allow setting a custom executable file for DS4Windows.exe
  • Changed CONFIG_VERSION to 4. Start of profile migration support
  • Added 1 Euro Filter smoothing for Gyro Mouse and Gyro Mouse Joystick output modes
  • Bump up Gyro Mouse offsets
  • Apply 1 Euro filter to calculated rotation angle from 360 Steering Wheel mode rather than each accel axis value
  • Fixed locatiztion bug in the input custom bezier curve string value. Contribution by mika-n
  • Added support for three specialist PS4 controllers. Contribution by tpneill
  • Increased scale multiplier used for Gyro Mouse
  • Changed translation string for ‘save’ in German translation. Contribution by Haamar
  • Dutch translation added. Contribution by RedDevilus
  • French translation added. Contribution by RedDevilus
  • Only call RefreshVolume when the DS4Audio device is detected
  • App can now find a unified USB device tied to the DS4 HID and audio devices. DS4Windows no longer relies on string name to match audio devices
  • Increased minimum headphone volume
  • Added new Chinese (Traditional, Taiwan) translation. Contribution by SyaoranChang
  • Fixed issue with wrong window position data being saved while window is minimized
  • Now show battery level for controller plugin tray message
  • Added current battery level from DS4State object to Controller Readings. Used to diagnose if BatteryChanged events are not firing in main window
  • Change profile save routine to allow dots in profile name
  • Escape underscores in profile names for some GUI controls. Needed to disable access key usage in some GUI controls
  • Fixed sides for Test Rumble in Profile Editor
  • Allow both rumble motors to be usable simultaneously for Test Rumble
  • Dynamically create task.bat file as requested. Allows a custom exe filename to be written to the file
  • Reset button mappings when a special action is triggered
  • Updated app manifest file to specify confirmed compatible versions of Windows
  • Now log current exe filename to Log file. Just the base filename not the whole path
  • Updated DS4Updater.exe to version 1.4.3


Version 2.1.5

  • New ‘Query’ cmdline options to return profile and DS4Windows app properties to a 3rd party app or batch scripts. Contribution by mika-n
  • Fixed Gyro Mouse Joystick invert options
  • Added OneEuroFilter class to project
  • Added 1 Euro Filter options to 360 Steering Wheel mode
  • Disable profile name textbox when editing an existing profile
  • Abstract portion of resource URI strings
  • Added max output throttling option to Gyro Mouse Joystick
  • Quick change to not persist auto profile messages to the log file
  • Added small wrapper for ReaderWriteerLockSlim objects
  • Display Gyro Mouse Joystick anti-dead zones as percentages
  • Take special action for certain keys in RecordBox when WPF does not transmit a KeyDown event
  • Added RWin button handling in mapping window
  • Added Parler Social link in About window
  • Added GitHub Issue template to Git repository
  • Added minimum threshold for Gyro Mouse Joystick
  • Set neutral resource language for assembly
  • Disabled force feedback support for virtual DS4 controllers


Version 2.1.4

  • Fixed app crash when No is selected in UAC confirm window
  • Make sure to cache profile flags after changing Steering Wheel axis in Profile Editor
  • Force permanent output device removal on service stop
  • Added support for Astro C40 gamepad. Contribution by mika-n
  • Fixed Gyro Mouse Turn Behavior setting
  • Fixed input bound flag updating for output slots
  • Changed Exclusive Mode check to take HidGuardian support into account. Key icon will appear for devices affected by HG
  • Added preset menu for face buttons. Finally wanted that option back
  • Re-enabled lightbar color change for output DS4 force feedback routine
  • Fixed output slot active flag when switching device types
  • Made changes to allow LastVersionChecked to be an optional element in config file
  • Raised default stick mouse offset
  • Fixed spelling mistake in DE translation file. Contribution by Flo082002
  • Changed gamepad latency log message to show current latency measurement. Contribution by dondrakon
  • Raised Square Stick Roundness max value to 1000.0
  • Use BeginInvoke for changing properties for permanent device manipulation. Keeps EventDispatcher actions in order
  • Reset state of permanent device when unbinding an input device
  • Fixed NumPadEnter binding in Binding Window
  • Bundled HidNinja v.0.2.1 HidGuardian management program


Version 2.1.3

  • Updated to use newer version of ViGEm.NET client libraries
  • Correct feature configuration for Hori PS4 Mini controller. Contribution by sergejkiller
  • Finally removed AnyCPU targets from solution
  • Added extra null check safeguard for output slots
  • Finally re-enabled Controller Readings tab from Profiles list
  • Finally removed support for old Flush HID option
  • Improved UI markup in Profile Editor window. Contribution by dondrakon
  • Add some extra Japanese translation string. Contribution by stryblt
  • Added config version number to profiles
  • Change to bundle DE lang assembly pack
  • Added app_version attr to profiles
  • Added extra exception catch to safeguard against corrupt XML files
  • Changed Profile Editor to not change virtual devices during loading
  • Changed Check Updates default interval to 1 Day rather than 1 Hour
  • Added Apply button on profile settings window. Contribution by dondrakon
  • Added Chinese Simplified translation. Contribution by mayawei
  • Allow skipping a version update from Updater Window
  • Added link for HidNinja program in Settings tab
  • Bundled HidNinja v.0.2 HidGuardian management program
  • Added app_version attr to main config file


Version 2.1.2

  • Added architecture info to log
  • Added option to specify permanently connected output devices
  • Added extra check before sending output reports to virtual device


Version 2.1.1

  • Changed type of output report transmitted to DS4 in BT. Now use report type 0x15 (previously 0x11)
  • Added extra data transmission flag to output report
  • Changed thread affinity of hidDevice object. Link with initial high priority thread
  • Use a Dispatcher instance for managing the OutputSlotManager rather than Tasks
  • Changed how a running output slot queue is specified
  • Initial mouse offset refactors. Base mouse offset on percentage of full speed. Defaults to 0.500
  • Make button mouse offset a profile setting
  • Set MinWidth and MinHeight values for the main window. Contribution by dondrakon
  • Group some button mouse fields into a class. Reduces getter calls
  • Show minimum effective mouse speed in GUI
  • Put OS Info in log. Will be useful for debugging
  • Removed chance for a dead lock when stopping input controllers. Luckily I have never encountered it
  • Fixed a bug where a shiftKey macro accidentally saved HoldMacro and Macro status values. Contribution by mika-n
  • Fixed debug x86 project target by enabling the Allow Unsafe Code project setting. Contribution by mika-n


Version 2.1

  • Fixed possible sign flip issue with radial output curves
  • Fixed NaN problem when radial cap is 0. Fixes output curve coordinate issues on the extreme low end
  • Support for various non-standard DS4 gamepads which behave in BT just like USB connected DS4. Contribution made by mika-n
  • Made a dedicated updater dialog window
  • Added Changelog text to updater window
  • Now actively using Newtonsoft Json.NET library
  • Added Markdown.XAML library
  • Fixed a few networking issues when pulling new version info
  • Minor optimization of Controller Readings tab. Moved state copying outside of UI thread
  • Updated UDP server to call the semaphore release on socket complete event
  • Added German translation files. Changes made by **Flo082002**
  • Added small log message stating whether running as Admin or User. Useful info when dealing with SendInput problems
  • Fixed bug with 360 Steering Wheel output. Now two DS4 gamepads can be properly mapped to different VJoy output device axes


Version 2.0.16

  • Made stick output curves radial
  • Doubled SocketAsyncEventArgs buffer length in UDP server (now 80)
  • Added semaphore to UDP server class to control SocketAsyncEventArgs instances used
  • Changed access flags used while enumerating controllers
  • Increased HID disable time when attempting to get exclusive access (now 100 ms)
  • Added updated DS4Updater downloading and version check
  • Removed DS4Updater copy routine at start of DS4Windows. Changed responsibility to end of DS4Updater script
  • Added rounding back to LS and RS Deadzone Profile Editor controls
  • Now download latest updater version number from online repository
  • Reduce confusion with minimize to taskbar/sys tray. Contributed by SteelShot
  • Bundled DS4Updater version 1.4.2


Version 2.0.15

  • Made a wrapper script for launching process in Explorer. Needed for opening URLs with query strings in un-elevated mode
  • Loosened enhanced precision curves
  • Changed check for remapping execution. Take some Gyro mode settings into account
  • Increased virtual device hotplug delay time to 500 ms (previously 200 ms)
  • Changed to store force feedback delegate and unsubscribe before virtual controller is disconnected
  • Force initial lightbar color change on profile load
  • Added extra profile flag caching when loading a profile
  • Temporarily establish main lightbar color after turning off lag flashing
  • Changed how state data is read for Controller Readings tab in Profile Editor
  • Added Newtonsoft.Json library to dependencies
  • Fixed setting arguments string for Launch Program special action
  • Added reference check while unplugging virtual device
  • Added tooltip showing program path for Launch Program special action


Version 2.0.14

  • Added wait event to use for refreshing controller readings
  • Added extra launch parameter for DS4Updater
  • Disable Controller Readings tab when not associated with a controller and profile
  • Make sure UDP server edit controls are enabled when UDP server is active
  • More actively refresh cached profile properties
  • Log exceptions from failed Tasks
  • Added Unbound preset menu option for preset context menu in Profile Editor
  • Increased stick mouse offset
  • Changed volume scale used for both headphone and microphone
  • Display input delay as a double in interface
  • Added more proper logging of background thread exceptions
  • Make profile list in Controller listing expand
  • Changed Controller Readings section to display numeric data for input and mapped output values
  • Changed some logging calls to use warning flag when exceptions are caught
  • Temporary: Commented out lightbar color changing routine from virtual DS4. Reverted to use old force feedback routine. The previous change seemed to contribute to infinite rumble for some people but I can’t verify anything on my end
  • Bundled DS4Updater version 1.4.1


Version 2.0.13

  • Added clamping to Gyro Mouse Joystick vertical scale
  • Start some process calls through explorer. Launch process un-elevated
  • Added social icons and links to About window
  • Added device display name to ID column
  • Added minor tooltip for exclusive column
  • Another attempt to fix Touchpad panel display
  • Related change to Gyro panel display


Version 2.0.12

  • Log actual exception that occurs when interpreting the Touchpad fails
  • Make sure to use newer custom settings for the first created (Default) profile. Was unintentionally using older Jays2Kings values
  • Make sure to display proper max mouse speed when creating a new profile
  • Fixed some profile defaults (Idle Disconnect, Enable Touchpad Toggle)
  • Added preset context menu back to Profile Editor
  • Lowered default LS and RS Anti-dead zones for new profiles (now using 20% rather than 25%)


Version 2.0.11

  • Increased stick mouse offset more
  • Fixed numpad divide virtual key code in BindingWindow
  • Group fields used for lightbar routine
  • Allow flashAt minimum to go to -10. Negative number disables flash and pulse lightbar functionality
  • Added DS4 feedback event workaround for lightbar color
  • Added Passthru lightbar mode. Used for games with native DS4 support that can change the lightbar color to display contextual states (The Witcher 3)
  • Removed unneeded references in resource files. Removed old audio file


Version 2.0.10

  • Loosened Enhanced Precision curve
  • Change to check for presence of PS button in idle check
  • Have Disconnect BT Special Action wait for Idle controller status with SONYWA
  • Make sure control binding is written for Shift bindings even when bound to default
  • Fixed double tap dragging by refreshing mouse buttons during a touchpad touch event
  • Allow square stick roundness to be set to 0.0. Linear interpolation
  • Change in gamepad input routine to manually interpret high resolution counter
  • Change application to use software rendering by default. Should resolve G-Sync issues
  • Moved elevation code to ControlService class
  • Commented out delay after re-enabling a device for Exclusive mode
  • Added some more tooltips to Profile Editor


Version 2.0.9

  • Fixed saving of “Repeat While Held” macro setting
  • Updated midpoint for gyro to axis calculations
  • Change default app text options in main XAML
  • Increased stick mouse offset


Version 2.0.8

  • Fixed type cast problems with Gyro output curves. Fixed Easeout Cubic curve for Gyro controls
  • Added output mouse speed text next to mouse sensitivity
  • Actually added mouse sensitivity binding in Profile Editor. Major Oopsie
  • Fixed switching of DInput only profiles
  • Changed display of rumble edit controls
  • Change main window init to launch background tasks later
  • Change to allow HidGuardian message to appear in Log tab


Version 2.0.7

  • Fixed profile duplication
  • Add log message if HidGuardian is detected
  • Change to launch HidGuardHelper later at startup
  • Fixed midpoint for Swipe to Axis controls
  • Added comment in profiles stating which version of DS4Windows made the file
  • Added link to HTML5 Gamepad Tester under Utils
  • Change to apply trigger max zone when dead zone is 0.0
  • Updated Russian translation. Change provided by DragonZX
  • Fixed exclusive mode issues for non-admin users. Fixed second instance shutdown failure.
  • Added extra hooks in Binding window for Numpad keys


Version 2.0.6

  • Created Max Output setting for some axes. Replacement for negative deadzone functionality from Jays2Kings build
  • Increased stick mouse offset
  • Increased virtual controller change delay time
  • Fixed saving of Custom Steam Folder setting


Version 2.0.5

  • Added Italian translation file to VS project
  • Fixed Y buffer clearing in trackball routine
  • Make new Special Actions enabled in the current profile by default
  • Make sure to actually load Linked Profiles at program start. Oopsie
  • Save settings on log off or Windows shutdown
  • Save settings on controller unplug. Needed to save Linked Profile setting
  • Link to ViGEm installer version 1.16.116
  • Allow moving auto profile entries. Change contributed by mika-n
  • Added tooltip to auto-profile path and title editbox fields. Change contributed by mika-n
  • Czech translation added. Provided by Maikeru007
  • Fixed binding for Flash at High Latency setting. Change contributed by mika-n


Version 2.0.4

  • Changed macro recorder to handle special case of capturing Alt keys
  • Fixed values used for controller button presses in macro recorder
  • Changed to now force some tabs to not be accessible while Profile Editor is open
  • Improved Japanese translation. Change provided by jeek-midford
  • Added “Revert to default profile on unknown process” option to auto-profile screen. Change provided by mika-n
  • Added user configurable (profile) max time for rumble watchdog timer. Defaults to a disabled timer (0 value). Should help with games that hold a rumble effect for a long period of time with no update (GTA 5?). Change provided by mika-n
  • Added Italian translation. Provided by RaydenX93
  • Fixed invalid cast bug for Shift Action key binding in Binding window. Crash happened when updating window with current binding
  • Added SuppressUnmanagedCodeSecurity to some classes that deal with COM interopt calls
  • Fixed default button mapping display for TouchUpper and TouchMulti touchpad buttons
  • Corrected trigger slider labels in Controller Readings tab
  • Fixed auto-profile “Turn DS4Win temporarily off” functionality. Changed provided by mika-n


Version 2.0.3

  • Added hooks for Swipe Control buttons
  • Added fix for Load Profile Special Action save crash
  • Bundled HidGuardHelper version 0.1.2. Added process check for stale whitelist key removal


Version 2.0.2

  • Fixed Gyro Mouse Trigger display string
  • Added locking on a collection to clear up potential thread safety issues
  • Added workaround to inverted YAW gyro axis issue in some DS4 v1 gamepads. Made by mika-n
  • Updated ViGEmBus installer URL
  • Show minor message if ViGEm installer download fails
  • Added minor check if timer needs to be run in Welcome Dialog
  • Updated tray menu
  • Make sure RecordBox can have focus. Allow extra keys to be usable while recording a macro
  • Added Portuguese translation. Made by Leomelati
  • Added Spanish translation. Made by RY0M43CH1Z3N
  • Moved some overlay buttons in Profile editor


Version 2.0.1

  • Changed scroll property of ScrollViewer controlling Axis Config tab. Changes scrollbar speed
  • Added extra locking in TrayIconViewModel
  • Make sure “Hide DS4 Controller” checkbox is temporarily disabled after click
  • Fixed sensitivity ranges in Profile Editor
  • Fixed restoring of chosen tray icon image
  • Added catch block for ManagementException when connecting to WMI
  • Force prevent multiple profile editors from being created
  • Fixed ViGEm installer download in Welcome Dialog
  • Changed ViGEm installer download routine to download to a temp file before moving to the final destination
  • Russian translation files added
  • Added more tray menu actions back (Start, Stop, Open Program Folder)


Version 2.0.0

  • WPF Version
  • Re-wrote GUI classes to use Windows Presentation Foundation (WPF) instead of Windows Forms
  • More utilization of data binding in application. More use of custom events for ControlService
  • Added application file logger
  • Refactored macro editor
  • Changed Run as Task routine. Old routine will be replaced, if it exists, upon the first run of version 2.0.0
  • New translation system is in place. Currently, only English and Japanese language packs are available. Looking for volunteers to provided updated translations for other language packs
  • Re-written auto profile routine
  • Snappier program and mapper routine
  • Many other changes


Version 1.7.28

  • Fixed copying of new updater version from Updates Files directory


Version 1.7.27

  • Bundled DS4Updater.exe version 1.4.0


Version 1.7.26

  • Nacon Revolution Infinite support. Change made by mika-n
  • Tweaked “runCalib=false” check for Nacon gamepads. Change made by mika-n


Version 1.7.25

  • Don’t show disconnect confirm window when launching updater
  • Fixed app crash when WMI connection fails


Version 1.7.24

  • Nacon Revolution Pro v3 gamepad support. Change provided by mika-n
  • Fixed non-visible gyro panel problem when creating a new profile
  • Added extra log message when ViGEmBus device is not detected
  • Updated Task Scheduler to version 2.8.17
  • Unify output device plugging and unplugging
  • Added plug and unplug delay of 100 ms for output devices


Version 1.7.23

  • Fixed a major fail. Launching updater routine has been fixed. NOTE: Please run DS4Updater.exe to update DS4Windows to version 1.7.23. That is needed due to the previous bug.
  • Added SuppressUnmanagedCodeSecurity attr to Program class
  • Updated HidGuardHelper.exe built with Visual Studio 2019


Version 1.7.22

  • Added runtime MAC generation routine for third party controllers when serial reading fails. Change provided by mika-n
  • Added read only check for Startup lnk entry. Change provided by almod90


Version 1.7.21

  • Corrected default for linkedProfileCheck
  • Fixed LS Maxzone and Anti-Deadzone controls in Profile editor
  • Increased hotkeys timer interval to 20 ms (was 100 ms)
  • Fixed old bug when checking for DS4Updater that could have caused a thread lock
  • Now use periodic garbage collection


Version 1.7.20

  • Fixed output controller selection saving in Profile editor
  • Added Hori Fighting Commander and Nacon Revolution Unlimited Pro gamepad support. Change provided by mika-n


Version 1.7.19

  • Fixed start minimized options


Version 1.7.18

  • Added precaution against rapid NullReferenceException throws in Special Actions routine
  • Fixed crash problem regarding lightbar color tooltips
  • Only run Save method at startup on first launch
  • Fixed initial window state when Minimize to Taskbar is enabled
  • Tweaked layout of Mouse Joystick panel
  • Fixed touchpad disable invert setting for None
  • Corrected default gyro triggers
  • Fixed shift action scan code check
  • Fixed checking for temporary controller type in Profile editor
  • No longer make UseDS4ForMapping a persistent setting. That setting has caused more trouble than it is worth for several users.
  • Updated Task Scheduler package to version 2.8.15
  • Set Specific Version check to false for Task Scheduler assembly
  • Now use exenoupdates command line flag for ViGEm installer


Version 1.7.17

  • Steel Play Metaltech P4 gamepad (wired) support. Added by mika-n
  • Changed Options form to use a tab layout rather than a flow control layout. Controls are more spaced out and better organized. Axes config layout contributed by mika-n
  • Moved CRC table creation to ControlService
  • Added max saturation setting for rainbow lightbar mode
  • Added exclusive icon to main controller listing
  • Added identifier name to meta info. Name will appear in Log tab messages
  • Use max displacement from center for Mouse Joystick and RS conflict
  • Use colored icon provided by Geroyuni
  • Made separate roundness setting for RS now since there is space in the UI for it


Version 1.7.16

  • Fixed some tool tip typos
  • Run on key release, Run synchronized, Repeat while held and Keep key state support added to macro special action. Changes provided by mika-n
  • Added MIT license file
  • Added Mouse Joystick support for the gyro. Used to simulate relative camera movement while emulating the right analog stick. Useful for games that don’t support simultaneous XInput + Mouse support
  • Replaced app icons with images provided by Geroyuni
  • Now force dead zone and anti-dead zone for LS and RS in new profiles
  • Added updated ViGEmClient library that fixes the zombie force feedback thread problem. Change provided by mika-n


Version 1.7.15

  • Changed to allow gyro steering wheel mode to work when outputting to VJoy output axis while Use DInput Only is enabled. Contributed by mika-n
  • Fixed packaging problem. Bezier Curve editor is now bundled like it should have been in recent releases


Version 1.7.14

  • No longer use quiet flag for ViGEm installer. Use normal user installation process
  • Increased delay used in resume from suspend routine


Version 1.7.13

  • Custom Bezier curve implementation added by mika-n
  • Fixed updater not getting launched via auto update checker if updater version has not changed
  • Slowed down mouse wheel scrolling for analog stick
  • Added cmdline options to send start/stop/shutdown/LoadProfile/LoadTempProfile commands. Contributed by mika-n
  • Added support for matching using both program path and application window title values in auto-profile system. Contributed by mika-n
  • Added support for wildcard string match in auto-profile path and window title values. Contributed by mika-n
  • Fixed the image size issue in “run program with profile” app icon. Contributed by mika-n
  • Fixed some strings in pt-BR resx files
  • Tweaks to fix USB connections causing high CPU usage after waking PC from sleep


Version 1.7.12

  • Added wait period while suspending
  • Fixed profile selection for times when profiles have similar names. Use exact name match
  • Change to using pre-allocated buffer in UDP server
  • Group some profile mapping properties together in conversion routines. Reduced getter calls
  • Took Color Dialog out of KB360 form. Form can now be designed in x64 mode. All forms can now be edited in Design mode in Visual Studio while targeting x64 platform
  • Updated Norwegian translation provided by DandelionSprout
  • Lowered breakpoints used for enhanced precision curves. Tightened curve compared to version 1.7.11
  • Allow Square Stick mode to use a custom roundness setting. Change provided by @Kamilczak020


Version 1.7.11

  • Norwegian Bokmål translation provided by @DandelionSprout
  • Loosened enhanced precision curves
  • AdvancedColorDialog change improved responsiveness of application for some reason
  • Removed color dialog dependency from design for some forms. Allows DS4Form and Options forms to open in Design mode while targetting x64
  • Added easeout cubic curve option


Version 1.7.10

  • Added support for Warrior Joypad JS083 gamepad. Changed provided by mika-n
  • Changed Welcome dialog window to monitor ViGEm process rather than search for its process name. Should fix false Install Failed messages
  • Added remote connection support to the UDP server. Changed provided by mika-n


Version 1.7.9

  • Updated images provided by carloshbcabral and FuriaESP
  • Added support for Razer Raiju Ultimate and CronusMax PS4OutputMode. Changes provided by mika-n
  • Updated Welcome Dialog to use ViGEm Installer 1.6.115
  • Fixed 360 steering wheel emulation mode for dualshock4 controller output. Change provided by mika-n


Version 1.7.8

  • Fixed an issue with new installs not initializing a virtual controller
  • Moved Form classes to separate namespace
  • Added Razer Raiju Tournament Edition support
  • Fixed migration of DS4 Touch Button status. Touchpad Button can now be used with a virtual DS4


Version 1.7.7

  • Fixed Up-Left DPad direction for DS4 output device


Version 1.7.6

  • DualShock 4 controller emulation type has been added. ViGEmBus will emulate a DS4 v.1 when the option is enabled
  • Updated ViGEmClient library to use notification queue for DS4 target
  • Linked touchpad related delegates to class instance rather than linking to interface. Speed boost
  • Added “Unload on trigger release” option for Load Profile special action. Change made by mika-n
  • Fixed issue with Gyro Toggle being used when not enabled in a profile
  • Changed Welcome Dialog to use the new official ViGEm Bus Driver installer. The installer will install ViGEm Bus Driver version
  • Fixed ViGEmBus driver check to work with ViGEmBus version as well as
  • Allow setting a custom Steam folder location. Change contributed by Sander0542
  • Raised sixaxis dead zones


Version 1.7.5

  • Fixed force feedback notification queue for ViGEmClient library


Version 1.7.4

  • Re-enabled force feedback support
  • Updated ViGEmClient library to include a queue for force feedback notifications. This should fix the stuck force feedback issue
  • Use ref locals to curb array access for KB+M routines
  • Added support for the PS4 Fun Controller
  • Use wrapper method for MapVirtualKey when using older scan code option. Fixes issues with arrow keys not being interpreted correctly in some situations
  • Tweaked sensitivity axis scaling to reach max values
  • Allow Load Profile action key to be used without unload trigger. Allows multiple Load Profile special actions to work together. Change made by mika-n
  • Added brute force feedback timer fix implemented by mika-n. Should help with worst case scenario of the rumble getting stuck


Version 1.7.3

  • Disabled force feedback support for now
  • Updated code to use newer stable ViGEm.NET client library
  • Added runtime option for toggling touchpad movement. No longer edit profile setting and store old setting temporarily
  • Now skip updater execution if new updater version could not be downloaded
  • Added null check for Enable_Controls method
  • Resolved crashing and stability issues with x86 build caused by ViGEm.NET client library


Version 1.7.2

  • Updated some color picker options to update lightbar with preview
  • Removed set rumble to zero call for touchpad button up event
  • Corrected force feedback motor values used in event handler added from SONYWA connection sync change. Only affects Sony Wireless Adapter connections


Version 1.7.1

  • Reverted hotplug delay change
  • Changed force feedback handler to use SetDevRumble to avoid array checks
  • Added feedback received event handler before connecting virtual controller
  • Corrected force feedback motor values. The motor values were flipped before


Version 1.7.0

  • ViGEmBus support has been added. ScpVBus support has been removed.
  • Changed hotplug delay location


Version 1.6.14

  • Changed confusing driver message in Welcome dialog. It used to imply that ScpVBus was needed to use the DS4 in Windows rather than just for DS4Windows
  • Deprecated old mouse acceleration profile option. Now defaults to false
  • Fixed Sony Wireless Adapter disconnect on Windows 7
  • Utilize calls that force Normal IO and Memory Priority for the process. Especially useful when DS4Windows is run as a Task but it also helps with normal execution on my system
  • Changed when delay takes place for hotplug routine
  • Raised SocketAsyncEventArgs buffer for UDP server. Raised from 20 to 40 objects
  • Make default use controller for mapping option to false
  • Fixed x86 build to target C# 7.3


Version 1.6.13

  • Changed Flash At lightbar function to work at 0% battery
  • Removed unwanted boxing for AdvancedColorDialog OnUpdateColor event
  • Fixed color dialog error for Check Battery Life special action menu
  • Altered Controller Readings tab to better represent mapped state
  • Changed exclusive mode failure message to mention UWP apps causing exclusive mode problems
  • Fixed auto profile loading for hotplugged controllers
  • Implemented square stick functionality. The analog stick can now be mapped so a push to a diagonal will reach a square corner of (1.0, 1.0)
  • Make sure to stop USB controller while suspending. Fixes out of bounds errors appearing
  • Changed haptic changing routine to skip always searching for existing device
  • Do not reset custom led setting while switching profiles. Fixes custom color option for controller slot
  • 360 steering wheel mode changes provided by @mika-n. Improved deadzone handling. Fixed a bug in >360 turn range calculations. Small performance improvements.
  • Use implicit extra dead zones for special actions


Version 1.6.12

  • Some minor tweaks to remove instances of boxing being done by the .NET Runtime when firing events
  • Replace old lock with ReaderWriterLockSlim instance when committing KB+M actions
  • Added 360 steering wheel mode provided by @mika-n. This mode maps the controller’s orientation angle to a joystick axis rather than mapping from gyro data directly. This way, the controller can be rotated 360 degrees or greater and be able to map the range to a joystick axis. The mode can map orientation changes from 90 degrees up to 1440 degrees and it works great in American Truck Simulator. Extra documentation can currently be found in issue #491.
  • Now target .NET Framework 4.6.2


Version 1.6.11

  • Utilize enumerators for many for loops. Gets rid of many ElementAt calls. Using an enumerator in a for loop seems to be faster than foreach use despite the similarities
  • Re-added extra default axis mapping pass. Should fix some stick direction actions
  • Removed some struct copying from lightbar routine by using ref returns
  • Now target C# 7.3
  • Now use C# 7 features
  • Added unchecked blocks for populating field mapping arrays


Version 1.6.10

  • Fixed remapping multiple controls to one XInput output control
  • Fixed remapping of XInput controls


Version 1.6.9

  • Fixed double tap interval issue with Multi-Action Button special action
  • Fixed issue with xinput unplug routine on device removal
  • Minor fix for update check when offline. Fix provided by xrossb
  • Added toggle option for Gyro Mouse activation
  • Purged old state mapping code that required dictionary object
  • Implemented user defined gyro mouse dead zone
  • Fixed issue with wrong values being returned for shift modifier actions
  • Added easeout quad curves for various axes


Version 1.6.8

  • Implemented FILE_ATTRIBUTE_TEMPORARY use when opening DS4 device
  • Changed some missed routines to use 128 as stick axis midpoint
  • HidGuardian v.1 support added back in. A new executable is bundled with DS4Windows to manage whitelist entry


Version 1.6.7

  • Removed old call for low latency garbage collection. Not needed with server mode GC. Improves application performance
  • Changed DS4Color to use IEquatable interface. Allows for a faster Equals method
  • Fixed issue with old headphone volume values being used when sending timeout output reports. Make sure to pull current value with each timeout
  • Increased mouse stick offset value slightly. Changes to the base seem to have allowed for it
  • Start using 128 as proper axis midpoint for sticks. Changed some mapping routines


Version 1.6.6

  • Changed how haptic state changes happen. No longer rely on array iteration and struct field merging. Only consider test rumble state and current pushed haptic state.


Version 1.6.5

  • Minimize influence of stopwatch for output report routine


Version 1.6.4

  • Changed output routine to send at least one output packet every 4 seconds. Works around DS4 hardware shutting down rumble motors
  • Changed thread priorities of some threads
  • Changed thread affinity of some timer objects
  • Added log notifications when using Load Profile special action
  • Changed x64 download of updater to use base name again


Version 1.6.3

  • Removed use of Microsoft.Win32 namespace
  • Changed suspend detection routine to use WMI


Version 1.6.2

  • Bundled new version of DS4Updater (1.3.0) that uses GitHub as a download resource
  • Many changes to make auto updating routines use GitHub as a download resource
  • Changes to tray icon population provided by @JarnoVgr
  • Added support for Scuf Vantage controller


Version 1.6.1

  • Bundled new version of DS4Updater.exe (1.2.9) with version check fix
  • Use SuppressUnmanagedCodeSecurity attribute for InputMethods class
  • Changed build to use C# 7.2
  • Lowered priority of bus thread


Version 1.6.0

  • Version update


Version 1.5.20

  • Corrected archive posted to update server
  • Workaround to fix version checking problem


Version 1.5.19

  • Raised enhanced precision curve values
  • Fixed Start Minimized functionality


Version 1.5.18

  • Removed component use for ScpVBus related classes
  • Loosened enhanced precision curves
  • Made slightly better window size saving routine
  • Now use local thread data for InputMethods method calls rather than a shared struct array
  • Changed UDP port opening routine
  • Updated ToolsVersion project attribute
  • Fixed UDP start routine to actually use wait time rather than busy loop


Version 1.5.17

  • Changed UDP server buffer usage
  • Changed UDP server toggle in GUI to make sure UDP server is initialized outside of the main GUI thread
  • Added usage HID Device Capability flag check during device detection. Related to Issue #498 regarding Hori PS4 Mini controller


Version 1.5.16

  • Disabled AllowDrop setting for DS4Form
  • Removed formatting from profiles listbox
  • Increased timeout for tracking second instance exclusive mode workaround
  • Fixed Run At Startup option. Window security issues caused problems with the last release
  • Reverted to using asInvoker in manifest file
  • Fixed start minimized option
  • Removed unnecessary SetVisibleCore override
  • Changed options form check after clicking window close button. Ensures app does not crash if profile editor is still open while on Controllers tab
  • Changed ErrorReport option for project build settings. It does seem to matter even outside the IDE
  • Fixed issue with app not being restored from launching a second session


Version 1.5.15

  • Now force launch as administrator in the application
  • Removed HidGuardian usage and purged extra routines
  • Added simple gyro calibration check to ensure calibration is not performed if proper data is not found
  • Added ReaderWriterLockSlim use to UDP server for locking pool array index
  • Corrected an UnregisterNotify call used when quitting app
  • Corrected KB+M action resetting when a device is disconnected


Version 1.5.14

  • Moved output data copying to dedicated thread for USB and Sony Wireless Adapter connections. Lead to a good speed boost
  • Added flag to allow skipping a lock when applicable. Skip thread event queue check if no events are in the queue.
  • Corrected unregister notify call
  • Changed index increment placement for UDP server routines. Hopefully it resolves issue #454 for other people. It does on my machine.
  • Fixed extra utilities control display in flow control of Settings tab


Version 1.5.13

  • Tweaked main form class
  • Raised mouse stick offset
  • Added SuppressUnmanagedCodeSecurity to Color Dialog for some unmanaged calls


Version 1.5.12

  • Added SuppressUnmanagedCodeSecurity to main DS4Form class. Useful for auto profile routine calls
  • Changed WndProc call to register for more specific device change events
  • Loosened enhanced precision curves further


Version 1.5.11

  • Fixed device event queueing


Version 1.5.10

  • Removed old Any CPU build targets
  • Replace stack with simple array in UdpServer
  • Enforce static usage for SystemEvents.PowerModeChanged
  • Loosened enhanced precision curves


Version 1.5.9

  • Fixed issue with useDInputOnly variable not being in correct state
  • Added change to reset active KB+M controls after unplugging controller
  • Added different gyro trigger conditional. Trigger condition can now be treated as an OR condition rather than just an AND condition
  • Resolved name collision with Log class and Diagnostics namespace
  • Fixed out of range error while checking the selected macro index. Change provided by @justalemon
  • Increased timeout for exclusive attempt process. Fixes another issue with exclusive mode permanently disabling devices.
  • Use stack of objects with UdpServer


Version 1.5.8

  • Fixed problem with unplugging controllers causing cross thread issues


Version 1.5.7

  • Changed timer usage in main form
  • Fixed issue with SONYWA connections having invalid calibration data
  • Removed UI thread usage from unplug routine
  • Fixed variable scope for swap profile routine


Version 1.5.6

  • Various tweaks to speed up main form
  • Removed some older unnecessary variables


Version 1.5.5

  • Only refresh last message text once after closing Options form
  • Fixed UDP server memory leak


Version 1.5.4

  • Delay UDP port change for when UDP checkbox gets unchecked
  • Changed behavior of auto profile and hotkeys timers
  • Fixed minimize to taskbar behavior


Version 1.5.3

  • Integrated UDP server that can be used with Cemuhook. UDP server is disabled by default and can be enabled in the Settings tab.


Version 1.5.2

  • Reduced overhead of message tips for Settings check boxes
  • Added unchecked blocks to help speed up state conversion


Version 1.5.1

  • Removed Form_Resize from Options form
  • Loosened Enhanced Precision Curves
  • Enable server garbage collection mode. Application will use more memory in exchange for better performance
  • Small tweaks to program entry


Version 1.5.0

  • Added SuppressUnmanagedCodeSecurity attribute to ScpDevice class. Lead to a good speed boost
  • Use unsafe array pointers when accessing gyro and accel byte arrays
  • Fixed minimize to tray option


Version 1.4.123

  • Removed some unused classes and tweaked some build settings
  • Trimmed hotplug routine
  • Program now scans for possible stale HidGuardian whitelist entries on startup
  • Loosened enhanced precision curves
  • Updated target framework version to .NET Framework 4.6.1
  • Skip gyro calibration routine for Nacon Revolution Pro Controller 2
  • Updated ViGEm build to use newer ViGEmClient library
  • Minor tweaks to ViGEm build
  • Fixed problem with null reference errors occurring with the UdpServer builds due to sleep mode


Version 1.4.122

  • Flawed build. Check version 1.4.123


Version 1.4.121

  • Removed drag drop importing of profiles from main window. Good app speed boost.
  • Do not remove auto profiles entries for currently uninstalled apps
  • Removed unused AlreadyRunning form
  • Make comboboxes not accept keyboard input for profile switching
  • Make sure controller reading can be started again when switching auto profiles
  • Changed enhanced precision curves
  • Added device info for a generic DS4 gamepad
  • Changed logic for implicit stick mouse dead zone
  • Corrected stick angles and stick dir unit values. Used for KB+M actions


Version 1.4.120

  • Fixed issue with profiles listview being partially hidden after closing Options form
  • Removed Application.SetCompatibleTextRenderingDefault call. Text rendering is slightly different but application performance is greatly improved
  • Added minimize to taskbar as a setting
  • Raised max for sensitivity options
  • Changed lookup device name for DS4 v2 audio device
  • Fixed issue with USB sending constant output reports. Only copy relevant output bytes for BT.
  • Removed custom theme for debug list view
  • Added disconnect options to tray menu


Version 1.4.119

  • Loosened touchpad jitter compensation parameters
  • Fixed failed to unplug message from appearing when switching profiles using SONYWA
  • Take stick rotation into account for axis to button mapping routine
  • Hori PS4 Mini controller support added by jdfeng
  • Fixed timeout disconnect issue caused by changes in previous version
  • Removed sending output report when charging status changes for SONYWA
  • Changed headphone support to only grab audio volume when output report changes. Let native device handle volume changes otherwise


Version 1.4.118

  • Use synchronous write operations for USB and SONYWA connections again
  • Send output report to SONYWA controller when charging status changes


Version 1.4.117

  • Fixed hover button color in Options form
  • Removed controller array scan from each report process
  • Updated TaskScheduler to version 2.8.0
  • Hold max and min lightbar color for pulse charging animation so both extremes are exposed for a longer period of time
  • Changes to hopefully work around hotplug issues with Bluetooth controller connections on Windows 7
  • Corrected order of key releases when using Win + Print Screen
  • Do not restart service when changing dinput option in profile


Version 1.4.116

  • Ensure that touchpad packet data is copied only when an updated packet is detected
  • Changed to have extras string removed from profile when reverted back to defaults
  • Changed to make sure to use profile lightbar color when syncing controller to Sony adapter
  • Loosened Enhanced Precision curves for sticks


Version 1.4.115

  • Updated version number of DS4Updater


Version 1.4.114

  • Bundled version 1.2.8 of DS4Updater.exe
  • Changed USB and SONYWA connections to use a dedicated output thread
  • Use unsafe memory pointer usage for output report methods and gyro data copying
  • Removed use of rectangular array for CRC32 calculations. Now use one dimensional array


Version 1.4.113

  • Changed some array copying to use unsafe memory pointers
  • Use declared unsafe blocks in project
  • Added CRC32 data validation for Bluetooth connections
  • Added delay for device enable routine
  • Now force disconnect for wireless controllers when suspending


Version 1.4.112

  • Changed stop routine to call StopUpdate for normal device removal and close HID device earlier
  • Make sure to populate oldprofilepath when refreshing profiles
  • Corrected appdata path display for SaveWhere dialog
  • Changed timer usage for RecordBox
  • Changed DS4Updater to automatically launch DS4Windows after update is complete
  • Updated DS4Updater to version 1.2.7
  • Changed how language list is loaded for LanguagePackComboBox


Version 1.4.111

  • Use tasks for some WebClient events. Reduces input lag
  • Fixed config loading so Welcome Dialog window uses the language setting


Version 1.4.110

  • Updated DS4Updater.exe to version
  • Changed timer usage in Welcome Dialog to run routine in a different thread
  • Changed locale initialization to allow set language to be used in Welcome Dialog
  • Changed Auto Profiles form to use environment info for finding start menu programs path
  • Changed to reset rumble state when switching profiles
  • Removed Management assembly dependency from project
  • Changed how ScpVBus device is checked. No longer using WMI which had resulted in caching issues
  • Added Open Program Folder link in taskbar
  • Removed IWshRuntimeLibrary assembly dependency from project
  • Updated layout of some Chinese versions of forms
  • Added some minor HidGuardian utilities (template AffectedDevices, clean old whitelist entries, regedit shortcut). DS4Windows has to be run as admin in order to have access to those utilities
  • Added language switcher which was implemented by czukowski


Version 1.4.109

  • Fixed problem with localization files not being found. An extra config file is now included which is needed for language packs to be found
  • Changed audio device search routine to no longer use a portion of an audio device name that is susceptible to localization
  • Changed headphone volume curve to more closely resemble control outside of program
  • Fixed output curve options for sixaxis controls
  • Changed sixaxis dead zone defaults to reflect recent changes
  • Corrected color used for swipe control labels
  • Fixed swipe controls and 2 finger swiping to change profiles. First touchpad touch data is populated properly again.
  • Changed exclusive mode routine to no longer quit when disabling a device fails. This change has been shown to keep a DS4 from getting permanently disabled after disconnecting the device. The change was needed by Broforce on my system when using the old exclusive mode trick.
  • Fixed problem with rapid mouse action clicks when using touchpad controls


Version 1.4.108

  • Fixed device plugin changes while switching profiles
  • Added trackball mode for touchpad
  • Fixed index bug in hotplug routine
  • Updated Task Scheduler to version 2.7.2
  • Changed six axis dead zone calculation to be a proper dead zone


Version 1.4.107

  • Trimmed code run for touchpad untouched path
  • Removed extra gyro controls dead zone. Necessary to use DS4 as a steering wheel


Version 1.4.106

  • Update DS4Updater version number in DS4Windows to latest version


Version 1.4.105

  • Updated DS4Updater.exe. The updater now uses the user’s Downloads folder to download the latest DS4Windows archive. The file will not be deleted by the updater.
  • Use delegate method for iterating over the DS4HapticState array. Grabs struct instances by reference rather than making new copies
  • Added main lock again for USB and SONYWA when creating output reports


Version 1.4.104

  • Use only one output array for USB and SONYWA
  • Changes to how output reports are sent
  • Use event callback to get audio endpoint volume


Version 1.4.103

  • Minor tweaks
  • Only load Options form when needed. Option forms now takes a couple of seconds to load


Version 1.4.102

  • Using Visual Studio 2017 as main build environment
  • Updated DS4Updater.exe
  • Removed new DS4State object creation per poll. Decreases input lag
  • Changed some background and colors to better accommodate High Contrast mode
  • Loosened Enhanced Precision curve for stick mouse
  • Fixed macro binding for multiple touchpad swipe controls


Version 1.4.101

  • Changed stick mouse speed. Removed old initial speed offset
  • Changed to skip macro array check if a macro is not in use
  • Fixed custom color preview when color dialog is opened from Controllers tab
  • Tweaked layout of some Russian forms
  • Fixed issue with saving window location when form state is not normal
  • Added routine to manage HidGuardian whitelist key. DS4Windows will write the whitelist key when started and delete it upon quitting. Currently only works if DS4Windows is run as admin (will fail silently as a normal user)
  • Changed portions of output report routine
  • Various tweaks to decrease input lag


Version 1.4.100

  • Updated DS4Updater to version 1.2.3
  • Added delay before executing program linked to a profile
  • Added initial support for the Nacon Revolution Pro thanks to Yuki-nyan
  • Fixed issue with service changing when changing the XInput port range
  • Added option to export log text to a text file
  • Added version information to log tab messages
  • Fixed problem with some scan codes used for multimedia key events
  • Added saving of form position upon exit and restoring form position on startup
  • Corrected some form control alignment issues


Version 1.4.99

  • Updated DS4Updater.exe
  • Added minor tweaks
  • Added Razer Raiju VID and PID information. Other reports seem to suggest that support for the Razer Raiju should work fine in DS4Windows with the new information but I have no way to test that


Version 1.4.98

  • Send extra output reports as needed to prevent the lightbar color from getting stuck on the wrong color
  • Changed to have extras parsed before actions are executed
  • Lowered times used for taps and holds in macros
  • Added x86 as a platform target
  • Added linked profiles support. Profiles can be linked to a specific controller ID rather than by controller slot number
  • Only load profiles as needed rather than at program startup


Version 1.4.97

  • Reduced gyro mouse deadzone
  • Updated Hide DS4 Controller checkbox routine so it waits for service changes to finish
  • Corrected messages used for touchpad toggle
  • Changed device detection to make sure a charging controller paired via Bluetooth is not seen twice by DS4Windows
  • Added experimental gyro calibration support
  • Tweaked updating of output report


Version 1.4.96

  • Fixed mouse wheel delta value used for events
  • Fixed issue with multiple unpaired Sony dongles not being detected
  • Updated Spanish translation provided by jose350
  • Worked on translation file support
  • Fixed multiple controller scans occurring while changing Dinput only mode in Options form
  • Added headphone volume support for DS4 v2 controllers connected via USB


Version 1.4.95

  • Reset gyro trigger and touchpad disable invert menu items when loading profile settings
  • Fixed smoothing buffer routine for Gyro Mouse
  • Made touchpad jitter compensation a default option again
  • Changed values used for touchpad jitter compensation mode
  • Trimmed SixAxis data interpretation
  • Split pulse flash duration and pulse charging duration into segments to reduce CPU usage
  • Various minor tweaks to improve performance


Version 1.4.94

  • Moved ControlService instance to a separate thread. Further reduction in input lag


Version 1.4.93

  • Replaced BackgroundWorker instance with a regular Thread. Reduced CPU load and reduced input lag


Version 1.4.92

  • Changed thread affinity of BackgroundWorker responsible for bringing DS4Windows to the foreground while attempting to open a second instance. Improves performance of entire application. Reduces input lag
  • Changed the priority of some threads


Version 1.4.91

  • Added sleep time before hotplug routine is launched. Needed sometimes for lightbar to work properly when using BT
  • Changed thread affinity of DS4Device objects. Drastically reduces input delay
  • Changed various parts of DS4Form to improve GUI performance
  • Changed some usages of timers to use System.Timers.Timer
  • Reduced size of latency calculation buffer
  • Raised timeout thread interval to ensure controller is seen as inactive by Windows before disconnecting


Version 1.4.89

  • Changed idle disconnect lightbar color routine to use an EaseOutQuad curve rather than a Linear curve
  • Corrected bounds used for touchpad disable invert setting. PS button is now selectable
  • Changed touchpad jitter compensation routine


Version 1.4.88

  • Updated .NET target framework version to version 4.5.2
  • Updated TaskScheduler to version 2.5.28
  • Added option to disable touchpad mouse inversion while holding a selected button or combination
  • Added offset for touchpad mouse
  • Changed mouse offset used for stick mouse
  • Lowered speed factor used for stick mouse routine
  • Minor changes to exclusive mode routine


Version 1.4.87

  • Corrected calculation of touchpad X coordinate
  • Removed many unnecessary state object copy calls. Good bump in XInput performance due to this change.
  • Grab and use timestamp data from DS4 for use with gyro mouse
  • Adjust internal gyro mouse values
  • Add Finger on Touchpad back as a shift modifier


Version 1.4.86

  • Corrected bounds issue with rotated coordinates for LS and RS
  • Added various settings for sixaxis controls (anti-dead zone, max zone, curve)
  • Fixed sixaxis dead zone calculations
  • Enforce new default BT poll rate in Options form
  • Take poll rate into account for gyro mouse


Version 1.4.85

  • Added option to use gyro roll to control horizontal gyro mouse movement
  • Added axis inverting functionality for touchpad mouse
  • Change to attempt to exit the application cleanly in more situations. Should fix odd crashes at shutdown
  • Make default Bluetooth poll rate 4 ms


Version 1.4.84

  • Changed shutdown routine to only pop up confirmation dialog if the user explicitly closes the program. The previous version would not allow Windows to shut down while DS4Windows was running because it was waiting for a response from the dialog window
  • Changes to program startup and output report bytes to help improve performance and further decrease input lag
  • Allow Disconnect BT special action to work with Sony dongle connection


Version 1.4.83

  • Fixed device battery status display for tray icon
  • Added prompt when closing the application if any controllers are connected. Change provided by Aziz Rafsanjani
  • Added rotation angle adjustment settings for LS and RS
  • Change for Sony dongle connection to only have a virtual XInput controller available if a controller is synced to the dongle
  • Fixed version comparison in DS4Windows.exe updater routine


Version 1.4.82

  • Fixed issue with latency messages being displayed multiple times unnecessarily in log
  • Added smoothing routine for gyro mouse
  • Tweaked mouse offsets used for gyro mouse and base gyro sensitivity multiplier
  • Fixed some invalid URLs regarding the updater in DS4Windows.exe


Version 1.4.81

  • Added a vertical scale setting for gyro mouse
  • Fixed idle disconnect lightbar dimming when using a USB connection
  • Fixed interpretation of number of fingers on the touchpad. This is primarily useful when using a touchpad touch as a gyro trigger
  • Allow gyro trigger to also be able to disable gyro rather than enable gyro. This enables proper ratcheting support
  • Changed gyro mouse routine significantly
  • Fixed data reading from gyro
  • Fixed a problem with actions not working after recording a macro
  • Changed analog stick mouse routine to take fractions of a millisecond into account


Version 1.4.80

  • Changed thread affinity of x360Bus object. Decreases input lag and improves responsiveness of the entire application


Version 1.4.79

  • Fixed microphone device volume detection when using official Sony dongle
  • Changed one clause regarding Quick Charge check. JIT apparently favors one form over another


Version 1.4.78

  • Fixed mouse distance offset for negative stick axes


Version 1.4.77

  • Fixed updater program to strip out final newline from version file in all circumstances
  • Fixed event handler related bug with the advanced color dialog
  • Removed delay from hotplug routine due to Quick Charge change. Simplified routine
  • Changed mouse distance offset for analog sticks to take stick direction into account for each axis
  • Changed location of Quick Charge routine


Version 1.4.76

  • Fixed Quick Charge regression


Version 1.4.75

  • Added output curve options. The old curve option affects input coordinates which alters other functionality like the dead zone. The output curve options will mainly help for KB+M emulation.
  • Now USB device is grabbed by the application when using BT and charging. This should ensure that no second controller will be seen by other applications while charging a controller.
  • Changed to allow multi-action button functionality to work with touchpad regions
  • Changed to ensure that tray icon text is updated more often. Only update underlying strings as necessary
  • Changed to use Queue while calculating latency instead of List. Much more efficient and reduces input lag considerably
  • Changed when Sleep is performed for device removal routine
  • Changed exclusive mode routine to use SpinWait instead of Sleep


Version 1.4.74

  • Fixed problem with Launch Program with Profile option launching a process twice when a new Auto Profile is activated
  • Fixed problem with some control identifiers that are used for controller readout in Options form
  • Added a timeout routine for BT connections to overcome disconnecting a controller by holding the PS button
  • Changed mouse event output to trim mouse distance remainders
  • Added an initial mouse offset for LS and RS mouse actions. Smooths out the low end
  • Changed mouse actions for LS and RS. The output mouse speed now takes poll time into account. The set mouse speed will be consistent across all supported controller connections
  • Moved lightbar updating routine after firing emulation events
  • Edited lightbar dimming on idle disconnect


Version 1.4.73

  • Change so the serial number associated with the Sony dongle changes when a controller is synced or disconnected
  • Fixed multi-action button so multiple multi-action button bindings work


Version 1.4.72

  • Fixed index out of bounds error when resetting profile values


Version 1.4.71

  • Fixed issue with improper XInput index values being used when a controller hotplug event is performed
  • Make sure to reset old profile values before attempting to parse a profile. Needed to ensure that old values are not being used
  • Changed “Launch Program with Profile” functionality
  • Added Bluetooth poll rate changing
  • Changed to use synchronous versions of FileStream methods instead of async Task versions. Reduced CPU load
  • Lots of minor optimizations that have reduced input lag


Version 1.4.70

  • Fixed issue with XInput binding getting executed for an inactive control when bound to a keyboard key action
  • Added more debug messages around XInput device plugin and removal
  • Changed to not launch program with profile when DS4Windows first starts


Version 1.4.69

  • Fixed Share and Options button mappings
  • Changed timer usage in main form. GUI is more responsive as a result
  • Changed device removal code to add safeguards around device list
  • Changed how “Launch Program with Profile” works. First checks whether the program is already running before launching process. Process now launches with the executable directory as the working directory. Uses task to launch a process async during profile loading
  • Fixed multi-action button
  • Changed output report generation so microphone volume does not get muted. Microphone support now works when DS4 is connected to DS4 Wireless Adaptor


Version 1.4.68

  • Added max zone settings for LS, RS, L2 and R2. This can be a useful option for people with worn out controllers
  • Minor optimizations to speed up hover text and button image display on Options form
  • Change to not interface with Scp Virtual Bus after reading input reports when DInput Only mode is enabled for a profile
  • Fixed issue with USB unplugging on some configurations
  • Only read one touchpad packet when reading the current coordinates. Other touchpad packets aren’t needed and seem to contain irrelevant data
  • Changed Run At Startup panel to better reflect required permissions needed to enable Task mode
  • Fixed exclusive mode routine getting executed multiple times simultaneously. Should clear up problem with controllers becoming unresponsive sometimes
  • Output more log messages when starting program
  • Fixed Updater program


Version 1.4.67

  • Changed Quick Charge routine to hopefully work in more situations
  • Changed how hotplugging is performed
  • Fixed problem with rumble activating when opening the Options window
  • Fixed problem with ‘specified argument out of range’ error occurring when scanning for controllers
  • Changed event usage to update less GUI controls
  • Fixed problem parsing old profiles containing duplicate profile actions


Version 1.4.66

  • Fixed gyro mappings


Version 1.4.65

  • Patch updater application to work with new packaging structure
  • Revert back to old behavior for disconnecting Bluetooth controllers
  • Allow option for touchpad toggling to be disabled
  • Fixed axis to axis mapping issues
  • Perform fewer controller searches
  • Defer logging events to GUI thread


Version 1.4.64

  • Run some log methods async to allow input thread to continue to perform work rather than wait
  • Disable task option for Run at Startup when DS4Windows is running as a non-admin
  • Tweaked a couple of mapping methods to speed up executing axis mappings
  • Fixed issue with action extras, such as lightbar color change, not getting activated
  • Fixed some issues with button mapping such as touchpad to Xbox 360 button mapping
  • Fixed a couple of issues with null reference errors


Version 1.4.63

  • Fixed startup shortcut generation when using the Task startup option
  • Fixed issue when stop thread methods are called for a DS4Device object when the thread objects are still null
  • Fixed Quick Charge mode so that it works as intended
  • Alter interpretation of battery status
  • Make pulse at lightbar mode and pulse charging lightbar mode use set time intervals. No longer rely on a set gamepad poll count which would result in different intervals depending on the connection used


Version 1.4.62

  • Improve speed of DS4 control lookup used for special actions and KB+M emulation
  • Allow application to launch at startup using a task. This method allows DS4Windows to launch at startup as the administrator with no user intervention.
  • Use stick bearing when a stick is mapped to keyboard keys to determine which keys should be pressed. A 45 degree range is used to make an 8 direction stick
  • Have sticks mapped to keyboard keys or mouse actions honor dead zone settings assigned in a profile


Version 1.4.61

  • Many small optimizations to speed up action execution and button mapping translation
  • Have keyboard events use both virtual keys and scan codes by default. For now, the scan code option is still available to only send out keyboard key events using a scan code
  • Fix mouse mapping routine to include distance remainders. Removes artificial high dead zone for sticks bound to mouse actions
  • Change button mapping window to not assign an explicit action when assigning a DS4 button to the default X360 control except when flags are specified. This has the same effect as clicking the default button


Version 1.4.60

  • Tweaks to speed up mapping translation


Version 1.4.59

  • Fixed idle disconnect functionality for Sony dongle
  • Tweaks to speed up mapping translation


Version 1.4.58

  • Added initial support for Sony DS4 Wireless Adaptor
  • Allow disconnect from Controllers tab to work with DS4 Wireless Adaptor. Change was made thanks to aspalmer
  • Fixed issue with multiple special actions causing program crashes
  • Fixed various special action types
  • Small changes to improve performance for mapping translation


Version 1.4.57

  • Fix issue with actions not being executed
  • Minor action detection speed up


Version 1.4.56

  • Fixed deadzone interpretation after leaving the assigned deadzone
  • Added anti-deadzone settings for LS, RS, L2, and R2
  • Various changes to reduce lag
  • Added fix for disappearing audio problems when using DS4 wireless dongle. Changed added by Ondrej
  • Fixed an issue where the wrong action was being parsed. Change added by Yoni
  • Fixed issue with application hanging after unplugging a Bluetooth dongle
  • Updated image resources. Change provided by Carlos
  • Various changes to speed up action detection


Version 1.4.55

  • Fixed issue with disconnecting a USB controller causing the application to crash


Version 1.4.54

  • Change routines in order to further reduce input lag
  • Change controller reader and output routines to use async overlapped IO operations in most cases
  • Build using explicit platform targets instead of AnyCPU. For now, only an x64 build is being provided. That should cover a majority of users but releasing an x86 build can be done if requested.
  • Main GUI window has become more responsive


Version 1.4.53

  • Fix exclusive mode after Windows 10 update from around 2017-03-15
  • Introduce various changes to reduce input lag
  • Correct XInput axis scaling to output full stick range


Version 1.4.52


  • Added support for New DS4 Controller (thanks andersfischernielsen)
  • Fixed sensitivity for sticks, causing crashes when trying to edit a profile
  • Typo fixes (thanks josevill)
  • Updates to German, Polish, Nederlands and more translations


Version 1.4.5

  • Added support for the New DS4 USB Adapater (Thanks to boganhobo and Chamilsaan)
  • Implemented teokp’s amazing fix for hide ds4 not working on the anniversary update of Windows 10: when a controller fails to enter exclusive mode, DS4Windows will ask for admin privilages to fix the issue.
  • Now (near)unlimited Special Actions can be made from the previous limit of 50
  • Special Action Xbox Game DVR is now no longer limited to Windows 10, renamed multi action button: Assign a macro to single tap, double tap, and holding down a button
  • Added option for White DS4Windows Icon in the notification tray (While not merged from, thanks to tehmantra)
  • Added option to temporarily turn off DS4Windows when using a certain program (togglable in the Auto Profiles Tab) (Same case as above but thanks to dedChar to bring to light)
  • Fixed Options crashes in certain locales where decimal points are repesented with commas, such as German (Thanks to kiliansch)
  • Added/Updated translations for many languauges, now including Japanese, Slovenian, Hungarian, Greek, Finnish, Czech, Indonesian, and Ukrainian


Version 1.4.401

  • Fixes for inverting the sticks
  • Updated French, German, Russian, and Vietnamese translations, and added more credits


DS4Updater 1.1.401

  • Added backup method of updating should anything happen with github


Version 1.4.4

  • Revised shift modifier: each button/control has their own independent shift trigger instead of one universal one
  • Select an action window: this window now highlights what said control is currently set to.
  • Removed unused images, making the exe a meg smaller
  • Completely revised how the code for custom mapping works
  • Updated all translations, added partial Dutch/Nederlands Support


Version 1.4.321

  • Changed the Rainbow button to an actual button
  • For using the sixaxis as a mouse, changed none to Always on, also better movement for the gyro when the sensitivity is lowered
  • Updated Hebrew, Chinese (Traditional), Itilian, Chinese (Simplified)


Version 1.4.32

  • Added Sensitivity settings for both sticks, triggers, and the gyro
  • Fixed the select an action window popping up after closing the profile settings or in another tab
  • Fixed the lightbar button on the main tab being so long, along with some other random ui fixes
  • Fixed many issues with making a new profile
  • When using a custom color the light now fades out based on the current profile settings (ie. when the battery is low)
  • Added Hebrew and Vietnamese translations
  • Updated Chinese (T), Russian, German, Polish


DS4Updater 1.1.32

  • Fixes for when users want to skip downloading their native langauge


Version 1.4.31

  • Revised the Profile settings UI to fit all the settings on the screen.
  • Fixed not being able to have a negative scroll value for the touchpad
  • Less lag when opening/reopening profile settings
  • Added Arabic Translation (Thanks K.F), updated French, Polish, and Portuguese translations


Version 1.4.3

  • Complete rehaul of the profile settings, bigger workspace to edit controls, and all the settings are on the side now
  • Added option to change the lightbar color, regardless of the profile’s lightbar setting (useful for using one profile on the same controller). to change click the colored button beside edit in the main tab
  • Can now set the Gyro as an 1:1 absolute mouse, in this mode the mouse now moves as the controller is moved
  • Removed the experimental exclusive connection button if on the newest Windows 10 build (1511/TH2)
  • Finally updated all the translations and added some new ones (such as Chinese and Polish, the translations sheets have been merged to one so it’s easier for me to update


DS4Updater 1.1.3

  • Fixes


Version 1.4.27

  • (Windows 10) Thanks to another workaround found, it has been added to DS4Windows, there is a button on the main tab, to connect your controller exclusively, this will temporarily kill explorer (The taskbar) and bring it back once a controller is connected
  • Macros: When recording with a delay, you can now add rumble and changing the lightbar color during the macro, you can use the touchpad zones to add rumble or lightbar options. To change how much rumble happens or the lightbar color, just double click the item in the list

DS4Updater 1.1.27

  • Updates are now downloaded from Github
  • UI fixes, with clearer errors and “Open DS4” changed to say “Open DS4W”
  • If you choose to open DS4W after an update, DS4Windows will update the updater, so you won’t see the command prompt window if you choose this route.


Version 1.4.269

  • Fixed trying to edit actions with Xbox Game DVR
  • Fixed Hide DS4 crashing DS4Windows on 64-bit machines


Version 1.4.267

  • Fixes for adding programs to auto profiles


Version 1.4.266

  • Flash Lightbar when at high latency now has the option to choose what you decide is high latency
  • Show Notifications now has the option to only show warnings, such as when a controller cannot be grabbed exclusively
  • Speaking of bad news for Windows 10 users: Hide DS4 has now been disabled, until i can figure out why this is, it will be disabled, this means some games that rely on this may not work properly or at all, sorry about that
  • As for good news for Windows 10, did you know you can press Windows + G to open a game bar which can record games. For Windows 10 users, there’s a new special action: Xbox Game DVR. Pick a trigger (only one button) and tapping/holding/or double tapping does various things, such as start/stop recording, save an ongoing recording, take a screenshot (via the xbox app’s option or your own hotkey ie form steam), or just open the gamebar
  • Much of the code has been updated with c# 6.0
  • Added manifest so DS4Windows can notice Windows 10 and high DPIs, also reorganized files


Version 1.4.261

  • Fixed mouse movement by touchpad not working


Version 1.4.26

  • Updated German translation
  • Added Turkish translation (Thanks Lütfi)
  • When the battery is low and the controller is disconnected, The notification tell you to charge the controller, this notification also now shows the controller number instead of the mac address
  • While Double tapping to drag or left clicking the touchpad, you can use a second finger to drag the mouse cursor (ala Mac touchpads)
  • In Auto Profiles, you can now add a directory/folder of programs


Version 1.4.25

  • Added inverted deadzones to Left and Right Sticks, set the values to negative and pushing the stick past the red in the controller readout will make sure the output doesn’t pass the set limit
  • Fixed bug when trying to invert left and right stick with Shift modifier
  • Fixed “Fall back to” text in shift modifier
  • Added Romanian Translation (Thanks Vlad Giurgiu and Anonim)
  • Updated German (added thanks to Jan-Stefan Janetzky & An Op Turk[DedSec]), Russian, and French translations


Version 1.4.245

  • Fix settings tab text being blank after clicking controller/driver setup
  • Check if .Net 4.5 or higher is installed at the start.
  • Fix crash with certain macro
  • Option to disable flashing light when controller latency is over 10ms
  • Special Action Program: Added Arguments/Command Line and hold trigger for x seconds to launch program
  • Bug fixes


Version 1.4.242

  • Fix Download language pack’s checkbox being inverted
  • Fix lightbar being stuck on a color if the profile is switched while checking battery life
  • Fix a crash with when a new profiles not having the flash and charging set and then re-editing it.


Version 1.4.241

  • Fixed being unable to switch profiles when using certain language packs
  • Removed not yet implemented controls in options


Version 1.4.24

  • New Special Action: Check Battery life, choose to see the battery via a notification or via the lightbar with a gradient of your choice
  • Sixaxis tilting added to special action triggers
  • Added Special macros to be used by pressing the Load Presets button, selecting Cycle Programs allows you to hold the button to cycle through open programs, and edit the wait time to choose how long you hold the button down to go to the next program
  • Can now add additional recordings between macros, click in the list where you want to add
  • Can now delete actions in the macro by pressing delete
  • Fixed color by battery being inverted
  • Fixed bluetooth light being completely off when stopping/exiting DS4Windows
  • Updated translation sheets (new items highlighted in 3rd column in green for easier finding)


Version 1.4.231

  • Fixed charging light not saving (thanks tehmantra)
  • Truly finished Italian Translation


Version 1.4.23

  • Extended range needed for touchpad swipes actions to register
  • UI adjustments in profile settings, such as a color box for flashing color, alignment adjustments, and the Sixaxis reading dot staying in bounds of the box
  • Recording a macro for special actions now open up in a new window, allowing for ctrl+tab to be used
  • When controller’s latency passes 10ms, the log will show and the controller will flash red until the latency is under 10ms
  • Hovering over the mac address shows the latency of said controller, if it’s connected via bluetooth
  • Option to choose when at low battery for the light to flash or pulse
  • Much cleaner/neater hotkeys/about window
  • Option to download language packs if your PC is not set to an english language
  • Finished Italian Translations (Thanks again Giulio)
  • Finished German Translations (Thanks Ammonjak)
  • Updated Italian & Russian Translations
  • Reorganized the the code so all cs files are under the same project

DS4Updater 1.1.23

  • Support to skip downloading a language pack


Version 1.4.222

  • Added Press/Toggle Key to Special Actions, you can hold a trigger to hold a key or toggle a key with one set of buttons, and untoggle it by pressing or releasing another set of buttons
  • Added Disconnect BT to Special Actions, PS+Options to d/c is now added to Special actions and can be enabled for each profile. You can now set Disconnect BT to any control(s) and how long you need to hold the control(s) to take affect
  • Added Partial German Translation (Thanks Michél)
  • Added 95% Finished Russian Translation (Thanks members: KoNoRIMCI & Sr_psycho)
  • Added Partial Italian Translation (Thanks Giulio)
  • Updates to the translations sheets, they should now have every bit of text in DS4Windows, minus the controls of the controller
  • English Spelling fixes
  • Main/Starting tab only shows info for connected controllers, and context menu only shows options for connected controllers.
  • Mouse wheel scrolling with analog sticks/triggers/gyro, the mouse now scrolls smoothly
  • Slightly reworked analog mouse movement + mouse acceleration (not as janky anymore)
  • When starting DS4Windows, if no controllers are connected, DS4Windows defaults to the profile tab
  • Certain log warnings (Like unable to get controller exclusively) shows up in red
  • Easter egg: try pressing a few buttons in sequence while in the log tab
  • Fixed Start Profile with TP off being unchecked next time a profile is opened
  • Other minor Bug Fixes, such as clearing the log then moving to a new tab crashing DS4W

DS4Updater 1.1.22

  • Use of .ds4w files to tell what changes need to happen in DS4Windows, when updating the updater will delete old files


Version 1.4.212

  • Added Version Portuguese (Brazil) Translation
  • Fixed crash when creating a new profile
  • Minor UI fixes


Version 1.4.21

  • Added Presets for Dpad, Left and Right Sticks, Face Buttons, Sixaxis, and Touchpad Swipes; right click on those controls to select a preset)
  • Fully fixed Scan code, now will work fine in old DirectX games
  • Macros for Special Actions can now have scan code enabled (if you didn’t know you can enable scan code on macros for single controls as well, even after you’ve configured the macro)
  • Control list now shows if scan code is enabled


Version 1.4.201

  • Fixed Scan code


Version 1.4.2

  • Special Actions: press a control or a set of controls to perform a macro, launch a program/file, or load a different profile. Create new actions in profile options, and check which ones you want the selected profile to use.
  • Set an analog curve for the left and right stick, see the changes live in the controller readout
  • Option to set the close button to minimize DS4Windows, and truly close it by the notification icon
  • Added Spanish Translations (added credits to the translations sheets so users can be properly thanked if wanted to be)
  • Sticks Deadzone reworked from being a square to radial as the controller readout actually shows
  • Fix pressing keyboard not setting an action for controls
  • Fix Tilts and Swipes controls not showing text in the control list
  • Fix program crashing when uses x360 macros with shift controls
  • Fix for trying to edit a profile from the context menu after never restoring DS4Windows form start.
  • Fix for settings low flash color
  • Now running with startup will always start minimized, even if start minimized is unchecked

DS4Updater 1.1.2

  • If a language pack is available for your language but not your country’s variation of it, the default language pack is downloaded instead


Version 1.4.161

  • By default Xinput ports 1-4 are used, this can be changed back in settings to 11-14 and anything in between
  • Better handling of moving appdata folder to %Appdata%/DS4Windows


Version 1.4.16

  • Extra actions for controls, set rumble, change lightbar and flash, and mouse sensitivity while holding a controls
  • Regardless of where DS4Windows is first placed, the driver will always install in DS4Windows’ directory
  • Appdata location is now named “DS4Windows”. If your profiles are saved in appdata “%Appdata%/DS4Tool” they will be moved automatically to “%Appdata%/DS4Windows”, assuming access to the files are available.

DS4Updater 1.1.16

  • Icon Update


Version 1.4.158

  • Fixed random mouse dancing in some games
  • When adding trigger actions to the left or right stick, fixed L2/R2 not working 100% of the time
  • Fixed profile for controllers not being changeable if usb was plugged in at start


Version 1.4.157

  • Experimental option in settings: Quick Charge controller by turning off BT when plugged via USB
  • Settings a deadzone of .10+ to the sticks or higher now affects the mouse movement as well
  • Use DS4 for Mapping checkbox now remembers how it was last set
  • Fix for starting minimized showing up in task manager and alt+tab, this also more reliably starts minimized


Version 1.4.155/156

  • Significant CPU usage decrease by reworking how single instances work, on a mobile i7 for example with a single controller connected usage went from 4-6% to .5-1.5%. With no controllers connected the usage went from 2.5-4.5% to 0%!
  • As mentioned before, single instances has been reworked, so trying to relaunch DS4W more reliably opens the previous instance
  • Fixed Shift modifier not working if main controls were not modified
  • Fixed Tilt Left for Shift modifier
  • Fixed default text of shift controls
  • Remove touchpad movement notification when swipe for controls is enabled
  • Can test the rumble motors separately via Heavy and Light
  • Truly implemented Flush HID (I think)
  • Slight change in profiles, when loading profiles in for the first time in this new version, there may be a slight delay
  • Updated French Translations
  • Removed mouse moving as an option for touch swipes controls, as they weren’t implemented nor have a purpose to be

DS4Updater 1.1.155

  • Don’t let the jump fool you, this update just keeps the numbers closer together. This update only contains general fixes


Version 1.4.15

  • Use Touchpad swipes for controls and disable it for mouse: swipe in 4 directions to use buttons, marcos, and even use the touchpad as an analog stick (Relive the great moments of playing an FPS on a touchscreen)
  • Mapping Stick directions to triggers now work properly


Version 1.4.1 [Mac(a)roni]

  • Record 360 controls using your DualShock 4 (PS: any old macros using hold control while running macro may be set to a new control when loaded, please re save your macro)
  • Macro recording now happens in the select an action window instead of a separate one
  • Save and Load Macro presets to use any time
  • When recording with delays (recommend for X360 macros) you can double click on delays to edit the time
  • When recording a new macro, previously saved Macros for that control are shown
  • Many minor Macro fixes
  • Giving major updates useless names that will never be seen outside of this changelog
  • Icon Update
  • Fixed shift modifier lightbar settings blocked off
  • High DPI support (144+)
  • Fixed various bugs at 120 DPI and higher
  • When installing the ds4 driver, Actually checks if the driver got installed instead of always saying install complete



  • Really fixed the touchpad clicking this time
  • Small bug fix for first time users



  • Fixed Touchpad still mouse clicking when set to a key
  • For first time users: The ds4 driver (virtual bus) will silently and automatically install after clicking step one in the setup window


  • For multilingual users: if your language has translations for DS4W (currently only French) DS4Updater will also download the language pack as well.



  • Many fixes for shift modifier


  • Fix crash when disconnecting by PS+Options



  • Rework x360 mapping similarly to v1.4.0.75, however this time testing has been done and truly works :). With this update you can map sticks to multiple things and swap the actions of two buttons/sticks/triggers
  • Remapping touchpad clicks improvements



  • Revert back to old control style, will test the new control mapping later



  • When using default controls, fix no controls working
  • When using custom controls, fix sticks not working
  • Hopefully removed DS4W from alt+tab menu when minimized



  • Reworked x360 mapping again, better support for mapping multiple buttons to the same thing + swapping buttons
  • Made the exclusive warning last message when connecting a controller that can’t get exclusive control to make it more noticeable
  • Hovering over the log message at the bottom shows the full message
  • Default colors provided when a new profile is made for certain controls



  • Rumble motors swapped to be correct
  • Bug fixes, including crashes and a small windows when minimized on Win7



  • Improved mapping support: can better handle the switching of controls: ie triangle and circle/dpad and left stick/L1+R1 and L2+R2. If you have a profile with swap buttons, they may not work until you open the profile in settings and resave.
  • Servers moved to
  • Remove DS4Windows from Alt+tab menu if minimized to tray (thanks youturnjason)
  • Basic support for command line arguments (right now just “-stop” is supported: starts program up without starting the ds4)



  • Servers moved to
  • Bug fix for failing to fully close when cancelling an install



  • Bug fix for dinput mode making multiple 360 controllers



  • Profile option to turn off touchpad at start
  • Better disabling and re-enabling of the virtual x360 for dinput only mode
  • Bottom text of DS4Windows now hosts the description of items in profile options instead of a floating tooltip
  • If first startup of DS4Windows/no profiles are found, a default profile is made
  • Extra tip in driver window
  • Update to french translations (however the translations require another update now)



  • Lightbar turns off when pressing Stop while wired



  • Added start/stop to notification icon
  • Right click on the status icon in the main window to disconnect the controller (BT only)
  • Rumble testing actually varies as the boost value changes (you won’t notice a change with testing past 100%)
  • Better lightbar flashing, color has a better chance of changing back after not flashing etc.
  • Moved source code to Github, the link is on the about page of DS4Windows and my sig on
  • Special feature (beta) for those who have a profile for Distance and use the controller in X360 mode.



  • Option to only use Dinput, turn off X360 input and only use the DS4’s native input: useful for games that can use the ds4 as is without 360 input needed, but still want to use the lightbar and touchpad.
  • Added custom color when flashing, just click on the “Flash at” text
  • lightbar turns off fully when going into sleep mode
  • PS+touchpad also disables scrolling now
  • Update to french translations
  • Fixes to text



  • Separated Translation on Save where dialog box
  • Fix updating when settings are in appdata
  • shortened notification icon’s popup text to avoid crashes



  • Even better localization support
  • 95% finished French Translation (I forgot to update the translations page so a few lines are missing, the French page has been updated, but the rest still need to be updated) Thanks to DirtyShady and Neur0Nerd for the Translations



  • Fix for DS4 failing to connect for some people



  • Option to start a program when loading a (auto-)profile/connecting a controller
  • Reworked mouse movement with analog sticks, still needs more fine tuning
  • Option to add a different color for when in shift modifier mode
  • Added default to regular controller mapping, which goes back to it’s original 360 mapped action if any
  • Big fixes: such as controller being disconnected when hiding the DS4 with D/C when stopping is on
  • Spelling fixes
  • DS4Updater spelling fixes



  • Fix for select an action window popping up when connecting a controller in some circumstances
  • DS4Updater: quicker startup, will only replace updater if the version is actually newer, smaller size



  • Added Unbound to shift modifier
  • Reworked Settings tab layout so it looks less cluttered
  • Check Drivers at start is back, this way actually checks if the VBus driver is installed and needs to be if not. It was disabled because certain user accounts (like guests) couldn’t start the tool up, that has been fixed as well


Version 14/1.4

  • Versions will now be based on the file version, this way DS4Windows can be numbered using 4 parts (ie, this also allows the version number not to go so high so quickly
  • In Profile Settings::
    • Shift modifier: Hold an action to use another set of controls, if nothing is set to the shifted control, in falls back to the default action
    • IView input of controls, see exactly when a deadzone is passed and check the input delay for controllers (special thanks to jhebbel), click the on sixaxis panel
    • Click the Empty text on in the lightbar box to copy the lightbar color from full to empty.
    • While opened, option to keep the window size after closing the profile’s settings
    • Old profiles are automatically upgraded if it’s missing new settings, such as how colors are now saved, sixaxis deadzones, and shift controls
    • Other UI changes, such as flipped touchpad and other settings boxes
  • Fix for when clicking the semicolon in the select an action screen
  • Fix assigning Sixaxis action to a key
  • minor UI changes and bug fixes, such as auto resize of the log listview
  • DS4Updater: Also now works for the new numbering system, can read the version number right from the exe instead of in profiles.xml, UI additions to better notify users of errors, Bug fixes for non-portable users


Version 10.651

  • Fix for loading older profiles before 10.65
  • DS4Updater: remains if couldn’t unzip the files for whatever reason


Version 10.65

  • Sixaxis Deadzones can be reconfigured: 0.25+ recommended to lay down the controller without movement
  • Mouse Acceleration option
  • Rumble settings now more simple
  • Better detection of where profiles and settings are stored, if you use jheb’s tool and this as a portable one, it better detects which settings are which.
  • Smaller filesize for profiles.
  • Reorder of tabs
    • DS4Updater: Support for other localizations where decimals use “,” instead of “.”
    • Bug fixes: for when DS4Windows is still running while updating, when there is no internet connection/update doesn’t exist, when profiles.xml doesn’t exist.


Version 10.6

  • Sixaxis tilts can now mapped, map them to the analog sticks, buttons, keyboards, and even macros
  • Better Support of multiple action being mapped to analog sticks
  • Fixed crash with an empty macro
  • UI Fixes


Version 10.55

  • Dimming by idle timeout synced with color/dim by Battery % setting
  • Swipe to cycle through profiles can now be disabled.


Version 10.52

  • Input by DS4 in profile settings now turns off when off that tab
  • Able to use edit button to open that profile settings, even when profile settings are  already open open.


Version 10.51

  • Fix for BT disconnecting while DS4Windows is running, and Disconnect BT when stopping is checked.


Version 10.5

  • Support for Left/Right Shift, Control, Alt in macros
  • Better support of Tab and media keys (note: media keys can not be held between actions)
  • Option to disconnect controller from BT if stopping/closing DS4Windows
  • Spelling fixes
  • Start of support for other languages, starting with very barebones support for Spanish, If anyone can help with translations of your language, please PM me here or email me here with translations for as much text as you can. Here is a link to all the text that appears in DS4Windows in English


Version 10.45

  • UI redesign for 360 controls in mapping window
  • Added manual mouse click buttons for 4th and 5th mouse button
  • Can also hold an X360 action while a macro is running
  • Changelog link in help window, also fixes in tips
  • Macro list scrolls down as you record strokes
  • DS4Updater: If settings are in appdata, the update zip actually unzips


Version 10.4

  • Truer Macro support: Record keystrokes and mouse clicks by the press and release, repeat a macro while button is held down or play once, option to record the delay between actions. NOTE: Recommended that you re-record macros, however old macros should work, however it hasn’t been tested)
  • Mouse movement works a bit better
  • Fix for startup shortcut disappearing/unchecking
  • When programs that are used in auto-profiles are uninstalled, they are removed from the auto profile list
  • Support for Scan code keys in macros


Version 10.361

  • Truly faster startup
  • Updater has been fixed


Version 10.36

  • Faster startup
  • Fix for crashes


Version 10.35

  • Fix at Windows startup showing Welcome window
  • Startup now uses a shortcut in the start menu startup folder instead of registry. Registry key now removed
  • Fix duplicates of programs showing up when batch adding programs
  • Clicking the X button in the main windows will close profile settings instead of the whole program if profile settings are open. Otherwise the program shuts down regularly
  • UI Fixes


Version 10.3

  • First time runs of DS4Windows ask where you want to save settings, Will automatically pick the settings location based one the two location profiles.xml is in (App folder or Appdata). If settings are in both, it will ask you to pick where you want to save, and attempt to delete the other settings. If settings are in the app folder and needs UAC to write, There is an option to copy over the files to appdata.
  • Disable touchpad mouse movement again by holding PS and touching the touchpad (instead of clicking)


Version 10.26

  • FIx for crash when DS4Windows and DS4Updater is in Program files on a drive that is not C


Version 10.25

  • Fix for Buttons inputting
  • DS4Updater: Fix for reading version


Version 10.2

  • Rest of DS4Windows has been upped to .NET 4.5 (If you have .net 4/already can run DS4Windows, this won’t affect you), thanks to this update, you can now…
  • Add delay to macros from one millisecond to 60 seconds, macros with delays only run once until pressed again. Without delays, the macro can be repeated while held down.
  • Profiles and settings are now back inside the application folder to help portability. It will remain in appdata as previous versions if DS4Windows is in a admin folder, I may try to add a setting for location saving.
  • Import profile option will automatically go to the appdata profile folder, auto profiles and settings will automatically copy over.
  • Option to delete the appdata folder if not in use in the settings tab, this way it helps with cleanup.
  • Another fix for auto profiles startup bug
  • Better reading of autoprofile program path names
  • Now only one instance of DS4Windows is possible, if another DS4Tool or DS4Windows that is not this version is started, this DS4Windows comes back into focus.
  • UI fixes


Version 10

  • DS4Windows no longer crashes if no source games are installed (ie shinra’s crash)
  • Auto profile has more ways to add programs, add origin games if installed, and start menu programs
  • You can also add by shortcuts (.lnk)
  • Auto Profiles now work by the foreground program
  • DS4Windows no longer checks for driver at start, will help speed up DS4’s connection when starting up with windows.
  • Welcome to DS4Windows Window is now an option in the Settings Tab, will automatically show up if mine or DSDCS was never started before.
  • Touchpad scrolling reworked via electrobrains newest build
  • Idle Timeout has a checkbox, also small UI fixes


Version 9.9

  • Auto Profiles are live(beta) – Automatically load profiles when starting up certain programs or games.
  • DS4Tool.exe merged with it’s dll’s, now named DS4Windows.exe
  • Settings tab – Hide DS4, Run at start up, Change update rate or disable it all together, turn off notifications and more there
  •  there
  • When battery is low and starts flashing, it will not continue to flash when charging
  • Possible fix for memory leak
  • Small UI changes such as not being able to edit the text in combo boxes
  • Spelling fixes
  • Updater: Now doesn’t need admin rights to run, DS4Windows will try to start the updater with admin permissions if DS4Windows is located in an admin folder like program files, also renamed DS4Updater.exe. The old updater will automatically be deleted


Version 9.33

  • Better support for higher DPI users


Version 9.321

  • Fix for those using text at 125%


Version 9.32

  • Small fix for swapping profiles with touchpad


Version 9.31

  • Fix for profile name when making a new profile


Version 9.3

  • Option to change what happens to the lightbar when charging: options are normal, fade in and out, rainbow, and it’s own color
  • Settings for saving,renaming, and cancelling the save of a profile while in profile settings moved into the toolbar
  • Switch profiles now by a 2 finger swipe left or right on touchpad
  • When shutting down, the controller light turns fully off


Version 9.2

  • Context menu for profile list, assign profiles from there and more with a right click
  • Can now import by dragging profiles(.xml’s) directly into DS4Windows
  • Added back default light color when stopping/closing
  • Escape or Enter can now close the help window
  • small optimizations


Version 9.12

  • Bug fixes, such as default touchpad mouse clicking works again


Version 9.111

  • Bug fix when changing profiles with touchpad


Version 9.11

  • Bug fix for checking updates in Help


Version 9.1

  • Setting to adjust when battery flash begins
  • Import profiles moved to profiles toolbar
  • You can now export Profiles
  • Tool can get even smaller now, as checkboxes and start/stop button are on same line
  • Log clear button moved to log tab
  • UI fixes in About
  • Use Enter or escape to save or cancel profiles respectively in options or when duplicating profile
  • Use Enter, Delete or Ctrl+C in the profile list to edit, delete, or duplicate a profile respectively


Version 9

  • Revamped UIOptions are now in the same window as the main tool, Can edit profiles without it being selected, Organized Info of controllers, minimum size changes by number of controllers connected
  • You can now duplicate profiles
  • Cycle through profiles by holding L1+R1 and swiping left and right on the touchpad
  • Check for updates options in Hotkeys/About
  • Single click notification icon to open tool, middle mouse it to close DS4Windows
  • Small mouse movements with analog fixes
  • Mouse movement with triggers fixed
  • Alpha of Auto Profiles implemented, not yet able to use
  • Minor fixes


Version 8.2

  • Mouse movement reworked, pushing on the sticks works by a curve like xpadder
  • PS+Options no longer turns off the controller off if it’s charging


Version 8.1

  • Touchpad macros now work without also clicking
  • Mouse Buttons are now toggleable


Version 8

  • More mapping options!
    • Toggle option: Press a button once and the key will be held down until the button is pressed again
    • Macro option: Assign multiple keys or mouse buttons to a single button! Just check Macro and select the buttons in the order you want them to be pressed (maximum 5)
  • Light bar even closer to default bluetooth when stopping
  • When disconnecting Controller via PS button and Options, if PS is assigned to a key or keys, the key is let go.
  • If Idle timeout is on, the light bar idles fades when fully charged (but doesn’t disconnect)
  • DS4 Icon always shows, notifications only at startup, and when the main window is unfocused.
  • In options the tap, scroll, and slide are unchecked at start if any of them were turned off before
  • For always rainbow mode, the cycle goes in reverse when charging, remains dim if checked.


Version 7.8

  • Mouse Sensitivity now works with analog sticks as well as buttons and triggers
  • Option for using the controller input to change it’s mapping in options
  • Fix for lightbar not remembering the color
  • Disable edit/delete buttons until controllers finish connecting


Version 7.7

  • “Connecting…” issue fixed again, I think…
  • Pushing the Right stick down also works correctly now.
  • In options,when changing values on the light bar sliders, a tooltip shows up to the side showing the number.
  • The lightbar now only fades out when idle when half the idle time has passed.


Version 7.6

  • Options Redesign (Yes again), giving each control option a little more breathing room


Version 7.42

  • Hopefully fixed “Connecting…” issue (Thanks jheb)
  • Small ui/gui improvements:
    • Start with windows always visible
    • Tooltip on the rainbow icon
    • Light Bar shows the default light blue when stopping/closing ds4windows. Light Bar also doesn’t go weird when charging and idle timeout is on.


Version 7.412

  • Small optimizations to lightbar rainbow and Keyboard strokes


Version 7.41

  • Lightbar Idle fade now works for all regions, not just Eastern Time


Version 7.4

  • When using Idle timeout, The lightbar now will fade as the controller sits idle.
  • Added a decimal place to idle timeout so you can use half/etc. minutes now.
  • Proper Display of percentages of dead-zones when reentering options


Version 7.315

  • Delete button actually deletes profiles


Version 7.31

  • Small bug fixes for analog sticks mapping


Version 7.3

  • Added analog stick deadzone, truly added trigger dead zones


Version 7.1

  • Added Start with windows option
  • DS4Windows now only checks for updates hourly (but only when running), updater will still check immediately when started.
  • Small UI changes


Version 7.01

If Virtual Bus is installed via DS4Windows, there is an uninstall link in about.


Version 7

  • This build adds a few more devs to the about page,
  • If you don’t have the Virtual Bus Driver installed, DS4Windows will walk you through installing the driver. This makes it easier to distribute a single zip and not have multiple exe’s in it.
  • If updater.exe is deleted/doesn’t exist it will be re downloaded.


Version 6.95

  • You can now press a button/axis/touchpad in options to change that control when in options.
  • The icon in the notification area also shows not only when minimized, but when the main window unfocused.
  • Fixed bug where when the tool is shrunken down, the last message of log didn’t show.


Version 6.9

  • DS4Tool: Version number saved to Profiles.xml so Updater can access it
  • Updater: Can now check for latest version by comparing current via Profiles.xml and new. Updater can also update itself.


Version 6.8

  • Profiles and settings are now saved in appdata, you can import your profiles from the old folder or any place


Version 6.6:

    • Update checker now moved to AppData, this allows the program to be in Program files or other folders with elevated need privileges.
  • P.S. there is a new Updater.exe (Updater NEW.exe) please rename it to “Updater.exe” and replace with old one


Version 6.5:

  • Auto update is now live


Version 6:

  • Revamped Options