Newsgroup: it.comp.lang.visual-basic
Titolo: -> NOMI dei task in esecuzione

X avere l'elenco dei task in esecuzione sono andato su:
Sito Comune, Sorgenti, ProcessVW.ZIP
Questo pero' mi da solo il nome dell'EXE e il relativo percorso.
Io voglio sapere proprio il nome di ogni applicazione, ad esempio:
Blocco note
Microsoft Word
Microsoft Excel
ecc.
Come posso fare???
C'e' un modo per manipolare il registro di Windows
(modifica/cancellazione di chiavi,valori,ecc.)
Ho gia' visitato il sito comune e ho trovato un sorgente che mi sembra
limitarsi alla sola visualizzazione (a dir la verita' con me non ha
nemmeno funzionato).
Mi sembra ci siano anche delle API,ma non so come utilizzarle.
Potete darmi qualche suggerimento
RISPONDETEMI SUL NEWSGROUP

 Come posso fare???
Ciao,
         probabilmente ti basta una EnumWindows e nella callback dovresti
fare un controllo
 If IsWindowVisible(handle) Then AggiungiAllaLista...
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply


RISPONDETEMI SUL NEWSGROUP

 di codice)
Nella form (aggiungi una List):
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long,
ByVal lParam As Long) As Long
Private Sub Command1_Click()
List1.Clear
EnumWindows AddressOf miafunz, 0
End Sub
In un modulo:
Public Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As
Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Function miafunz(ByVal hwnd As Long, ByVal param As Long) As Boolean
Dim lung As Long
Dim testo As Long
lung = GetWindowTextLength(hwnd)
If IsWindowVisible(hwnd) Then
' allora, ***teoricamente***  qui dovrebbe esserci
' una cosa così:
'GetWindowText hwnd, testo, lung
'Form1.List1.AddItem testo
' _PERò_ (non so perchè) va tutto in crash... (*)
           Form1.List1.AddItem lung
           End If
miafunz = 1
End Function
(*)= a proposito... possibile che VB6 si impasti solo perchè uno sbaglia a
passare un parametro?
Mamma mia... ma come fate? capita solo a me o anche a voi?
Non so perchè ma il problema sta tutto in quella GetWindowText...
Spero che qualcuno corregga il mio codice (così imparo anch'io...)
Cmq, il secondo parametro della GetWindowText dovrebbe essere una LpString
[ovvero un puntatore ad un array di caratteri (un *char per chi viene dal C
e un Pchar per chi viene da Delphi)], non ho la più pallida idea di come si
referenzi un puntatore in VB (sempre che si possa, per quel che ne so VB
nasconde i puntatori al progrannatore...)
Pensavo che si potesse passare la variabile [ByRef forse?]...
Mah... forse è ora che mi metta un po' a studiarmi qualche buon librozzo ...
Ciao :-)
[un grazie in anticipo a chi mi risolve la cosa, sono curioso...]


 [un grazie in anticipo a chi mi risolve la cosa, sono curioso...]
La stringa deve essere inizializzata per la lunghezza necessaria prima della
chiamata all'API.
Function miafunz(ByVal hwnd As Long, ByVal param As Long) As Boolean
Dim lung As Long
Dim testo As String     <--------
Dim rc As Long
lung = GetWindowTextLength(hwnd) + 1   <--------- per contenere anche il
null finale
If IsWindowVisible(hwnd) Then
    testo = String$(lung, " ")                          <---------
    rc = GetWindowText(hwnd, testo, lung)
    Form1.List1.AddItem testo


 chiamata all'API.
Non sapevo come fare, ti ringrazio per l'esempio ! ;-)
Mi resta una domanda: richiede (ovviamente) che la variabile venga
inizializzata (con conseguente allocazione di memoria sullo heap), ma chi
dealloca? [ho sentito dire che anche VB è dotato di un garbage collector, è
vero? Se sì immagino che sia lui ad intervenire qui...]
Ciao :-)


> i puntatori non esistono,si usano le String
AAAARRRGGGHH!! Che eresia è questa??? I puntatori sono indirizzi di memoria
a 32bit, quindi Long.
Le stringhe sono tutta un'altra cosa
Ciao

 lascia perdere i puntatori, e' tutto gestito da VB under-the-hood.
Ho notato che di sicuro la vita così è + semplice: uno non diventa matto ad
allocare/deallocare ma deve solo preoccuparsi di inizializzare...
Certo, a volte così ti trovi con le mani legate (sigh), sarebbe bello avere
un qualcosa di intermedio...


 a 32bit, quindi Long.
Ma allora si possono usare?
Dico se io voglio usare un puntatore ad un array di caratteri lo posso usare
come un Pchar?
Ciao, Grazie 1000!


come un Pchar?
I puntatori sono visti come long, non esiste il tipo Pointer.
Sinceramente non vedo l'utilità di vedere una stringa come PChar,
probabilmente stai cercando di far fare a VB qualcosa che si può fare in
modo molto più semplice.
Comunque non c'è differenza in VB tra String e PChar.
VB ha solo le Dim String e le Dim String * n che corrispondono +/- alle
String[n], ma non vengono praticamente mai usate, se non in rari casi dove
serve la lunghezza fissa, poichè sono un po' più limitate (max 255 char) e
sono meno efficenti.
VB tra l'altro fa dei "bei giochetti" con i tipi di dati... ad esempio, vuoi
gestire una stringa come array di byte (non esistono gli array di char)?
basta fare
Dim a() As Byte 'Dichiarato array di byte
a() = "Ciao"
E il gioco è fatto. (in realtà così l'array è in unicode, per avere l'array
corretto in ansi dovresti fare a() = StrConv("Ciao", vbFromUnicode) ).
Comunque se vuoi veramente usare i puntatori per qualche masturbazione
mentale ci sono le funzioni non documentate (già implementate nell'ambiente)
VarPtr() e StrPtr(), anche se ti conviene ridefinirle come Declare per
passargli in tipo di parametro corretto (sono nella dll del runtime
MSVBVM60.DLL per VB6)
Ciao.

 modo molto più semplice.
Beh, non vorrei aprire un enorme parentesi sull'utilità dei puntatori...
I libri di informatica sono già zeppi di nozioni in proposito.
Saluti.


X avere l'elenco dei task in esecuzione sono andato su:
Sito Comune, Sorgenti, ProcessVW.ZIP
Questo pero' mi da solo il nome dell'EXE e il relativo percorso.
Io voglio sapere proprio il nome di ogni applicazione, ad esempio:
Blocco note
Microsoft Word
Microsoft Excel
ecc.
Come posso fare???
C'e' un modo per manipolare il registro di Windows


se non hai salvato devi riscriverti tutto... :-(
adesso ho capito.
Forse c'e' un errore nel codice,ma ti posso confermare che c'e' un bug
anche in VB,altrimenti gestirebbe l'errore
ci@o
RISPONDETEMI SUL NEWSGROUP

Le stringhe sono tutta un'altra cosa
e ovvio
RISPONDETEMI SUL NEWSGROUP

di RAM... ;-)
no,non centra,lo fa anche a me.PIII con 64MB
RISPONDETEMI SUL NEWSGROUP

<grin>
si infatti ci sono dei bug
RISPONDETEMI SUL NEWSGROUP

Dovrebbe esserci GetVersion o qualcosa di simile