矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2907|回复: 15

感觉Windows的自动化对象模型编程模式真的很强

[复制链接]
     
发表于 2022-11-5 16:27:37 | 显示全部楼层 |阅读模式
windows从98开始提倡的应用程序支持COM对象自动化模型,感觉很宏大。

用对象自动化模型,允许其他程序控制某个程序,只要用支持创建对象的语言都能支持这种程序操作。并且不用第三方的库,关键还能自带文档
举个例子,用windows的PowerSHell ISE控制excel应用程序,powershell ISE从Win7开始就自带了。
敲入$excel = New-Object -ComObject Excel.Application
然后再$excel回车,
1.png
好家伙,直接列出了excle的各种属性、方法。里面更多的子对象的属性和方法,也都可以在ISE中显示。
这些文档不是powershell的,也不是excel将帮助文件插入到powershell的帮助文件里面的。是使用微软的COM编程模型必须要支持的,直接暴露给外部程序他们的属性和控制方法,以便外部程序控制他来操作。

整个windows自带的管理组件(例如组策略、网络设置,防火墙等)都支持COM对象控制模式,都能用COM方式控制它进行自动化操作、设置。


好像LINUX没有这种自动化操作,有也只是支持控制程序的"外部"操作,但对于程序的"内部"操作没法实现控制吧。

windows经常这么多bug,是不是也是这个原因?因为支持COM自动化的话,就必须要进程间的操作,有时候接近于类似内存直接操作(例如控制对象的属性读写)。
发表于 2022-11-5 19:12:42 | 显示全部楼层
本帖最后由 girlexplorer 于 2022-11-5 19:17 编辑

这个好像就是早期高大上的面向对象编程。
编程语言里好像叫class。import.system. 啥的。
不知pascal语言还是lotus-1-2-3好像就被这个搞掉的。
回复 支持 反对

使用道具 举报

     
发表于 2022-11-5 20:08:02 | 显示全部楼层
linux下借助管道|粘合多个程序实现一些操作,简单又强大
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-11-5 21:05:34 | 显示全部楼层
DOS也能进行管道操作,但管道操作/命令行这种方式只能对程序外部进行操作,但没法对程序内部或者交互功能进行操作。
虽然现在也有发送键盘命令的程序模拟人工操作,但这种还是很有局限性,还是不够Window的COM这种技术好用

回复 支持 反对

使用道具 举报

     
发表于 2022-11-6 09:34:44 | 显示全部楼层
girlexplorer 发表于 2022-11-5 19:12
这个好像就是早期高大上的面向对象编程。
编程语言里好像叫class。import.system. 啥的。
不知pascal语言 ...

COM 不是面向对象的,否则微软后来就不必搞 .net

.net 才是面向对象的,COM 已经是上世纪的落后技术,不过因为它是专门为 MS C++ 开发的,而 MS C++ 程序员还有很多,所以一直支持它

import.system 这个是 .net
回复 支持 反对

使用道具 举报

发表于 2022-11-6 10:36:42 | 显示全部楼层
太過強大有時也不是好事, 動輒 1MB 的 HELLO WORLD 可執行檔也常有.
包裝太好了, 沒有源碼出事了就只能等人救駕
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-11-6 11:10:41 | 显示全部楼层
支持COM这种编程模式,对于程序自动化非常好用,你可以编写一个程序,将不同公司不同程序整合起来,自动化完成你想做的事情。
例如控制IE打开某个网页,自动填入密码登陆,控制它再跳转某个网页,取出某区域内容,然后自动打开excel,将内容填入excel中。
当然,你说excel也有打开网页功能,但VBA控制网页的功能实在有限。
如果不支持COM这种的话,你需要自己编写一个excel,自己编写一个IE.  而COM就是能实现二进制代码重用的一种很好的方法。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-11-6 11:51:19 | 显示全部楼层
.net COM技术本质就死二进制代码重用,这个概念很超前也很有用,
继续举个例子,例如你的电脑接了好几种仪器,每个仪器都是自己的客户端软件,想得到一次完整测量,需要操作完这个客户端然后又操作另一个客户端软件,只能人工操作。
虽然现在有GBIB这种总线可以将支持GPIB的仪器连接起来,但操作软件还是需要编写。虽然有NI这种接近平台的软件,但各个仪器需要支持NI平台才行。
但如果各个客户端软件编写是遵从二进制代码重用(.net/COM)规范,暴露出接口/功能,你就可以轻易用脚本来控制多个仪器了。

其他操作系统例如LINUX/安卓等好像没看到有这种‘二进制代码重用’的技术规范。
回复 支持 反对

