3

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?

2

4 Answers 4

5

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.

2
  • 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!
    – gregg
    Nov 24, 2015 at 22:22
  • Q: how does this freeware tool nirsoft.net/utils/hot_keys_list.html work? (Or is it malware/phishware?)
    – Krazy Glew
    Oct 19, 2017 at 21:24
1

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.

2
  • 1
    Thanks. 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.
    – Lumi
    May 15, 2012 at 13:04
  • Fair enough. I just like hacking things! :)
    – Polynomial
    May 15, 2012 at 13:21
0

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/

1
  • 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?
    – fixer1234
    Dec 11, 2015 at 16:07
0

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

1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .