A better solution for the ASUS ZenBook UX31’s touchpad drivers

I picked up a used ASUS Zenbook UX31A the other day. It’s a pretty sweet little machine – my model has a third-gen i5 and 16GB RAM, and it’s surprisingly speedy for its age. I did a clean Windows 10 install, and Windows Update found and installed the official ASUS Smart Gesture drivers and software.

Like way, way too many OEMs, ASUS’s software is pretty pointless. It offers little customization and provides no way to configure multi-finger clicks on the touchpad. I did some poking around and discovered that I could not only access the generic Elantech control panel, but I could edit the registry for the software to display every setting available in the software.

The downside of this solution is that the software re-disables all the additional settings every time you run it. Fortunately, this is easy to work around with some PowerShell.

As an aside, you may want to install the generic Elantech drivers. I found them on Station Drivers. This site is kind of slow on the download speed, but it seems to be legitimate and has every version of the Elantech software available. If you aren’t using the ASUS drivers, you’ll need to force Windows to use the downloaded drivers via Update Driver > Have Disk.

On to the script!

There’s probably an easier way to accomplish this, but what I came up with does work reliably. What you need to do is get the existing data in the registry for the touchpad’s software, loop through every DWORD property set to zero, change the value to one, and then launch the touchpad settings software.

First, we need to point to the right registry location and pull out the properties of the registry key using Get-ItemProperty:

Now, what this returns is not immediately useable data for our purposes. This returns a single PS object containing a NoteProperty for each property in the registry. It looks something like this:

It’s easy to dump this into thanks to Get-Member. The Definition property of each member of our object contains some super useful information – both the name and value of each property of our registry key. It looks something like int Button_Display=1. Every property of the Elan registry key we’re using is an integer, so I filtered out the result of Get-Member to use only NoteProperty members that are integers.

If you look at the results of Get-Member, the definition property of each member is formatted with the member type, name, and value:

The easiest way to get rid of the extraneous information is to just use the Replace method to strip both the int and space from the definition. This line will also replace each item in $members with just the definition of each item.

This will leave us with a format of Name=Value, which is easy to manipulate with the Split method. We need to loop through the list of members and create a new array of custom PSObjects with two properties – name and value, pulled from the definition.

Now that we have all of the registry properties we care about, we need to set every property with a zero value to one.

The registry is now set up for the Elan software to display every setting available, so we can launch the control panel.

It is interminably annoying that so many OEMs insist on using their own control panels and disabling various features of touchpads. There are only a handful of touchpad manufacturers – Elan, Alps, and Synaptics. All three have reasonably useful generic control panels, so there’s no real reason to mess with these touchpads as much as OEMs tend to do. In ASUS’s case, their “Smart Gesture” application offers no ability to change the settings of multitouch gestures and clicks, which means two-finger click doesn’t open context menus and three-finger click doesn’t emulate middle click (which is super useful for opening links in new tabs in your browser of choice).

About Claire

I've been running this site since 2008. I mostly use it to keep track of things I've learned in the IT world, like coding projects and server administration stuff.

Leave a Reply

Your email address will not be published. Required fields are marked *