永发信息网

VB程序如何防止打开多个?

答案:6  悬赏:10  手机版
解决时间 2021-02-10 11:31
如何让VB程序防止打开多个的问题?
我想要的效果是:
(如果打开程序在运行,再次打开程序也是打开当前在运行的程序.)
就不是再出显第二个窗口了.是如何做到的.请高手帮帮忙,谢谢了.
谢谢了.
最佳答案
复制下面代码,编译成exe文件,试试看。

Option Explicit
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Function GetWinClass(Hwd As Long) As String
Dim retvalue As Long, TempStr As String * 254
retvalue = GetClassName(Hwd, TempStr, 254)
GetWinClass = StrConv(LeftB(StrConv(TempStr, vbFromUnicode), retvalue), vbUnicode)
End Function

Public Function GetWinText(ByVal hwnd As Long) As String
Dim i As Long, Title As String
Title = String(255, Chr(0))
i = GetWindowText(hwnd, Title, Len(Title) - 1)
GetWinText = StrConv(LeftB(StrConv(Title, vbFromUnicode), i), vbUnicode)
End Function

Private Sub Form_Load()
If App.PrevInstance Then '如果重复启动
Dim Hwd As Long, mhwnd As Long, HwdOld As Long
Dim i As Integer, Title As String, ClassName As String
mhwnd = Me.hwnd
ClassName = GetWinClass(mhwnd)
Title = GetWinText(mhwnd)
HwdOld = mhwnd
mhwnd = 0
Hwd = FindWindowEx(mhwnd, 0, ClassName, Title)
Do Until Hwd = 0
If Hwd <> HwdOld Then '找到先前启动的本程序
ShowWindow Hwd, 1
SetForegroundWindow Hwd
Exit Do
End If
Hwd = FindWindowEx(mhwnd, Hwd, ClassName, Title)
Loop
End
End If
End Sub
全部回答
If App.PrevInstance = True Then End
Private Sub Form_Load() If App.PrevInstance Then MsgBox "系统不允许程序运行多次,请关闭后再试。", vbInformation, "系统提示" End If End Sub
If App.PrevInstance Then MsgBox ("已经运行了一个程序!") End End If
if App.PrevInstance then end 这种要求 App.PrevInstance 就满足不了了,这需要进程和窗口遍历了 c作起来简单,VB就有点麻烦了,c代码要不要
private sub form1_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load if ubound(diagnostics.process.getprocessesbyname(diagnostics.process.getcurrentprocess.processname)) > 0 then messagebox.show("程序已经运行了") end end if end sub
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有的人因时间而改变。有的感情因时间而浓厚,
中国人民银行(渭源县支行)地址有知道的么?有
锦舟宾馆这个地址在什么地方,我要处理点事
QQ空间留言 大侄子 姑姑来看你了 该怎么回复
买了一部新手机,闻到背面有气味,是怎么回事
甘肃省农村信用社(渭源县上湾水务站南)地址有
请仔细观察下边漫画,回答下面的问题。(1)
云峰百货地址有知道的么?有点事想过去
沥青搅拌站与工地的最远间距是多少,有国家规
渭源县五竹信用社地址在什么地方,想过去办事
双色球11个拖码,加4个胆码要花多少钱
泥鳅里的寄生虫煮两个小时能煮死吗?
村长故意破坏他人土地和农作物会受到什么罪
Park hye yeon帮 我翻译成中文,一个人名。谢
月薪10000的带车司机的工作靠谱吗?
推荐资讯
维护的英语翻译 维护用英语怎么说
鼎盛石锅鱼在什么地方啊,我要过去处理事情
昌宁县体育场地址有知道的么?有点事想过去
熙都中医养生馆怎么去啊,有知道地址的么
五个人在路上走,突然掉下来一个广告牌,但为什
鑫泉汽配汽修地址在什么地方,想过去办事
考研的同等学力是什么意思
安徽天都大酒店地址有知道的么?有点事想过去
浙大紫金港的韵达快递在哪儿收啊
无尽贪食首饰和无用冲突吗?还有空城泪,魔战
武乡县墨镫乡华杰中学地址在什么地方,我要处
钻戒质量怎么看?千叶珠宝钻石怎么样?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?