我要开机自动启动一个程序111.exe,但是不希望出现多个111.exe的进程,就是说第二个用户登录的时候,自动启动111.exe进程的时候弹出警告,不再运行,如何实现??  
我用app.PrevInstance做过,但那只是在单用户的时候才有效,遍历进程是一种方法,有没有其他简单的方法,请教了。

解决方案 »

  1.   

    form_load里加上
        If App.PrevInstance Then
          MsgBox "已经启动"
          End
        End If
      

  2.   

    用原子量吧(atom),api GlobalAddAtom和GlobalDeleteAtom
      

  3.   

    第一个程序启动时用 GlobalAddAtom 添加一个atom
     GlobalFindAtom找当前global atom table 是不是有了一个GlobalAddAtom 添加的atom
    有的话,退出并弹出警告,没有的话,用 GlobalAddAtom 添加一个atom
    程序结束,一定要用和GlobalDeleteAtom清除那个atom
      

  4.   

    可以使用DOS命令:tasklist,检查是否已经运行了111.exe,如果运行了,就不在运行。shell "tasklist >D:\11.txt" 可以把运行进程的结果存入文本文件。剩下的就是读文本文件的问题了。
      

  5.   

    土一点的办法是用注册表或文件。进程启动的时候向注册表或某个文件中写一个标志,退出的时候清除这个标志。推荐用系统的内核对象,貌似FILE,WAITABLETIMER,MUTEX,ATOM之类的都可以。
      

  6.   

    可以用文件加锁,比较简单
    'Module1
    Option ExplicitPrivate m_hFile As IntegerSub Main()
        If Not LockFile(App.Path & "\" & App.EXEName & ".txt") Then
            MsgBox "已经有实例在运行!", vbExclamation
            Exit Sub
        End If
        
        Form1.Show
    End SubFunction LockFile(ByVal FileName As String) As Boolean
        On Error GoTo ErrHandler    m_hFile = FreeFile()
        Open FileName For Output Access Write Lock Write As #m_hFile    LockFile = True
    ExitEntry:
        Exit Function
    ErrHandler:
        Resume ExitEntry
    End FunctionSub UnloadFile()
        On Error Resume Next
        Close #m_hFile
        On Error GoTo 0
    End Sub
    'Form1
    Option ExplicitPrivate Sub Form_Unload(Cancel As Integer)
        UnloadFile
    End Sub