View Full Version : [VB] Intercettare un'applicazione già aperta
robnet77
14-11-2003, 08:57
Avrei bisogno di intercettare (credo tramite API) l'eventuale presenza di un programma (tipo Autocad) aperto, per poi fargli eseguire uno script che già ho pronto.
Qualcuno sa come fare? :help:
Grazie!
ecco qua, ovviamente in luogo di Notepad devi aggiungere il nome della finestra di Autocad
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Public Declare Function FlashWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal bInvert As Long) As Long
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub Test()
Dim hWnd As Long
Dim retval As Long
hWnd = FindWindow(vbNullString, "Notepad")
If hWnd = 0 Then
MsgBox ("Applicazione non attiva!!")
Else
MsgBox ("L'applicazione è attiva!!")
End If
End Sub
Secondo me ti conviene prendere l'handle del processo non della finestra...in molti programmi una finestra è diversa da un altra...per esempio in un programma con form MDI, il titolo prende il nome del programma + la form child aperta! La fregatura che che come WORD nn so ti trovi Nuovo documento 1, nuovo documento 2 e così via...
Private Const TH32CS_SNAPPROCESS = 2
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 * 260
End Type
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Function GetIDProcess(ByVal sProcessName As String) As Long
'ricera un handle di un applicazione
Dim vVetAux As Variant
Dim vProc As Variant
Dim nI As Integer
Dim nLen As Integer
vProc = GetListProcesses()
nLen = UBound(vProc)
Do
nI = nI + 1
vVetAux = Split(vProc(nI), Chr$(0))
If UCase$(sProcessName) = UCase$(vVetAux(0)) Then
GetIDProcess = vVetAux(1)
End If
Loop Until nI = nLen Or GetIDProcess <> 0
End Function
Public Function GetListProcesses() As Variant
'restituisce tutti i processi attivi
Dim lProcessSnap As Long
Dim pe32 As PROCESSENTRY32
Dim sString As String
Dim sListProcesses() As String
lProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If lProcessSnap = -1 Then
Exit Function
End If
pe32.dwSize = Len(pe32)
'carico tutti i processi
If Process32First(lProcessSnap, pe32) <> 0 Then
ReDim sListProcesses(0)
Do
sString = Left$(pe32.szExeFile, InStr(pe32.szExeFile, Chr$(0)) - 1)
ReDim Preserve sListProcesses(UBound(sListProcesses) + 1)
sListProcesses(UBound(sListProcesses)) = sString & Chr$(0) & pe32.th32ProcessID
Loop While Process32Next(lProcessSnap, pe32)
End If
GetListProcesses = sListProcesses
'tolgo handle alla funzione
Call CloseHandle(lProcessSnap)
End Function
Io quato codice c'è l'ho un ina classe per cui vedi tu se dare public o provate alla funzione getlistprocess!
Se torna 0 allora il processo nn è attivo, altrimenti è attivo
leadergl
14-11-2003, 15:45
ne approfitto......
E se il programma che voglio intercettare sò qual'è e per esempio è il NET SEND di windows......come faccio a copiare il messaggio che mi vuole recapitare e a non far aprire il NET SEND???
Ovvero mi deve arrivare sto msg col NET SEND ed io voglio che non sia NET SEND a mostrarmelo a video ma il mio programma in VB...come si fa??
Non creare un doppione.....!!!!!!!!!
Continuiamo su http://forum.hwupgrade.it/showthread.php?s=&threadid=559723
robnet77
14-11-2003, 17:26
grazie a tutti intanto, lunedì ci lavoro, prima devo finire un programma in VB che tramite Aida32 mi crea un foglio excel con il database di tutti i software aziendali di cui occorre una licenza d'uso.
Grazie ancora :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.