gpt4 book ai didi

c# - 你如何欺骗一个窗口,让它相信它有焦点?

转载 作者:行者123 更新时间:2023-11-30 12:48:33 25 4
gpt4 key购买 nike

我一直在尝试使用 PostMessage() 将鼠标点击发送到表单内的 WebBrowser 控件,但我遇到了一个相当重要的问题。我想要实现的是在我的表单最小化时模拟鼠标在此 WebBrowser 上的点击。通常 PostMessage() 这样做会很好,但它似乎只在我的表单有焦点时才有效。这让我相信,在处理鼠标事件之前,会进行一些检查以查看我正在加载到我的 WebBrowser 控件中的特定网站是否处于焦点状态。

这是我用我的程序发送点击的方式:

private void SendClick(Point location)
{
resetHandle = true;
StringBuilder className = new StringBuilder(100);
while (className.ToString() != "Internet Explorer_Server")
{
handle = GetWindow(handle, 5); // 5 == child
GetClassName(handle, className, className.Capacity);
//MessageBox.Show(className.ToString());
}
IntPtr lParam = (IntPtr)((location.Y << 16) | location.X);
IntPtr wParam = IntPtr.Zero;
const uint downCode = 0x201;
const uint upCode = 0x202;
const uint moveCode = 0x200;
PostMessage(handle, moveCode, wParam, lParam); //move mouse
PostMessage(handle, downCode, wParam, lParam); // mousedown
PostMessage(handle, upCode, wParam, lParam); // mouseup
}

这是 resetHandle 的作用:

private void timer3_Tick(object sender, EventArgs e)
{
if (resetHandle == true)
{
handle = webBrowser1.Handle;
resetHandle = false;
}
}

我不确定是否有更好的方法将鼠标事件发送到后台窗口,我愿意接受任何想法。不过,我真正想问的是,是否有可能让窗口相信它在焦点上,而实际上它仍然处于最小化状态?

如有任何帮助,我们将不胜感激!

最佳答案

不是保持窗口最小化,而是保持正常(恢复),但设置其 X 或 Y 坐标,使其位于屏幕之外。

如果你想让用户产生最小化和恢复的错觉,使用HwndSource.AddHook观看SC_MINIMIZE .在您的 HwndSourceHook 处理程序中,根据伪最小化状态将窗口移上或移出屏幕,并将 handled 设置为 true。

关于c# - 你如何欺骗一个窗口,让它相信它有焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911178/

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