Tag Archives: Cursor Lock

Using Cursor Lock with Steam Games in 2021

The instructions given for using Cursor Lock in games launched through Steam in a previous post were rather out of date. But I’ve become aware of a new and perhaps better method for using the two together. I say better because it doesn’t require creating shortcuts; however, there is still some command line tomfoolery to mess with.

Here’s what to do:

  1. Open the Cursor Lock Setup.
  2. Setup the options for Cursor Lock how you would normally, except put %command% in the Open Program field.  The field will turn red, but that’s okay, we’re not actually going to create a shortcut. (See the first image below.)
  3. Go to your Steam library and right-click on the game in question and select Properties.  Your should see a “Launch Options” field.
  4. Find the path to Cursor Lock.  The quickest way is probably to go to your Start Menu (or whatever Microsoft is passing off as a start menu these days) and find the Start User Mode shortcut. Right-click this shortcut and go to Properties.  You’ll find the path to Cursor Lock in the Target field under the Shortcut tab. Copy the part in quotes, including the quotes.
  5. Paste the path to Cursor Lock into the Launch Options field in Steam.  Then go back to Cursor Lock Setup and copy the command line options at the bottom.  Paste what you’ve copied at the end of that same Launch Options field.  (See the second image below.)
  6. You’re done. Just X out of the dialog and play your game.  Cursor Lock will open and close in tandem with your game. You’ll need to do this for every Steam game you wish to use with Cursor Lock, though.

As you may have guessed, the %command% pattern is replaced by Steam automatically with the path to the game. This useful feature allows us to wrap any commands we would want around our game command.  If you’re already making use of the Launch Options field for other commands, you can put those into the Open Program Args field (/P) for Cursor Lock to pass them along to your game—see the screenshots above for an example.

Posted in Gaming, Software | Tagged , | 4 Comments

Cursor Lock FAQ and Future

Q. Cursor Lock doesn’t work for X program.

I understand that the underlying concepts involved in getting Cursor Lock to function correctly in Program Mode possibly exceed the capabilities of some users, e.g. casual teenage gamer.  So, if your eyes are glazing over at the prospect of having to figure out what is meant by a “Lock Program” and an “Open Program”, just skip Program Mode altogether and bask in the simplicity of User Mode.  In User Mode, Cursor Lock runs in the background and you control it with hotkeys.  There’s even a handy shortcut to User Mode in your Start Menu. Just don’t forget your hotkeys. 😉

However, if you’re more of the advanced sort, you’ll appreciate that Program Mode only runs when you need it and thus doesn’t waste resources.  Most people get hung up on the difference between the “Open Program” and the “Lock Program”, thus it is useful (and perhaps necessary) to understand the general execution flow, which is as follows.

Cursor Lock FlowchartBy separating the program that is executed from the one that is “cursor-locked”, it allows for launcher programs to be supported. Many programs (games) use launchers, which are executables that are separate from but required to execute before the main program executable.  Steam can be considered a launcher.

Now if you’re grasping the operation of Program Mode but are still having problems, here’s what to do.

  1. You’ve got to select the appropriate executables for the Open/Lock Program fields, which can be tricky to figure out. Use Task Manager to help you see what processes go to what windows.
  2. If you’re having trouble finding the right launcher executable, you might try the forever-useful Procmon and setting it to monitor “Process and Thread Activity” before running the program in question.
  3. Next, try enabling the log file from Cursor Lock’s options.  Run a Cursor Lock shortcut or a “Test” and then read the log to help determine what happened.  You might find that Cursor Lock either closed before your desired program was locked or never locked at all, both of which suggest that the wrong executables were selected.
  4. Still not achieving a satisfactory cursor lock? Or something else weird happening?  At this point, I’d be glad to try to help you.  Leave a comment or send an email.

Q. The hotkeys won’t work.

This issue seems to be cropping up more and more, and I don’t really have a satisfactory answer as for why yet.  It also seems as though some programs will override all system hotkeys altogether, annoyingly enough.  The best advice I can give is as follows.

  1. Make sure Cursor Lock is actually running.  You should see cursorlock.exe in Task Manager.
  2. Try changing your hotkey combination to something else.  There may be conflicts with the current combination or perhaps it didn’t save correctly.
  3. If you’ve modified the hotkey combination used to toggle locking, make sure that change was saved to the configuration file, cursorlock.ini. If not, you may need to run Cursor Lock Setup with elevated permissions, i.e. Admin Mode, or try using the default hotkey combination of Ctrl-Alt-L instead.

Q. I can’t uninstall it.

That’s quite true.  There is no uninstall feature at present.  Although, there really isn’t much installed to be begin with, so I hope you’ll forgive my omission.  I do see the error in not including an uninstaller and will rectify this in future versions.  In the meantime, here’s how to uninstall Cursor Lock.

  1. Delete the directory that you installed Cursor Lock to.
  2. Delete the Start Menu folder for Cursor Lock (if enabled on installation).

Cursor Lock 3.0?

I’m frequently amazed that Cursor Lock is still relevant more than ten years after I first wrote it.  Although its focus was originally on correcting a multi-monitor support oversight, many users are now employing Cursor Lock for their windowed gaming needs instead.  This shift in audience from enthusiast gamers to gamers in general has had me thinking about how to further simplify Cursor Lock.

As mentioned in the FAQ above, Program Mode is great for efficiency but a pain for anyone but advanced users to figure out.  Personally, I loathe having yet another program running in the background on the off-chance that I might run a program that needed it.  But memory is cheap these days, so I must reluctantly deprecate Program Mode in favor of User Mode.  But, I’d like to make User Mode even better, so that all the user would need to do is select the window to lock from a list of all open windows using a systray icon, and that window will always be locked whenever you use it.  I might even add support for the often-requested but niche use case of restricting the cursor to a user-defined area.

However, I would have done this already a year ago if it weren’t for my health being in such a dubious state the last several years.  But, if good health ever returns, believe me that an update to Cursor Lock will be the first thing I do.  In the meantime, I hope the FAQ helps.  Also, I’m sorry if I don’t answer your messages and comments promptly; there are a lot of days where I can’t even put together a cogent and well-thought-out response.  So again: FAQ.  And I’ll help when I can.

Posted in Programming, Software, Troubleshooting | Tagged | 17 Comments

Diablo II Mods and Code Stuff

Hello all. My apologies for not updating this website more.  My life has become complicated lately, and in these uncertain times I find it difficult to want to write about it.  A shame really, as the site has never been more popular.  Seems like every time a new game comes out lacking multi-monitor support, I get hundreds of new visitors and users for Cursor Lock; a few weeks ago, it was Cites: Skylines.  And today with the announcement of another new Deus Ex game, my version of the soundtrack is hotter than ever.  It does make me feel good to know that I can produce things that people need, even if it’s only for video games.

Speaking of video game content, I spent a lot of time a few months ago working on a new class for Diablo II.  Well, it’s not really a completely new class, more like a subclass since I only changed one skill tree for the Amazon.  It just really bugged me how the Amazon felt so lame compared to the Diablo 3 Demon Hunter.  It’s really difficult to keep the monsters from swarming the Amazon, so I designed some Demon Hunter-inspired skills to help remedy the problem, such as caltrops, turrets, and smokescreens.  You can see these skills in action in the video below.

I also just wanted to fulfill my desire to do some really hardcore modding for Diablo II.  The game has a rather awkward system for making modifications.  If it were made today, we’d probably have XML files and LUA scripts to work with.  But since it was made 15 years ago, we instead have to settle for massive CSV files.  You can find the Demon Hunter mod on my Diablo II mod page.  And massive props to the Phrozen Keep for continuing to support D2’s modders.

Another thing that bothered me about Diablo II for so long is that when you die your corpse keeps all your equipment on it, and you respawn basically naked and unarmed.  Your only options are to run in, snatch everything off your corpse, and teleport back to town, or rage quit and hope that your corpse returns to town like it’s supposed to.  Obviously, this is almost always zero fun and is why no games handle death like this anymore.

