DS4Windows is a portable program that allows you to get the best experience while using a DualShock 4, DualShock 3, or DualSense controllers on your PC. By emulating a Xbox 360 controller, many more games are accessible and you can play PC games using the PlayStation controller.
Which controllers are supported by DS4Windows?
DS4Windows can help you use most modern PlayStation controllers on Windows PCs: the DualShock 3, DS4, and PS5 DualSense. It also supports the Nintendo Switch Pro controller and Joy Cons. You can map controllers to any game, including those with keyboard + mouse support, use macros and more.
Is the PS5 controller fully supported on PC?
The PS5 controller, also known as the DualSense, can be used on PC through Bluetooth or USB connection, but it's mostly only supported on Steam games. With DS4Windows you can make it work 100% and depending on the game even use haptic feedback and the adaptive triggers.
Features
- Use X360-like input to use the DS4 in more games and have rumble
- Use the same app for mapping a DS4, DualSense, Switch Pro, and JoyCon
- Use the touchpad as a mouse or for more actions
- Use sixaxis movement for just as many actions
- Control the Lightbar: turn it off, dynamically change by battery level, and more
- Map the buttons and sticks to other 360 controls or keyboard actions or macros
- Use profiles to quickly switch between configurations for your controllers
- Automatically switch profiles by when a certain program(s) is launched
- Hold an action to access a new whole set of controls
- Get a reading of how the sticks and sixaxis is working
- Assign a deadzone to both analog sticks, the triggers, and the sixaxis
- Automatically get new updates
Requirements:
- Windows 10 or newer (Thanks Microsoft)
- Microsoft .NET 4.8 or higher (needed to unzip the driver and for macros to work properly)
- Visual C++ 2015-2019 Redistributable. x64 or x86
- ViGEmBus driver (DS4Windows will install it for you)
- Microsoft 360 Driver (link inside DS4Windows, already installed by Windows if you've used a 360 controller before)
- Sony DualShock 4 or other supported controller
Instructions:
- Extract the 2 programs from zip file (DS4Windows and DS4Updater)
- Launch DS4Windows and choose where you want to save profiles
- A windows will pop up showing how to install the driver, if not, go to settings and click "Controller/Driver Setup"
- If you have used SCP's tool in the past, you may need to uninstall the drivers to use the DS4 with Bluetooth
- Connect the DS4 via a micro usb or through bluetooth (DS4 Device name: "Wireless Controller") may need to enter pair code: 0000)
- All should be good to go once you connect the controller, if not restart DS4Windows, or even your computer.
Note: Some games work with the DS4 without DS4Windows. Games like these can cause double input in menus (ie pressing down on the dpad moves 2 spaces) or the wrong button to do incorrect functions. To solve this, check Hide DS4 in the settings, if you see a warning in the log/text on the bottom, that means you must close said game or client that causes the conflict and reconnect the controller.
Connection method:
- Micro USB cable
- Sony Wireless Adapter
- Bluetooth 4.0 (via an adapter or built in PC). Only use of Microsoft BT stack is supported. CSR BT stack is confirmed to not work with the DS4 even though some CSR adapters work fine using Microsoft BT stack. Toshiba's adapters currently do not work. Disabling 'Enable output data' in the controller profile settings might help with latency issues, but will disable light bar and rumble support.
- Disable PlayStation Configuration Support and Xbox Configuration Support options in Steam
What's New
- Fixed auto profile routine when a device does not exist for an input slot
- Update Portuguese translation. Contribution by Denellyne
- Close ProfileMigration instances in unit tests when finished
- Removed unused Net8NoticeWindow class
- Fixed Jays2Kings stick dead zone migration check. Carry over non-zero dead zone choice
Previous release notes
- 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
- 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
Previous change log
- 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
DS4Windows 3.2.20 Changelog:
- Bump DotNetProjects.Extended.Wpf.Toolkit from 5.0.103 to 5.0.106
- Fixed some Gyro trigger indexes. Make sure Touchpad relate triggers work again
- Added DSE buttons for use as shift trigger. Actually allow JoyCon side buttons to work for shift triggers
- Abstract resource paths more. Allows easier renaming of assembly. Minor consequnces in the VS XAML editor though
- Consolidate gyro trigger context menu lists in Profile Editor
- Added Malay translation. Contribution by shoen1x
- Use FileVersion prop for grabbing assembly version instead. More helpful for .NET 8 usage than right now
- Updated FakerInputDLL files
- Hide some ViGEmBus messages in Profile Editor regarding passthru when using supported versions. Small tweak
- Use ViGEmBus version check for lightbar passthru message as well
- add Resources.zh-hans.resx for Chinese simplified translation. Contribution by CrazyHPi
- update Strings.zh-Hans.resx for Chinese simplified translation. Contribution by CrazyHPi
- Marked more strings in GUI for translation. It will not affect this version obviously
- Removed use of deprecated LocText extension. Now use BLoc extension instead. Only used to render one string in Profile Editor previously
- Skip trying to reset UDP server connection if requested the server to stop
- Fixed Load a Profile Special Action unload trigger list header in Dark theme
- Changed display text for Side L and Side R buttons in unload trigger list
DS4Windows 3.2.19 Changelog:
- 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
DS4Windows 3.2.18 Changelog:
- 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
DS4Windows 3.2.17 Changelog
- 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
- Changed SetupAPI calls used to grab device information. Needed for fake USB DS4 device in some cases
- 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
DS4Windows 3.2.14 changelog
- 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
DS4Windows 3.2.13 Release Notes
- 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
DS4Windows 3.2.12 Release Notes
- 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
DS4Windows 3.2.11 Changelog:
- 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
DS4Windows 3.2.10 Changelog:
- Added jitter compensation routine for Gyro Mouse
- Move output handler init and disconnect calls to ControlService Start and Stop routines
- Changed suspend and resume routines
- Added extra exception handling for tray notification failure
- Use DetermineConnectionType in PostInit of DS3Device. Contribution by SunnyQeen
- Fixed a crash when open device options with null option. Contribution by SunnyQeen
- Add InterpretingOscMonitoring Option. Contribution by xAdler
- Added some OSC translation strings. Contribution by xAdler
- Added OSC monitoring message interpreting. Contribution by xAdler
- Added OSC trigger control. Contribution by xAdler
- Added additional mapping checks in ProfileDTO MapFrom routine
- Changed how macros are saved from binding window. Do not reset shift trigger
- Support Horipad 4 FPS. Contribution by markguleno
- Fixed custom led mode. Contribution by MatrixDJ96
DS4Windows 3.2.9 Changelog:
- 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
DS4Windows 3.2.8 Changelog:
- Corrected list display of Press Key special action regarding Toggle status
- No longer enforce en-US values for Custom Bezier curve string. Might be a mistake
- Fixed saving of options for Macro special action. Model problem
- Check tray icon has been created before trying to show notification
- Fixed DS4KeyType check for shift modifier when multiple flags are used
- Ignore None KeyType flag for shift modifier
- Simplify shift modifier key type saving
- Fixed loading of Gyro Mouse Joystick trigger eval condition
- Added extra precautions when disconnecting from FakerInput
- Adding initial DualSense Edge support. Contribution by dezerving
- Updated zh-cn translatation. Contribution by jyc001
- Grab firmware info for DualSense controller
DS4Windows 3.2.7
- Fixed loading of Unload Trigger for Load Profile special action
- Fixed model for Press Key special action regarding Toggle status
- Changed Press Key special action keyType to reflect Toggle status. Was broken before version 3.2
- Fixed key type and trigger assignments for shift actions
- Fixed bindings for shift button and macro actions
- Fixed some default values for app settings
- Extra app settings checks. Re-establish some app settings defaults
- Set AbsRegionDisplay to empty string by default
- Fixed loading of Launch Program Special Actions arguments
- Fixed saving and loading of Shift Modifier trigger
- Fixed saving of Launch Program special action
- Fixed Macro and Press Key Special Actions
- Fixed wait period offset for automatic added wait times in macro editor
- Fixed serializing of Special Actions
- Fixed saving of Special Actions to Actions.xml
- Fixed delay time usage for some Special Action types
3.2.0
- Migrate app settings and profile readers to use XmlSerializer DTO classes
- Small tweaks for JoyCon base init
- Tweaked Switch Pro init
- Fixed Gyro Mouse toggle profile setting
- Experimental support for JoyCon Charging Grip support
- Force cancel stalled IO operations when stopping input thread loop
- Reset DS4State while removing JoyCon device
- Added simple haptic dirty flag
- Tweaked hue changing for lightbar Rainbow mode
- Made SideL and SideR available as Gyro triggers
- Changed rainbow label. Value actually affects lightness level, not saturation
- Updated note regarding stick rotation setting
- Add extra macro wait periods if delays are not already in use. Tried to keep the old Jay2Kings behavior but it is time to change things
- Fixed device type set for JoyConControllerOptions instance
- Bump NLog from 5.1.0 to 5.1.1
- Updated references to Swedish locale assembly
- Bundle custom Nefarius.Utilities.DeviceManagement. Minimal build changes
- Fixed crash on updating tooltip if Windows Explorer is not running for some reason. Contribution by V-Olk
- Updated Russian translation. Contribution by V-Olk
- Fixed default value of UseLang in AppSettingsDTO
3.12
- Updated NuGet packages. H.NotifyIcon.Wpf, MdXaml, NLog, System.Management
- Moved some DualSense rumble settings into Profiles. Contribution by Kanuan
- Ignore invalid OscPacket that might come through
- Changed counter use for Hotplug routine
- Removed old DS4 BT output counter workaround. Was only needed when using the Control endpoint
- Fixed RS outer binding
- Fixed bad copy pasta for SideR control value in special actions
3.1.11
- Fixed loading of language assemblies from Lang folder
- Update Traditional Chinese assembly. Contribution by syaoran
- Fixed snap to center Y axis coordinate for control abs mouse
- Tweaks to DS4 BT output support. Revert back to using output report 0x11
- Take payload length into account besides just array length. Strip 0xA0 data magic byte from output packet
- Added workflows for issue moderation automation. Contribution by nefarius
- Check current virtual desktop display bounds when restoring window position on startup
- Added Poast social link in About window
- Tweaked Switch Pro init routine. Increased initial USB delay, tweaked modeswitch command
- Removed use of old ControlService busThread. Utilize Dispatcher
- Fixed rsync ignore rules for default translation assemblies
Previous release notes
- 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
Previous release notes
- Implemented Touchpad Mouse Joystick output support. Virtual DS4 feedback fixes contributed by Nefarius
- Added working directory info for startup lnk file
- Display input slot number in Output Slots tab
- Force update TooltipText in GUI thread
- Implementation of Touch Mouse Joystick
- Fixed log message generation when virtual pad plugin fails
- Abstract post action stick axis state changing for use with Mouse Joystick routines
- Display some input device information in Output Slots section
- Added some device number checks in ProfileSettingsVM. Avoids test index
- Fixed Keypad Decimal mapping for FakerInput
- Fixes for virtual DS4 output feedback support from ViGEm project. Contribution by Nefarius
- Updated ViGEmClient and ViGEm.NET libraries. Contribution by Nefarius
- Virtual DS4 output feedback support re-enabled. Contribution by Nefarius
Previous release notes
This build targets .NET 6 so you might need to install a new .NET Runtime package before the updated DS4Windows build will run.
.NET Runtime x64 .NET Runtime x86
- Changed startup device init and hotplug to unify code routines
- Changed minimum sensitivity for LS and RS
- Updated H.NotifyIcon package to version 2.0.60
- Implemented workaround for H.NotifyIcon disposing TaskbarIcon instance after display scaling changes and RDP sessions
- Updated NLog package to version 5.0.2
- Small change to display of Binding window panels when bringing up macro recorder
- Added credit notes for vJoyInterfaceCS
- Changed ViGEmPluginFailure string text. Removed reference to old PurgeOldXInput project
Previous release notes
- Changed startup device init and hotplug to unify code routines
- Changed minimum sensitivity for LS and RS
- Updated H.NotifyIcon package to version 2.0.60
- Implemented workaround for H.NotifyIcon disposing TaskbarIcon instance after display scaling changes and RDP sessions
- Updated NLog package to version 5.0.2
- Small change to display of Binding window panels when bringing up macro recorder
- Added credit notes for vJoyInterfaceCS
- Changed ViGEmPluginFailure string text. Removed reference to old PurgeOldXInput project
- 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
Previous release notes:
- Changed gyro output mode output behavior for joined JoyCon controllers. Run output early for Gyro Mouse and Gyro Mouse-like Joystick
- Updated many project dependency NuGet packages and DLL files
- Migrated project to use H.NotifyIcon.Wpf package
- Added extra CONNRESET IOControl call for ReceiveCallback method in UDP server. Avoids potential memory leak within UDP server in .NET 6. The call should have probably existed beforehand
- Switched main UDP message rsp to convert payload from a struct. Faster and simpler
- Added dependabot to GitHub actions. Contribution by sitiom
- Slightly tweaked Suspend and Resume power routines
- Fixed DS4Updater download URL redirect when automatic download fails
- Fixed initial data bindings for Auto Profile section
- Have Full Pull Dual Stage triggers use raw input range rather than interpreted. Might have to change how Full Pull is handled later
- Changed WelcomeDialog to use Windows temp folder while downloading rather than program folder. Would mainly affect when DS4Windows is run from a read-only folder (shouldn't be the case on a proper setup)
- Removed Mastodon and Minds social media links from About window. No longer support Mastodon as a whole. DS4Windows actually got banned from Minds
- Added extra project links and notes to About window
- Allow joined JoyCons to transmit unique Gyro data to UDP server. Mimics behavior of BetterJoy for two JoyCon controllers linked together
- Changed HidHide download link to point to version 1.1.50.0. Approved release
- Enforce 6 normal key maximum for fake virtual keyboard in FakerInput handler. Pretty sure some reports were from people abusing said limit
- Removed old .NET 5 workaround for single process instance checking. Use EventWaitHandleAcl.OpenExisting included with .NET 6. Contribution by sitiom
- Fixed touchpad counter reading with DualSense. Needed for Touchpad passthru for virtual DS4 Extended output to work. Contribution by Kanuan
3.1.0
- 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
Previous release notes
- Added output Stick and Axis options for Gyro Mouse Joystick
- Use TabControl to contain gyro output panels. Simplifies XAML
- Re-enabled DS4 emulation support
- 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
- Changed mapper to copy timestamp data from original input state object. Used for DS4 Gyro Passthru
- 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
- 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
- Another fix for EnhancedKey usage for FakerInput mapping
- Bundled PurgeOldXInput 0.1.2
3.0.12
- Removed old Input Curve options
- Corrected coordinate system for Stick to Mouse Wheel
- Fixed saving of Max Output Force options
- Expand output for Gyro Mouse Joystick Max Output routine. Make sure maximum output can be achieved. Likely would not achieve a completely straight line when using Gyro.
- Expanded macrodone array. Fixes some macro bindings for later virtual buttons
- Added 'Hide DS4 Controller' option back in again
- Increased button mouse wheel delta. Decreases wheel sensitivity
- Unified late profile options checks
- Increased resistance range for DualSense trigger Full Click
3.0.11
- Group and move Virtual Controller options in Other tab. Contribution by Kanuan
- Fixed MODIFIER_ENHANCED value for FakerInput mapping
- Fixed Alt, Windows, and other modifier keys mapping for FakerInput
- Fixed Stick to Mouse Wheel routine for SendInput output
- Fixed tray menu profile selection for names with underscores
- Added many tooltip strings in Profile Editor
- Fixed RenameProfileWindow closing early due to early DialogResult assignment. Property calls Close on the Window
- Removed BitChute social link
- Fixed display of CheckEveryUnit combobox in Settings tab. Not sure when VS changed that portion of the XAML
- Removed obsolete 'Hide DS4 Controller' option again. Can't have options
- Added ScrollViewer to Other tab in Profile Editor. Enough controls in tab to justify it
- Added force option for LS and RS MaxOutput. Allow 100% forced circular max output for sticks
- Made Capture, SL, and SR buttons mappable
- Created Outer Button bindings for LS and RS. Allows extra distance action for the sticks like Walk or Sprint
- Display Touchpad X and Y in Controller Readings tab
- Increased HID report input buffer to 3 rather than 2. Not sure it will really matter
- Disabled broken DS4 feedback support again. Can't have semi-nice things. Don't bring it up again until at least the next ViGEmBus driver update
- Added change to not send Profile loaded message for secondary JoyCon in Joined mode
3.0.9
- Fixed obtaining source index item for Special Action list
- Allow Touchpad Click as an output for Macros
- Delay log message for virtual device association
- Updated ViGEmPluginFailure message to make reference to PurgeOldXInput utility
- Added PurgeOldXInput utility to Tools folder. Might be useful for deleting invalid virtual Xbox 360 controllers
- Updated Japanese translation. Contribution by toshixm
- Updated Czech translation. Contribution by MikeCZ23
- Bundled DS4Updater 1.5.5
3.0.8
- Added slot# log messages to a gamepad connect/disconnect handler and 'permanent' slot debug msg. Contribution by mika-n
- Small special action fix when action trigger is somehow flagged as None
- Added support for virtual KB+M driver FakerInput v. 0.1. Needed to play Valorant and other apps that block SendInput events.
- Sort Special Action list by action name
- Fixed event order issue that caused output slots to not get disconnected
- Reduced mouse remainder cutoff to the hundredths place
- Fixed OutSlotDevice check to make sure Permanent slots are detached on service stop
3.0.6:
- Support for DS3 gamepad as vendor defined device over DsHidMini driver. Contribution by mika-n
- Now issue immediate virtual device unplug upon Windows suspend
- Changed ViGEmBus lookup routine to perform a list based lookup for potential drivers. Attempt to discover newest version from version info
- Changed ViGEmClient library to attempt to connect to newest available version of ViGEmBus on a system rather than the first version found
- Set all controller slots to use the Default profile initially when making a new config
- Immediately issue unplug of all virtual controllers when pressing main Stop button
- Initial implementation of HidHide integration. Display key icon for HidHide hidden device. Insert DS4Windows.exe into whitelist at startup if necessary
- Changed method of obtaining current executable file location. Needed due to assembly changes in .NET 5 breaking support for custom exe filenames
- Added HidHide installer link to Welcome dialog window
- Added HidHide Configuration Client app link in Settings tab
- Hide HidNinja link in Settings tab if HidGuardian is not installed
- Show the text value of 'Max Saturation' lightbar setting. Contribution by sabihoshi
- Changed Launch Program special action to use UseShellExecute
3.0.4:
- 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
- DS4Windows now targets .NET 5
- Changed ViGEm libraries to target .NET Core 3.1
- Now use MdXaml rather than Markdown.Xaml for Changelog text rendering
- Removed Newtonsoft.Json library dependency
- Removed use of .NET 5 Runtime check nag window
- Fixed UDP Server locking device input in .NET 5. Caused by API change for SocketAsyncEventArgs
- Moved app config loading to occur after logger is created
- Change extras flag to take current DS4Control into account
- Added additionalProbingPaths to runtimeconfig.json
- Use UseShellExecute for ProcessStartInfo. Due to Process.Start change in .NET 5
- Added newer bat self deletion routine. Make sure to return 0 status code in process when performing bat self-delete
2.2.15
- Ignore duplicate device when in Shared mode
- Added extra processing to Version string for .NET 5 and later. Expecting Microsoft to use their own standard was a mistake
- Changed URL used for .NET 5 Runtime download
2.2.11
- Implemented newer feedback handler routine for virtual DS4 devices. Added virtual DS4 rumble back in
- Now sure to use continuous calibration routine for non-DS4 devices
- Changed severity of ViGEmPluginFailure message. Now indicates that a user should probably reboot Windows if it happens
- Fixed JoyCon R Gyro Roll. Old value was inverted
- Copy modified JoyCon current state for use in UDP server
- Only display device in UDP server if it is a primary device. Mainly needed due to JoyCon R in Joined JoyCon mode
- Added exception catching when saving Actions xml file. File corruption will now cause the file to be written from scratch
- Use Task error log helper for some background service tasks. Allows some extra possible error messages to show up in the Log
- Simplify UDP motion event creation. Allow motion event to be created when enabling UDP server
- Make Flash at High Latency default to 50 ms
- Dark Theme color changes. Color contrast has been reduced. Contribution by AnessZurba
- Skip writing device wheel calibraton nodes if empty
- Now use estimated wheel center values if controller config has an empty entry. Problem caused some app instability and memory bloating due to excessive log messages in Log tab (over 1GB RAM usage)
- Implemented axial dead zone and related settings
- Fixed ColorByBattery panel visibility for first open. Contribution by MakiseKurisu
- Changes for continuous calibration routine for Sony Wireless Adapter connections. Contribution by MakiseKurisu
- Tweaked profile loading for some older fallback options
2.2.8
- Fixed resetting of trigger values for Two Stage modes
- Removed references to old Discord server
- Pull gyro calibration sampling routine out to its own method
- Fixed normal button binding to Touchpad Click output
- Attempt to go to DS4Updater Release page if automatic download of updater failed
- Added GitHub link to Social row in About window
- Fixed x86 ViGEm installer URL
2.2.7
- Added 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