Type typeIOleObject = this.GetType().GetInterface("IOleObject", true);
object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
null,
this,
null);
if (oleClientSite == null)
{
MessageBox.Show("为null");
return;
} IOleClientSite oleClientSite2 = oleClientSite as IOleClientSite;
IOleContainer pObj;
oleClientSite2.GetContainer(out pObj);上面是代码 object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
null,
this,
null);这里取的 oleClientSite 为空,取不到。不知道什么问题.
如果别人有好的 ActiveX 与 js交互的代码也可以帖上来 谢谢
object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
null,
this,
null);
if (oleClientSite == null)
{
MessageBox.Show("为null");
return;
} IOleClientSite oleClientSite2 = oleClientSite as IOleClientSite;
IOleContainer pObj;
oleClientSite2.GetContainer(out pObj);上面是代码 object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
null,
this,
null);这里取的 oleClientSite 为空,取不到。不知道什么问题.
如果别人有好的 ActiveX 与 js交互的代码也可以帖上来 谢谢
解决方案 »
- C#如何修改系统声音输出的默认设备
- 请问c#关于virtual ,override, abstruct这些东西与C++是一摸一样的吗?
- ExecuteReader 需要打开的并且可用的连接。该连接的当前状态是 Closed。
- 关于RadioButtonList 的 RepeatLayout
- 关于在C#中using的使用
- 请问如何在html或javascript调用DLL文件中的方法和如何向DLL传递参数,最好能有一个详细的示例,谢谢!
- 哪位朋友有用过SALAMANDER .NET吗。。。。。。。。。???????????
- C#怎样查找其它程序的某一个窗体中有多少控件
- 谁帮我!!(==>> in) !!!<急>
- 运行程序时,预定义的类型“System.Byte”尚未定义或导入是怎么回事?哪位大侠能帮我?
- asp.net发邮件的问题?óê?t?T·¨·¢?íμ? SMTP ·t???÷?£′?ê?′í?ó′ú???a 0x80040217?£·t???÷?ìó|?a not available
- webbrowser与后台交互问题
activeX控件是用C++写的!.net activeX的编写方法网上有,自己baidu吧<OBJECT ID="UsbKey" CLASSID="CLSID:项目里的东西,这里就不写了">
</OBJECT><script language="javascript" type="text/javascript">
var lock;
var lockmsg;
var isinstall;
function DetectActiveX() {
lock = document.getElementById("lock");
lockmsg = document.getElementById("usbkey_Status");
document.getElementById("usbcode").value = "";
try {
var comActiveX = new ActiveXObject("TestUSBKey.USBKey.1");
lock.style.background = "url(images/yellow.png) 50% 0 no-repeat";
lockmsg.innerHTML = "<font color='orange'>请插入USBKey</font>";
document.getElementById("login_form_Usbkey").style.display = "none";
isinstall = true;
getinfo();
}
catch (e) {
isinstall = false;
lock.style.background = "url(images/red.png) 50% 0 no-repeat";
lockmsg.innerHTML = "<font color='red'>安全控件未安装,请下载安装</font>";
document.getElementById("login_form_Usbkey").style.display = "";
}
function getinfo() {
var data = UsbKey.GetContent();//这里是activeX控件里的函数,返回一个string
if (data != "" && data != "undefined" && data != null) {
lock.style.background = "url(images/green.png) 50% 0 no-repeat";
lockmsg.innerHTML = "<font color='green'>USBKey已插入,请输入帐号密码登录</font>";
document.getElementById("usbcode").value = data;
} else {
lock.style.background = "url(images/yellow.png) 50% 0 no-repeat";
lockmsg.innerHTML = "<font color='orange'>请插入USBKey</font>";
} } }
</script>
还没用过啊,从哪里开始学这些东西啊。
要js 调用 ocx 的函数,然后 ocx 的函数要回调 js 函数。谢谢
JavaScript调用ActiveX想必大家都很熟悉,这里就不说了。主要说说ActiveX怎么调用JavaScript吧。首先把http://269181927.iteye.com/blog/1045372这篇文章中创建好的修改代码。第一步创建接口[ComImport,Guid("00000118-0000-0000-C000-000000000046"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleClientSite
{
void SaveObject();
void GetMoniker(uint dwAssign,uint dwWhichMoniker,object ppmk);
void GetContainer(out IOleContainer ppContainer);
void ShowObject();
void OnShowWindow(bool fShow);
void RequestNewObjectLayout();
}[ComImport,Guid("0000011B-0000-0000-C000-000000000046"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleContainer
{
void EnumObjects([In,MarshalAs(UnmanagedType.U4)]int grfFlags,
[Out,MarshalAs(UnmanagedType.LPArray)]object[]ppenum);
void ParseDisplayName([In,MarshalAs(UnmanagedType.Interface)]object pbc,
[In,MarshalAs(UnmanagedType.BStr)]string pszDisplayName,
[Out,MarshalAs(UnmanagedType.LPArray)]int[]pchEaten,
[Out,MarshalAs(UnmanagedType.LPArray)]object[]ppmkOut);
void LockContainer([In,MarshalAs(UnmanagedType.I4)]int fLock);
} 在控件类中添加方法:private void btReaset_Click(object sender, EventArgs e)
{
// WebBrowser wb = new WebBrowser();
//wb.Document.InvokeScript("say", new string[] { "你好!" });
CallJavaScript("say('你好!')");
}
private void CallJavaScript(string code)
{
Type typeIOleObject = this.GetType().GetInterface("IOleObject", true);
object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
null,
this,
null);
IOleClientSite oleClientSite2 = oleClientSite as IOleClientSite;
IOleContainer pObj;
oleClientSite2.GetContainer(out pObj);
//获取页面的Script集合
IHTMLDocument2 pDoc2 = (IHTMLDocument2)pObj;
IHTMLWindow2 win2 = (IHTMLWindow2)pDoc2.parentWindow;
win2.execScript(code, "javascript");
//object script = pDoc2.Script;
//try
//{
// script.GetType().InvokeMember(functionName,
// BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
// null,
// script,
// args);
//}
//catch { }
}
在页面上添加JavaScript方法function say(msg) {
alert(msg);
}