MSComm通信控件具有丰富的与串口通信密切相关的属性及事件,提供了一系列标准通信命令的接口,可以用它创建全双工的、事件驱动的、高效实用的通信程序。这里将介绍如何把用MSComm这个ActiveX控件制作的Delphi程序运行在没有注册安装该控件的机器上。

一、发布程序时可以用安装程序,我们这里不介绍,只谈谈如何在程序运行时注册安装MSComm控件。

二、程序运行时自动注册

完整程序如下:

  1. unit Unit1;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, Registry, shellapi;
  6. type
  7. TForm1 = class(TForm)
  8. Button1: TButton;
  9. procedure FormCreate(Sender: TObject);
  10. procedure Button1Click(Sender: TObject);
  11. private
  12. { Private declarations }
  13. public
  14. { Public declarations }
  15. end;
  16. var
  17. Form1: TForm1;
  18. function InspectRegedit(): boolean;//检查注册表是否注册
  19. function InspectControl(): boolean;//检查文件和控件是否复制
  20. procedure CopyMSCommFile();//复制文件进系统文件夹
  21. function RegisterMSComm(): boolean;//向注册表中写注册信息
  22. implementation
  23. {$R *.dfm}
  24. function RegisterMSComm(): boolean;//向注册表中写注册信息
  25. Var
  26. rs: Boolean;
  27. Reg: TRegistry;//uses Registry
  28. begin
  29. //try
  30. rs:=false;
  31. Reg:=TRegistry.Create;
  32. Reg.RootKey:=HKEY_CLASSES_ROOT;//定位到注册表根键
  33. if Reg.OpenKey('/Licenses/4250E830-6AC2-11cf-8ADB-00AA00C00905', true) then
  34. //尝试打开MSComm注册表项,如果不存在则创建该表项
  35. begin
  36. //写注册内容
  37. Reg.WriteString('', 'kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun');
  38. end;
  39. //finally
  40. Reg.CloseKey;//关闭定位的注册表根键
  41. Reg.Free;//释放对象
  42. Result:=rs;
  43. //end;
  44. end;
  45. procedure CopyMSCommFile();//复制文件进系统文件夹
  46. Var
  47. S_Path: Array [0..255] of Char;
  48. sp: String;
  49. begin
  50. GetSystemDirectory(S_Path, 255);//系统文件夹路径
  51. sp:=Trim(S_Path);
  52. {copyfile(源文件地址,目标地址,是否覆盖);}
  53. if Not(FileExists(sp + '/Mscomm.reg')) then //复制Mscomm.srg
  54. begin
  55. CopyFile(PChar('./MSComm控件/Mscomm.reg'), PChar(sp + '/Mscomm.reg'), false);
  56. end;
  57. if Not(FileExists(sp + '/Mscomm32.ocx')) then //复制Mscomm32.ocx
  58. begin
  59. CopyFile(PChar('./MSComm控件/Mscomm32.ocx'), PChar(sp + '/Mscomm32.ocx'), false);
  60. end;
  61. if Not(FileExists(sp + '/Mscomm32.dep')) then //复制Mscomm32.dep
  62. begin
  63. CopyFile(PChar('./MSComm控件/Mscomm32.dep'), PChar(sp + '/Mscomm32.dep'), false);
  64. end;
  65. //注册该Mscomm32.ocx控件
  66. winexec(pchar('command.com   /c   regsvr32   ' + sp + '/Mscomm32.ocx'), sw_hide); //uses shellapi
  67. end;
  68. function InspectControl():boolean;//检查文件和控件是否复制
  69. Var
  70. rs: Boolean;
  71. S_Path: Array [0..255] of Char;
  72. sp: String;
  73. begin
  74. try
  75. rs:=false;
  76. GetSystemDirectory(S_Path, 255);//系统文件夹路径
  77. sp:=Trim(S_Path);
  78. if (FileExists(sp + '/Mscomm.reg')) And //判断当前目录下是否有Mscomm.srg
  79. (FileExists(sp + '/Mscomm32.ocx')) And //判断当前目录下是否有Mscomm32.ocx
  80. (FileExists(sp + '/Mscomm32.dep')) then //判断当前目录下是否有Mscomm32.dep
  81. begin
  82. rs:=true;
  83. end;
  84. finally
  85. Result:=rs;
  86. end;
  87. end;
  88. function InspectRegedit():boolean;//检查注册表是否注册
  89. Var
  90. rs: Boolean;
  91. Reg: TRegistry;//uses Registry
  92. begin
  93. try
  94. rs:=false;
  95. Reg:=TRegistry.Create;
  96. Reg.RootKey:=HKEY_CLASSES_ROOT;//定位到注册表根键
  97. if Reg.OpenKey('/Licenses/4250E830-6AC2-11cf-8ADB-00AA00C00905', false) then
  98. //尝试打开MSComm注册表项
  99. begin
  100. if Reg.ReadString('') = 'kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun' then
  101. //注册内容满足注册条件
  102. begin
  103. rs:=true;
  104. end;
  105. end
  106. else
  107. begin
  108. Application.MessageBox('MSComm尚未在注册表中登记。', '提示', MB_OK);
  109. end;
  110. finally
  111. Reg.CloseKey;//关闭定位的注册表根键
  112. Reg.Free;//释放对象
  113. Result:=rs;
  114. end;
  115. end;
  116. procedure TForm1.FormCreate(Sender: TObject);
  117. begin
  118. Form1.Caption:=Application.Title;
  119. end;
  120. procedure TForm1.Button1Click(Sender: TObject);
  121. begin
  122. if (Not Unit1.InspectControl) Or (Not Unit1.InspectControl) then
  123. begin
  124. if Application.MessageBox('MSComm尚未注册,请问需要自动注册安装吗?', '提示', MB_YesNo+MB_ICONQUESTION) = IDYes then
  125. begin
  126. Unit1.CopyMSCommFile;//复制注册文件进系统文件夹
  127. Unit1.RegisterMSComm;//登记注册表信息
  128. end;
  129. end
  130. else
  131. begin
  132. Application.MessageBox('MSComm已经注册不需要重复注册。', '提示', MB_OK+MB_ICONEXCLAMATION);
  133. end;
  134. end;
  135. end.

程序运行时如图:

自动注册MSComm控件相关推荐

  1. 怎样注册MSCOMM控件

    VS2013 + WIN7 + MSCOMM控件 之前在网上下载了一个控件注册的文件,直接运行exe文件就可以,入下图所示.可是最近重装系统后发现直接运行没用了. 先把以上三个文件复制到C:\Wind ...

  2. 自动注册activex控件

    编写Delphi应用程序时,经常会遇到一些ActiveX控件[注:扩展名为OCX的控件或DLL的类型库],它们为应用程序的开发提供了简单的操作途径.然而,这些程序在发布的同时,面临ActiveX控件注 ...

  3. 注册MSCOMM控件

    1.需要的原料: 2.将上诉文拷贝到C:\Windows\System32\文件夹下 在cmd命令行中,输入以下命令即可 C:\Windows\System32>regsrv32.exe MSC ...

  4. win10注册MSCOMM32控件及简单使用

    原文地址::https://www.jianshu.com/p/5c54338b67b2 相关文章 1.解决Win10中MSCOMM32.ocx没注册问题----https://blog.csdn.n ...

  5. 解决VS2010使用mscomm控件无法接收数据的问题

    如果你正在使用2010,并且想用mscomm控件,遇到如下问题,那你可以看看这篇文章: 1. 添加了mscomm控件以及对应的控件变量以后发现以前mscomm的成员函数,类似setsettings() ...

  6. 解决VS2010使用mscomm控件无法接收数据的问题【转】

    之前有用过VC6的mscomm控件.所以这次也想继续用此控件实现此功能,结果没想到刚一上手还真的绕了不少弯子.主要是因为VC2010下对mscomm控件的添加,以及对控件成员变量的添加有点小繁琐,特此 ...

  7. 串口通讯mscomm控件下载

    串口通讯mscomm控件下载 大家知道,当我们安装VC++6.0/VB6.0时,如果选择了ACtiveX控件项(自定义安装),MSComm控件就会自动安装在计算机上了,并在系统文件夹下多了3个文件:M ...

  8. VS2010如何安装MSComm控件

    VS2010在默认情况下是不包含MSComm控件的,MSComm是在VC6.0中的控件,据说MSComm控件有些缺陷,看来微软是打算放弃此控件了.不过对于已经熟悉使用此控件的人来说还是不太方便,我是那 ...

  9. LabVIEW之MSComm控件注册

    问题描述:之前在LabVIEW中使用MSComm控件时,直接使用导入--ActiveX控制至选板就可以看到MSComm控件了,现在换了电脑,重新使用MSComm控件时发现找不到了(原电脑安装VS时选择 ...

最新文章

  1. 应用TP3.2.3的一些小问题(一)
  2. Linux调度系统全景指南(终结篇)
  3. 使用 csv 导入的方式在 SAP S/4HANA 里创建 employee 数据
  4. DataTrigger 绑定枚举
  5. 内存检查工具valgrind介绍、安装与使用
  6. JS事件 内容选中事件(onselect)选中事件,当文本框或者文本域中的文字被选中时,触发onselect事件,同时调用的程序就会被执行。...
  7. 深度学习机器人交易_使用深度学习创建股票交易机器人
  8. ANSYS FLUENT瞬态模拟动画制作
  9. 微信运动_刷步思路+Python源码+云部署(持续更新)_一蓑烟雨任平生
  10. 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
  11. 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全
  12. 小学四则运算练习软件需求说明
  13. python怎么写游戏脚本_用PYTHON做一个简单的游戏脚本(基础,详细)
  14. 鸿蒙系统第一批升级名单,鸿蒙系统首批升级名单详细介绍
  15. 三星手机定时开关机设置方法
  16. vue、Dropdown 下拉菜单、Dropdown属性事件、vue Dropdown 全部下拉菜单、vue Dropdown 全部属性事件
  17. AppServ 特来电共享充电桩PHPstudy系统开发
  18. python加法例子_用python给小孩随机生成一组10以内加减法
  19. 如何在Mercurial中编辑错误的提交消息? [重复]
  20. 麻省理工时域差分软件 MEEP windows 下编译开发(二)——开始编译

热门文章

  1. 提高中职计算机知识教学改革途径,提高中职计算机基础知识教学改革的途径
  2. PLC PID控制优化系列之微分先行
  3. JavaAPI解压缩(zip/rar)
  4. 华为aaa服务器是什么系统,华为交换机aaa配置命令是什么
  5. 嵌入式Linux开发环境搭建之八---Ubuntu16.04 tftp环境搭建
  6. 用JQuery方法,将会计数字转换为大写
  7. 快手通过标签添加你什么意思_快手通过关注页添加是什么意思
  8. 你真的需要文档管理软件吗?
  9. 七牛云-CDN常见问题
  10. java 红包接口_微信支付中微信红包的接口测试,Java版本