Running Win7 Pro/64. Every time I accidentally hit AltGr + d (AltGr is the right Alt key), the "Fujitsu Display Manager" pops up, a utility that might be useful when it is called for but isn't when unintentionally brought up. This happens whatever program has the focus: browser, command prompt, even GVim. I guess I could solve this by just uninstalling the Fujitsu utility. Unfortunately, I'm the kind of person who wants to have control by understanding how things work. So I'd rather like to know how to disable the hotkey. Any advice?
4 Answers
I found the answer! While I suspected there to be some registry key that stores all hotkeys (and there actually might be some registry key that does), this is not the approach people seem to follow when dealing with this kind of issue. Rather, it seemed from this and other pages that hotkeys are entered via the properties dialogues of shortcuts (but not straight programs).
So all I had to do to solve this, it seemed, was to locate the start menu shortcut for the Fujitsu Display Manager, open its properties dialogue, and disable the hotkey. And indeed! Using Explorer, I navigated to C:\ProgramData\Microsoft\Windows\Start Menu
, further down to the appropriate entry for the program in question, and then opened the properties dialogue. Changing the hotkey setting requires Administrator privileges, so a quick UAC, and problem solved!
I still believe there must be a centralized storage for all those hotkeys, and I still think it's in the registry, so if anyone can point to that that's the answer I'm going to accept.
Update: I stopped believing in the registry theory. It seems that: "It's not stored in the registry. It's calculated at logon and kept in memory." This means file system scanning on every logon, and we all know such scanning is indeed occurring, so this scanning theory matches our experience. I haven't found a convincing explanation of why it is the way it is but the info I have is good enough for now. I still believe it would have been better to store the info in the registry but then I'm not a Microsoft programmer.
-
I couldn't get that vbs & batch/commands to work on your second link. I removed the 'on error' line & got this: "the shortcut pathname must end with a .lnk or .url", Code=80020009. I ran on a .LNK file I knew had a shortcut:
FindHotKey.VBS "Snipping Tool.lnk"
. Since I didn't want to break down the script I looked elsewhere & found RJL Software's Shortcut Key Explorer worked beautifully!– greggNov 24, 2015 at 22:22 -
Q: how does this freeware tool nirsoft.net/utils/hot_keys_list.html work? (Or is it malware/phishware?) Oct 19, 2017 at 21:24
If you've got any programming experience, this isn't as hard as it seems.
You can use SetWindowsHookEx()
to register a global hook, then check each callback type. If it's not the hotkey you're trying to block, just call CallNextHookEx()
to pass the message along the queue. When you detect the hotkey, silently drop the message and don't call the next hook.
However, I don't know of a solution suitable for non-programmers.
-
1Thanks. Interesting API function, but honestly, it sounds like overkill for this specific purpose. You'd patch an unwanted behaviour instead of simply removing it, thus adding complexity (and possibly brittleness, who knows?) to your setup.– LumiMay 15, 2012 at 13:04
-
You can use Shortcut Key Explorer to get a list of all application shortcuts.
We created Shortcut Key Explorer to help you manage the list of shortcut keys you have loaded on your computer. Simply run Shortcut Key Explorer and it will automatically load the existing shortcut keys and display them in an easy to read list. From this list you can double-click on any item and edit the properties of the Windows shortcut. This is great for troubleshooting duplicate shortcut keys or shortcut keys you did not even know existed.
From http://www.rjlsoftware.com/software/utility/shortcutkeys/
-
There is nothing at the URL but download links. Can you expand your answer to explain what this is and how to use it to solve the problem? Dec 11, 2015 at 16:07
I have some vb code that finds hotkeys that have been added to shortcuts.
The problem that I've found is that the list of folders that can contain "hotkey" shortcuts seems to be unclear. Also, some locations seem to have "cached" shortcuts that I never put there, but, that seem to enable the key combination. Also, you need to have read permissions for the folders that you search.
I added several folders over time as I could not find the "zombie" hot key that I was looking for.
i hope I entered the code correctly.
Save the code as a text file with the .vbs extension. Open the file. It runs. It looks through the list of folders and sub folders recursively. Some errors are ignored, such as permission errors.
It finds all files ending in .lnk. It checks each .lnk file for hot keys.
If the file had a hot key, the file is added to a message string that is shown by a msg box.
Hope this helps. here is the code:
OPTION EXPLICIT
' ms "starting" ' ms is a message box sub with vbcr cancel
'234567890'234567890'234567890'234567890'234567890'234567890'234567890'234567890 scale helps debugging error messages
' special folders
' AllUsersDesktop
' AllUsersStartMenu
' AllUsersPrograms
' AllUsersStartup
' Desktop
' Favorites
' Fonts
' MyDocuments
' NetHood
' PrintHood
' Programs
' Recent
' SendTo
' StartMenu
' Startup
' Templates
dim recurseCount
DIM rc
DIM lnkString
DIM strFolder
DIM IncludeSubFolders
DIM objFSO
Dim objNetwork
Dim objShell
Dim msg
Dim HotKeyCount
HotKeyCount = 0
' ************************************************************
' Setup
' ************************************************************
SET objShell = CREATEOBJECT("wscript.shell")
SET objFSO = CREATEOBJECT("Scripting.FileSystemObject")
Set objNetwork = CreateObject("WScript.Network")
SET objFSO = CREATEOBJECT("Scripting.FileSystemObject")
lnkString = ""
recurseCount = 0
' finally found the short that had the zombie hot key in
' --> C:\Users\pkryder\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
' it was also in --> C:\Users\pkryder\AppData\Roaming\Microsoft\IMJP10
' how why?
' C:\ProgramData\Microsoft\Windows
strFolder = "C:\ProgramData\Microsoft\Windows\" ' objShell.SpecialFolders.Item ("Templates")
FindHotKeys strFolder
' C:\ProgramData\Microsoft\Windows
strFolder = "C:\users\" ' objShell.SpecialFolders.Item ("Templates")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item("AllUsersStartup")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item("Programs")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item("Desktop")
FindHotKeys strFolder
' "AllUsersDesktop"
strFolder = objShell.SpecialFolders.Item("AllUsersDesktop")
FindHotKeys strFolder
' AllUsersStartMenu
strFolder = objShell.SpecialFolders.Item ("AllUsersStartMenu")
FindHotKeys strFolder
' AllUsersPrograms
strFolder = objShell.SpecialFolders.Item ("AllUsersStartMenu")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("AllUsersStartup")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("Desktop")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("Favorites")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("Fonts")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("MyDocuments")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("NetHood")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("PrintHood")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("Programs")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("Recent")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("SendTo")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("StartMenu")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("Startup")
FindHotKeys strFolder
strFolder = objShell.SpecialFolders.Item ("Templates")
FindHotKeys strFolder
if lnkString = "" then
ms "no hotkeys wer found"
else
if HotKeyCount = 1 then
ms "done " &vbcr & HotKeyCount & " hotKey was found " & vbcr & lnkString
else
ms "done " &vbcr & HotKeyCount & " hotKeys were found " & vbcr & lnkString
end if
end if
SUB FindHotKeys(BYVAL strDirectory)
DIM objFolder
DIM objSubFolder
DIM objFile
DIM strExt
DIM errSav
Dim n1
Dim ws1
Dim errSav2
dim errSav3
dim bIsAshortcut
Dim n2
Dim n3
Dim intMsgSave
n3 = 9999
n2 = 9999
n1 = 9999
ws1 = n1
dim FileCount
dim SubFolderCount
on error goto 0
errSav = 0
errSav2 = 0
errSav3 = 0
bIsAshortcut = false
msg = "strDirectory" & vbcr & vbcr & strDirectory
' ms msg & vbcr & "076"
'234567890'234567890'234567890'234567890'234567890'234567890'234567890'234567890 scale helps debugging error messages
on error goto 0
on error resume next
SET objFolder = objFSO.GetFolder(strDirectory)
errSav = err.number
FileCount = objFolder.files.count
errSav2 = err.number
SubFolderCount = objFolder.SubFolders.count
on error goto 0
msg = msg & vbcr & "errSav2:" & errSav2 & vbcr & "errSav:" & errSav
msg = msg & vbcr & "FileCount:" & FileCount
msg = msg & vbcr & "SubFolderCount:" & SubFolderCount
' ms msg & vbcr & "092"
If errSav = 0 then ' we have subfolders
on error resume next
FOR EACH objSubFolder in objFolder.SubFolders
errSav2 = err.number
on error goto 0
If errSav2 = 0 then
' ms "102"
recurseCount = recurseCount + 1
FindHotKeys objSubFolder.Path ' recurse through this new sub folder
recurseCount = recurseCount - 1
' ms "110"
end if
on error resume next
NEXT
on error goto 0
' ms "115" & vbcr & "in files" & vbcr& vbcr & strDirectory
n2 = 0
on error resume next ' had some trouble with file not found? so ignore that
FOR EACH objFile in objFolder.Files
errSav = err.number
n2 = n2 + 1
dim sObjFileName
dim iLength
sObjFileName = objFile.name
errSav3 = err.number
on error goto 0
iLength = len(sObjFileName)
bIsAshortcut = false
if (right(sObjFileName,4) = ".lnk") then ' look only at the end of the string
bIsAshortcut = true
' msgbox ">" & objFile.name & "<"
else ' something had .lnk embedded but not at the end
if instr(sObjFileName,".lnk") > 0 then
msgbox strDirectory & vbcr & ">" & objFile.name & "<" & vbcr & s'? who has lnk not at end of name
end if
end if
if bIsAshortcut Then
dim lnk
dim filePath
filepath = strDirectory & "\" & objFile.name
' ms "128 have an lnk file " & vbcr & filePath
dim hotKey
set lnk = objShell.CreateShortcut(filepath)
errSav2 = err.number
hotKey = lnk.hotkey
if hotKey <> "" then
';ms "129" & vbcr & "errSav2:" & errSav2 & vbcr & "hotKey:" & hotKey
HotKeyCount = HotKeyCount + 1
if len(lnkString) > 900 then
msgbox len(lnkString) & vbcr & lnkString
lnkString = ""
end if
if instr(lnkString,strDirectory & " | ") = 0 then
lnkString = lnkString & vbcr & vbcr & "-" & vbcr & strDirectory & " | " ' put blank and bar on the end to differentiate sub directories
else
end if
lnkString = lnkString & vbcr & HotKeyCount & " " & hotKey & " " & objFile.name
'ms "138" & lnkString
' save to text file
end if
END IF
on error resume next
NEXT
END IF
END SUB
sub ms(BYVAL m)
' rc = msgbox ( "recurseCount:"&recurseCount & vbcr & vbcr & m , vbcrOKCancel)
rc = msgbox ( m , vbOKCancel)
if rc = vbCancel then wscript.quit
end sub
-
1Please edit your answer to explain how to use this and exactly how it answers the question. Feb 21, 2019 at 1:14