¿Cómo usar JSL para contar los procesos activos en ejecución en Windows, por ejemplo, número de notepad.exe?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo un problema para contar los procesos activos en la memoria de Windows.
No estoy familiarizado con Windows API. ¿Alguien podría ayudar en este uso de la función DLL para contar el número de procesos en ejecución para un nombre de proceso dado?
Si abre 3 notepad.exe, entonces el administrador de tareas de la ventana tiene tres sesiones de bloc de notas en ejecución.
Necesito una función JSL que tome el nombre del proceso como entrada y el número de proceso como devolución.
¡Muchas gracias!
Re: ¿Cómo usar JSL para contar los procesos activos en ejecución en Windows, por ejemplo, número de notepad.exe?Craige,
Probé la función runprogram en JMP 11 y luego escribí una función de contar palabras. Puedo conseguir la solución que quiero. ¡Muchas gracias!
Otra cosa interesante por la que hago esto es porque noté abrir () una función de archivo de texto ha cambiado de actualizar JMP 9 a 11.
Utilizo JMP 9 para activar un archivo .exe para realizar una consulta en la base de datos de subprocesos múltiples y luego, después de completar toda la sesión .exe, se acumulan los datos.
En JMP9, cuando abro el archivo de datos, siempre tiene éxito, sin embargo, en JMP11 muchas veces da una advertencia de lectura incompleta del archivo de datos y se pierde la mitad. El tamaño del archivo de datos suele ser> 2M-3M, no demasiado grande. No estoy seguro de lo que realmente se ha cambiado en JMP11. De lo contrario, no tengo que molestarme en encontrar una solución como esta.
Nuevamente gracias por la solución.
Re: ¿Cómo usar JSL para contar los procesos activos en ejecución en Windows, por ejemplo, número de notepad.exe?RunProgram apareció por primera vez en JMP 11. No utiliza un archivo de disco para la comunicación entre JMP y el programa externo; utiliza stdin y stdout. Dependiendo de lo que necesite su aplicación, es posible que desee ejecutar el programa notepad.exe desde runProgram en lugar de usar RunProgram para ejecutar otro programa para averiguar si notepad.exe ha finalizado. (Se podría evitar el sondeo por completo.)
Con JMP 9 todavía tiene varias formas de hacer que esto funcione. Es posible que desee investigar automatización Usar otro lenguaje, como Visual Basic, tal vez, para controlar JMP. y notepad.exe. Es posible que desee escribir un archivo .BAT y usar open () de JMP para ejecutar el archivo bat. Esto requiere un bucle de sondeo para determinar cuándo se termina el archivo bat. Puede usar la función de espera (segundos) de JMP para permitir que JMP se duerma entre las encuestas. Finalmente, como sugiere su pregunta original, puede usar la interfaz DLL de JMP para acceder a una DLL del sistema. Esta publicación sugiere que la mejor interfaz DLL apareció en JMP 10; puede que no sea posible realizar las llamadas a DLL requeridas con la interfaz más antigua. No sé qué API / DLL necesitarías.
Re: ¿Cómo usar JSL para contar los procesos activos en ejecución en Windows, por ejemplo, número de notepad.exe?Craige,
Gracias por su respuesta. Tengo dos preguntas más:
1. Parece que el programa de ejecución no es una función en JMP9 ya que todavía estoy usando JMP9.
2. ¿Tu solución escribe un archivo al disco duro? Estoy tratando de hacer sesiones paralelas y usando la espera en el bucle sin fin. Cuando el recuento total del proceso es cero, a continuación, interrumpa el ciclo y continúe con el código JSL restante. Si escribe un archivo en el disco duro, es menos preferible en comparación con el uso de DLL para obtener la información directamente de la memoria.
¡Gracias!
Re: ¿Cómo usar JSL para contar los procesos activos en ejecución en Windows, por ejemplo, número de notepad.exe?Comenzó aquí ¿Cómo se enumeran todos los procesos en la línea de comandos en Windows? - Superusuario
y escribí esto
x=runprogram(executable("wmic"),options({"process list"}),
readfunction(function({this},write(this<
);
probablemente querrá analizar el texto de esta << lectura en lugar de simplemente volcarlo en el registro a través de write (). Mucho texto que probablemente no quieras y cosas como "C: \ Archivos de programa (x86) \ Microsoft Office \ Office15 \ OUTLOOK.EXE"