Unfortunately, there’s no way to change this in the game’s CSV tables.  But I didn’t let that stop me.  Every now and then, a problem comes along which must be solved through assembler hacking, and this was one of those times.  But I didn’t really have a clue which function was involved in character death.  So, I just put breakpoints on every function in IDA and attached to the running process.  It took a while of breaking, disabling breakpoints, and resuming, but I eventually narrowed it down to several dozen functions involved in death.  Some functions did death animations, some saved character data, but then I found a suspicious bit of code that would loop 14 times—the number of equipment slots.  This was the code where the game looped through each equipment slot and moved the item from the player to the player’s dead body.  And then there was nothing left to do but some trial and error to figure out where I could safely jump over the offending code and re-enter.  Now the only problem is that this mod will have to be updated every time there’s a Diablo II patch. 😥

Here we see the fateful jump operation to bypass the character equipment being removed.

Here we see the fateful jump operation to bypass the character equipment being removed.

Since then, I’ve been turning back to more PHP/HTML/CSS/JS coding.  I’m working on a project that I can’t disclose at this time but which quite possibly could be my most epic work yet.  Wish me luck in completing it.

Recently, I’ve also been using PHP as my go to scripting language for everyday projects.  A couple days ago, I wanted to be able to pull all GPS image data from a directory and display it in Google Earth.  PHP has file IO, EXIF, and XML libraries, so it was real convenient to bash out a script using that.  Then I realized I had created an account on Github recently to comment on some projects and thought why not just put this code on there.  So I did.  Maybe I’ll add more small projects like this in the future.

Posted in Modding, Programming, Website | Tagged , , , , , | 2 Comments

New Cursor Lock Live

Cursor Lock 2.6 went live yesterday.  Funny enough, I didn’t actually need to change anything but the version number in the lock program itself; that code is proving to be very solid.  But the setup program seems to need constant fiddling since it actually has a GUI.  I’m always trying to make it easier to understand and use.

The biggest change in this version is native support for Windows 7.  I achieved this mostly just by switching to Visual Studio 2008 and compiling for .Net 3.5, but it also needed a small amount of UAC tweaks.  Another major change is to the context-based help system, which used to be in a big, ugly textbox on the side of the window.  Not only was it ugly, but it gave me a limited amount of characters to work with.  In the new version, I’ve switched to a tooltip system that is activated by right-clicking on the feature in question.

And the last big change is something I’ve never done in a program before but became increasingly aware of its need after seeing all the hits and comments on Cursor Lock I get from around the world.  That’s right, it’s localization, or in layman’s terms translations.  I’ve already added a bunch of languages to the installer but have also added support for translations in the setup program.  I’m hoping some native speakers will contribute their translations, but I may do some computer-generated ones if not.  Full changelog below.

  • support for Windows Vista/7 and UAC
  • cleaned up help text
  • added support for translations
  • icons and other UI improvements
  • moved context-based help to tooltips
  • converted project to .Net 3.5
  • logging is now disabled by default
  • updated links
Posted in Programming | Tagged , , | Leave a comment

Cursor Lock 2.6 in the Works

I’ve wanted to do a massive update to Cursor Lock for a while now, but figured I’d scale that back and just fix some lingering bugs for now.  As you can see from the screenshot, I’m also working on better support for Windows 7.  Probably done in a couple weeks.

Cursor Lock 2.6 WIP

Cursor Lock 2.6 WIP

Posted in Programming | Tagged | Leave a comment

Cursor Lock and Steam Widgets

I just did a quick update to Cursor Lock to fix a painfully obvious bug that I somehow overlooked.  Thanks to the person that googled “cursor lock strict mode does not create shortcut” today! 😉

Steam Widget

Also, I noticed you noticed my Steam widget.  I just added it over the weekend and people are already clicking through on the game links.  I did the widget based on my code for Sitewide Recent Images (more about that on my work blog), so it supports the same caching and template options, which the other two Steam widgets on wordpress.org failed at.  I hope to release it over the weekend.

Posted in Programming, Website | Tagged , , | Leave a comment