VB判断程序已经在运行

如何判断“我的程序.exe”已经在运行,再打开就恢复之前已经打开的程序界面,如果最小化也从任务栏里面恢复到默认窗口,就相当于聚焦已经打开的程序窗口。咱是小虾新手,请VB高... 如何判断“我的程序.exe”已经在运行,再打开就恢复之前已经打开的程序界面,如果最小化也从任务栏里面恢复到默认窗口,就相当于聚焦已经打开的程序窗口。
咱是小虾新手,请VB高手或熟手指教,最好给出具体示例代码(包括API)
netbartp的程序试过了,可以实现直接打开主程序FORM的激活和只允许一个程序运行的功能,但我这个程序有登录的过程,登录的form完成之后就unload了,然后show出主程序的form,这样这个程序就不起作用了。
展开
 我来答
好几碗粥Ry
2010-03-25 · TA获得超过1173个赞
知道大有可为答主
回答量:1118
采纳率:0%
帮助的人:902万
展开全部
'从百度贴吧搜索帖子:“只允许有一个本程序运行的实例”,可找到较全面的资料

Option Explicit
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_RESTORE = &HF120&
Private LockedFile$
'只允许本程序有一个实例运行
'作者:netbartp QQ:89323884
'程序为原创,如需转载请保留此信息
Private Sub Form_Load()
On Error GoTo ErrHand '错误跳转
Dim MeHwnd&, MePid&
LockedFile = "c:\temp.temp" '临时文件

'打开临时文件(如果发生70错误,则判定本程序正在运行中)
Open LockedFile For Binary Access Read Lock Read Write As #1

'将自己的pid存到注册表的一个位置
SaveSetting "AppName", "LoadMe", "MePid", GetCurrentProcessId

'将自己的句柄hwnd存到注册表的一个位置
SaveSetting "AppName", "LoadMe", "MeHwnd", Me.hwnd
Exit Sub
ErrHand:
Select Case Err.Number
Case Is = 70
'获取本程序上次打开时的pid
MePid = GetSetting("AppName", "LoadMe", "MePid")

'获取本程序上次打开时的hwnd
MeHwnd = GetSetting("AppName", "LoadMe", "MeHwnd")
'如果是最小化就将其还原成正常窗口状态
SendMessage MeHwnd, &H112, &HF120&, 0

'激活上次打开的本程序。并退出当前程序
AppActivate MePid: End
Case Else
'其他操作
End Select
End Sub

Private Sub Form_Terminate()
Reset '关闭所有打开的文件
Kill LockedFile '删除临时文件
End Sub
纤纤擢玉手
2010-03-25 · TA获得超过288个赞
知道小有建树答主
回答量:266
采纳率:0%
帮助的人:251万
展开全部
这需要API函数才能实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友39b91c2fb
2010-03-25 · TA获得超过518个赞
知道小有建树答主
回答量:991
采纳率:0%
帮助的人:674万
展开全部
'判断程序已经运行
If App.PrevInstance = True Then

end if
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pdprf
2010-03-25 · 超过16用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:29.6万
展开全部
有判断程序正在运行的代码,不用API的.代码如下:
Private Sub Form_Load()
If App.PrevInstance Then
MsgBox "程序正在运行!"
Unload Me
End If
End Sub

至于聚焦打开的程序窗口嘛,我还不会.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiahuastudio
2010-03-25 · 超过36用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:0
展开全部
测试App.PrevInstance可以防止程序的多个复本运行在同一台计算机上。
如果想恢复之前打开的程序界面,需要用API函数检测已运行程序的窗口标题信息,打开之前运行的程序窗口。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式