c# – 你怎么愚弄窗户让人相信它有焦点?

c# – 你怎么愚弄窗户让人相信它有焦点?,第1张

概述我一直试图使用PostMessage()将鼠标点击发送到我的表单内的WebBrowser控件,我遇到了一个相当重要的问题.我想要实现的是在我的表单最小化时模拟这个WebBrowser上的鼠标点击.通常PostMessage()可以正常工作,但它似乎只有在我的表单具有焦点时才有效.这让我相信,在处理鼠标事件之前,有一些检查是否正在加载到我的WebBrowser控件中的特定网站是否处于焦点. 这是我用 我一直试图使用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,lParam); // mousedown        PostMessage(handle,upCode,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处理程序中,根据伪最小化状态在屏幕上或屏幕外移动窗口,并将processed设置为true.

总结

以上是内存溢出为你收集整理的c# – 你怎么愚弄窗户让人相信它有焦点?全部内容,希望文章能够帮你解决c# – 你怎么愚弄窗户让人相信它有焦点?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229529.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存