V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Damn
V2EX  ›  Windows

C#如何调用 IE 的 ActiveX 控件?

  •  
  •   Damn · 167 天前 · 783 次点击
    这是一个创建于 167 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言 https://www.v2ex.com/t/1048925
    于是想自己写一个 Loader ,忽略证书错误,记住用户名和密码,把登录操作精简到输验证码即可。
    Fiddler 抓包分析和复现流程很顺利,最后卡在怎么用 C#调用 ActiveX 上面。。
    有没有高手指教一下?

    SSO 最后一步,HTML 里调 ActiveX 的代码
    
    <object width="0" height="0" id="client" classid="CLSID:11111111-1111-1111-1111-111111111111" codebase="/download/xxxxxxx.cab" standby="Loading SSL ActiveX components..." type="application/x-oleobject"></object>
    <script language="javascript">
        try {
            document.client.login("ip", 443, "sso ticket", "", "id");
            document.client.sendreq(118, "");
        } catch (ex) {
            if (ex.number == -2146827850) {
                // do something
            }
        }
    </script>
    
    object comObject = Activator.CreateInstance(Type.GetTypeFromCLSID(Guid.Parse("11111111-1111-1111-1111-111111111111")));
    MethodInfo methodInfo = comObject.GetType().GetMethod("login");
    // 无法调用,methodInfo == null
    
    第 1 条附言  ·  165 天前
    使用 powershell 变通地解决了,做个记录:
    按理说都是.net ,不知道为什么同样的调用方法在 C#winform 里面就是不可行)
    不过不重要,把参数传递给 powershell 能达到目的就可以了

    $objProgID = [Activator]::CreateInstance([type]::GetTypeFromProgID("XXXXX"))
    $objProgID.login("ip", 443, "sso ticket", "", "id");
    $objProgID.sendreq(118, "");
    2 条回复    2024-07-04 13:30:57 +08:00
    ysc3839
        1
    ysc3839  
       166 天前 via Android
    直接嵌入 IE 不行吗? IE 占内存也不大吧,不缺这点内存吧?
    Damn
        2
    Damn  
    OP
       166 天前 via iPhone
    @ysc3839 “忽略证书错误”。
    21 天前你也回复了原帖,但证书 CN 和 dns name 字段与实际 host 不符,无法忽略错误。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3554 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:32 · PVG 12:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.