3

Запуск Win7 Pro/64. Каждый раз, когда я случайно нажимаю AltGr + d (AltGr - это правильная клавиша Alt ), появляется "Диспетчер отображения Fujitsu", утилита, которая может быть полезна, когда ее вызывают, но не когда ее непреднамеренно вызывают. Это происходит вне зависимости от программы: браузер, командная строка и даже GVim. Я думаю, я мог бы решить эту проблему, просто удалив утилиту Fujitsu. К сожалению, я из тех людей, которые хотят иметь контроль, понимая, как все работает. Поэтому я бы хотел узнать, как отключить горячую клавишу. Любой совет?

4 ответа4

5

Я нашел ответ! Хотя я подозревал, что есть какой-то ключ реестра, в котором хранятся все горячие клавиши (и на самом деле может существовать какой-то ключ реестра), это не тот подход, которым люди, похоже, следуют при работе с такого рода проблемами. Скорее, с этой и других страниц казалось, что горячие клавиши вводятся через диалоговые окна свойств ярлыков (но не прямых программ).

Таким образом, казалось, что все, что мне нужно было сделать, это найти ярлык в меню «Пуск» Fujitsu Display Manager, открыть диалог его свойств и отключить горячую клавишу. И действительно! Используя Проводник, я перешел к C:\ProgramData\Microsoft\Windows\Start Menu, далее вниз к соответствующей записи для рассматриваемой программы, а затем открыл диалог свойств. Изменение настройки горячей клавиши требует прав администратора, поэтому быстрое UAC и проблема решена!

Я все еще верю, что должно быть централизованное хранилище для всех этих горячих клавиш, и я все еще думаю, что оно находится в реестре, поэтому, если кто-то может указать на это, я и приму ответ.

Обновление: я перестал верить в теорию реестра. Кажется, что: «Это не хранится в реестре. Он рассчитывается при входе в систему и сохраняется в памяти. " Это означает, что сканирование файловой системы при каждом входе в систему выполняется, и мы все знаем, что такое сканирование действительно происходит, поэтому эта теория сканирования соответствует нашему опыту. Я не нашел убедительного объяснения, почему это так, но информация, которой я располагаю, на данный момент достаточно хороша. Я все еще верю, что было бы лучше хранить информацию в реестре, но тогда я не программист Microsoft.

1

Если у вас есть опыт программирования, это не так сложно, как кажется.

Вы можете использовать SetWindowsHookEx() чтобы зарегистрировать глобальный хук, а затем проверить каждый тип обратного вызова. Если это не горячая клавиша, которую вы пытаетесь заблокировать, просто вызовите CallNextHookEx() чтобы передать сообщение по очереди. Когда вы обнаружите горячую клавишу, молча отбросьте сообщение и не вызывайте следующую перехват

Однако я не знаю решения, подходящего для непрограммистов.

0

Вы можете использовать Shortcut Key Explorer, чтобы получить список всех ярлыков приложений.

Мы создали проводник клавиш быстрого доступа, чтобы помочь вам управлять списком клавиш быстрого доступа, которые вы загрузили на свой компьютер. Просто запустите Shortcut Key Explorer, и он автоматически загрузит существующие сочетания клавиш и отобразит их в удобном для чтения списке. Из этого списка вы можете дважды щелкнуть по любому элементу и редактировать свойства ярлыка Windows. Это отлично подходит для устранения неполадок дублирующихся сочетаний клавиш или сочетаний клавиш, о которых вы даже не подозревали.
С http://www.rjlsoftware.com/software/utility/shortcutkeys/

0

У меня есть некоторый код VB, который находит горячие клавиши, которые были добавлены в ярлыки.

Проблема, которую я обнаружил, состоит в том, что список папок, которые могут содержать горячие клавиши, кажется неясным. Кроме того, некоторые местоположения, кажется, имеют "кэшированные" ярлыки, которые я никогда не помещал туда, но, кажется, они позволяют использовать комбинацию клавиш. Кроме того, вам необходимо иметь права на чтение для папок, которые вы ищете.

Со временем я добавил несколько папок, так как не смог найти горячую клавишу "зомби", которую искал.

Надеюсь, я правильно ввел код.

Сохраните код в виде текстового файла с расширением .vbs. Откройте файл. Это работает. Он просматривает список папок и подпапок рекурсивно. Некоторые ошибки игнорируются, например, ошибки разрешения.

Он находит все файлы, заканчивающиеся на .lnk. Он проверяет каждый файл .lnk на наличие горячих клавиш.

Если у файла была горячая клавиша, файл добавляется в строку сообщения, которая отображается в поле сообщения.

Надеюсь это поможет. вот код:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .