簡體   English   中英

如何攔截所有關鍵事件,包括 ctrl+alt+del 和 ctrl+tab?

[英]How can I intercept all key events, including ctrl+alt+del and ctrl+tab?

我正在編寫一個屏幕保護程序類型的應用程序,它需要阻止用戶在不輸入密碼的情況下訪問系統。 我想捕獲/抑制用戶可能嘗試退出應用程序的各種方法,但我所做的所有研究似乎都指向我“你不能”。

C# 或 C++ 中的任何東西都會很棒。 我曾想過禁用鍵盤,但隨后我會遇到其他問題。

你不能。 Ctrl+Alt+Del 的全部意義在於只有系統可以處理它,因為這樣系統始終可以處理它。

幸運的是,Windows 內置了對受密碼保護的屏幕保護程序的支持(可作為“顯示屬性”中的“恢復時,密碼保護”選項或通過組策略使用)。 就用那個。

補充一下 Shog9 所說的,如果您的應用程序可以攔截 ctrl+alt+del,那么您的應用程序將能夠偽裝成 Windows 登錄對話框,並通過這樣做來誘騙最終用戶將他們的憑據輸入到您的應用程序中。

如果您確實想替換 Windows 登錄對話框,請參閱Winlogon 和 GINA (但這表示“在 Windows Vista 中忽略 GINA DLL”,我還沒有聽說 Vista 是什么)。

如果有人問我不會告訴他們他們不能。

更具體地說,你的“應用軟件”不能:相反,按照設計,只有“系統軟件”可以做到這一點; 它不是,你不能或不能寫系統軟件,但你的OP似乎很清楚,詢問如何做到這一點,而無需編寫系統軟件......而答案,你可以” t:因為系統旨在防止應用程序掛鈎這些組合鍵。

你能給我指導編寫系統的東西嗎..我實際上認為如果它是系統級別的會更好..這對於OEM來說真的很重要。 此外,如果我在系統級別編寫它,我可以編寫一個應用程序來控制它。

例如,鍵盤過濾器設備驅動程序或 GINA DLL 將被視為系統軟件:由管理員(或 OEM)安裝並作為 O/S 的一部分運行。

除了它的名字,我不知道 GINA; 我已經(上面)在 MSDN 中給出了一個鏈接。 我希望它是 Win32 用戶模式代碼。

設備驅動程序是一個不同的主題:例如驅動程序開發入門

有沒有辦法重新映射鍵盤,以便刪除不在原來的位置?

我仍然不確定您和/或您的老板是否有正確的想法。 恕我直言,您不應該成為阻止用戶按 Ctrl-Alt-Del 的應用程序。 如果您想阻止用戶在不輸入密碼的情況下訪問系統,那么您應該鎖定(密碼保護)系統,就像用戶按下了 Ctrl Alt Del 然后選擇了“鎖定這台計算機”一樣。 要解鎖計算機,他們需要按 Ctrl Alt Del 並在 WinLogon 中輸入他們的憑據。

然而,忽略你應該做的,而是專注於你能做的,如果你想攔截鍵盤,顯然是可以做到的。 我自己沒有研究過鍵盤,但是這篇文章這篇文章聲稱成功,通過編寫“鍵盤過濾器驅動程序”(這是一種內核模式,而不是 Win32 設備驅動程序)。 如果您編寫其中之一,盡管您可能會受到一些回擊,例如來自 DDK MVP 的這種反應,或者來自反窺探產品的這種反應

我還沒有測試過,但是如何使用 SetWindowsHookEx()

來自 MSDN 文檔:WH_KEYBOARD_LL

Windows NT/2000/XP:安裝一個鈎子程序來監視低級鍵盤輸入事件。 有關詳細信息,請參閱 LowLevelKeyboardProc 掛鈎過程。

由於這似乎是“攔截”三個關鍵偽中斷控制 alt 刪除的各種方法的累積的好收集點,這是我昨天遇到的可能有用的東西。

http://cuinl.tripod.com/Tips/enablectrldel.htm

在我看來,當似乎唯一實用和及時的選擇是切斷電源(即機械移除過載的類 android 掌上電腦的電池)以停止導致相當穩定和完整(或長時間)的任何進程或故障時持久)反應遲鈍——似乎危險和令人沮喪的血統仍在繼續——並且繼續變得更糟。

