gpt4 book ai didi

c# - 即使最小化也将 key 发送到表单

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

我有一个非常基本的 C# 程序,带有一个简单的文本框和一些其他东西。我有一个按钮,它会触发一个计时器,我想要的是随着计时器的每次滴答,我都可以将一个键发送到文本框(设置为将键发送到表单会将其发送到文本框)。

我现在的代码是:

    private void timer2_Tick(object sender, EventArgs e)
{
SendKeys.SendWait("ciao");
}

但这仅在表单可见且具有焦点时有效

编辑:由于某些原因,我不想使用“textbox.text = text”

最佳答案

您不能使用 SendKeys因为它将输入发送到当前事件的窗口:

Because there is no managed method to activate another application, you can either use this class within the current application or use native Windows methods, such as FindWindow and SetForegroundWindow, to force focus on other applications.

但是您可以使用 WinAPI SendMessage 函数,就像更详细描述的一样 here .

考虑到您知道包含文本框的 Form,您可以使用 Control.Handle property 获取它的句柄,所以它看起来像:

public static class WinApi
{
public static class KeyBoard
{
public enum VirtualKey
{
VK_LBUTTON = 0x01,
...
VK_RETURN = 0x0D
}
}


public static class Message
{
public enum MessageType : int
{
WM_KEYDOWN = 0x0100
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SendMessage(IntPtr hWnd, MessageType Msg, IntPtr wParam, IntPtr lParam);
}
}

private void timer2_Tick(object sender, EventArgs e)
{
WinApi.Message.SendMessage(
hWnd: this.textBox.Handle, // Assuming that this handler is inside the same Form.
Msg: WinApi.Message.MessageType.WM_KEYDOWN,
wParam: new IntPtr((Int32)WinApi.KeyBoard.VirtualKey.VK_RETURN),
lParam: new IntPtr(1)); // Repeat once, but be careful - actual value is a more complex struct - https://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx
}

附注:您可能还对 PostMessage function 感兴趣.

P.S.1:虽然这个解决方案应该可行,但我想指出,理想情况下,您不应该使用此类机制在您自己的应用程序中执行某些操作 - 发送 key 并不总是可靠的,并且可以很难测试。通常有一种方法可以在不诉诸此类方法的情况下达到预期的结果。

关于c# - 即使最小化也将 key 发送到表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41661537/

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