使用道具 举报

发表于 2022-11-6 11:51:39 | 显示全部楼层
本帖最后由 girlexplorer 于 2022-11-6 12:28 编辑
locky_z 发表于 2022-11-6 11:10
支持COM这种编程模式,对于程序自动化非常好用,你可以编写一个程序,将不同公司不同程序整合起来,自动化 ...


确实很有用。对于不大通用的需求,特别有用。

例如,2000名员工,员工档案。
如果一个员工一个word页面,则无法统计,例如统计工程师有多少人,无法统计。
要添加栏目,必须2000个word页面都添加,累坏。

如果全放在excel数据库里,统计方便,添加栏目方便,但如果头头要求调出所有几百名工程师的档案,必须是word或ppt格式,每个员工一张页面,则必须从excel一格一格的复制,到word里一格一格的粘贴,累坏。

利用自动化技术,自动在搜索excel数据库,自动打开word模板,自动提取excel数据,自动到word里填充,自动保存,一个员工一个word页面,或一个word文件,一秒钟完成。

仅是举例。对于通用应用,有专业软件,例如人事管理软件。

回复 支持 反对

使用道具 举报

发表于 2022-11-6 21:50:37 | 显示全部楼层
本帖最后由 girlexplorer 于 2022-11-6 22:07 编辑

想当年,老衲在砖瓦厂打工时,也就微微会点word和excel,差不多也就会输入自己名字吧。

忽一日,厂里从上到下,从左到右,都流行起了project。老衲总是学不会project,一改日期,乱成一团。老衲没办法,只能在excel里建日程安排,然后用ole自动化生成project。

后来,遇到了一个外厂的,project用的贼溜,问其技巧,答曰,他们整天搞项目,天天用。用project之前,他们请软件公司开发了项目管理软件,不好用,那时他们居然不知道有project,钱白花了。他说project好用。


回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-11-7 11:35:35 | 显示全部楼层
这种二进制代码重用的方式,算不算一种开放或者开源的态度,
虽然我不开源,但我允许你的程序操控我。类似于我在后台帮你默默实现,前台风光你的应用独占。

假如没有支持这种自动化操作,等于要自己编写一个同样功能的模块,实际上,即使开源,你重新写一个office,估计也超过10人*年。

回复 支持 反对

使用道具 举报

     
发表于 2022-11-9 14:01:56 | 显示全部楼层
washu 发表于 2022-11-6 09:34
COM 不是面向对象的,否则微软后来就不必搞 .net

.net 才是面向对象的,COM 已经是上世纪的落后技术, ...

COM是面向对象思想的典型应用,封装+多态。提供了标准的二进制接口。后来的.NET和COM本身也不是一个层面的东西,但它里面应用了很多COM相关的技术,对COM的支持也非常好,大大简化了COM的实现。.NET组件对外的暴露的接口还是COM那套ITypeInfo/ITypeLib/IDispatch之类的东西。这玩意已经成为Windows的基石了。现在Windows的很多API也在逐渐COM化,啥时候COM就落后了?
另外,就算不直接使用COM,很多大型应用里也有一套与COM类似的东西,原理和技术都一样,只是规范不同而已。
回复 支持 反对

使用道具 举报

     
发表于 2022-11-9 14:12:15 | 显示全部楼层
locky_z 发表于 2022-11-6 11:51
.net COM技术本质就死二进制代码重用,这个概念很超前也很有用,
继续举个例子,例如你的电脑接了好几种仪 ...

CORBA差不多就是能与COM这套技术(包括OLE,COM+等)对等的东西。
XPCOM就是与最原始的COM接口差不多的东西。
都比不过MS强推自家的东西...反正不管别人用不用,我自己的东西都用
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2022-11-9 16:19:43 | 显示全部楼层
本帖最后由 locky_z 于 2022-11-9 16:20 编辑

01年左右买过一本delphi/BCB for CORBA/COM的书,一直看不明白,当时也不清楚这是啥,有啥用。
直到最近这十年,首先接触到IE的“文档对象模型”,然后接触到Vbs的脚本,然后到office的VBA各种控制对象文档,最近有研究了一下Win7开始自带的PowerShell,才觉得COM这种模式很实用。

不过感觉一个软件要支持COM这种编程模型,整体思路复杂了很多,很多东西要重新细分规划过。并且我仅仅说的是COM,还未涉及到DCOM.
回复 支持 反对

使用道具 举报

     
发表于 2022-11-9 17:01:01 | 显示全部楼层
编程序很好玩,可是怎么都学不会
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-27 17:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表