补充:
if App.PrevInstance then
   msgbox app.exename & "已经运行!"
end if

解决方案 »

  1.   

    Windows 提 供 的 两 个 接 口 函 数GetModuleHandle 和GetModuleUsage 可 以 完 成 此 任 务。 具 体 方 法 如 下, 首 先 在 一 个 新 的 模 块 文 件( *.Bas) 中 声 明API 函 数。 Declare Function GetModuleHandle Lib"Kernel"(ByVallpProgName$) Declare Function GetModuleUsage Lib"Kernel"(ByVal hModule) 同 时 建 立 一 个 子 过 程, 名 字 为main, 子 过 程 中 的 代 码 如 下: Sub Main()
    On Error GoTo errMain‘错误处理
    Dim hModule% ‘模块句柄
    Dim AppCount% ‘应用程序的个数
    appPath$=app.Path + "\" ‘应用程序的启动路径
    hModule %=GetModuleHandle(appPath$+app.EXEName+".exe")‘获得该程序的句柄。
    AppCount %=GetModuleUsage(hModule)‘获得模块代码,即运行的应用程序数目。
    lf AppCount%>1 Then‘同一应用程序数大于1
    MsgBox"程序已经加载",64
    End ‘结束当前启动的应用程序
    Elsc
    mainForm.Show ‘mainForm是程序的主窗体
    End lf
    Exit Sub
    errMain:
    lf Err<>0 Then
    MsgBox"启动程序时发生错误",64
    Exit Sub
    End lf
    End Sub
      

  2.   

     在程序加载时输入:
    Form_Load()
    if App.PrevInstance then
      End
    end if
    End Sub
      

  3.   

    to dragonleon:人家用vb就图个简单,你居然教人家这么麻烦的东东,真是吃力不好讨:)
      

  4.   

    playuser的方法在NT上是不可行的。
    我以前用过DDE的方法做过类似的功能,不但可以检查是否已经运行了同一程序,还可以传递一些自定义的命令,比如 :激活原来的程序或是别的功能。
      

  5.   

    谢谢playuser、dragonleon、Visiona网友。很可惜,不能给dragonleon、Visiona加分。taolei说的不对,我就是在NT4上使用的,playuser的方法完全可行。