gpt4 book ai didi

c# - 使用 SendKeys 发送字母 'i'

转载 作者:太空狗 更新时间:2023-10-29 17:59:39 25 4
gpt4 key购买 nike

我用 C# Windows 窗体制作了一个屏幕键盘。我使用 Sendkeys.Send() 函数发送击键。除了字母 i 之外的所有字母都可以正常工作。当我在 Microsoft Word 打开时按键盘上的字母 i 时,它会发送 Ctrl + Alt + I并打开打印对话框。在 Notepad++ 中也是如此。但是当我尝试在记事本中输入时它工作正常。

在我的代码中,我使用 SendKeys.Send(value); 发送键,其中 value 是按下的按钮的文本。我得到带有以下代码的文本:

string s = ((Button)sender).Text;

关于为什么它不能正常工作有什么意见吗?

编辑:我创建了一个只有一个按钮的新 Windows 窗体项目,整个代码如下。还是行不通。任何想法将不胜感激。

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SendKeys.Send("i");
}

// Prevent form being focused
const int WS_EX_NOACTIVATE = 0x8000000;
protected override CreateParams CreateParams
{
get
{
CreateParams ret = base.CreateParams;
ret.ExStyle |= WS_EX_NOACTIVATE;
return ret;
}
}
}

重写函数是为了防止表单被聚焦。这样我就可以将击键发送到具有焦点的其他应用程序。

最佳答案

两种选择:

1-模拟按键,参见 http://msdn2.microsoft.com/en-us/library/system.windows.forms.sendkeys(VS.71).aspx

示例:

public static void ManagedSendKeys(string keys)
{
SendKeys.SendWait(keys);
SendKeys.Flush();
}

2- 向窗口发送一个键,按下按钮 x 秒

[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
public static void KeyboardEvent(Keys key, IntPtr windowHandler, int delay)
{
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
Thread.Sleep(delay);
keybd_event((byte)key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
}

关于c# - 使用 SendKeys 发送字母 'i',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016021/

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