Запуск Win7 Pro/64. Каждый раз, когда я случайно нажимаю AltGr + d (AltGr - это правильная клавиша Alt ), появляется "Диспетчер отображения Fujitsu", утилита, которая может быть полезна, когда ее вызывают, но не когда ее непреднамеренно вызывают. Это происходит вне зависимости от программы: браузер, командная строка и даже GVim. Я думаю, я мог бы решить эту проблему, просто удалив утилиту Fujitsu. К сожалению, я из тех людей, которые хотят иметь контроль, понимая, как все работает. Поэтому я бы хотел узнать, как отключить горячую клавишу. Любой совет?
4 ответа
Я нашел ответ! Хотя я подозревал, что есть какой-то ключ реестра, в котором хранятся все горячие клавиши (и на самом деле может существовать какой-то ключ реестра), это не тот подход, которым люди, похоже, следуют при работе с такого рода проблемами. Скорее, с этой и других страниц казалось, что горячие клавиши вводятся через диалоговые окна свойств ярлыков (но не прямых программ).
Таким образом, казалось, что все, что мне нужно было сделать, это найти ярлык в меню «Пуск» Fujitsu Display Manager, открыть диалог его свойств и отключить горячую клавишу. И действительно! Используя Проводник, я перешел к C:\ProgramData\Microsoft\Windows\Start Menu
, далее вниз к соответствующей записи для рассматриваемой программы, а затем открыл диалог свойств. Изменение настройки горячей клавиши требует прав администратора, поэтому быстрое UAC и проблема решена!
Я все еще верю, что должно быть централизованное хранилище для всех этих горячих клавиш, и я все еще думаю, что оно находится в реестре, поэтому, если кто-то может указать на это, я и приму ответ.
Обновление: я перестал верить в теорию реестра. Кажется, что: «Это не хранится в реестре. Он рассчитывается при входе в систему и сохраняется в памяти. " Это означает, что сканирование файловой системы при каждом входе в систему выполняется, и мы все знаем, что такое сканирование действительно происходит, поэтому эта теория сканирования соответствует нашему опыту. Я не нашел убедительного объяснения, почему это так, но информация, которой я располагаю, на данный момент достаточно хороша. Я все еще верю, что было бы лучше хранить информацию в реестре, но тогда я не программист Microsoft.
Если у вас есть опыт программирования, это не так сложно, как кажется.
Вы можете использовать SetWindowsHookEx()
чтобы зарегистрировать глобальный хук, а затем проверить каждый тип обратного вызова. Если это не горячая клавиша, которую вы пытаетесь заблокировать, просто вызовите CallNextHookEx()
чтобы передать сообщение по очереди. Когда вы обнаружите горячую клавишу, молча отбросьте сообщение и не вызывайте следующую перехват
Однако я не знаю решения, подходящего для непрограммистов.
Вы можете использовать Shortcut Key Explorer, чтобы получить список всех ярлыков приложений.
Мы создали проводник клавиш быстрого доступа, чтобы помочь вам управлять списком клавиш быстрого доступа, которые вы загрузили на свой компьютер. Просто запустите Shortcut Key Explorer, и он автоматически загрузит существующие сочетания клавиш и отобразит их в удобном для чтения списке. Из этого списка вы можете дважды щелкнуть по любому элементу и редактировать свойства ярлыка Windows. Это отлично подходит для устранения неполадок дублирующихся сочетаний клавиш или сочетаний клавиш, о которых вы даже не подозревали.
С http://www.rjlsoftware.com/software/utility/shortcutkeys/
У меня есть некоторый код 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