|
|
|
|
|
Dicas
|
|
Visual Basic (Miscelâneas)
|
|
|
Título da Dica: Vefiricar se está rodando um processo antes de executa-lo
|
|
|
|
Postada em 28/7/2003 por MAC
'Neste exemplo o Programa escolhido foi o Calc.exe, 'mas poderia ser qualquer outro, ou se pode criar um 'loop para verificar os programas que vc quiser bloquear 'o acesso a mais de uma vez.
Const TH32CS_SNAPHEAPLIST = &H1 Const TH32CS_SNAPPROCESS = &H2 Const TH32CS_SNAPTHREAD = &H4 Const TH32CS_SNAPMODULE = &H8 Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or _ TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE) Const TH32CS_INHERIT = &H80000000 Const MAX_PATH As Integer = 260 Private Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szExeFile As String * MAX_PATH End Type Private Declare Function CreateToolhelp32Snapshot Lib "Kernel32" _ (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "Kernel32" _ (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "Kernel32" _ (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long) Dim msgaviso As Integer
Private Sub cdmCalc_Click() Dim hSnapShot As Long, uProcess As PROCESSENTRY32 Dim r, strCalc As String Dim varCalc As Variant hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&) uProcess.dwSize = Len(uProcess) r = Process32First(hSnapShot, uProcess) Do While r strCalc = (Left$(uProcess.szExeFile, _ IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, _ InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))) If strCalc = "Calc.exe" Then msgaviso = MsgBox("Calculadora já está ativa!", _ vbExclamation + vbOKOnly, "Resumo de Qualidade") GoTo 10: End If r = Process32Next(hSnapShot, uProcess) Loop varCalc = Shell("Calc.exe", vbNormalFocus) 10: CloseHandle hSnapShot
|
|
|
|
|