Python 开发 ActiveX (comtypes+py2exe)

用python 实现activex网页控件 首先,这个东东貌似只有windows上才能实现,所以,需要部署windows下的相关环境 1、需要安装python 2、安装python的win32com的lib,下载地址: http://sourceforge.net/projects/pywin32/files/ 3、安装本地的web容器,我用的apache的tomcat 4、编写例子: import uuid 阅读详情

转载注明出处

http://blog.youkuaiyun.com/xugangjava/article/details/8450346

工程目录如下:


1.首先编写idl文件

import "oaidl.idl";
import "ocidl.idl";
[
        uuid(80DDC35E-320E-4f9c-979F-522DDCD34FD3),
        dual,
        oleautomation
]

interface IXGUtilitiesInterface : IDispatch {
        HRESULT Hello([in] INT a, [in] INT b, [out, retval] INT *presult);
}
[
      uuid(78FBDE61-B979-47cf-B3EC-15F7814E58B1)
]

library XGUtilitiesLib
{
        importlib("stdole2.tlb");
        [uuid(ED2A47D0-D7CC-4edd-8C17-61361EB1B851)]
              coclass XGUtilitiesObject {
              [default] interface IXGUtilitiesInterface;
        };
};

2.编译idl文件

打开vs 命令行工具cmd,midl XGUtilities.idl /tlb XGUtilities.tlb 在同目录下面生成tlb文件

我的插件是 XGUtilities.tlb

3.编写com实现

# -*- coding: gbk -*-
import comtypes
import comtypes.server.localserver
from comtypes.client import GetModule
#每次改动时需要执行一次,打包时无需执行
#GetModule("XGUtilities.tlb")
from comtypes.gen.XGUtilitiesLib import XGUtilitiesObject
class XGUtilitiesObjectImpl(XGUtilitiesObject): 
    _reg_threading_ = "Both"
    _reg_progid_ = "XGUtilitiesLib.XGUtilitiesObject.1"
    _reg_novers_progid_ = "XGUtilitiesLib.XGUtilitiesObject"
    _reg_desc_ = "许刚工具集"
    _reg_clsctx_ = comtypes.CLSCTX_INPROC_SERVER | comtypes.CLSCTX_LOCAL_SERVER
    _regcls_ = comtypes.server.localserver.REGCLS_MULTIPLEUSE
    
    def Hello(self,a, b):
        return a + b

if __name__ == '__main__':
    from comtypes.server.register import UseCommandLine
    UseCommandLine(XGUtilitiesObjectImpl)

4.编写py2exe打包

# -*- coding: gbk -*-
from distutils.core import setup
import py2exe
import sys

manifest = """
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable></noInheritable>
    <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    <file name="msvcr90.dll" hashalg="SHA1" hash="9785b1c493deb5b2134dc4aef3719cee207001bc"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>VF5ECUAHPV7EnUf+/UIXMPizPvs=</dsig:DigestValue></asmv2:hash></file> <file name="msvcp90.dll" hashalg="SHA1" hash="0f6bbf7fe4fb3fca2cb5b542eca1a1cad051f01c"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>3Wg+StVMq2uhx7POnAkl2w4dDmY=</dsig:DigestValue></asmv2:hash></file> <file name="msvcm90.dll" hashalg="SHA1" hash="7f3290ab2b7444c2b4a9b1fedfdb16466d7a21bb"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>/YfRn7UQENzdMeoMHxTgdRMiObA=</dsig:DigestValue></asmv2:hash></file>
</assembly>
"""

class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        self.version = "0.0.0"
        self.company_name = "http://blog.youkuaiyun.com/xugangjava"
        self.copyright = "@2012,power by 许刚"
        self.name = "http://blog.youkuaiyun.com/xugangjava"

my_com_server_target = Target(
        description = "许刚工具集",
        modules = ["XGUtilities"],
        other_resources = [
                           ("TYPELIB", 1,open(r"XGUtilities.tlb", "rb").read()),
                           (24,1,manifest),
        ],
        create_exe = False
)

