PDA

View Full Version : [C# 2.0]Come intercettare l'apertura di un programma ?


RaouL_BennetH
01-07-2010, 07:58
Buongiorno a tutti :)

Avrei la necessità di capire come intercettare l'apertura di un programma , per esempio excel, acrobat o notepad.

Più nel dettaglio dovrei far interagire un programma di collegamento ad un client-access ibm con la suite di office.

Dovrei quindi intercettare l'apertura di questo programma quando l'utente la lancia.

E' possibile ?

Grazie mille :)

RaouL.

AlbertE
01-07-2010, 08:44
ciao

puoi usare il metodo statico System.Diagnostics.Process.GetProcesses() per avere la lista dei processi attivi, quindi usa la proprietà ProcessName per individuare quello che cerchi (per es: per word -> ProcessName == "WINWORD").

Ovviamente dovrai mettere la chiamata a GetProcesses in un ciclo per intercettare l'avvio del programma.

Andrea.

tomminno
01-07-2010, 09:49
Che io sappia ci sono 4 metodi:
1)Monitorare i processi aperti
2) utilizzare HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs per caricare una DLL in tutti i processi che usano User32.dll
3)http://www.codeproject.com/kb/threads/procmon.aspx ma ci sono di mezzo i driver...
4) kernel hook...

Ah ovviamente tutto in C/C++

RaouL_BennetH
01-07-2010, 11:03
Che io sappia ci sono 4 metodi:
1)Monitorare i processi aperti
2) utilizzare HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs per caricare una DLL in tutti i processi che usano User32.dll
3)http://www.codeproject.com/kb/threads/procmon.aspx ma ci sono di mezzo i driver...
4) kernel hook...

Ah ovviamente tutto in C/C++

Benone :) quindi tutto completamente fuori dalla mia portata.

@AlbertE:

Ci avevo pensato anche io ma dovrei fare in modo di avere un metodo in un timer che ogni tot mi controlli se il programma è attivo. Se poi è attivo succede che dovrei metterlo in pausa (cosa che non credo sia possibile) e farlo ripartire dopo un determinato evento.

Avevo qualche dubbio ma Tommo me lo ha tolto, non è cosa per me :(

Grazie mille comunque a tutti :)

RaouL.

RaouL_BennetH
01-07-2010, 12:37
mmmm... forse qualche piccola speranza la ho:

http://stackoverflow.com/questions/510372/how-to-monitor-process-program-execution-in-windows

tomminno
01-07-2010, 12:45
Benone :) quindi tutto completamente fuori dalla mia portata.

@AlbertE:

Ci avevo pensato anche io ma dovrei fare in modo di avere un metodo in un timer che ogni tot mi controlli se il programma è attivo. Se poi è attivo succede che dovrei metterlo in pausa (cosa che non credo sia possibile) e farlo ripartire dopo un determinato evento.

Avevo qualche dubbio ma Tommo me lo ha tolto, non è cosa per me :(

Grazie mille comunque a tutti :)

RaouL.

A parte che sono tomminno e non Tommo :D
Mettere in pausa l'applicativo credo sia praticamente impossibile (multithreading, gui: devi bloccare tutto?).

Ma se devi lavorare con Office perchè non scrivere un plugin? Sicuramente hai più possibilità di riuscire a gestire il software dall'interno che non dall'esterno.

[Edit] Dimenticavo che ti interessavano anche altri processi...

RaouL_BennetH
01-07-2010, 13:35
A parte che sono tomminno e non Tommo :D
Mettere in pausa l'applicativo credo sia praticamente impossibile (multithreading, gui: devi bloccare tutto?).

Ma se devi lavorare con Office perchè non scrivere un plugin? Sicuramente hai più possibilità di riuscire a gestire il software dall'interno che non dall'esterno.

[Edit] Dimenticavo che ti interessavano anche altri processi...

opppsssss scusami!! :doh:

Per gli altri processi, più che altro si tratterebbe soltanto del client-access di IBM, ma da quello che sto leggendo, credo che anche per chi sta più in alto di me in azienda come conoscenza (ma soprattutto posizione), intercettare e gestire questi tipi di eventi dal di fuori non sia una scelta progettuale proprio azzeccata. Vabbè, io più che passare il 'task' in bianco al mittente non posso proprio fare :)

Mi incuriosisce invece il discorso dei plugins per Office. Hai da passarmi qualche tutorial di base, considerando sempre che devo muovermi in ambito (.net) 2.0 ?

Grazie mille e scusa per la gaffe :)