domingo, 20 de mayo de 2018

Lanzar juegos de steam con prioridad de proceso alta

Los que tenemos equipos que apenas cumplen los requerimientos mínimos de los juegos estamos acostumbrados a subirle la prioridad al ejecutable del juego para obtener un poco más de rendimiento.

El nivel de prioridad "Tiempo real" está prohibido, pues deja sin recursos al resto del sistema, o a servicios críticos como el antivirus, pudiendo ocasionar cuelgues u otros mal funcionamientos. Por lo tanto el nivel de prioridad "Alta" es lo más arriba que podemos ir.

Ahora bien, ejecutar el administrador de tareas de Windows justo después de lanzar un juego, para subirle la prioridad al proceso, cada vez que queremos jugar, es bastante poco eficiente. Así que muchos creamos un bat que automatice todo el proceso, desde lanzar el ejecutable del juego, a subirle la prioridad después.

Pero si el juego vino de steam es diferente el asunto. Sobre todo si no tenemos acceso directo en el escritorio y lanzamos el juego desde clic derecho en el icono de steam en el área de notificación. ¿Cómo podríamos automatizar el que cada juego empiece con prioridad alta?

Existen dos maneras. Una es usar un archivo bat, pero este debe estar escrito de cierta manera. Y la otra es con esa excelente aplicación llamada prio, que instala un liviano servicio que se encarga de recordar la prioridad de cada proceso para que este conserve esa misma prioridad sin importar cómo se lo inicie en el futuro.

Para los que no confíen en software de desarrolladores menos conocidos y quieran usar los archivos bat, hablaremos primero de esa opción.

Para iniciar el juego, podríamos por ejemplo usar el comando start. Lo bueno es que este comando acepta accesos directos. Lo que debemos tener en cuenta es que steam usa accesos directos con extensión .url, no .lnk como esperaríamos.

Aquellos que sólo conozcan el mundo como nos lo muestra el Explorador de Windows probablemente no sepan qué son las extensiones url o lnk. No estoy seguro a partir de qué versión de Windows empezó esto, pero incluso antes de Windows XP, una instalación típica de Windows no muestra las extensiones de los archivos. Cumpliendo así con el principio de reducir la información con la que tiene que lidiar el usuario de la interfaz gráfica. Y para no impartir educación gratis, ¡cielos! ¡Eso sobre todo! (Está bien, no, vamos a presumir buena voluntad al menos que haya evidencias de lo contrario, en realidad es para reducir la sobrecarga de información... y para impedir que el usuario cambie la extensión al renombrar archivos)

Pero uno siempre podía recurrir al diálogo de Opciones de carpeta y búsqueda para desactivar la opción "Ocultar las extensiones de archivo para tipos de archivo conocidos", y así tenerlas de regreso.

Pero aún con esa opción desactivada, las extensiones LNK y URL no se muestran. Éstos tipos de archivo son especiales para el Explorador de Windows. Ambos son accesos directos. El primero es el más común. El que tiene el botón de "Abrir ubicación" en el diálogo de propiedades. El segundo no es más que una url, normalmente usado para abrir el navegador web por defecto y pasarle como parámetro una dirección estilo "http://".

Si inician con un Live CD de Linux, y usando alguno de los múltiples exploradores que existen navegan a su escritorio de Windows, verán que los accesos directos también tienen extensión. El comando DIR ingresado en una instancia del CMD también dejará esto en evidencia.

He aquí, que el cliente de Steam, en vez de crear accesos directos a los juegos del tipo LNK, que lancen el cliente y le pasen como parámetro el AppID del juego, se toma toda la molestia de registrar un nuevo protocolo, en concreto "steam://" para así poder lanzar los juegos usando el segundo tipo de acceso directo.

Por lo tanto, si estamos tratando de escribir un bat para lanzar un juego de steam y subirle la prioridad, podremos usar el comando start sólo si tenemos un acceso directo en el escrito al juego en cuestión. El comando start acepta tanto lnk como url.

La otra opción sería lanzar el cliente de steam y pasarle como parámetro el AppID del juego. De acuerdo con la documentación del cliente de steam, esto se hace anteponiendo -applaunch al ID del juego que se quiera lanzar.

