NumBlock - Tame your NumLock Key

Download and comments page

NumLock blocker - Re-possess your numeric keypad. Prevent applications from changing NumLock status in the background, often causing misery for Excel users and other who find that their key strokes have resulted in cursor movements rather than numbers.

I have lost count of the number of times I have been busy at work, under pressure to finish Excel data entry while starting and closing applications and generally alt-tabbing and doing everything at once when Bam! Where the hell are my numbers? and why am I pages away from where I need to be? Typically while looking elsewhere and typing on my keyboard's numeric keypad I notice that for no reason whatsoever my NumLock key had mysteriously been activated and my assumed data entry key strokes have simply resulted in cursor movements into other parts of my document and unintended values have been changed. Having sworn at my computer and hammered my NumLock key back into submission just one too many times; I decided to see if I was the only victim of the phantom NumLocker.

Complaints are everywhere and I am by no means the first to try and address the issue. There seems to be two approaches typically recommended. Registry changes which usually get a very mixed response and rarely tend to 'stick' and the second; small programs running in the background, which are often quite intrusive and for me something that introduces a reasonable chance of spyware, malware or viruses. So given my usual degree of paranoia mixed with a lifetime of enjoying software development (though by no means an expert) I decided to write something myself. I did, it worked, and so I decided to then spend a month of sofa time tinkering around trying to make it look a little more fun.

Written in C# and using very few system resources (typically around 2.4MB as a Background process) I believe my solution provides both reliable results as well as a little gratuitous satisfaction knowing exactly when the Phantom has struck. Programmatically the utility utilises the keybd_event method in Windows user32.dll to change NumLock state, along with periodic monitoring of the NumLock key using the Control.IsKeyLocked(Keys.NumLock) parameter of the .NET Controls Object found in System.Windows.Forms


Download and Installation Walkthrough

Click on the link below to download the installer. The file is very small (< 2Mb) but does require the .NET Framework 4.6.2. You will be prompted if your Windows operating system does not have this installed.

Version 1.2.4 26/5/2019

Running the installer will probably produce a Windows warning like the one shown:

You can confidently rest assured that there is nothing in this code that is ever going to behave maliciously. Source Code available on request for examination. Just PLEASE ensure that any downloads of this program are only from this page. Click Run Anyway to commence installation.

The setup wizard will install NumBlock and also default to automatically starting with Windows. You can disable this feature in Options.


Start Menu

The application can be found in the Start menu within the Cottontech program group. There is also a link to the latest readme.txt file there also. If you have not restarted after installation you will need to click on this link to see the program working


NumBlock disabled (Active status un-ticked in menu)


NumBlock enabled (Active status ticked in menu)


NumBlock triggered (remains like this for 4 seconds)


System Tray Icons

Right-clicking on the NumBlock icon in the System Tray located bottom-right on the Windows 10 Desktop. This brings up the main and only menu available. Click on Active to enable and disable NumBlock. When disabled the NumLock monitoring functionality of the program is not operational and any background activity that affects the NumLock key status will be ignored.

Click on About to see additional information as well as a link back to this page for support and help. There's also a link to our PayPalMe page where any overwhelming desires to say "Thanks" can be easily and gratefully handled

Opens Options screen. See Options Menu below

Opens Viewer to show all events since application started. See Events View below

Exits NumBlock, terminates program and ends monitoring



The options here are not particularly complex and are quite self explanatory. There is no 'OK' or 'Apply' button as changes are saved immediately after any changes are made. Note that the 'Displayed Message' shows the exact time the trigger was caught along with a gratifying image. Try this setting and press NumLock yourself to test the effect.

The option to Start NumBlock when Windows Starts is simply managed by adding or removing the Windows Registry value stored at:
where Name is set to NumBlock.exe and Data is set to the program path (usually C:\Program Files (x86)\Cottontech\NumBlock\NumBlock.exe)

Other registry settings used by the application can be found at:
Please do not change these as they simply save current settings you have chosen.


Events Viewer

Each time the application starts and a NumLock or other relevent event occurs this viewer is updated. It will update when open also so try tapping the NumLock key and seeing the response. Furthermore on exit the list of events is rolled up into a monthly report saved simply in text file names accordingly (Log-YYYY-MM.txt). To open the folder containing these reports Click on the menu option displayed.

The location of this folder is:
C:\Users\[user account]\AppData\Roaming\ Cottontech\NumBlock\ReportHistory\


Google Ranking

This has only been listed very recently (May 26th 2019) so we are very excited to see if anyone visits and benefits from our work. Cottontech is a privately owned domain by the author. Anyone feeling compelled to express their support financially is welcomed (but by no means obligated). You can PayPalMe here


Thank you !

Please comment on your visit


Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /home/cottonte/public_html/numblock/comments/db.php:6 Stack trace: #0 /home/cottonte/public_html/numblock/comments/main_content.php(3): include() #1 /home/cottonte/public_html/numblock/index.php(3): require('/home/cottonte/...') #2 {main} thrown in /home/cottonte/public_html/numblock/comments/db.php on line 6