尤其是移除了諸如機械揚聲器音量控制之類的明智而直接的東西。 (當然,笨重,更多物質,但當然這就是事情,對個人或存在有什么好處,無限和完美的意識沒有處理它或它的經驗?)

它是設計環境的一系列方法,負責響應用戶的關鍵和真正有意義的技術界面部分。 ( 唯一的?)

我說把一些按鈕——直接到硬件控制——放回原處——至少在這些技術的軟件方面完全適應人工軟接口之前,我在對所有啟發式的詳盡說明中解釋了這一點供應。

即使在宇宙的力學中,我敢打賭有一個方便的重置、恢復、暫停、停止類型的功能,以確保存在的安全性和基本可行性存在:智能意識和意志。

攔截crtl+alt+del是可能的,雖然很明顯微軟很難做到,因為那樣你就可以彈出一個假的鎖定對話框,並記錄人們的密碼。

答案是編寫設備驅動程序。 我不記得你是否可以只使用一個普通的舊鍵盤過濾器,或者你是否必須編寫一個鍵盤 ISR。 無論哪種方式,這當然是可能的,但是如果您沒有駕駛經驗,那會非常痛苦。

Mark Russinovich (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) 的“Process Explorer”就是這樣做的,並且在 Sysinternals 被微軟收購之前就已經這樣做了。

這篇 2002 年更新的文章於 2006 年更新,解釋了一種無需編寫鍵盤驅動程序即可完成此操作的方法。 http://www.codeproject.com/KB/system/preventclose.aspx?msg=1666328

如果您只想抑制對任務管理器的調用,則在隱藏窗口中啟動 taskmgr.exe 即可完成這項工作

    ProcessStartInfo taskmgr = new ProcessStartInfo()
    {
        FileName = "taskmgr.exe",
        WindowStyle = ProcessWindowStyle.Hidden
    };

    Process.Start(taskmgr);

您可以在 XP 及之前實現這一點,但在 Vista 中則不再如此。

嘗試調查您是否可以編寫一個應用程序,將自身作為受密碼保護的屏幕保護程序啟動。

屏保可以做的不僅僅是顯示漂亮的圖片 - 我之前見過交互式屏保,使用鼠標和鍵盤來提供一個簡單的游戲,雖然我不記得我看到它運行在哪個版本的 Windows 上......它很可能一直是windows 95。(在這種情況下,所有賭注都關閉了)。

在您的程序運行時攔截 ctrl 和 alt 按鍵,並取消這些按鍵怎么樣?

我不知道這在 Vista 中會有多好,但它值得一試。

我記得在 2001 年左右做過這樣的事情,所以它可能在 98 上運行。自從我什至試圖搞亂諸如鎖定 ctrl-alt-del 之類的事情已經太久了。

好的..我不打算在這里發布代碼但是gyst是這個

創建一個鍵盤鈎子。 當用戶按下 ctrl || 替代 || delete set bool to true .. 如果他們按下任何其他東西,將它們全部設置為 false。

switch (p_key)
            {
                default: Clear(); break;

                case Keys.LMenu: altHit = true; break;
                case Keys.RMenu: altHit = true; break;
                case Keys.LControlKey: ctrlHit = true; break;
                case Keys.RControlKey: ctrlHit = true; break;
                case Keys.Delete: delHit = true; break;

當屏幕有焦點時,將其交給任務管理器,關閉該死的東西。 屏幕閃爍得如此之快,以至於用戶從未注意到。 我可以做任何我想做的事。

我承認這是雜七雜八的,但它確實產生了預期的效果。 (哦,我希望我不必這樣做)

您仍然可以在 Windows 7 中攔截Ctrl + Alt + Del

Process explorer 是這樣做的:

http://mygreenpaste.blogspot.com/2005/07/image-file-execution-options-good-evil.html

我正在閱讀這個文檔頁面,一些思考和搜索讓我想到了這個問題。

https://docs.microsoft.com/en-us/windows/win32/learnwin32/keyboard-input

我沒有測試過,但有這個摘錄:

顧名思義,系統擊鍵主要供操作系統使用。 如果您截獲 WM_SYSKEYDOWN 消息,請稍后調用 DefWindowProc。 否則,您將阻止操作系統處理該命令。

如果它真的像它說的那樣工作,對我來說似乎是一個安全漏洞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM