工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VB > 正文
VB中使用DDE技术为应用程序增辉
[文章信息]
作者:
时间:2005-02-26
出处:梦蝶网
责任编辑:方舟
[文章导读]
上网的朋友一定都用过网络蚂蚁(Net Ants)的吧?不知你在使用过程中有没有注意过
advertisement
热点推荐
· Java新手留意:Java编程三十条规则
· CDSpace 虚拟的光盘空间
· 动画图解:Word斜线表头的制作
· 设计欣赏:《夜精灵》之守望
· 2月25日软件精选 Winxp无线网络技术
[正文]
  上网的朋友一定都用过网络蚂蚁(Net Ants)的吧?不知你在使用过程中有没有注意过,那就是如果你想调动两个“蚂蚁”为您效力是不可能的——它总会把新运行的关闭。 而“蚂蚁”程序的妙处就在于:在重复运行“蚂蚁”时它不仅拒绝运行,而且能把已经运行的“蚂蚁”激活,这样用上面的程序就无能为力了。但事实上实现拒绝运行并激活已运行的程序有多种方法:

  1、用FindWindow函数得到已经运行窗体的句柄(HWND),然后用SetActiveWindow等API函数将其激活。其缺点也很明显,那就是没法传递参数。

  2、用FindWindow函数得到已运行窗体的句柄后用SendMessage的方法给窗体传送一个自定义消息(附带参数),然后在窗体中拦截并进行处理,但这样做要修改窗体的标准消息处理程序,用在VC,BC或DELPHI编写的程序中还行,但在VB中工作量太大,并且容易发生“一
般保护行错误”使VB崩溃,不太可取(当然,如果你有足够的信心和不怕崩溃的精神,也可以试一下)。

  3、使用DDE技术

  所谓DDE技术,就是动态数据交换技术。也许你很奇怪,这与本文所讨论的内容有什么相干的?且听我慢慢讲来。

  为了实现拒绝运行并把已经运行的程序激活并实现各种功能,我们可以先用本文开头提到的方法,检测一下程序有没有被运行过,如果没有,就正常运行,如果已经被运行过,就打通与它的DDE通道,传给它一个(或一些)数据,然后由已经运行的程序对数据进行处理,再去实现各种“意想不到”的功能,这时也许就有人对这你的程序喊:“酷、酷……”

  好了,耳听为虚,眼见为实,下面让我们动点真格的。

  打开VB,新建一个工程,选择菜单中的“工程->工程1 属性”,把工程名称改为“P1”,把已有的一个窗体的“LinkTopic”属性改为“FormDDE”,把“LinkMode”属性改为“1 - Source”,添加一个PictureBox控件作为DDE执行控件,命名为picDDE。然后添加一个 TextBox控件,命名为“txtInfo”,并把“MultiLine”属性设置为“True”,以便显示多行文本,作为消息显示控件。

  最后在窗体代码区输入以下代码:

Const COMMANDLINE = "CommandLine=" 注释: 还是为了省事,定义一个常量

Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
Static lngCount As Long
Dim Info As String

Info = txtInfo.Text 注释: 保留原有信息

Select Case CmdStr 注释: CmdStr 是DDE程序传送过来的参数
Case "Max"
Me.WindowState = 2
Info = Info + vbNewLine + "窗体已被最大化"
Case "ShowTime"
Info = Info + vbNewLine + "最后一次运行这个程序的时间是:" + Str(Now)
Case "Count"
lngCount = lngCount + 1
Info = Info + vbNewLine + "你已经第" + Str(lngCount) + "次重复调用这个程序。" _
+ vbNewLine + "但怕您不多给工资,所以只运行了一个 ^_^"
End Select

If Left(CmdStr, Len(COMMANDLINE)) = COMMANDLINE Then
Info = Info + vbNewLine + "新程序曾以命令行形式运行" + vbNewLine + "命令行为:" _
+ vbNewLine + Right(CmdStr, Len(CmdStr) - Len(COMMANDLINE))
End If

txtInfo.Text = Info 注释: 把信息显示出来

Cancel = False

End Sub


Private Sub LinkAndSendMessage(ByVal Msg As String)
Dim t As Long
picDDE.LinkMode = 0 注释:--
picDDE.LinkTopic = "P1|FormDDE" 注释: |______连接DDE程序并发送数据/参数
picDDE.LinkMode = 2 注释: | “|”为管道符,是“退格键”旁边的竖线,
picDDE.LinkExecute Msg 注释:-- 不是字母或数字!

t = picDDE.LinkTimeout 注释:--
picDDE.LinkTimeout = 1 注释: |______终止DDE通道。当然,也可以用别的方法
picDDE.LinkMode = 0 注释: | 这里用的是超时强制终止的方法
picDDE.LinkTimeout = t 注释:--
End Sub


Private Sub Form_Load()
If App.PrevInstance Then 注释: 程序是否已经运行

Me.LinkTopic = "" 注释: 这两行用于清除新运行的程序的DDE服务器属性,
Me.LinkMode = 0 注释: 否则在连接DDE程序时会出乱子的

LinkAndSendMessage "Max" 注释:--
LinkAndSendMessage "Count" 注释: |-----连接DDE接受程序并传送数据/参数
LinkAndSendMessage "ShowTime" 注释:--

If Command <> "" Then 注释: 如果有命令行参数,就传递过去
LinkAndSendMessage COMMANDLINE + Command
End If
End 注释: 结束新程序的运行
End If
End Sub

  测试一下:

  把工程“P1”编译成EXE文件(设名称为 P1.EXE )

  1、打开“我的电脑”,找到 P1.EXE 并执行。可以看到程序正常运行了。

  2、再运行一次,这次新程序没有运行成功,而原来运行的程序却被最大化了,而且文本框中有以下字符:

  窗体已被最大化
  你已经第 1次重复调用这个程序

  但怕您不多给工资,所以只运行了一个 。

  最后一次运行这个程序的时间是:05-2-6 7:11:01

  3、打开 MS-DOS方式 ,用命令行方式再次运行程序,如 “P1 How Are You?”,这时原来运行的程序文本框中又多了几行字:

  窗体已被最大化
  你已经第 2次重复调用这个程序。
  但怕您不多给工资,所以只运行了一个
  最后一次运行这个程序的时间是:05-2-6 7:14:32

  新程序曾以命令行形式运行

  命令行为:

  How Are You?

  OK,运行完全正确,然后你就可以把它应用的你的程序中了。

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • Visual Basic编程的七个优良习惯
  • 用Visual Basic设计个性化文件夹图标
  • 用VB6在托盘程序中加入应用程序图标
  • Visual Basic上机考试综合应用题选讲
  • VB编程破解Windows屏幕保护密码
  • 无需再购新浪股票 传盛大已总体控股新浪36%
  • 微软否认XP优惠遭冷遇 开始发放电子优惠券
  • 电盈网通公布中国业务发展计划 合作四大块
  • KDDI开通手机游戏网站 43家公司350种类任选
  • 美国民众看淡电子政务 有事依然打电话
  • 预测:中国软件市场未来将呈现六大发展趋势
  • “花花公子”和“绅士” 新浪会落到谁手里?
  • 京城手机价格本周大震荡 主流品牌降幅达20%
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索