Vb6 App.PrevInstance未刷新自身

Vb6 App.PrevInstance未刷新自身,vb6,Vb6,我试图检查应用程序的另一个实例是否已经在运行。如果有,我想在继续之前再检查15秒左右 if App.PrevInstance then dim dtStart as date dtStart = now do while datediff("s", dtStart, Now) < 15 Sleep 1000 ' sleep for a second if not App.PrevInstance then exit do loop end if

我试图检查应用程序的另一个实例是否已经在运行。如果有,我想在继续之前再检查15秒左右

if App.PrevInstance then 

  dim dtStart as date
  dtStart = now 

  do while datediff("s", dtStart, Now) < 15
    Sleep 1000  ' sleep for a second
    if not App.PrevInstance then exit do
  loop

end if
如果App.PrevInstance那么
开始日期
dtStart=now
当datediff(“s”,dtStart,Now)小于15时执行
睡1000’睡一秒钟
如果不是App.PrevInstance,则退出do
环
如果结束
问题是App.PrevInstance似乎没有自我刷新。不管发生什么,它都保持初始值


还有别的办法吗?也许是API调用。请注意,应用程序可能有也可能没有窗口,因此我无法检查是否存在带有特定标题的窗口

您可能想查看一下:

我使用以下类:

'--------------------------------------------------------------------------------------- ' Module : CApplicationSingleton ' DateTime : 24/03/2006 15:16 ' Author : Fernando ' Purpose : Enforces a single instance of an application. Uses a Mutex ' see http://www.codeguru.com/forum/showthread.php?s=&threadid=293730 ' http://www.codeguru.com/Cpp/W-P/system/processesmodules/article.php/c5745/ ' Copyright © 2001-2007 AGBO Business Architecture S.L. '--------------------------------------------------------------------------------------- Option Explicit Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Const ERROR_ALREADY_EXISTS = 183& Private m_hMutex As Long Private m_lLastDllError As Long Private Sub Class_Initialize() ' On Error GoTo errorBlock ' Dim s As SECURITY_ATTRIBUTES m_hMutex = CreateMutex(s, 0, rcString(8700)) m_lLastDllError = Err.LastDllError ' exitBlock: Exit Sub errorBlock: Call GError.handleError(Err.Number, Err.Description, Erl, "CApplicationSingleton", "Class_Initialize", GApp.copyDebugFiles()) Resume exitBlock ' End Sub Private Sub Class_Terminate() On Error GoTo errorBlock If m_hMutex > 0 Then Call CloseHandle(m_hMutex) End If exitBlock: Exit Sub errorBlock: Call GError.handleError(Err.Number, Err.Description, Erl, "CApplicationSingleton.cls", "Class_Terminate") Resume exitBlock End Sub Public Function IsAnotherInstanceRunning() As Boolean ' On Error GoTo errorBlock ' IsAnotherInstanceRunning = (m_lLastDllError = ERROR_ALREADY_EXISTS) ' exitBlock: Exit Function errorBlock: Call GError.handleError(Err.Number, Err.Description, Erl, "CApplicationSingleton", "IsAnotherInstanceRunning", GApp.copyDebugFiles()) Resume exitBlock ' End Function “--------------------------------------------------------------------------------------“模块:CapApplicationSingleton”日期时间:24/03/2006 15:16“作者:Fernando”目的:强制应用程序的单个实例。使用互斥“请参阅”http://www.codeguru.com/forum/showthread.php?s=&threadid=293730 ' http://www.codeguru.com/Cpp/W-P/system/processesmodules/article.php/c5745/ “版权所有©2001-2007 AGBO Business Architecture S.L.”--------------------------------------------------------------------------------------- 选项显式 私有声明函数CreateMutex Lib“kernel32”别名“CreateMutexA”(lpMutexAttributes作为SECURITY_属性,ByVal binitilowner作为Long,ByVal lpName作为String),私有声明函数CloseHandle Lib“kernel32”(ByVal hObject作为Long)作为Long 私有类型安全属性 长度等于 lpSecurityDescriptor的长度 长柄 端型 私有常量错误\u已\u存在=183& 长的私有m_hMutex和长的私有m_lLastdler和长的私有m_hMutex和长的私有m_lLastdler和长的私有m_lLastdler 私有子类_Initialize()' 关于错误转到错误块 ' 作为安全属性的Dim s m_hMutex=CreateMutex(s,0,rcString(8700))m_llastdlleror=Err.LastDllError ' 出口锁: 出口接头 错误块: 调用GError.handleError(Err.Number,Err.Description,Erl,“cappplicationsingleton”,“Class_Initialize”,GApp.copyDebugFiles()) 恢复退出锁定 '末端接头 错误转到errorBlock时的私有子类_Terminate() 如果m_hMutex>0,则 如果出现以下情况,则调用CloseHandle(m_hMutex)End 出口锁: 出口接头 错误块: 调用GError.handleError(Err.Number,Err.Description,Erl,“cappplicationsingleton.cls”,“Class_Terminate”) 恢复退出锁定 端接头 公共函数IsAnotherInstanceRunning()为布尔值' 关于错误转到错误块 ' ISANTHERINSTANCERUNING=(m_lLastDllError=错误\u已存在) ' 出口锁: 退出功能 错误块: 调用GError.handleError(Err.Number,Err.Description,Erl,“cappplicationsingleton”,“IsAnotherInstanceRunning”,GApp.copyDebugFiles()) 恢复退出锁定 '结束函数
我使用互斥类解决了同一问题,多次启动同一个应用程序。它似乎正在工作,然后停止工作,返回假阳性。我发现VB6IDE在IDE仍然打开时也持有一个互斥锁

你必须使用代码并编译它。关闭IDE后,EXE将正常工作。。谁知道呢?有几分钟把我逼疯了


如果有人想要,我会发一个样品

+1,我们使用互斥体而不是应用程序。例如,它们工作正常。实际上,我还没有仔细研究该链接中的互斥API代码以确保其正确性,但它看起来是正确的?(-: