簡體   English   中英

使用C#禁用沒有注冊表的Ctrl或Alt鍵

[英]Disable Ctrl or Alt key without registry using c#

我有一個關於KeyCode和禁用特殊鍵的問題。 我知道這個問題曾被問過幾次,但是我沒有找到可以使用的答案,並且該方法可行,所以我來這里問:)

我正在寫一個程序,它阻止每個鍵或組合鍵(例如Alt+F4等)。 該應用程序不適合我,僅適用於只能在該程序中導航的客戶。 一切正常,但是我不能禁用Left CTRL, Right CTRL or Alt鍵。 我得到了這段代碼來嘗試阻止這些鍵:

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.LControlKey)
            {
                MessageBox.Show("LCtrl", "Warnung", MessageBoxButtons.OK);
            }

            else if (e.KeyCode == Keys.RControlKey)
            {
                MessageBox.Show("RCtrl", "Warnung", MessageBoxButtons.OK);

            }

            else if (e.KeyCode == Keys.Alt)
            {
                MessageBox.Show("Alt", "Warnung", MessageBoxButtons.OK);
            }

            else if (e.KeyCode == Keys.Delete)
            {
                MessageBox.Show("Delete", "Warnung", MessageBoxButtons.OK);
            }
        }

我只使用MessageBox.Show(); 我可以看看是否有效。 Delete鍵可以正常工作,但另一個不能。 是否可以在不編輯registry和Win7的情況下執行此操作? 有誰知道為什么或可以給我提示嗎?

干杯

編輯:我以這種方式阻止所有其他鍵: 使用c#阻止快捷鍵

免責聲明:我在用戶輸入類方面經驗不足,但這是我的輸入。

CTRL和ALT是修飾鍵的示例。 也就是說,它們修改其他(非修飾符)鍵以創建鍵組合。 您的用戶界面可能只能拾取完整的組合鍵。 例如:

private void keyPressed(object sender, PreviewKeyDownEventArgs e)
{
    e.KeyCode == Key.A; // True (pressed A)
    e.KeyCode == Key.Control; // False (no key pressed)
    e.Modifiers == Keys.Control; // True (user is pressing the modifier CTRL)
    e.KeyCode == Key.A && e.Modifiers == Keys.Control; (pressed key A with modifier CTRL)
}

至於禁用密鑰,您只需捕獲e.Modifiers:

private void ignoreCtrl(object sender, PreviewKeyDownArgs e)
{
    if (e.Modifiers != Keys.Control) { /* Pass to handler */ }
    else { /* Discard */ }
}

同樣,我對您的特定框架沒有經驗,但這是我的猜測。 我使用了以下SO來源:

如何在C#中使用多個修飾鍵

確定是否按下修改鍵

這應該是一個注釋,因為我尚未對其進行測試,但是我需要一些代碼作為示例,所以我在這里編寫。 你告訴我是否可行。

PreviewKeyDownEventArgs包含其他屬性,可用於檢查是否按下了一個或多個修飾鍵。
然后,您可以嘗試將IsInputKey屬性設置為false,以防止對已按下修改鍵的任何常規鍵進行進一步處理。

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)

if (e.Control)
{
    MessageBox.Show("Ctrl", "Warnung", MessageBoxButtons.OK);
    e.IsInputKey = false;
}
else if (e.Alt)
{
    MessageBox.Show("Alt", "Warnung", MessageBoxButtons.OK);
    e.IsInputKey = false;
}

您是否嘗試過檢查修改鍵? 如下面。

請注意,這是針對WPF的,因為您沒有聲明獲勝表格或wpf。

if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
    MessageBox.Show("Control Button Down");
}
else if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
{
    MessageBox.Show("Alt Down");
}

干杯。

暫無
暫無

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

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