0% found this document useful (0 votes)
326 views80 pages

DS4Windows Changelog

This document provides release notes for different versions of DS4Windows software. It describes fixes and improvements to profile handling, controller support, and other features in versions 3.3.2 through 3.2.10. Translations to additional languages are also mentioned.

Uploaded by

samuelacrb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
326 views80 pages

DS4Windows Changelog

This document provides release notes for different versions of DS4Windows software. It describes fixes and improvements to profile handling, controller support, and other features in versions 3.3.2 through 3.2.10. Translations to additional languages are also mentioned.

Uploaded by

samuelacrb
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 80

Download newest version

If you know another language and want to help translate DS4Windows, please translate
the text in your language here. If the language you want to translate in, add your
language to the rightmost part of the sheet posted above

Version 3.3.2
● Various fixes for ProfileDTO class to fix reading of retro profiles
● Fixed default maxZone for TouchMouseStick
● Added test to check output XML string after profile migration
● Fixed hip fire time profile settings
● Fixed some translation string keys in Profile Editor

Version 3.3.1
● Fixed use of SocketAsyncEventArgs for .NET 8. Allows clients to disconnect and
reconnect as expected
● Use manualresetevent timeout as a precaution for HaltReportingRunAction method
● Fixed length of macroDone array. Added const to enforce array length. Fixes macro
binding for Switch, JoyCon, DSE exclusive buttons

Version 3.3.0
● Update project to target .NET 8 Desktop Runtime
● Updated bundled libraries to target .NET 8
● Added initial unit test project to solution
● Updated use of ProfileMigration class
● Changed how migrated XML string is grabbed from ProfileMigration class
● Fixed issues with converting of older profiles from earlier DS4Windows versions
including Jays2Kings builds
● Force waiting for mapper routine to be over before switching profiles. Fixes BT lightbar
issues
● Unregister DataContext used to link VMs early. Purge memory early and reduce memory
usage. Thanks to kurtanr for figuring out the problem
● Loosen analog to mouse wheel mapping
● Increased RWC for FlickStick in editor. Allow upper limit of 200
● Changed technique for stopping mapping routine from input thread. Allows some
routines to still run while profile loading is in progress
● Make sure XmlReader instance is closed after using ProfileMigration class
● Quick UDP server startup tweaks
● Add missing button ids to the gyroTriggerItems. Contribution by christranq
● DualSense LED: Swap player 4 & player 6. Contribution by RobbyCBennett

Version 3.2.21
● Updated ViGEmClient to work around IOCTL_VIGEM_WAIT_DEVICE_READY timeout
when resuming from sleep. The problem affected normal operation as well. Just not that
often
● Clear some memory references early in ProfileEditor. Contribution by kurtanr
● Fixed new line in translation string. Contribution by DraakjeYoblama
● Dutch strings update. Contribution by DraakjeYoblama
● Updated zn-hans translation. Contribution by CrazyHPi
● Russian translation update. Contribution by mentalsolin
● Attempt to load DS4Windows config when loading WelcomeDialog for a separate
process. Makes sure set translation choice is used
● Enable localization for LogMessageDisplay window
● Added check for last check task when starting app update
● Enable .NET 8 nag window

Version 3.2.20
● Bump DotNetProjects.Extended.Wpf.Toolkit from 5.0.103 to 5.0.106
● Fixed some Gyro trigger indexes. Make sure Touchpad relate triggers work again
● Added DSE buttons for use as shift trigger. Actually allow JoyCon side buttons to work
for shift triggers
● Abstract resource paths more. Allows easier renaming of assembly. Minor
consequences in the VS XAML editor though
● Consolidate gyro trigger context menu lists in Profile Editor
● Added Malay translation. Contribution by shoen1x
● Use FileVersion prop for grabbing assembly version instead. More helpful for .NET 8
usage than right now
● Updated FakerInputDLL files
● Hide some ViGEmBus messages in Profile Editor regarding passthru when using
supported versions. Small tweak
● Use ViGEmBus version check for lightbar passthru message as well
● add Resources.zh-hans.resx for Chinese simplified translation. Contribution by
CrazyHPi
● update Strings.zh-Hans.resx for Chinese simplified translation. Contribution by CrazyHPi
● Marked more strings in GUI for translation. It will not affect this version obviously
● Removed use of deprecated LocText extension. Now use BLoc extension instead. Only
used to render one string in Profile Editor previously
● Skip trying to reset UDP server connection if requested the server to stop
● Fixed Load a Profile Special Action unload trigger list header in Dark theme
● Changed display text for Side L and Side R buttons in unload trigger list

