如何只运行一个程序?在线等!

zhuanzhu_zhizhuo 2006-09-14 10:50:58
做的个程序
单机版的
怎么让机器知道该程序已经运行,操作者在运行该程序的时候,不得
再次启动该程序啊?
望各位指教!
...全文
189 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuanzhu_zhizhuo 2006-09-15
  • 打赏
  • 举报
回复
致:::pigsanddogs(我爱吃猪肉,但是长不胖,为什么??)

您给的这个api函数,是?????
能给我解释一下吗
我主要是来学习,谢谢!!
zhuanzhu_zhizhuo 2006-09-15
  • 打赏
  • 举报
回复
。。。。。。。。。多看看基础东东吧,VB的教程里一般都提到了这个问题。不要着急做东西麻,先利其器,再攻其玉吧

====================================================================================
基础的东西是一直再看
可是还真没看到过这个呢,
不是急不急的问题,有时不做东西,发现不了这么多问题

吾非大神 2006-09-15
  • 打赏
  • 举报
回复
关注
学习
吾非大神 2006-09-15
  • 打赏
  • 举报
回复
致:::pigsanddogs(我爱吃猪肉,但是长不胖,为什么??)

谢谢拉!!!
pigsanddogs 2006-09-15
  • 打赏
  • 举报
回复
你写到代码里面去就没错。

是一个api。 创建一个mutex互斥对象,是系统核心对象, 所以是所有进程都能访问。
如果创建一个存在的互斥对象,那么一样会返回这个句并
但是GetLastError会返回183&(ERROR_ALREADY_EXIST)
由于GetLastError在vb没作用(因为vb会重新SetLastError)
但是为了让你用这个dll的lasterror, vb故提供了 Err.LastDllError
来保留dll的lasterror值。

你要关心的只是 mutex的名字 "your application title"
mutex在系统中有唯一名字。 同一个名字指向同一个mutex。
所以你必须保证他的唯一性, 你可以用你的应用程序标题, 再加点东西。
总之不要跟别人重复了就好。
清晨曦月 2006-09-14
  • 打赏
  • 举报
回复
。。。。。。。。。多看看基础东东吧,VB的教程里一般都提到了这个问题。不要着急做东西麻,先利其器,再攻其玉吧
flfq 2006-09-14
  • 打赏
  • 举报
回复
Public Sub Main()

If App.PrevInstance Then
MsgBox "已有应用程序的一个实例正在运行!", vbCritical, App.Title
End
End If

End Sub
gsfcstx16 2006-09-14
  • 打赏
  • 举报
回复
If App.PrevInstance Then
MsgBox ("程序已经运行!"), vbExclamation
Unload Me
End
End If

不用声明,直接调用就可以
吾非大神 2006-09-14
  • 打赏
  • 举报
回复
学习ing
wully 2006-09-14
  • 打赏
  • 举报
回复
'这个写在Form_Load里
Call CheckExist(Me)

''这个是一个模块
Public Sub CheckExist(fm As Form)

Dim title As String

If App.PrevInstance Then
title = App.title
App.title = ""
fm.Caption = ""
AppActivate title
End
End If
End Sub
吾非大神 2006-09-14
  • 打赏
  • 举报
回复
致楼上
调用的那个函数要怎么声明呢?
hanstins 2006-09-14
  • 打赏
  • 举报
回复
If App.PrevInstance Then
MsgBox ("程序已经运行!"), vbExclamation
Unload Me
End
End If
laviewpbt 2006-09-14
  • 打赏
  • 举报
回复
try to search
pigsanddogs 2006-09-14
  • 打赏
  • 举报
回复
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Sub main()
If 0 = CreateMutex(ByVal 0, 0, "your application title") Then Unload Me
If Err.LastDllError = 183& Then Unload Me
End Sub
happy_sea 2006-09-14
  • 打赏
  • 举报
回复
用App.PrevInstance的一个弊端就是:如果把这个exe复制一份到其他目录,那么就可以再次运行了。要避免这种情况可以用互斥体。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