gpt4 book ai didi

c# - 如何捕获 Ctrl+Shift+N?

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:25 24 4
gpt4 key购买 nike

在一些 Cyber​​intelligensia 的帮助下,我现在可以使用 Ctrl+[some displayable key]、Ctrl+Shift+[some displayable key] 和 Ctrl+Shift+Alt+[some displayable key] 的组合来添加重音将字符放入文本框。

问题及其答案是here .

然而,还有一种顽强的组合。我使用 CodeCaster 的建议添加对“Debug.WriteLine(keyData);”的调用查看 tarnation 中按下了什么(哪些键)。这在大多数情况下都很好用;例如,如果我混合“Ctrl+Shift+E”,它会报告:

ControlKey, Control
ShiftKey, Shift, Control
E, Shift, Control

所以它的响应如我所料,并在文本框中输入了“É”。该技术帮助我了解了响应“!”所需的内容。字符(D1)。

但是,有一个组合键是它无法识别的,即“Ctrl+Shift+N”(Ctrl+N有效)。当我按下“Ctrl+Shift+N”时,输出窗口报告:

ControlKey, Control
ShiftKey, Shift, Control

IOW,它缺少预期的“N”,因此没有向文本框添加任何内容(应该添加“Ñ”)。

这是唯一失败的案例;所有其他组合键都有效。

Ctrl+N 确实有效。我在文本框中看到“ñ”并得到:

ControlKey, Control
N, Control

...在输出窗口中。

为什么听不到 Ctrl+Shift+N 和弦中的“N”,我该如何纠正?

这是我现在的代码:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Debug.WriteLine(keyData);
if (this.ActiveControl != null && this.ActiveControl is TextBox)
{
string replacement = "";
TextBox tb = (TextBox)this.ActiveControl;
bool useHTMLCodes = checkBoxUseHTMLCodes.Checked;

// ...

// N
if (keyData == (Keys.Control | Keys.N))
{
replacement = useHTMLCodes ? "ñ" : "ñ";
}
else if (keyData == (Keys.Control | Keys.Shift | Keys.N))
{
replacement = useHTMLCodes ? "Ñ" : "Ñ"; // not working
}

// ...

if (replacement != "")
{
tb.SelectedText = replacement;
return true;
}
}

return base.ProcessCmdKey(ref msg, keyData);
}

如前所述,除捕获 Ctrl+Shift+N 的代码外,一切正常,该代码应发出“Ñ”。

更新

我添加了这个:

tb.ShortcutsEnabled = false;

...来自here但这无济于事。

更新 2

奇怪的是,用于打开记事本的 Ctrl+Shift+N 键盘快捷键不再适用于我的桌面(我正在使用正在讨论的实用程序),但它确实适用于远程桌面 session (我在其中处理 Sharepoint 的东西)。

远程桌面连接真的拦截了桌面上的击键吗?

即使从远程桌面 session 中注销,“盲点”(Ctrl+Shift+N) 仍保留在此桌面实用程序中。

最佳答案

请试试这个。它会告诉我们是否其他人已经通过 RegisterHotkey() 将 Ctrl-Shift-N 注册为热键组合:

public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

private const int MOD_ALT = 0x0001;
private const int MOD_CONTROL = 0x0002;
private const int MOD_SHIFT = 0x0004;
private const int MOD_WIN = 0x0008;

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);

private void button1_Click(object sender, EventArgs e)
{
bool result = RegisterHotKey(this.Handle, 1001, MOD_CONTROL | MOD_SHIFT, (int)Keys.N);
if (result)
{
UnregisterHotKey(this.Handle, 1001);
}

string msg = result ? " was NOT " : " WAS ";
MessageBox.Show("The Ctrl-Shift-N combination" + msg + "already registered on your system.");
}

}

如果返回时说该组合已在您的系统上注册,则它不会到达您的应用,因为该组合已被注册该组合的应用“使用”。

如果该组合未注册,则可能是另一个应用程序通过低级键盘钩子(Hook) (WH_KEYBOARD_LL) 捕获它并从那里使用它。但是,您无法知道这一点...

关于c# - 如何捕获 Ctrl+Shift+N?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com