Version 3.2.19
● Tweaked HidHide whitelist app check to work behind a junction directory. Scoop install
● Updated some installer URLs in the WelcomeDialog window. Updated linked ViGEmBus
installer to version 1.22.0
● Changing source code license to GPL version 3. Added notices
● Added GPL version 3 text to About window
● Perform junction directory check at startup. Use real install path for exepath if found

Version 3.2.18
● Fixed HidHide registry check when key does not exist
● Fixed Gyro Mouse Joystick trigger indexes for some triggers. DualSense Edge triggers
in particular
● Updated SharpOSC libraries
● Fixed default app setting for JoyCon LinkMode option
● Added Turkish translation. Contribution by onuralpyilkin
● Changed helpURL for SendInput warning message

Version 3.2.17
● Fix disconnect of DS4 connected to Sony WA when Stop button is used
● Revert back to having Launch Program special action run as current user
● Take CollectionView into account when removing a Special Action from list

Version 3.2.16
● Changed SetupAPI calls used to grab device information. Needed for fake USB DS4
device in some cases

Version 3.2.15
● Show blank panel for DS3 in registration window
● Check for vendor-defined HID devices based on HID Capabilities instead of description.
Contribution by Kanuan
● Changed props in HidDeviceCapabilities class to be full properties
● Changed HidDeviceAttributes class to use full properties
● Changed auto props in HidDevice to use full properties
● Have Launch Program Special Action try to de-elevate when launching a program
● Removed Nefarius.Utilities.DeviceManagement AnyCPU library dependency. Do virtual
device check in program code instead

Version 3.2.14
● Removed social accounts from app
● Added style resource for first launch window
● Check for inverse application cloak HidHide setting. Skip checking HidHide whitelist if
option is enabled
● Allow DS4 output to not report virtual trigger button state
● Added small exception handling for single app instance check
● Updated Nefarius.ViGEm.Client.dll files with fixed userdata args for adding notification
callback
● Display Windows error code for unknown ViGEmFailure in the Log
● Added Greek translation. Contribution by trlef19
● Added Indonesia translation. Contribution by Adamsw72
● Added extra user documentation to repo. Edited README.md. Contribution by
Oliver-Noah
● Expose secondary joined JoyCon SideL and SideR buttons in mapper. Use DS FnL and
FnR codes
● Allow DS4 trigger button output only
● Allow virtual DS4 trigger behavior combobox strings to be translatable

Version 3.2.13
● Added Resource workaround in project file to remove then add files. Performance bump.
.NET is a weird beast.
● Added missing JoyCon controls for Special Actions Unload Triggers
● Added remainder cutoff for Touchpad Mouse and Gyro Mouse
● Added FirstLaunchUtilWindow. Currently used to specify which devices the mapper
should read
● Added extra attribution for DsHidMini project in first launch window
● Change single app instance check to use EventWaitHandleAcl.TryOpenExisting
● Added profile switch notifications for Auto Profile system
● Added implicit Default theme logic. Have default app theme change based on Windows
app color setting
● Prevent lock recursion in OutputSlotManager if ViGEmFailure is encountered
● Added Vietnamese language. Contribution by taolatao147

Version 3.2.12
● Fixed DS3 support not being able to be enabled. Contribution by sunnyqeen
● Updated german translation. Contribution by PaulWentzel
● Added Finnish translation. Contribution by eemijun
● Attempt to adjust JoyCon stick axis ranges based on initial axis coordinates
● Decreased wait period after resume. Reduced to 5 seconds. Likely a mistake
● Dispose notify icon early before closing program. At least H.NotifyIcon errors will show
up in the Log upon quitting
● Fixed RS stick calibration parsing for JoyCon and Switch Pro controllers
● Changed routine to find HidHideClient program. Use registry info to attempt to find
HidHide location
● Added extra safeguard if profiles list is empty. Prevents crash

Version 3.2.11
● Added task logging to resume method
● Increase wait period in resume routine
● Updated HidHide installer link to version 1.2.128.0
● Changed boundary check for main window placement on startup
● Added jitter compensation to Gyro Mouse Joystick
● Make DS3 device support optional. Separate it from DS4 Controller Support
● Lowered JoyCon LS X- boundary when no user calibration is present
● Updated FakerInputDll.dll files with file write flag fix
● Fixed initial saving of default enable status for non-DS4 controllers. Mainly changes
saving to AppData folder
● Updated French translation. Contribution by EnzoChaussivert
● Fixed restoring of Window position on multi-monitor systems. Contribution by kurtanr

Version 3.2.10
● Added jitter compensation routine for Gyro Mouse
● Move output handler init and disconnect calls to ControlService Start and Stop routines
● Changed suspend and resume routines
● Added extra exception handling for tray notification failure
● Use DetermineConnectionType in PostInit of DS3Device. Contribution by SunnyQeen
● Fixed a crash when open device options with null option. Contribution by SunnyQeen
● Added InterpretingOscMonitoring Option. Contribution by xAdler
● Added some OSC translation strings. Contribution by xAdler
● Added OSC monitoring message interpreting. Contribution by xAdler
● Added OSC trigger control. Contribution by xAdler
● Added additional mapping checks in ProfileDTO MapFrom routine
● Changed how macros are saved from binding window. Do not reset shift trigger
● Support Horipad 4 FPS. Contribution by markguleno
● Fixed custom led mode. Contribution by MatrixDJ96

Version 3.2.9
● Fixed changing of Trigger Effect while switching profiles with DualSense controller
● Allow LSVerticalScale and RSVerticalScale to save values > 1.0. Contribution by
Katalysta
● Updated Italian translation. Contribution by MarkThat
● Increased LS and RS Vertical Scale max to 4.0
● Check for string length from HidD_GetSerialNumberString call from possible invalid
response from hardware
● Added extra locking for LoggerHolder
● DualSense Edge input support (FnL FnR BLP BRP). Contribution by steffalon
● Added subtype property for DualSenseDevice class
● Added COMException catching when adding hook for power events
● Removed message regarding Middle Mouse closing app in tray menu. Windows 11 no
longer supports this at least right now
● Added DualShock 3 support using DsHidMini driver (SXS) or Sony Sixaxis driver.
Contribution by SunnyQeen
● Added logging when reading of Actions.xml fails
● Changed processing of Delay tags for Actions.xml. Fixes some cases where recent
DS4Windows no longer reads Special Action files from older versions
● Fixed outer bounds when using smoothing for 360 Gyro Steering
● Fixed anti-dead zone interpretation for 360 Gyro Steering stick output. Applies to Xbox
360 and DS4 output (not VJoy)
● Added Playmax PS4 controller. Contribution by nzgamer41

Version 3.1.11
● Fixed loading of language assemblies from Lang folder
● Update Traditional Chinese assembly. Contribution by syaoran
● Fixed snap to center Y axis coordinate for control abs mouse
● Tweaks to DS4 BT output support. Revert back to using output report 0x11
● Take payload length into account besides just array length. Strip 0xA0 data magic byte
from output packet
● Added workflows for issue moderation automation. Contribution by nefarius
● Check current virtual desktop display bounds when restoring window position on startup
● Added Poast social link in About window
● Tweaked Switch Pro init routine. Increased initial USB delay, tweaked modeswitch
command
● Removed use of old ControlService busThread. Utilize Dispatcher
● Fixed rsync ignore rules for default translation assemblies

Version 3.1.10
● Added Mouse instance null check when performing PreLoadReset before profile loading
● Added absolute mouse output support for bindable controls
● Removed references to old BitTube channel
● Added WpfScreenHelper NuGet package to dependencies
● Use absolute mouse region display coordinate translation for Touchpad abs mouse
● Removed App references to MemoryMappedViewAccessor objects for cmd interface.
Create as needed. Snappier app as a result

Version 3.1.9
● Updated ViGEm.NET libraries. Includes check for
IOCTL_DS4_AWAIT_OUTPUT_AVAILABLE status. Contribution by Nefarius
● Added check that AwaitBufferThread has reached inner loop before attempting to
Interrupt thread
● Fixed Gyro Mouse Joystick output for vertical axes

Version 3.1.8
● Added working directory info for startup lnk file
● Display input slot number in Output Slots tab
● Force update TooltipText in GUI thread
● Implementation of Touch Mouse Joystick
● Fixed log message generation when virtual pad plugin fails
● Abstract post action stick axis state changing for use with Mouse Joystick
routines
● Display some input device information in Output Slots section
● Added some device number checks in ProfileSettingsVM. Avoids test index
● Fixed Keypad Decimal mapping for FakerInput
● Fixes for virtual DS4 output feedback support from ViGEm project. Contribution
by Nefarius
● Updated ViGEmClient and ViGEm.NET libraries. Contribution by Nefarius
● Virtual DS4 output feedback support re-enabled. Contribution by Nefarius

Version 3.1.7
● Added stick delta acceleration options for LS and RS
● Added extra UAC Warning to Log when using SendInput event generator.
Contribution by Yohoki
● Changed URL parser for link generation in LogMessageDisplay window
● Changed XInput output slot display routine. Contribution by Ygor
● Added Touchpad virtual button activation mode options. Adds ability for activation
on Touchpad Touch and Touchpad Release
● Added newer possible HidHide locations to HidHide client search routine
● Updated some NuGet packages. H.NotifyIcon.Wpf, MdXaml,
Nefarius.Utilities.DeviceManagement
● Updated linked ViGEmBus version to 1.21.442.0. Now listed as a stable release
● Lowered eventDispatcherThread priority to BelowNormal; Event loop primarily
used for hotplug and output device plugin and removal
● Added PowerA FUSION Wired Fightpad for PS4 to known device list.
Contribution by Ygov
● Added Thrustmaster eSwap Pro to known device list. Contribution by SakifX9
● Arabic language translation updated. Contribution by Ahmed
● Added reWASD and VirtualHere to new exclusion filter for virtual device check.
Contribution by Nefarius
● Changed duration for multimedia timer in app. Not really used now but it would
allow sleep times less than 16 ms in app
● Unfortunately had to disable virtual DS4 feedback support again. Routine only
worked reliably with one controller

Version 3.1.6
● Updated DS4Windows.deps.json file
● Made sure to bundle latest Lang assembly folder
Version 3.1.5
● Updated German translation. Contribution by h1nnak
● Added Razer Raion Fightpad PS4 to known devices. Contribution by Ygor Vaz
● Updated NLog package to version 5.0.4
● Updated H.NotifyIcon.Wpf package to version 2.0.64
● Updated bundled ViGEm.NET libraries
● Fixed wrong UI binding used for RSAntiSnapback. Contribution by Kanuan
● Fixed Hip Fire Delay settings not saving. Contribution by Kanuan
● Fixed preset option using wrong preset. Contribution by Kanuan
● Fixed Flick Stick Min Angle settings not saving. Contribution by Kanuan
● Set DualSense's Lightbar to white when stopping DS4Windows. Contribution by
Kanuan
● Added AutoProfile target EXE to Hidhide. Contribution by Yohoki
● Added Auto-Profile Target to HidHide's Whitelist. Contribution by Yohoki
● Fixed LF byte for rumble frequency with Switch Pro and JoyCon
● Added reference to Nefarius.Utilities.DeviceManagement package. Contribution
by nefarius
● Hardened virtual device check using Nefarius.Utilities.DeviceManagement
package. New check detects and skips reWASD created virtual DS4 controllers.
Contribution by nefarius
● Updated Driver Installer window to link to HidHide 1.2.98
● Display XInput slot num in output slots panel
● Added Filename to LogDebug when adding/removing EXE entry for HIDHide's
whitelist. Contribution by Yohoki
● Updated README file with updated instructions and pictures. Contribution by
dpearson2699
● Activated Improved Rumble Emulation for DualSense controllers using newer
firmware. Set DualSense's default rumble strength level to High. Contribution by
Ygor Vaz
● Increased max amplitude for Switch Pro rumble. Increases max rumble output
● Added initial support for updated ViGEmBus DS4 full output payload (rumble +
lightbar) support. Requires latest pre-release ViGEmBus driver
(AwaitRawOutputReport calls) to work.