Hay otro problema. Muchos juegos usan lanzadores. Es decir, que hasta que no hacemos clic en la opción "Comenzar", o similar, el proceso del juego no aparecerá en memoria. No sirve de nada subirle la prioridad al lanzador. Por eso sería conveniente tener un comando sleep pero no existe tal cosa en bat. Lo que podemos hacer es abusar del comando ping para conseguir una especie de sleep. sabiendo que cada ping se distancia del anterior por 1 segundo.

Yo incluyo el ping incluso en juegos que no usan lanzadores, como precaución. Aunque en teoría, el proceso ya estaría en memoria al finalizar la ejecución del comando start.

Los siguientes ejemplos usan el comando wmic el cual no está disponible en Windows anteriores a Windows Vista.

Ejemplo de la forma 1. Usando start.

Requiere que el juego tenga un acceso directo. El bat debe estar en el mismo directorio que el acceso directo al juego o puede estar en cualquier otro lado pero entonces deberemos valernos de un acceso directo a él. Nada más miren en las propiedades del acceso directo al bat, que el campo "Iniciar en:" diga la ruta al directorio donde está el acceso directo al juego, y no la ruta el directorio pariente del bat mismo.

start "" ".\LIGHTNING RETURNS FINAL FANTASY XIII.url"

:: 5 seconds. 1 second delay between pings
ping 127.0.0.1 -n 6 > nul

wmic process where name="LRFF13.exe" CALL setpriority "high priority"
pause

El pause al final es porque me gusta que la ventana de terminal quede visible, así puedo ver si ocurrió algún error en la ejecución de los comandos.

Ejemplo de la forma 2. Usando steam.

"C:\Program Files (x86)\Steam\Steam.exe" -applaunch 345350

:: 5 seconds. 1 second delay between pings
ping 127.0.0.1 -n 6 > nul

wmic process where name="LRFF13.exe" CALL setpriority "high priority"
pause

La referencia al cliente de steam de 32 bits debería ser universal, pues mi sistema es de 64 y aún así se instaló la versión de 32 de steam, por lo que concluyo que es la única que existe.

Con bats como estos deberemos cambiar el nombre del juego y del ejecutable del juego por cada juego que tengamos en la biblioteca de steam. Esto puede ser ineficiente si la biblioteca es muy numerosa. Existe una manera de generalizarlo un poco más, y de tener un único bat, al que luego crearemos diferentes accesos directos, y conseguiremos que lance un juego u otro dependiendo de los parámetros que le pasemos en el acceso directo.

Esta es la forma generalizada del bat:

"C:\Program Files (x86)\Steam\Steam.exe" -applaunch %1

:: 5 seconds. 1 second delay between pings
ping 127.0.0.1 -n 6 > nul

wmic process where name="%2" CALL setpriority "high priority"
pause

Los parámetros son el ID del juego en steam y el nombre del ejecutable en memoria. Teniendo cuidado de que no sea el ejecutable del launcher si es que el juego cuenta con uno.

Para personalizar el acceso directo al bat con el icono de cada juego, basta con usar el botón "Cambiar icono" y navegar hasta el directorio de instalación del juego para obtener el icono del ejecutable mismo. Para esto necesitarán conocer dónde steam instala cada juego. No les puedo decir la ubicación exacta del directorio steamapps pues cada usuario lo puede tener personalizado. En mi caso, mando los juegos livianos a una partición y los pesados a otra.

¿Cómo obtenemos la ID del juego en steam?

Lo más fácil es crear un acceso directo en el escritorio, aunque después lo borremos. Esto se hace desde la Biblioteca de juegos dentro de la interfaz de Steam. Si examinamos las propiedades del acceso directo que queda en escritorio, descubriremos el ID. Otra opción es iniciar el juego y sacar algunas capturas de pantalla con la tecla F12. Al cerrar el juego aparecerá el gestor de capturas, que nos permitirá abrir el directorio que contiene las capturas. Si examinamos la ruta también descubriremos el ID.

Si la opción de los bat nos parece ineficiente, todavía existe otra posibilidad.

Esta aplicación gratuita y sin publicidad llamada prio resulta de lo más práctica en esta situación.

Una vez instalado, veremos que las opciones de cambiar la prioridad al proceso en el administrador de tareas de Windows salen en inglés. Y aparece una nueva opción para guardar la prioridad del proceso que por defecto está activada. Todavía tendremos que subir la prioridad a cada juego, pero solo una vez por cada uno.

0 comentarios:

Publicar un comentario