PDA

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!

misterx
14-11-2003, 13:48
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

matpez
14-11-2003, 14:05
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??

matpez
14-11-2003, 16:56
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 :)