Version 3.1.2
● Hide alpha slider from color picker window
● Changed some translation files locations based on .NET 6 locale changes
● Added OSC Server and Sender. Contribution by GreySole
● Updated H.NotifyIcon NuGet package
● Use new H.NotifyIcon property for handling tray icon identifier
● Removed Speaker volume feature flag from DS4 output report
● Minor tweak for ReadLocker wrapper class
● Added H.NotifyIcon to About Extras tab
● Removed DS4Audio class from project
● Disabled failed fake DS4 detection. Did not really work for its purpose based on
reports
● Fixed Rename Profile window to use app theme colors
● Slightly alter how loading a temp profile is performed

Version 3.1.1
● Changed gyro output mode output behavior for joined JoyCon controllers. Run
output early for Gyro Mouse and Gyro Mouse-like Joystick
● Updated many project dependency NuGet packages and DLL files
● Migrated project to use H.NotifyIcon.Wpf package
● Added extra CONNRESET IOControl call for ReceiveCallback method in UDP
server. Avoids potential memory leak within UDP server in .NET 6. The call
should have probably existed beforehand
● Switched main UDP message rsp to convert payload from a struct. Faster and
simpler
● Added dependabot to GitHub actions. Contribution by sitiom
● Slightly tweaked Suspend and Resume power routines
● Fixed DS4Updater download URL redirect when automatic download fails
● Fixed initial data bindings for Auto Profile section
● Have Full Pull Dual Stage triggers use raw input range rather than interpreted.
Might have to change how Full Pull is handled later
● Changed WelcomeDialog to use Windows temp folder while downloading rather
than program folder. Would mainly affect when DS4Windows is run from a
read-only folder (shouldn't be the case on a proper setup)
● Removed Mastodon and Minds social media links from About window. No longer
support Mastodon as a whole. DS4Windows actually got banned from Minds
● Added extra project links and notes to About window
● Allow joined JoyCons to transmit unique Gyro data to UDP server. Mimics
behavior of BetterJoy for two JoyCon controllers linked together
● Changed HidHide download link to point to version 1.1.50.0. Approved release
● Enforce 6 normal key maximum for fake virtual keyboard in FakerInput handler.
Pretty sure some reports were from people abusing said limit
● Removed old .NET 5 workaround for single process instance checking. Use
EventWaitHandleAcl.OpenExisting included with .NET 6. Contribution by sitiom
● Fixed touchpad counter reading with DualSense. Needed for Touchpad passthru
for virtual DS4 Extended output to work. Contribution by Kanuan

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 Strings.ru.resx. 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
1.16.112.0. 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 1.16.112.0
● Fixed ViGEmBus driver check to work with ViGEmBus version 1.16.112.0 as well as
1.14.3.0
● 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 1.2.6.0
● 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 overclockers.ru 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

Version 1.4.0.872
● Really fixed the touchpad clicking this time
● Small bug fix for first time users

Version 1.4.0.87
● 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
DS4Updater 1.4.0.87
● For multilingual users: if your language has translations for DS4W (currently only
French) DS4Updater will also download the language pack as well.

Version 1.4.0.85
● Many fixes for shift modifier

Version 1.4.0.81
● Fix crash when disconnecting by PS+Options

Version 1.4.0.8
● 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

Version 1.4.0.761
● Revert back to old control style, will test the new control mapping later

Version 1.4.0.76
● 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
Version 1.4.0.75
● 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

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

Version 1.4.0.7
● 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 ds4winsdows.com
● 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)

DS4Updater 1.1.0.7:
● Servers moved to ds4windows.com
● Bug fix for failing to fully close when cancelling an install

Version 1.4.0.61
● Bug fix for dinput mode making multiple 360 controllers

Version 1.4.0.6
● 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)

Version 1.4.0.56
● Lightbar turns off when pressing Stop while wired

Version 1.4.0.55
● 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 pcsx2.net
● Special feature (beta) for those who have a profile for Distance and use the controller in
X360 mode.

Version 1.4.0.5
● 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

Version 1.4.0.32
● Separated Translation on Save where dialog box
● Fix updating when settings are in appdata
● shortened notification icon's popup text to avoid crashes

Version 1.4.0.3
● 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

Version 1.4.0.22
● Fix for DS4 failing to connect for some people

Version 1.4.0.2
● 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 1.1.0.2: spelling fixes
Version 1.4.0.11
● 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

Version 1.4.0.1
● 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 1.4.11.2), 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: update.zip 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 UI - Options 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

You might also like