The DS4, while not quite plug-and-play, is easy to setup. By default, DS4Windows will have you off and playing any controller-supported game right away, with the touchpad mouse emulation on as a bonus, but it’s capable of far more. The app is user-friendly, but the number of settings and terms might be overwhelming for first time users.
What do I need?
- DS4Windows or an older build from GitHub
- A Windows 7/8/10 PC (XP/Vista should work as well)
- Micro-B USB cable
- Sony DualShock 4
- WIRELESS ONLY – An internal or USB Bluetooth Adapter (2.1+EDR or newer) (Model recommended by DS4Windows Dev)
- Download the zip from DS4Windows.com or an older version from GitHub
- Unzip the two exes to a safe place
- Run DS4Windows.exe, and select whether you want all the settings to be stored where you placed the exes, or in a centralized appdata location. The former is better if you want to easily move/copy the whole setup to other PCs in the future. Do make sure to have the exes in their own folder, just so it’s easy to keep track of which extra folders/files were added.
- Settings Tab > “Controller/Driver Setup” Link
- Follow the 3 steps in that window. Before step 3, if you want to use wireless, jump to the pairing section below (pairing can be done at any time after if you don’t have your adapter yet)
- Click Finish
- Settings Tab > check “Hide DS4” and “Run at Startup” (assuming you want to use the controller often)
[Wireless Only] Bluetooth Pairing
- Do this when told during step 5 of the section below.
- Make sure your Bluetooth internal or external adapter is connected and installed with the included drivers (if you have a laptop, this is likely already done for you). You’ll know this is done if you can access the Bluetooth Devices screen or have the icon in your notifications bar.
- Via the Windows Bluetooth Devices screen, or the Bluetooth icon in your notifications bar (next to the windows clock, click “Add a Device”.
- Hold the PS and Share (select) buttons until the LED begins flashing.
- Select and add the controller that pops up in the box by clicking through the simple menus.
- If you get a popup saying “a device is trying to connect” right after, click through those as well.
- If the controller’s LED stays lit indefinitely, back to step 5 of basic setup (if not, look to the troubleshooting section below)
That’s it… Clicking a few buttons and one installer (or none on W8-10) that almost all other controllers also need. By default, the entire controller is mapped EXACTLY like an Xbox 360 controller, with the addition of mouse emulation on the touchpad.
From this point onward, simply plugging in (or turning on via the PS button, if you’ve paired Bluetooth), should make your controller work in any game without conflicts, even often working while games are up and running. There are some caveats and I’ll cover those below in more detail.
Windows 10 Only – Because of Microsoft’s overbearing control in Windows 10, the “hide DS4” option can’t work the same way it did previously. In Windows 10, the explorer process has priority control over connected controllers, so the dev of DS4Windows had to create a workaround. When you connect a controller, you’ll see a button at the bottom of DS4Windows to connect the controller exclusively. That button quickly restarts the windows explorer and takes control. I’ve not thoroughly tested it, but this does limit your ability to connect controllers mid-gameplay and can be a bit of an inconvenience. That said, you only need to hide the dinput signal when you’re playing games that would detect it instead of or in combination with the xinput signal, usually the work of shoddy developers… And that said, quite a few games have serious problems connecting ANY controller mid-game, so it’s not really that different, and turning your controller on before a play-session is still the best practice.
How can I be sure it works?
The foolproof way to be 100% sure the controller is working as intended at any time, is to click the blue “Control Panel” link in the settings tab. It should list only “Controller (Xbox 360 For Windows)”, once per DS4 connected. If it also lists “Wireless Controller” for each, this means either “Hide DS4” is not checked, or it’s not functioning properly and you’d need to stop and start the app using the button on the bottom right of DS4Windows. Now, right click the “Controller (Xbox 360…” listing, properties, and you should see a chart of buttons. Move the sticks and hit buttons, and if they light up and move smoothly, the controller is fully working as an xbox 360 controller would. If all is true and the game doesn’t detect it, it’s absolutely the game’s fault at that point.
If DS4Windows can’t take exclusive control over the DS4, it’s programmed to notify you at the bottom of the main window, and you’ll see the Wireless Controllers listed in the windows controller panel. In the past, Steam used to often prevent exclusive control, but these days it’s mostly limited to Uplay or having certain games running already. As I said in the section above for W10 users, the best practice with any PC controller, but especially the DS4, is to have it connected before opening your games, launchers other than Steam, or Steam Big Picture Mode.
Custom Starter Profile
I’ve been using a setup that allows me to easily control any game launcher or menu with just the DS4, as long as it doesn’t ask for outright text entry. That last bit can be solved for couch+TV player with all manner of Bluetooth keyboards and such, as well as the Windows on-screen keyboard if the games are in windowed or windowed fullscreen modes. Under a simple shift-toggle on the PS button, it gives me access to Arrow Keys, Escape, Enter, Backspace, Alt, Tab, Shift, Play/Pause, Next Track, Volume Up/Down, with more than 11 more open button/input slots for extra commands. Everything is default except for the added commands under the shift button (PS). Use as is or customize to your liking.
Advanced Configuration Options
DS4Windows is very powerful and you can get a ton out of it with little effort, but there are numerous terms and concepts to understand. Luckily, the bottom bar of the program tells you what most options do while hovering over them, and the Hotkeys/About link at the bottom right has a list of what many of the terms mean, mostly focusing on the ways you can interact with the touchpad.
“Hide DS4” was explained above and is very important to avoid conflicts in certain games. Swipe Touchpad allows you to swipe with two fingers, to change between the installed controller mappings, which can be easy to differentiate between if you set the LED color differently for each. “Show Notifications” can display basic notifications, or just warning messages as popups down near the taskbar. If running wireless, your DS4 connects to the PC separately from DS4Windows, and “Disconnect from BT when Stopping” if enabled can turn off the controller if DS4Windows exits, or the stop button is pressed on the bottom right. DS4Windows controls the PS+Start button combo that instantly shuts off the controller (faster than any controller on the market), but if the app is closed, then you’d have to hold the PS button. This option can be an issue if you wish to quickly stop/start to make the wireless controller hide properly, this could be annoying. Luckily you can leave it on by default so you’re never stuck having to force shutoff the controller, and simply toggle it if you need to reset it quickly. Quick Charge forces wired-only connection when connected via USB, which does make the battery fill faster if you wish to play at the same time. The Lightbar Flashes when Latency is high, and it’s usually an indicator of a Bluetooth driver problem, or some sort of conflict on your PC. It should always be under ~2ms both wired and wireless for most users. The setting here could be useful if maybe it reported a high latency but played fine, and setting it higher would stop the flashing. Unlikely, but it’s an option. Finally, the Xinput Ports setting lets YOU choose where the 4 connected controllers fill in. The Xinput standard can fill up to I believe 16 controllers at once, and previous drivers like this could cause conflicts by placing a virtual controller in the same slot as a real controller. If you want to pair the DS4 with other controllers, I’d recommend setting the number between 5 and 11. If you had 8 360 controllers, and wanted to connect 4 more DS4s, any number above 9 would work fine with no overlap/conflicts. And believe it or not, there are actually games out there that accept 8+ player splitscreen. ClusterPuck 99 for example.
You can add or copy to backup/share profiles by using the import/export buttons on the Profiles Tab. You can manually assign profiles to controllers by using the dropdowns on the Controller Tabs. The Auto-Profiles Tab allows you to add applications that trigger a set profile for each of the 4 controllers while running. Once added, the listed exe must be checked to be able to detect the program. On the right, you use the dropdowns to select the profiles, and use save to lock them in. “Hide unchecked” at the top outright removes everything that’s not active from the list, so be careful with that, and do note that items that are not checked will not store the selected profiles. Profiles are not slot specific, so the same default xinput profile can be used for all controllers at once with no conflicts. Mouse and keyboard inputs however, are singular. All 4 controllers can input keyboard inputs, though you may have issues with more than one pressing the same key, and you’ll absolutely get conflicts with two or more players trying to move the mouse around simultaneously. For this I recommend that you have one master profile like the one I linked above, with mouse touchpad support and all your shortcuts, and another more default profile for the other 3 controllers. It’s actually possible to disable everything on a profile but say, media controls and volume, so your friend can control the music from across the room while you’re playing a game.
You edit profiles via the buttons on the far right of the Controllers Tab, or by right or double clicking the profile on the Profiles tab. No changes are saved while editing a profile until the “Save Profile” button is pressed, though you can swap to other tabs and back without resetting your unsaved changes. The 4 small tabs on the top left are:
- Controls – The main mapping for all of the buttons. Double click the item in the list, click the button on the picture, or push the button on the controller itself to open a panel to assign commands. Right clicking on the sticks or face buttons of the controller also lets you assign pre-made sets of commands to each group. Hovering over any buttons on the image, makes the list on the right jump to the command so you can see what’s mapped without scrolling. At the bottom, the 4 tilt directions can be mapped, and they are full analog inputs, so they can be used like a steering wheel or an analog stick. The deadzone control for Sixaxis is best used if you want to use tilt for digital inputs, so that you have to tilt it more than just a small amount to get it to trigger. While editing a button, you can set rumble and LED triggers on the right side, as well as while creating macros using the button above the image of the mouse. Macros can be saved and recalled across profiles via the load/save buttons. You can record keyboard/mouse/controller inputs, choose if delays are counted, and whether the macro loops while held. All inputs when can be set to toggle on/off with each press, and “Scan Code” changes how keyboard inputs are created, which is usually necessary for games to detect them properly.
- Shift Modifier – You can select a button or input that is capable of being held, to trigger an entire separate mapping set to the whole controller. By default, all buttons fallback to the base mapping. I’d usually recommend PS as your shift key, but it can be anything you like, even tilting the controller.
- Special Actions – Here you can program up to 50 special actions. Once made, they can be activated via the check mark on any profile, and they can be edited at any time. You can choose anywhere from one to ALL of the buttons, that once pressed activate the specified special command such as checking battery life via the light bar or a notification, launching a program, pressing or toggling any keyboard key, switching to a specified profile, etc. Very powerful, and the structure makes it very quick and easy to apply these commands to any of your profiles individually.
- Controller Readings – This tab shows the signal DS4Windows is getting directly from the controller. It displays connection latency, and all of the analog inputs with visual representations of the deadzones if any have been set. This looks similar to the windows controller properties menu, but this is showing the raw output of the controller, while windows is showing what the OS and games would see, the end of the line essentially after DS4Windows has done all it’s magic.
Most of the other settings in the Rumble, Touchpad, Deadzone, Lightbar, and Other sections are relatively self-explanatory, and provide tooltips on hover at the bottom, but to explain in more depth… Jitter compensation smooths erratic movements, while Mouse Acceleration moves more or less based on how fast you move rather than just the raw distance. Idle Disconnect waits the set period of time after the last input before turning off the controller automatically. Use Touchpad Swipes for controls adds 4 extra buttons for mapping, and will still work when mouse on the touchpad is enabled (“slide”), and even while 2 finger swipes swap profiles (if enabled in the main settings tab). It rarely restricts what you can and cannot have enabled at the same time, but just know if you enabled absolutely everything and map tons of random things, you are bound to get some conflicts with so many things overlapping. But done with consideration, you can achieve an incredible amount with so much to play with.
The Use Dinput Only option has only one real use, allowing games to see the DS4 as a DS4 for special features, while keeping all of the benefits of the application, like remapping. Having not tested that too much, I’m unsure of how games that use the touchpad and lightbar might act when DS4Windows is also using/controlling them at the same time. Additionally, it only works in wired mode, and with “Hide DS4” disabled in the settings. For 99% of games, xinput is superior and you shouldn’t use this setting, but if you have a specific intent, it’s there for you.
Usage Examples and Ideas
Someone discovered that signs in The Witcher 3 could be cast instantly by altering the input settings file. You could code it for controller inputs, but you’d need 5 extra buttons that don’t even exist in the xinput API, as every other input was already being used. With DS4 Windows, you can setup a button like the left bumper to act as the shift toggle (mapping the actual L1/LB to PS), and under that, have the face buttons and right bumper mapped to keyboard numbers 3-7, where the signs were mapped). And while you were at it, you could add in F5 for quick saving, and anything you wanted to any of the more than a dozen other inputs, all without losing any of the xinput functionality the game needs. With a more basic approach, many users mapped basic functions like quicksave and the various menu/map screens to swipes of the touchpad. Witcher 3 actually supports the DS4 without drivers, and has similar shortcuts mapped to the swipes/clicks, so you could go that route as well.
If you play fighting games, or really anything that would have you utilizing all 4 of the face buttons often, it looks really awesome if you enable LED color changes on the face buttons. They can match the standard xbox colors, or be anything you want, at any brightness. You can also trigger rumble at any varying strength/weight for added punch or for say a little indie game that doesn’t have rumble programmed. I’ve found games that utilize the button colors for gameplay like Spy Chameleon – RGB Agent work really well, especially for spectators.
Using the “other” options within a profile, you can specify a program to launch when you switch to that profile. If it’s the default profile of the controller, it can launch the program right when you turn on or plug in the controller. If it’s a side profile, you can swipe to it, or use a programmed button combination (Special Actions Tab) to launch an app on command. That can be used for all sorts of things, whether it be a commonly played game, a media app that supports the controller like Kodi, or even Steam directly into big picture mode. In reverse, you can set profiles to automatically activate when specified programs are run, via the Auto Profiles Tab.
Using macros programmed to buttons under a shift toggle, you can play multiplayer games with a controller, Rocket League for example, while having set text-responses. You could record “t GG Enter”, and place it on Triangle/Y, so that you hold PS and hit that button, and it opens the chat box, types, and sends the message for you. If the game is known to react slowly to such inputs, you can use the “record delays” option, and execute it at a speed the game is likely to recognize.
If you’re into 3D modeling or rendering, you could map various camera commands/controls, along with all sorts of hotkeys, so that you could rotate around and view your model like a game, even if the app doesn’t have the editor controller support like say Unreal Engine 4.