Windows的全局快捷鍵是不是一個很糟糕的設計?

如題。

Windows的全局快捷鍵是占坑式的,誰先來占坑,誰就是老大。快捷鍵有衝突以後幾乎無法解決,你根本不知道在這之前是哪個軟體註冊了這個快捷鍵引起的衝突。

按照地球人思維,Windows應該有一個設置頁面方便用戶去查詢修改刪除一些全局熱鍵,但並沒有。而且據我這幾天Google的結果來看,系統也沒有提供相關的API供開發者開發相關的功能。

於是有開發者開發了一個叫做"Windows Hotkey Explorer" 的暴力工具,暴力模擬所有可能的熱鍵按鍵尋找源頭……這工具實在太暴力,擅自使用可能會發生毀滅性後果(在win10上用了卡死了)。

後來還了解到pchunter(xuetr)有相關功能,然而它還沒支持win10.這個工具我是很了解的,是一款極其nb的安全工具,但凡搞windows安全的幾乎都知道它,它的目標一般是惡意軟體。

不禁感嘆,為了一個小小的常用功能,竟然需要這麼大佬級別的人寫到驅動里才能實現。

ps:我買了一台hp的筆記本,不知道廠商預裝了什麼東西,佔用了很多個非常常用的快捷鍵(alt+p、ctrl+f12……),導致我許多開發工具的快捷鍵都衝突了。

ps:另求知情人士指導一下具體的驅動實現,或者github源碼參考,想自己動手了。


樓主直接寫郵件給 @vczh 好了,如果懂編程的話可以把你的 API 的 prototype 也給列進去(然而現在 windows 的新 api 都是 COM……)。Feedback Hub 也要寫一份,用英語

叫人做功能需要社工和域論操縱,我建議你找一點水軍,用英文(一定要是英文,因為那群 PM 很多都不會漢語)在 Twitter 上水。


題主想的很好,提供一個api來進行改進是好辦法。然而問題是這種api目前還沒有,而第三方應用全都是全局鉤子鉤的快捷鍵,系統想管也管不了啊。就算提供這樣的api也要等開發者採納…


目前主流桌面操作系統只有 Windows 不能(方便地)自定義系統的全局快捷鍵


是糟糕的設計。

借口:歷史遺留。

乍看之下解決方案其實不難,不就是註冊熱鍵的時候加個記錄嘛。但這麼好的事會發生在歷史遺留上?

核心困難至少有兩個。

一是系統自己的東西有的用正常API,有的不用。怎麼辦?而且用的那些,給你看什麼名字呢?進程號給你沒用,模塊名給你也沒用。

二是列表的有效性如何保證。當我們開始維護一個活躍列表的時候,我們必須要花功夫維護列表的有效性,面對的困難主要來自各類未通知的退出。列表本身應當輪詢嗎?不應當的話,是否應該依賴一個TTL機制?輪詢的話,如何防禦各類輪詢陷阱還有對系統的攻擊?

於是,這整件事就不是一個工程師能解決的了。多牛逼的一個人都不行。


pchunter支持win10,不支持最新版本的win10

十幾年前的東西,確實沒啥好辦法,畢竟瞎做軟體的人那麼多。


這一個小小的功能,並非一定要大佬級別的人來寫,可能只是他自己出離憤怒了。而驅動那是必須的,因為驅動會先用admin載入,這樣你才能來得及勾函數。菜雞要寫得用MSR出品的detour,不過這個x86免費,x64是要錢的(逃

但是講道理,按照「Windows的思維」,程序自己應該提供快捷鍵的設置,並且在說明書上好好講一下到底默認的是什麼快捷鍵,才能在軟體的包裝盒上印上Windows的logo。你們可以通過不使用不帶認證的軟體來解決這個問題。

Windows是一個開放系統,你一個軟體長什麼樣子,UAC點了yes之後隨便你幹什麼,系統可不管。微軟只能給你一個證書,如果你好好做,給你印logo。

(光速逃

解答一下為什麼Windows沒有這個改別人快捷鍵的功能,因為一個程序要用什麼做快捷鍵,是他說了算的,系統說了不算。

系統怎麼能擅自替軟體做出決定呢?

——Linuxer們如是說


潘潘你有時間研究這麼無聊的東西,不如約女生去看夜光手錶


解決方案1:

  1. 地球人都知道,程序是可以卸載和關閉的。所以
  2. 按下win+r快捷鍵,輸入appwiz.cpl,回車
  3. 看到不認識的-雙擊,如果不敢,拿名字去搜是什麼軟體。然後自己看該不該雙擊。
  4. 雙擊完一遍之後剩下的還是有快捷鍵衝突。嗯,你也基本上知道是哪些程序給你註冊的全局快捷鍵了。
  5. 找到相關程序設置頁,關掉快捷鍵。或者在啟動項中刪除該程序。

ps:你最了解的xuetr是支持win10的,可能最近才更新的內核版本不支持。

解決方案2:

  • 你根本不知道是什麼程序註冊了快捷鍵,那麼你就按下你需要的快捷鍵,觀察實現這個效果的程序。
  • 比如你按alt+p是彈出hp印表機設置,那就去hp印表機設置里關掉快捷鍵的註冊。
  • 如果找不到,托盤圖標該知道是哪吧?挨個程序進去關掉可以么?你說不行我就是不關?哦,你可以參考解決方案1。

解決方案3:任務管理器,啟動項,全禁用,這樣就不會有軟體開機註冊你的快捷鍵了。需要時再啟動相關軟體。

ps: 為什麼你們都傾向於對系統做修改啊?為什麼要用這些註冊全局快捷鍵還不能改的軟體?這種軟體我傾向於卸載。連國產的QQ都能開關全局熱鍵,我不信題主電腦預裝了100個預裝軟體,然後題主一個個去看看不過來,才想到這種比較極端的方法。

ps: 你在windows上用軟體應該要比其他平台更警惕,因為彈出的uac小框,你點了yes,你的系統就任由這個軟體宰割了。

ps: 就算你是linux,oem預裝一坨軟體在後台,你會怎麼做?你(不指題主)說你全新裝的linux?說得好,可以全新裝一個win10。

ps: 題主想自己寫驅動想法很好,估計你在真正搞懂如何讓x64 win10在開機時載入未簽名的驅動之前,這些快捷鍵問題也不是問題了吧?


上班摸魚,多寫一點沒用的東西吧~

我就現在我任務管理器中所有進程中,列舉一些Windows自身的進程吧。

下面進程在64位系統皆為64位程序。

conhost.exe/ csrss.exe/ dwm.exe/ explorer.exe/ lsass.exe/ lsm.exe/ SearchFilterHost.exe/ SearchIndexer.exe/ SearchProtocolHost.exe/ services.exe/ smss.exe/ spoolsv.exe/ svchost.exe/ taskeng.exe/ taskhost.exe/ taskmgr.exe/ wininit.exe/


任務管理器所有進程列表中有【打開文件位置】功能,需要定位進程文件的時候,就可以用到這個功能。

另外,任務管理器還能查看進程的【命令行】和【文件描述】,在任務管理器的【查看】菜單的選擇列中可以找到。


一些註冊表的常見位置(不建議普通用戶自行修改)

註冊表(有些是64位才有):

啟動項

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun

下面這個是啟動Shell相關的

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionWinlogon

下面是右鍵菜單

HKEY_LOCAL_MACHINESOFTWAREClasses*shellexContextMenuHandlers
HKEY_LOCAL_MACHINESOFTWAREClassesAllFilesystemObjectsshellexContextMenuHandlers
HKEY_LOCAL_MACHINESOFTWAREClassesFolderShellExContextMenuHandlers


一些組策略設置:

UAC相關:

Windows設置 -&> 安全設置-&>本地策略-&>安全選強

UAC(用戶賬戶控制)打頭的:

Admin Approval Mode for the Built-in Administrator account
內置管理員許可權的自動提權(就是Administrator一系列賬戶)

Allow UIAccess applications to prompt for elevation without using the secure desktop.
允許UIAccess應用程序在不使用安全桌面的情況下提權

Behavior of the elevation prompt for administrators in Admin Approval Mode
管理員提權模式(身份為管理員的賬戶)
Behavior of the elevation prompt for standard users
標準用戶提權模式(身份為普通用戶的用戶)

從上到下:無提示/在安全桌面顯示提示輸入憑據(輸入密碼)/在安全桌面上提示/提示輸入憑據/提示/只在非Windows自身應用程序提示

Detect application installations and prompt for elevation
檢測安裝程序並提示許可權請求(文件名帶install/setup一類的)

Only elevate executable files that are signed and validated
只允許經過簽名的應用程序提權(未簽名程序將得不到任何管理員許可權)

Only elevate UIAccess applications that are installed in secure locations
只允許提升安裝在安全位置的UIAccess程序(僅對於UIAccess程序)

Run all administrators in Admin Approval Mode
管理員自動提權

Switch to the secure desktop when prompting for elevation
在提權的時候切換到安全桌面

Virtualize file and registry write failures to per-user locations
在許可權不夠的時候,重定向許可權不足的程序的文件和註冊表寫入到用戶設置下


組策略禁止程序啟動

Windows設置 -&> 安全設置-&>軟體限制策略-&>附加規則

(如果軟體限制測路沒有展開列表,就按右鍵新建一個)

然後在右側空白區域按右鍵:

有四種限制方法,第一種是按照簽名證書限制,軟體本身具有簽名,可以將其簽名導出,然後在這裡添加

證書限制(可能會拖慢程序運行速度):

導出EXE的簽名證書的步驟如上,圖示是導出騰訊TIM的證書,然後(嘿嘿嘿)

文件Hash限制:這裡會要求你選一個文件進行限制

網路區域限制:這個用於msi的安裝限制

路徑限制:限制某路徑下的文件運行


我這個Ubuntu Linux 16.04用戶也因為Ctrl+Alt+S這個快捷鍵不知道被什麼破東西佔了而無法打開JB的設置界面而苦惱了好幾個月了【


結論為什麼不是HP的鍋?


為什麼mac os x 10年前就可以簡單快捷的設置全局系統熱鍵。。。


Windows是一個開放的系統。


是的~

然而我並不知道如何解決

等等,其實全局快捷鍵的軟體並不很多啊.

逐個排查?


看題主應該是非常熟悉電腦的人,單純從解決這個問題來說,裝純凈版系統能否解決你的問題?


賣掉hp筆記本,上神船???


在那之前你可以開個虛擬機應付一下


推薦閱讀:

怎樣統一 Windows 和 Mac 上的快捷鍵使用體驗?
Pages 不能支持中文斜體嗎?
Windows下怎樣有條理地安裝軟體?
為什麼 Windows 系統大部分問題重啟就能好呢?
既然阿里不把WP放在眼裡,微軟為什麼不搞自己的支付?

TAG:微軟Microsoft | 程序員 | MicrosoftWindows | Windows10 |