繁体   English   中英

如何将消息(字符串)从Win32应用程序发送到在现有IE窗口中运行的Javascript程序?

[英]How might I send messages (strings) from a Win32 app to a Javascript program running in an existing IE window?

我有一个系统托盘图标,可以接听来电。 当有电话打进来时,我想将电话号码发送到在该电话号码上进行填充的Web应用程序中。 我们可以使用查询字符串中的电话号码来启动Web应用程序,但是如果我为每个呼叫启动一个新窗口,它将用大量浏览器实例将用户的计算机浪费掉,而不会保留用户将其移动到的位置/大小。浏览器窗口,并且刷新页面所花的时间会更长。 相反,我想让Win32应用程序重新使用相同的IE浏览器窗口,并在每次接到新电话时仅向Web应用程序发送新的电话号码。我正在设想以某种方式发送Windows消息或以某种方式指示IE浏览器以某些数据运行某个javascript事件? 我可以看到为什么进行反向操作(将JavaScript输出到Win32)是一个安全问题,但这只是从Win32向javascript发送消息。

因此,我并不是要问这个问题该如何回答: 如何在Web App和Windows Form Application之间进行交互

该用户正在询问如何从Javascript启动Win32应用程序并将数据传递给Win32应用程序。 大致上,我需要做相反的事情。 我需要将数据从Win32应用程序发送到正在运行的javascript程序中。

还要注意,我并不是在问如何一次启动一个带有Javascript参数的IE窗口。 我可以使用查询字符串轻松做到这一点。 我要问的是如何/如何将数据从浏览器外部正在运行的Win32应用程序传递到浏览器窗口内正在运行的Javascript应用程序。

您应该能够找到IE窗口的句柄,然后向其发送消息(也许是按键)。 使用少量的JavaScript捕获所有按键活动,您就有一种非常简单的方法来传输信息。

这并非易事(细节在于魔鬼-焦点问题等),但应该可以。

-亚当

由于您可以通过查询字符串将电话号码发送到站点,因此您真正需要做的就是告诉IE导航到您选择的URL。

为此,您可以使用此知识库文章中的内容来帮助您找到要连接的IE实例。

http://support.microsoft.com/kb/299356/de

当然,它在Visual J ++中是所有事物,但是由于您是通过COM Automation进行交互的,因此调用应该易于翻译。

拥有IE实例(以IWebBrowser2接口实现的形式)后,您只需使用所需的URL(当然,在查询字符串中包含电话号码)即可调用Navigate或Navigate2方法。

您需要的是一种如何连接到Internet Explorer正在运行的实例的方法 (注意:这是用Java编写的,但是您应该可以很容易地将其转换为C#)。

或者,您可以枚举顶级窗口以查找IE的特定实例,然后从HWND获取IHTMLDocument2 (此实例在C ++中,因此您可能需要进行一些Win32互操作;您可以在PInvoke.net上找到所有必要的声明。 )。

如果您在友好的本地搜索引擎上搜索“ 如何连接到Internet Explorer的运行实例” ,则会发现更多信息。

进入文档后,您可以通过文档脚本界面调用JavaScript函数,也可以仅将其导航到页面并将电话号码作为参数传递。

您可以通过在Web服务器上使用Web服务来解决此方法的安全性和其他问题,并让win32应用程序更新Web服务并使网页每隔几秒钟轮询一次相同的Web服务。 然后,您可以选择将该号码映射到数据库并获取其他信息。

唯一的缺点是,要立即在浏览器中显示信息,需要立即延迟,而不是立即进行。

如何编写使用Javascript在浏览器中创建的active-x控件。 这实际上是一个Explorer浏览器插件。 Mozilla等的想法相同,只是它们使用不同的插件结构。 这使您将来可以支持其他浏览器。

该控件可以使用管道或套接字或任何类型的进程间通信与您的win32应用程序对话,然后可以作为Javascript对象进行访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM