自动注册MSComm控件
MSComm通信控件具有丰富的与串口通信密切相关的属性及事件,提供了一系列标准通信命令的接口,可以用它创建全双工的、事件驱动的、高效实用的通信程序。这里将介绍如何把用MSComm这个ActiveX控件制作的Delphi程序运行在没有注册安装该控件的机器上。
一、发布程序时可以用安装程序,我们这里不介绍,只谈谈如何在程序运行时注册安装MSComm控件。
二、程序运行时自动注册
完整程序如下:
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Registry, shellapi;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- procedure FormCreate(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- function InspectRegedit(): boolean;//检查注册表是否注册
- function InspectControl(): boolean;//检查文件和控件是否复制
- procedure CopyMSCommFile();//复制文件进系统文件夹
- function RegisterMSComm(): boolean;//向注册表中写注册信息
- implementation
- {$R *.dfm}
- function RegisterMSComm(): boolean;//向注册表中写注册信息
- Var
- rs: Boolean;
- Reg: TRegistry;//uses Registry
- begin
- //try
- rs:=false;
- Reg:=TRegistry.Create;
- Reg.RootKey:=HKEY_CLASSES_ROOT;//定位到注册表根键
- if Reg.OpenKey('/Licenses/4250E830-6AC2-11cf-8ADB-00AA00C00905', true) then
- //尝试打开MSComm注册表项,如果不存在则创建该表项
- begin
- //写注册内容
- Reg.WriteString('', 'kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun');
- end;
- //finally
- Reg.CloseKey;//关闭定位的注册表根键
- Reg.Free;//释放对象
- Result:=rs;
- //end;
- end;
- procedure CopyMSCommFile();//复制文件进系统文件夹
- Var
- S_Path: Array [0..255] of Char;
- sp: String;
- begin
- GetSystemDirectory(S_Path, 255);//系统文件夹路径
- sp:=Trim(S_Path);
- {copyfile(源文件地址,目标地址,是否覆盖);}
- if Not(FileExists(sp + '/Mscomm.reg')) then //复制Mscomm.srg
- begin
- CopyFile(PChar('./MSComm控件/Mscomm.reg'), PChar(sp + '/Mscomm.reg'), false);
- end;
- if Not(FileExists(sp + '/Mscomm32.ocx')) then //复制Mscomm32.ocx
- begin
- CopyFile(PChar('./MSComm控件/Mscomm32.ocx'), PChar(sp + '/Mscomm32.ocx'), false);
- end;
- if Not(FileExists(sp + '/Mscomm32.dep')) then //复制Mscomm32.dep
- begin
- CopyFile(PChar('./MSComm控件/Mscomm32.dep'), PChar(sp + '/Mscomm32.dep'), false);
- end;
- //注册该Mscomm32.ocx控件
- winexec(pchar('command.com /c regsvr32 ' + sp + '/Mscomm32.ocx'), sw_hide); //uses shellapi
- end;
- function InspectControl():boolean;//检查文件和控件是否复制
- Var
- rs: Boolean;
- S_Path: Array [0..255] of Char;
- sp: String;
- begin
- try
- rs:=false;
- GetSystemDirectory(S_Path, 255);//系统文件夹路径
- sp:=Trim(S_Path);
- if (FileExists(sp + '/Mscomm.reg')) And //判断当前目录下是否有Mscomm.srg
- (FileExists(sp + '/Mscomm32.ocx')) And //判断当前目录下是否有Mscomm32.ocx
- (FileExists(sp + '/Mscomm32.dep')) then //判断当前目录下是否有Mscomm32.dep
- begin
- rs:=true;
- end;
- finally
- Result:=rs;
- end;
- end;
- function InspectRegedit():boolean;//检查注册表是否注册
- Var
- rs: Boolean;
- Reg: TRegistry;//uses Registry
- begin
- try
- rs:=false;
- Reg:=TRegistry.Create;
- Reg.RootKey:=HKEY_CLASSES_ROOT;//定位到注册表根键
- if Reg.OpenKey('/Licenses/4250E830-6AC2-11cf-8ADB-00AA00C00905', false) then
- //尝试打开MSComm注册表项
- begin
- if Reg.ReadString('') = 'kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun' then
- //注册内容满足注册条件
- begin
- rs:=true;
- end;
- end
- else
- begin
- Application.MessageBox('MSComm尚未在注册表中登记。', '提示', MB_OK);
- end;
- finally
- Reg.CloseKey;//关闭定位的注册表根键
- Reg.Free;//释放对象
- Result:=rs;
- end;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- Form1.Caption:=Application.Title;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- if (Not Unit1.InspectControl) Or (Not Unit1.InspectControl) then
- begin
- if Application.MessageBox('MSComm尚未注册,请问需要自动注册安装吗?', '提示', MB_YesNo+MB_ICONQUESTION) = IDYes then
- begin
- Unit1.CopyMSCommFile;//复制注册文件进系统文件夹
- Unit1.RegisterMSComm;//登记注册表信息
- end;
- end
- else
- begin
- Application.MessageBox('MSComm已经注册不需要重复注册。', '提示', MB_OK+MB_ICONEXCLAMATION);
- end;
- end;
- end.
程序运行时如图:
自动注册MSComm控件相关推荐
- 怎样注册MSCOMM控件
VS2013 + WIN7 + MSCOMM控件 之前在网上下载了一个控件注册的文件,直接运行exe文件就可以,入下图所示.可是最近重装系统后发现直接运行没用了. 先把以上三个文件复制到C:\Wind ...
- 自动注册activex控件
编写Delphi应用程序时,经常会遇到一些ActiveX控件[注:扩展名为OCX的控件或DLL的类型库],它们为应用程序的开发提供了简单的操作途径.然而,这些程序在发布的同时,面临ActiveX控件注 ...
- 注册MSCOMM控件
1.需要的原料: 2.将上诉文拷贝到C:\Windows\System32\文件夹下 在cmd命令行中,输入以下命令即可 C:\Windows\System32>regsrv32.exe MSC ...
- win10注册MSCOMM32控件及简单使用
原文地址::https://www.jianshu.com/p/5c54338b67b2 相关文章 1.解决Win10中MSCOMM32.ocx没注册问题----https://blog.csdn.n ...
- 解决VS2010使用mscomm控件无法接收数据的问题
如果你正在使用2010,并且想用mscomm控件,遇到如下问题,那你可以看看这篇文章: 1. 添加了mscomm控件以及对应的控件变量以后发现以前mscomm的成员函数,类似setsettings() ...
- 解决VS2010使用mscomm控件无法接收数据的问题【转】
之前有用过VC6的mscomm控件.所以这次也想继续用此控件实现此功能,结果没想到刚一上手还真的绕了不少弯子.主要是因为VC2010下对mscomm控件的添加,以及对控件成员变量的添加有点小繁琐,特此 ...
- 串口通讯mscomm控件下载
串口通讯mscomm控件下载 大家知道,当我们安装VC++6.0/VB6.0时,如果选择了ACtiveX控件项(自定义安装),MSComm控件就会自动安装在计算机上了,并在系统文件夹下多了3个文件:M ...
- VS2010如何安装MSComm控件
VS2010在默认情况下是不包含MSComm控件的,MSComm是在VC6.0中的控件,据说MSComm控件有些缺陷,看来微软是打算放弃此控件了.不过对于已经熟悉使用此控件的人来说还是不太方便,我是那 ...
- LabVIEW之MSComm控件注册
问题描述:之前在LabVIEW中使用MSComm控件时,直接使用导入--ActiveX控制至选板就可以看到MSComm控件了,现在换了电脑,重新使用MSComm控件时发现找不到了(原电脑安装VS时选择 ...
最新文章
- 应用TP3.2.3的一些小问题(一)
- Linux调度系统全景指南(终结篇)
- 使用 csv 导入的方式在 SAP S/4HANA 里创建 employee 数据
- DataTrigger 绑定枚举
- 内存检查工具valgrind介绍、安装与使用
- JS事件 内容选中事件(onselect)选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行。...
- 深度学习机器人交易_使用深度学习创建股票交易机器人
- ANSYS FLUENT瞬态模拟动画制作
- 微信运动_刷步思路+Python源码+云部署(持续更新)_一蓑烟雨任平生
- 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
- 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全
- 小学四则运算练习软件需求说明
- python怎么写游戏脚本_用PYTHON做一个简单的游戏脚本(基础,详细)
- 鸿蒙系统第一批升级名单,鸿蒙系统首批升级名单详细介绍
- 三星手机定时开关机设置方法
- vue、Dropdown 下拉菜单、Dropdown属性事件、vue Dropdown 全部下拉菜单、vue Dropdown 全部属性事件
- AppServ 特来电共享充电桩PHPstudy系统开发
- python加法例子_用python给小孩随机生成一组10以内加减法
- 如何在Mercurial中编辑错误的提交消息? [重复]
- 麻省理工时域差分软件 MEEP windows 下编译开发(二)——开始编译