gpt4 book ai didi

c# - 按条件点击表单

转载 作者:太空狗 更新时间:2023-10-30 01:16:55 25 4
gpt4 key购买 nike

我有一个包含各种按钮和面板的表单。我有一个按钮,当按下该按钮时,它会针对某些值运行检查,如果检查通过,我需要单击鼠标以穿过表单并点击应用程序窗口下方的任何内容。

我目前正在做的是在按下按钮并通过检查后,我使用以下方法将表单设置为透明:

[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);

[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
private int oldWindowLong = 0;

public void SetFormTransparent(IntPtr Handle)
{
oldWindowLong = GetWindowLong(Handle, -20);
SetWindowLong(Handle, -20, Convert.ToInt32(oldWindowLong | 0x80000 | 0x20));
}

public void SetFormNormal(IntPtr Handle)
{
SetWindowLong(Handle, -20, Convert.ToInt32(oldWindowLong | 0x80000));
}

然后我创建一个 1 毫秒计时器,我使用以下方法模拟鼠标点击:

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

并将表格恢复正常。这会导致非常不一致,有时甚至是缓慢/无响应的行为。

如果我想在按钮检查通过后立即模拟鼠标点击,我还有哪些其他选择?

最佳答案

重点是使用 Color.Magenta 作为表单的 TransparencyKeyBackColor。然后让按钮不可见,模拟一个点击事件,再让按钮可见。

在这个例子中,当你点击按钮时,它使窗体透明,然后模拟点击穿过窗体。

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;

public void PerformClick()
{
uint X = (uint)Cursor.Position.X;
uint Y = (uint)Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}

private void button1_Click(object sender, EventArgs e)
{
//Just to keep the form on top
this.TopMost = true;

//Make form transparent and click through
this.TransparencyKey = Color.Magenta;
this.BackColor = Color.Magenta;

//Make the button invisible and perform a click
//The click reaches behind the button
//Then make button visible again to be able handle clicks again
this.button4.Visible = false;
PerformClick();
this.button4.Visible = true;
}

注意事项

透明化点击通过
要使表单透明并使点击通过表单,您只需将表单的 TransparencyKey 属性和 BackColor 属性设置为相同的颜色 Color.Magenta

注意重点是TransparencyKeyBackColor使用了Magenta。例如,如果您使用红色,它会使表单透明但不会使其点击。

如果您的表单上有一些控件,它们将保持可见并会收到点击。如果您需要使它们不可见,只需将它们的 Visible 属性设置为 false

恢复正常
要使该表单正常,将 BackColor 设置为不同于 TransparencyKey 的另一种颜色就足够了,例如 SystemColors.Control

关于c# - 按条件点击表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509542/

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