c# – 你怎么愚弄窗户让人相信它有焦点?
发布时间:2020-12-15 21:44:32 所属栏目:百科 来源:网络整理
导读:我一直试图使用PostMessage()将鼠标点击发送到我的表单内的WebBrowser控件,我遇到了一个相当重要的问题.我想要实现的是在我的表单最小化时模拟这个WebBrowser上的鼠标点击.通常PostMessage()可以正常工作,但它似乎只有在我的表单具有焦点时才有效.这让我相信
我一直试图使用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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |