vb程序,关于DDE技术

就是我的程序,运行到一定时候最小化了,只有进程可见,怎样才能再次运行这个程序时激活已经在运行的进程并且显示相应窗体?网上说有DDE技术,看了一下,似懂非懂的,请指教了。具... 就是我的程序,运行到一定时候最小化了,只有进程可见,怎样才能再次运行这个程序时激活已经在运行的进程并且显示相应窗体?网上说有DDE技术,看了一下,似懂非懂的,请指教了。
具体说,源码展示一下
展开
 我来答
梵天弘业T2
2011-01-17 · TA获得超过2140个赞
知道小有建树答主
回答量:1305
采纳率:0%
帮助的人:980万
展开全部
你的意思是双击一个txt文件吧

可以使用 DDE ,DDE可以在两个程序间发送信息

具体如下:
'把你主窗体的“LinkTopic”属性改为“FormDDE”,把“LinkMode”
'属性改为“1 - Source”,埋如添加一个PictureBox控件作为DDE执行控件,命名为picDDE
'picDDE.LinkTopic = "DDE1|FormDDE" 这句代码中的DDE1 是你的工程名 改成你自己的,或把你的改成DDE1

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

Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)

'CmdStr是接收到信息 在这里就是你打开的文件了
'这里添加打开文件的代码 如调用已有open file方法等等

Cancel = False
End Sub

Private Sub LinkAndSendMessage(ByVal Msg As String)
Dim t As Long
picDDE.LinkMode = 0 '--
picDDE.LinkTopic = "DDE1|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程序时会出乱子的

If Command <> "" Then
LinkAndSendMessage Command '连接DDE接受程序并传送 命令行参数
End If
End ' 结束新程序的运行
End If
End Sub
麦兜Terran
2011-01-17 · TA获得超过2571个赞
知道小有建树答主
回答量:1786
采纳率:0%
帮助的人:1164万
展开全部
'添加一个模块,代码丢进去
'函数使用类型
Public Enum Progress
遍历进程 = 0
计算进程数 = 1
结束进程 = 2
End Enum
'这个不是重点,不解释
Public Function NL(Optional x As Long = 1)
For i = 1 To x
NL = NL & vbCrLf
Next
End Function
'重要功能实现的函数
Public Function Tsk(Optional x, Optional y As Progress = 0)
On Error Resume Next
Select Case y
Case 遍历进程
Set j = GetObject("winmgmts:\\.\root\cimv2").execquery("select * from win32_process")
If x = "" Then
For Each i In j
Tsk = Tsk & i.Caption & NL
Next
Else
For Each i In j
If LCase(i.Caption) = LCase(x) Then Tsk = i.Caption
Next
End If
'类型为0时遍历进程名
Case 计算进程数
Set j = GetObject("winmgmts:\\.\root\cimv2").execquery("select * from win32_process")
If x = "" Then
For Each i In j
z = z + 1
Next
Tsk = z
Else
For Each i In j
If LCase(i.Caption) = LCase(x) Then z = z + 1
Next
Tsk = z
End If
'类型察雹为1时遍历进程名并计算进程数
Case 结束进程
Set j = GetObject("winmgmts:\\.\root\cimv2").execquery("select * from win32_process where name='" & LCase(x) & "'")
For Each i In j
i.Terminate
Next
'结束x进程
End Select
End Function

'窗体载入
Private Sub Form_Load()
x=进程名
'输入一个有效的进程名
If Tsk(x, 1) >= 2 Then End
'当进程超过2时end,结束本程序
End Sub
'现在坦没闹你可以调用Tsk函数了
'msgbox tsk(,1) 列出所有进程数让罩,因为没有写入指定进程所有直接列出所有进程数
'msgbox tsk 列出所有进程名 因为没有写入指定进程名所有列出全部进程名
'if tsk("cmd.exe") <> "" then msgbox "有该进程" else "没有该进程" 因为函数类型默认0可以不用输入0
'tsk "cmd.exe",2 结束cmd.exe进程
'简单吗? 不简单...整个代码使用了43行 用API更复杂 所以我没有贴出API函数方法
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
365297318xu
2011-01-19 · TA获得超过354个赞
知道小有建树答主
回答量:935
采纳率:0%
帮助的人:399万
展开全部
..直接用show函数和hide函数然后做个热键不就行了滑搏?

比如有个窗体洞哗form1
隐藏的时候form1.hide
显示的时候form1.show然纳让行后在这2个代码之间加个热键就可以做到了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式