Hola, ¿Hay una manera de aumentar evento cuando un nuevo proceso se pone en marcha sin utilizar el ManagementEventWatcher, y sin utilizar los Process.GetProcesses()? El problema con ManagementEventWatcher es que el usuario necesita tener altas premisas. ¡Gracias!C# provocar un evento cuando un nuevo proceso comienza
Respuesta
A diferencia del evento extrínseco Win32_ProcessStartTrace
que está utilizando actualmente, los eventos intrínsecos WMI __InstanceCreationEvent
y __InstanceDeletionEvent
no requieren derechos de administrador.
Aquí hay una consulta de ejemplo que puede utilizar para realizar un seguimiento de proceso se inicia:
SELECT TargetInstance
FROM __InstanceCreationEvent WITHIN 1
WHERE TargetInstance ISA 'Win32_Process'
AND TargetInstance.Name LIKE '<your process name.exe>'
Más información: Process Information and Notifications using WMI
Debido a que estos son eventos intrínsecos, WMI en última instancia imita evento de comportamiento por medio de votación, y comprobará para nuevos eventos solo periódicamente (aquí, cada 1 segundo). Disminuir la duración de WITHIN
a fracciones de segundos le dará una respuesta más rápida a expensas del uso de la CPU.
Debe tener en cuenta que un intervalo de sondeo muy corto (por ejemplo, 0.1s) puede consumir hasta el 30% de la CPU que no está en su proceso, pero WmiPrvSE.exe que realiza el sondeo real. Por si acaso, si se pregunta por qué no su proceso está tomando de repente tanta CPU, pero un proceso del sistema. –
Lo extraño es una aplicación no necesita para crear una ventana en ventanas. El proceso de creación puede no pertenecer a la estación de ventana en la que trabajas. Necesitarás encontrar ventanas de ese proceso de todos modos, y también necesitarás detectar ventanas nuevas y cerradas de todos los procesos.
Por lo tanto, enumerar ventanas es una opción mucho más clara/fácil de usar.
Pruebe la función EnumChildWindows
en el controlador de escritorio (obtenido por GetDesktopWindow
) para encontrar las ventanas de aplicaciones de nivel superior. use GetWindowThreadProcessId
y EnumThreadWindows
en los identificadores obtenidos para detectar ventanas secundarias de ventanas.
Un hilo de baja prioridad hará el trabajo.
Debería ser posible averiguar cuando una aplicación se ejecutó por última mediante la configuración de seguimiento de proceso de auditoría en Windows. Los siguientes enlaces pueden empezar:
El seguimiento de procesos creará entradas en el registro de eventos de Windows que luego se puede acceder utilizando C#.
Ref: .NET Process Monitor
Esto tiene sentido, y luego puedo suscribirme a las actualizaciones del registro de eventos sin tener que sondear ... http://msdn.microsoft.com/en-us/library/bb671202(v=vs.90).aspx. Creo que te recompensaré con la recompensa. – Satyajit
Tenga en cuenta que la pregunta original fue de otro asker, por lo que no puedo marcar su respuesta como aceptada. – Satyajit
¿No es esta una copia literal de http://stackoverflow.com/questions/1986249/c-sharp-process-monitor#answer-1986294? ¿Es normal obtener una recompensa por eso? ¿No debería la recompensa pertenecer a [0xA3] (http://stackoverflow.com/users/40347/0xa3) ?? –
Puede utilizar probablemente EnumDesktopWindows de user32.dll, recibirá todos los identificadores de ventana, se puede comprobar el título de la ventana usando GetWindowText, y el tipo de ventana utilizando GetClassName.
De esta manera puede ocultar la pista o el tesoro en cualquier lugar. (porque obtendrás manijas de todas las ventanas (y controles)).
Ver si esta clase será útil para usted Managed Global Hook for Window Creation and Destruction
En ese artículo, alguien ha creado buena clase con fácil de colocar eventos, puede ejecutar ese código sin elevar privilegios.
Una vez que obtenga el controlador de la ventana (control), puede agregar texto o dibujar una imagen para obtener sugerencias.
- 1. ¿Cuándo comienza un nuevo __LINE__?
- 2. ¿Hay un equivalente al Proceso de C#. Comienza en PHP?
- 3. programación de bajo nivel: ¿cómo comienza el SO un nuevo proceso/subproceso?
- 4. ¿Cómo puede un servicio de Windows iniciar un proceso cuando se produce un evento de temporizador?
- 5. provocar un evento de una clase de una clase diferente en C#
- 6. C#: provoca un evento heredado
- 7. Iniciar un nuevo proceso y matar el proceso actual
- 8. Comenzar un nuevo proceso en nodejs
- 9. Iniciar un nuevo proceso que ejecuta un delegado
- 10. ¿Cómo provocar deliberadamente un punto muerto?
- 11. ¿Hay un evento del sistema cuando se crean procesos?
- 12. evento KeyDown nuevo valor
- 13. C++ 11: ¿un nuevo idioma?
- 14. ¿Cómo finaliza Ctrl-C un proceso hijo?
- 15. ¿Cómo matar un proceso C#?
- 16. de error cuando Erlang lanzando un proceso
- 17. ¿Qué sucede cuando un proceso se bifurca?
- 18. ¿Hay un evento activado cuando dte.Solution.SolutionBuild.StartupProjects cambia?
- 19. Levante un evento en C#
- 20. ¿Application.Restart() crea un nuevo proceso para la aplicación o no?
- 21. ¿Es posible iniciar una actividad como un nuevo proceso?
- 22. Nuevo proceso de solicitud de Bash Shell
- 23. Agregar cuenta en AccountManager puede provocar un interbloqueo
- 24. "Adjuntar al proceso" como un evento posterior a la construcción
- 25. ¿Cómo ocultar/mostrar un proceso en C#?
- 26. Conseguir un PID de un proceso creado en C#
- 27. Nuevo evento disponible del puerto COM
- 28. Incendiar un evento cuando se recibe un correo electrónico
- 29. jQuery: ¿Cómo puedo activar un evento cuando aparece un div?
- 30. ¿Cómo desencadenarías un evento cuando se cierre un ThickBox?
En lugar de intentar eludir el modelo de seguridad, ¿qué le parece decirnos qué problema está tratando de resolver en realidad? Puede haber un mejor enfoque general que no haya pensado. –
Estoy creando un juego (Treasure Hunt) que usa ventanas para el patio de recreo, así que cuando abro un nuevo bloc de notas o calco le enviaré pistas sobre el proceso ... así que tengo que plantear el evento cuando comience el siguiente proceso para que pueda envía los consejos para el tesoro ... espero que lo obtengas ... – user604627
¿Has probado 'ManagementEventWatcher'? No veo nada en los documentos que diga que necesita grandes permisos, aunque admitiré que no lo he probado en una cuenta de usuario muy restringida. –