;Tiempo espera en segundos | [minimizar, maximizar, normal] | [admin, user] | [top, normal] | ruta del programa a ejecutar.
5|maximizar|admin|top|C:\Windows\notepad.exe
5|normal|user|normal|C:\Windows\calc.exe
Mi problema es que no consigo hacer que algunos programas se pongan en primer plano cuando activo la opción TOP, a veces funciona y otras no, y no consigo saber porque. Os adjunto el codigo para que me podais decir algo.
Code: Select all
#NoEnv
#SingleInstance Force
SetTitleMatchMode 2
SendMode Input
SetWorkingDir %A_ScriptDir%
archivo := "inicio.txt"
last_top := ""
; Leer el archivo de instrucciones
IfExist, %archivo%
FileRead, contenido, %archivo%
else
MsgBox Fichero inicio.txt no localizado
; Dividir el contenido en líneas
lineas := []
lineas := StrSplit(contenido,"`n")
; Recorrer cada línea del archivo
for index, linea in lineas
{
; Eliminar espacios en blanco al principio y al final de la línea, el retorno y cambio de linea.
linea := StrReplace(StrReplace(Trim(linea), "`r"), "`n")
; Saltar líneas vacías y líneas de comentario
if (linea = "" or SubStr(linea, 1, 1) = ";")
continue
; Dividir la línea en partes usando el carácter "|" como separador
partes := StrSplit(linea, "|")
; Verificar si hay suficientes partes en la línea
if partes.Length() < 5
{
MsgBox Error: La linea no contiene suficientes partes
continue
}
; Extraer los valores de la línea
WinPid := ""
tiempo_espera := partes[1] * 1000
tamano := partes[2]
administrador := (partes[3] = "admin") ? true : false
top := (partes[4] = "top") ? true : false
programa := partes[5]
proceso := RegExReplace(programa, "m)^.+\\", "")
; Esperar durante el número de segundos indicados
Sleep, %tiempo_espera%
; Ejecutar el programa
if FileExist(programa)
{
Process, Exist, %proceso%
if ErrorLevel
{
WinPid := ErrorLevel
MsgBox Proceso o ya ejecutado
}
else
{
try
if administrador {
if (tamano = "minimizar")
Run, *RunAs %programa%, , Min, WinPid
else if (tamano = "maximizar")
Run, *RunAs %programa%, , Max, WinPid
else
Run, *RunAs %programa%, , , WinPid
} else {
if (tamano = "minimizar")
Run, %programa%, , Min, WinPid
else if (tamano = "maximizar")
Run, %programa%, , Max, WinPid
else
Run, %programa%, , , WinPid
}
catch
MsgBox Aplicacion no encontrada
}
}
else
{
continue
}
; Esperar a que el programa se inicie
Process, Wait, %WinPid%, 10
if !ErrorLevel
{
MsgBox Tiempo de espera finalizado
}
if top {
WinWait, ahk_exe %proceso% ahk_pid %WinPid%, , 10
if ErrorLevel
{
MsgBox Tiempo de espera de la ventana finalizado ;;; <<<------------ ESTE MENSAJE CASI SIEMPRE ME LO SACA
}
WinActivate, ahk_pid %WinPid%
last_top := Trim("ahk_exe " . proceso) . " " . Trim("ahk_pid " . WinPid)
}
}
if (last_top <> "") {
Loop, 10
{
WinActivate, %last_top%
Sleep 5000
IfWinActive, %last_top%
{
break ;;; <<<<<-------------- CASI NUNCA ENTRA AQUI PARA PARAR EL LOOP
}
;; Poniendo en primer plano
}
}
IfWinNotActive, %last_top%
{
Click 10,10 ;;;; <<<----------- ESTA HA SIDO SOLUCION, YA QUE AL ESTAR LA VENTANA LA PRIMERA LA PULSO PARA PONERLA EN PRIMER PLANO
} ;;;; PERO ESTA SOLUCION ES UN POCO CHAPUZA
ExitApp
;;; Declaración de hotstrings
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Esc:: ; Captura Ctrl+Esc
ExitApp
return
Muchisimas gracias.