网站首页 > 文章中心 > 其它

vb.net检测程序运行

作者:小编 更新时间:2023-10-06 07:32:46 浏览量:303人看过

(VB)如何检查自身程序已经运行?

Private Sub Form_Load()

If App.PrevInstance Then

End

End If

End Sub

用DDE实现窗体防止运行多个实例并传递命令

上网的朋友一定都用过网络蚂蚁(Net Ants)的吧?不知你在使用过程中有没有注意过,那就是如果你想调动两个"蚂蚁"为您效力是不可能的——它总会把新运行的关闭.这点在VB中很容易实现:

MsgBox "你已经运行这个应用程序了"

End ' 退出新运行的程序

这样如果你运行这个程序后在运行它,它会弹出一个消息框并拒绝再次运行.这非常容易. 而"蚂蚁"程序的妙处就在于:在重复运行"蚂蚁"时它不仅拒绝运行,而且能把已经运行的"蚂蚁"激活,这样用上面的程序就无能为力了.但事实上实现拒绝运行并激活已运行的

程序有多种方法:

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

所谓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"

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))

txtInfo.Text = Info ' 把信息显示出来

Cancel = False

Private Sub LinkAndSendMessage(ByVal Msg As String)

Dim t As Long

picDDE.LinkMode = 0 '--

picDDE.LinkTopic = "P1|FormDDE" ' |______连接DDE程序并发送数据/参数

picDDE.LinkExecute Msg '-- 不是字母或数字!

t = picDDE.LinkTimeout '--

picDDE.LinkTimeout = 1 ' |______终止DDE通道.当然,也可以用别的方法

picDDE.LinkMode = 0 ' | 这里用的是超时强制终止的方法

picDDE.LinkTimeout = t '--

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 ' 结束新程序的运行

测试一下:

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

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

字符:

窗体已被最大化

你已经第 1次重复调用这个程序.

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

这时原来运行的程序文本框中又多了几行字:

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

命令行为:

How Are You?

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

vb.net 怎么判断当前程序是否正在运行?

Imports System.Runtime.InteropServices

Module Module1

Sub Main()

Dim instance As Process = RunningInstance()

If instance IsNot Nothing Then

Return

Dim F1 As New Form1

Application.Run(F1) '显示窗体

Public Function ShowWindowAsync(ByVal hWnd As System.IntPtr, ByVal cmdShow As Integer) As Boolean

End Function

Private Function RunningInstance() As Process '返回进程中已经打开的程序

Dim current As Process = Process.GetCurrentProcess()

Dim processes As Process() = Process.GetProcessesByName(current.ProcessName)

For Each process As Process In processes

If process.Id current.Id Then

If process.MainModule.FileName = current.MainModule.FileName Then

Return process

Next

Return Nothing

End Module

vb.net 检查程序已运行

这个提供进程即可以判断程序是否已经启动

这个是最一般的方法了

希望能帮到你

VB.net获取程序运行状态

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim MyInfo As String = "系统正在运行的程序" ◆ vbCrLf

Dim MyProcesses() As Process = Process.GetProcesses()

For Each MyProcess As Process In MyProcesses

If (MyProcess.MainWindowTitle.Length 0) Then

MyInfo ◆= MyProcess.MainWindowTitle ◆ vbCrLf

Me.Label1.Text = MyInfo

VB.NET怎样判断一个应用程序是否在运行

用process.GetProcesses()

或者process.GetProcessByid() 获取进程信息,

以上就是土嘎嘎小编为大家整理的vb.net检测程序运行相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章