setup(
    name="许刚工具集",
    options={"py2exe": {
        "compressed": 2,
         "dll_excludes": ["mswsock.dll", "powrprof.dll"],
         "includes":["comtypes.gen._78FBDE61_B979_47CF_B3EC_15F7814E58B1_0_0_0"]
    }},
    zipfile=None,
    version="0.0.0",
    description="许刚工具集",
    author="许刚",
    author_email="http://blog.youkuaiyun.com/xugangjava",
    ctypes_com_server=[my_com_server_target]
)

运行打包 python setup.py py2exe

reg.bat 内容

regsvr32 XGUtilities.dll

运行注册 

接下来来测试这个插件

Test.html内容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>  
<head>  
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
	<SCRIPT LANGUAGE="JavaScript">
	    window.onload = function () {
	        var obj = new ActiveXObject("XG.Utilities");

	        alert(obj.Hello(1,3));
	    }
	</SCRIPT>
</head>  
<body>  
</body>  
</html> 
打开html 测试成功

为了验证兼容性 ,插件是否依赖python环境,

在没有安装python的环境中测试是否能注册插件,在2003虚拟机(没有安装python环境)下注册插件后


这里html修改为

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>  
<head>  
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
	<SCRIPT LANGUAGE="JavaScript">
	    function Hello() {

	        var obj = document.getElementById("obj")

	        alert(obj.Hello(1,3));
	    }
	</SCRIPT>
</head>  
<body>  
<object id="obj" width="100" height="100" classid="clsid:ED2A47D0-D7CC-4edd-8C17-61361EB1B851" ></object>
<input type="button" value="Hello" onclick="Hello()"/>
</body>  
</html> 


希望大家通过本文的介绍,可以用python快速开发出自己的ActiveX 插件大笑


自己编写一个简单的ActiveX控件——详尽教程 最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件的开发,现在贴出来与大家分享一下~ (环境说明——平台:vs2005;语言:VC++;基于对话框) 阅读详情

相关推荐

ActiveX测试容器最新版支持Python脚本开发

ActiveX测试容器作为调试与测试ActiveX控件的核心工具,其功能不仅限于简单的控件加载与运行,还涵盖了脚本支持、日志记录、自动化测试等多个层面。本章将从测试容器的基本作用、支持脚本语言的测试环境以及其高级功能三个方面进行深入剖析,为后续章节中VBScript与Python脚本的调试应用打下坚实基础。测试容器通常提供集成的脚本编辑器,支持语法高亮、自动补全、错误提示等功能。以下是一个典型脚本执行界面的功能布局:graph LRA[脚本编辑器] --> B[运行按钮]

weixin_42524864的博客 822

python activex_如何在python中使用ActiveX控件

匿名用户1级2016-01-23 回答[html]viewplaincopy<spanstyle="font-family:Arial,Verdana,sans-serif;white-space:normal;background-color:rgb(255,255,255);">首先,这个东东貌似只有windows上才能实现,所以,需要部署windows下...

weixin_39940253的博客 1843

Python 开发Activex组件方法

使用win32com模块开发window ActiveX的示例:(如果你还没有装win32com模块的话,请到http://python.net/crew/skippy/win32/Downloads.html下载)。 复制代码 代码如下: # SimpleCOMServer.py class PythonUtilities: _public_methods_ = [‘SplitString’] _reg_progid_ = “Python.Utilities” _reg_clsid_ = “{A6688635-62F5-41cb-AF54-CBA84C2F0F86}” def SplitSt

你可以用 Python 中的 COM/ActiveX 做什么?

python

704

OpenHarmony实战开发-如何实现文件分布式同步编辑

在分布式文件场景中,分布式设备管理包含了分布式设备搜索、分布式设备列表弹窗、远端设备拉起三部分。首先在分布式组网内搜索设备,然后把设备展示到分布式设备列表弹窗中,最后根据用户的选择拉起远端设备。两台设备组网的分布式场景是工作中常常需要的。这样的分布式场景有助于加快工作效率,减少工作中的冗余,本例将为大家介绍如何实现上述功能。​ (2)订阅分布式数据变化:通过this.distributedObject.on(‘status’, this.statusCallback)监听分布式数据对象的变更。

2401_82546228的博客 750

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

python:ActiveX

文章目录一、application 版本二、基本操作三、数据转换四、创建选择集 一、application 版本 AutoCAD产品名 版本号 ProgID AutoCAD 2004 R16 AutoCAD.Application.16 AutoCAD 2005 R16.1 AutoCAD.Application.16.1 AutoCAD 2006 R16.2 AutoCAD.Application.16.2 AutoCAD 2007 R17 AutoCAD.Applicatio

weixin_44374471的博客 1203

基于ESP32的无线DMX节点设计:从Art-Net/sACN到DMX512的协议转换与实现

在舞台灯光和建筑照明控制系统中,DMX512是行业标准的数字调光协议,用于控制灯具的亮度、颜色和效果。其原理是通过RS-485差分信号串行传输512个通道的数据,每个通道对应一个控制值。然而,传统有线DMX布线复杂、成本高,在移动装置、历史建筑或临时活动中部署困难。为解决此问题,业界发展出了基于以太网的灯光控制协议,如Art-Net和sACN(E1.31),它们将DMX数据封装在UDP包中,通过网络传输。这项技术的核心价值在于实现了灯光控制的网络化与无线化,大幅提升了系统的灵活性和部署效率。其典型应用场景包

weixin_30175731的博客 226

python activex_在Python中使用COM/ActiveX可以做什么?

你基本上可以做相当于后期绑定的工作。所以通过IDispatch暴露的东西都可以被消费。这是我本周末写的一些代码,通过WindowsImageAcquisition2.0从twain设备获取图像,并将数据放入基于gtk的用户界面中。WIA_COM = "WIA.CommonDialog"WIA_DEVICE_UNSPECIFIED = 0WIA_INTENT_UNSPECIFIED = 0WIA_B...

weixin_39826984的博客 365

Ubuntu终端接入Codex:一行脚本搞定AI编程助手安装与配置

在开发者日常工作中,命令行终端是最高频的操作环境,而AI编程助手的出现正在改变传统的编码方式。通过将大模型能力与终端工具链结合,开发者无需切换窗口即可完成命令查询、代码生成、项目理解和自动执行等任务。Ubuntu作为服务器和开发机的主流系统,搭配Node.js生态和API Key认证,即可在本地闭环运行AI助手。本文从环境准备、密钥配置、权限管理到自动化脚本封装,系统拆解在终端中接入Codex的完整流程,并分享高频用法与实测排障经验,帮助开发者安全、高效地让AI融入命令行工作流。

weixin_29061041的博客 321

7-15 估值一亿的AI核心代码

函数封装,含一个字符串中的所有的某个字串全部替换成另一个的函数,还有判断是否独立的函数以上图片来自新浪微博。!

weixin_73529240的博客 601

python开发com组件_python编写的com组件在其他编程语言中无法创建的问题以及R6034问题...

使用python编写一个com组件,在python中可以通过win32com.client.Dispatch来创建和调用方法,但是无法使用vb、vba等其他工具访问,错误代码8007007e,错误消息是automation错误,无法创建activex部件。经过反复研究和网上查找,学习,发现,关键是少了一句话:_reg_clsctx_ =pythoncom.CLSCTX_LOCAL_SERVER分析...

weixin_39653481的博客 464

论文分栏前后内容不连续?教你word如何删除分节符

问题 当我们在写论文的时候,很多期刊的模板都是两栏的格式,但有的时候我们插入的图像尺寸可能太大,两栏格式放不下,因此需要将其以一栏的格式出入,如下: 但当我们把图片删除后,再将其转换成两栏格式,前后内容就出现不连续的情况: 正常情况下应该是如下: 正确处理方式 里面有个分页符,把分页符去掉,或者把你的文字全部复制到记事本里,然后重新复制回word就可以取消原有的格式了。 删除分节符的方法(以word 2019为例) -点击菜单栏上的“视图”,点击“大纲视图”。 可以看到word文档以整列的形式展开:

左手の明天的博客 1万+

组态软件开发(zz)

http://www.ad.siemens.com.cn/service/answer/solution.asp?q_id=53092&amp;cid=1032 底层驱动的开发是一方面,最重要的是稳定性,研发新品不是做出来就能用的,要有一个试运行的过程,在这个过程中不断发现问题和改进问题,所以给客户使用时,系统的稳定性是最重要的。监控组态软件主要是以下几方面组成。1、实时数据库实时数据库,顾名思义...

weixin_34242331的博客 485

利用R语言通过holtwinters模型进行预测

使用Holt-Winters模型进行预测的第一步是对模型进行拟合。该函数需要两个参数:您的时间序列数据和一个“seasonal”参数,该参数指示您的数据的周期性(例如,如果您的数据按月记录,则应将“seasonal”参数设置为12,因为一年有12个月)。拟合模型后,您可以使用“forecast()”函数进行预测。该函数需要两个参数:您的拟合模型以及您要进行预测的时间段的长度。要使用Holt-Winters模型,您需要安装并加载“forecast”包。以下是进行Holt-Winters模型预测的示例代码。

Mrrunsen的博客 1696

cesium 淹没分析

cesium淹没分析

God's asylum的博客 480

用Python读取Access数据库

   使用用PYTHON语言进行数据库编程的方法很多,见老巫-wfh_178的文章用Python实现数据库编程。本文文们将使用ADO(ActiveX Data Object)来实现读取Access数据库(MDB)文件!    首先在IDE中(本文为PYTHONWIN),引用 Microsoft ActiveX Data Objects Library,点击Tools(工具)------>COM M

郭岩(guoyan19811021,吉祥)的专栏 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

wxpython 监听Activex事件

最近在wxpython中嵌入Office Activex 可以用ActivexWarper来实现 不过py2exe打包的时候很麻烦,因为引用了mfc的dll,经常是RunTime Error 只好换成ActiveXCtrl BaseViewer就是一个wxPanel 这个Office控件里面有很多的事件 需要用到,下面是控件的makepy的导出片段 class _DEDOfficeE

xugangjava的专栏 2125

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python activex_Python 中使用 Win32Exts 扩展调用 ActiveX控件 示例

续接前文:本文主要演示如何使用 Python 操作一个实际的ActiveX控件。目标控件为“五虎大战”棋类小游戏,可在这里获取下载:示例如下: 首先导入:win32exts 并初始化 API 列表及 COM 环境:>>> import win32exts>>> win32exts.load_sym("*", "*")>>> win32exts....

weixin_39723010的博客 614

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python开发Activex组件

Python强的功能就在于它无所不能。使用win32com模块开发window ActiveX的示例:(如果你还没有装win32com模块的话,请到http://python.net/crew/skippy/win32/Downloads.html下载)。 # SimpleCOMServer.pyclass PythonUtilities: _public_metho

Klipdas csdn blog 2252

Learing Python : 4. ActiveX控件的实现

ActiveX控件是Ms的一项技术,具体去百度吧。 这是我们密码学与网络安全(2门课放一起上,跪了)课的第一次作业。 好了。要用到的模块是 win32com 。 编写控件,可以写成一个类,然后用 win32com.server.register.UseCommandLine()去注册这个控件,参数是类名。 类的基本代码: class PythonUtilities

Happy Idle Kid 1134

[一]Python通过ActiveX容器嵌入flash

== 基于本地的Python应用程序 == === 写在之前 === 这篇所说的是关于建立python调用Flash的本地应用,不同于Adobe的Apollo。 没有用到浏览器嵌入flash网页的方法,直接在pythonwin或者wxpython建立的窗口中插入Flash ocx。 因为是操作Activex控件的方式因此大概只适用于windows平台。抱歉我并未在其它平台上试过

theshen 4009

python读取word中active控件值

word中出现了这种鬼东西: 问卷很多,同事要帮忙提出来。研究了下,找到py的最佳方法,直接上代码 大概思路就是先转html,然后提取html就简单了,注意一定要用pywin32转,其他的转发,丢东西,这是微软的active控件,只能他们自家转的好。 #!/usr/bin/env python # coding=utf-8 import win32com.client as win32 from bs4 import BeautifulSoup import os from openpyxl impo

wangmarkqi的博客 1513
上一篇: wxpython 拖拽
下一篇: C++ 析构函数
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值