我必须使打开我的网页的浏览器窗口(IE 11)始终处于前台状态,直到将其最小化为止。 编写了一个C#activex dll,并将其注册。 activex dll实现简单的“ Hello world”打印。代码看起来像这样。
namespace SampleActX
{
[ProgId("SampleActX.SampleActX")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("7F6A5914-9C8A-4977-AF5B-DE9D45E01B44")]
[ComVisible(true)]
public class SampleActX
{
[ComVisible(true)]
public string SayHello()
{
return "Hello World!";
}
}
}
将dll嵌入html内,如下所示。
<!DOCTYPE>
<html>
<head>
<title>SampleActX webpage</title>
</head>
<body>
<OBJECT id="SampleActX" classid="clsid:7F6A5914-9C8A-4977-AF5B-DE9D45E01B44" codebase="SampleActX.cab"></OBJECT>
<script type="text/javascript">
try {
var obj = document.SampleActX;
if (obj) {
alert(obj.SayHello());
} else {
alert("Object is not created!");
}
} catch (ex) {
alert("Some error happens, error message is: " + ex.Description);
}
</script>
</body>
</html>
我们如何通过Activex dll控制IE父窗口使其始终位于前台(例如任务管理器窗口的工作方式)?
答案 0 :(得分:1)
通常,当您启动IE时,它将在所有窗口上方启动。您正在使用哪个操作系统进行测试?
在JavaScript中,您可以参考下面的代码来明确地做到这一点。
function sample_window() {
newwindow = window.open('https://microsoft.com', 'popup_return', 'menubar=no,history=no,resizable=yes,scrollbars=yes,toolbar=no,width=800,height=600');
if (window.focus) {newwindow.focus()}
}
如果您使用的是VBA或任何其他脚本,则可以先隐藏浏览器窗口,然后再次使其可见将IE窗口置于前台。
答案 1 :(得分:1)
尝试以下代码,效果很好。
命名空间SampleActX {
[ProgId("SampleActX.SampleActX")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("7F6A5914-9C8A-4977-AF5B-DE9D45E01B44")]
[DllImport("user32.dll", SetLastError = true)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
[ComVisible(true)]
public class SampleActX
{
[ComVisible(true)]
public string SayHello()
{
return "Hello World!";
}
public void SetIEWindowOnTop()
{
var myId = Process.GetCurrentProcess().Id;//Fetches the pid of the current tab in IE only
var query = string.Format("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {0}", myId); //Finding the actual IE window handle
var search = new ManagementObjectSearcher("root\\CIMV2", query);
var results = search.Get().GetEnumerator();
results.MoveNext();
var queryObj = results.Current;
var parentId = (uint)queryObj["ParentProcessId"];
var parent = Process.GetProcessById((int)parentId);
IntPtr windoHandle = parent.MainWindowHandle;//Fetches the parent window handle
var bresu = SetWindowPos(windoHandle, //Sets the window on Top
HWND_TOPMOST,
0, 0, 0, 0,
SWP_NOSIZE|SWP_SHOWWINDOW);
}
}
}
按照问题中的说明从html调用SetIEWindowOnTop()会很神奇。
答案 2 :(得分:0)
“我必须使打开我的网页的浏览器窗口(IE 11)始终处于前台状态,直到将其最小化为止。” -这是一种积极的敌意...提出该要求的人都会讨厌用户;
听起来您实际上是在“信息亭模式”下;您只需做任何捷径即可轻松做到这一点:
iexplore -k {url}