elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Desinstalación desatendida
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Desinstalación desatendida  (Leído 4,871 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.891



Ver Perfil
Re: Desinstalación desatendida
« Respuesta #10 en: 19 Noviembre 2024, 00:02 am »

Con el código que ya tienes se muestra y se activa la ventana de diálogo del instalador. Bien, a partir de ahí puedes recurrir a NirCMD para simular pulsaciones del teclado a esa ventana para automatizar el procedimiento de desinstalación:


Simularías la pulsación de la tecla TAB hasta colocar el foco sobre la opción de desinstalación, la tecla ENTER para seleccionar dicha opción, la tecla TAB otra vez hast obtener el foco del botón de aceptar, y por último la tecla ENTER una vez más.

Si prefieres no depender de archivos executables de terceros (nircmd.exe), puedes simular pulsaciones del teclado con en el lenguaje VBScript:


Y también con JS, y con PowerShell. Todo esto que menciono son lenguajes con soporte nativo en el sistema operativo Windows.

Pero eso ya requeriría un mínimo de conocimientos de programación por tu parte.

Y hay otra forma mucho más óptima de automatizar esto (basándose en el uso de la API SendMessage / PostMessage de Windows), pero eso requeriría mayor conocimiento de programación y sería absolutamente necesario dejar de utilizar una herramienta tan limitada como es Batch. Con un script de PowerShell que tuviese encapsulado un código de C# o VB.NET, se podría hacer. Pero no merece la pena invertir el tiempo necesario en desarrollar esto, aunque, de hacerlo, se lograría una forma más robusta de automatización (mejor controlada, y a prueba de errores) que con la forma tradicional de simular pulsaciones del teclado.

En resumen, esto que te propongo de utilizar NirCMD es lo más sencillo y no requiere conocimientos de programación, más allá de aprender el uso del comando "SendKey" de NirCMD y el nombre de las teclas que quieras simular.

PD: También podrían interesarte los comandos find, activate y focus para buscar una ventana y activarla: https://nircmd.nirsoft.net/win.html

Atentamente,
Elektro.


« Última modificación: 19 Noviembre 2024, 17:44 pm por Eleкtro » En línea



Danielㅤ


Desconectado Desconectado

Mensajes: 1.855


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Desinstalación desatendida
« Respuesta #11 en: 19 Noviembre 2024, 17:19 pm »

Hola, solo comentarle a Elektro que se olvidó de escribir el link en WshShell.SendKeys.


Saludos


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.891



Ver Perfil
Re: Desinstalación desatendida
« Respuesta #12 en: 19 Noviembre 2024, 17:46 pm »

Hola, solo comentarle a Elektro que se olvidó de escribir el link en WshShell.SendKeys.

Lo he corregido, ¡gracias por el apunte!.
En línea



Mauricio De Abreu

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Desinstalación desatendida
« Respuesta #13 en: 19 Noviembre 2024, 19:26 pm »

Buenas tardes.

Le meteré el ojo a lo que comentan

Agradecido por todos los aportes. 👍🏼
En línea

Mauricio De Abreu

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Desinstalación desatendida
« Respuesta #14 en: 21 Noviembre 2024, 16:50 pm »

Hola muchachos.

Aquí les dejo el código por si a alguien le sirve. No lo hubiera logrado sin la ayuda de todos, en especial las pistas muy exactas que me dio Elektro

Código:
# Codigo PowerShell para abrir la ventana de desinstalacion y enviar TAB y ENTER
Add-Type @"
using System;
using System.Text;
using System.Runtime.InteropServices;

public class User32 {
    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int GetWindowTextLength(IntPtr hWnd);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

    [DllImport("user32.dll")]
    public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    public delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);

    public const uint WM_KEYDOWN = 0x0100;
    public const uint WM_KEYUP = 0x0101;
    public const int VK_TAB = 0x09;
    public const int VK_RETURN = 0x0D;

    public static bool EnumTheWindows(IntPtr hWnd, IntPtr lParam) {
        int length = GetWindowTextLength(hWnd);
        if (length == 0) {
            return true;
        }

        StringBuilder builder = new StringBuilder(length);
        GetWindowText(hWnd, builder, length + 1);

        Console.WriteLine("Ventana encontrada: " + builder.ToString());

        if (builder.ToString() == "Mantenimiento de ComponentesHarware") {
            // Guardar el handle de la ventana principal
            Marshal.WriteIntPtr(lParam, hWnd);
            return false; // Detener la enumeracion de ventanas
        }
        return true;
    }
}
"@

# Funcion para desinstalar el programa
function Uninstall-Program {
    # Ejecutar la linea de desinstalacion
    Write-Output "Ejecutando linea de desinstalacion..."
    Start-Process "rundll32.exe" -ArgumentList "dfshim.dll,ShArpMaintain ComponentesHarware.application, Culture=neutral, PublicKeyToken=b3fd472d4be1fc0f, processorArchitecture=msil"

    # Pausa para verificar
    #Write-Output "Pausando despues de ejecutar la linea de desinstalacion. Presiona Enter para continuar..."
    #Pause

    # Esperar a que la ventana de desinstalacion aparezca
    Write-Output "Esperando 5 segundos para que aparezca la ventana de desinstalacion..."
    Start-Sleep -Seconds 5

    # Encontrar la ventana de desinstalacion
    $hwndPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal([System.Runtime.InteropServices.Marshal]::SizeOf([IntPtr]::Zero))
    [User32]::EnumWindows([User32+EnumWindowsProc] { param ($hWnd, $lParam) [User32]::EnumTheWindows($hWnd, $lParam) }, $hwndPtr)

    $hwnd = [System.Runtime.InteropServices.Marshal]::ReadIntPtr($hwndPtr)
    [System.Runtime.InteropServices.Marshal]::FreeHGlobal($hwndPtr)

    if ($hwnd -ne [IntPtr]::Zero) {
        #Write-Output "Ventana de desinstalacion encontrada: $hwnd"

        # Enviar TAB dos veces para enfocar el boton "Aceptar", luego ENTER para confirmar
        #Write-Output "Enviando TAB dos veces y luego ENTER para confirmar la desinstalacion..."

        [User32]::PostMessage($hwnd, [User32]::WM_KEYDOWN, [User32]::VK_TAB, [IntPtr]::Zero)
        Start-Sleep -Milliseconds 200
        [User32]::PostMessage($hwnd, [User32]::WM_KEYUP, [User32]::VK_TAB, [IntPtr]::Zero)

        [User32]::PostMessage($hwnd, [User32]::WM_KEYDOWN, [User32]::VK_TAB, [IntPtr]::Zero)
        Start-Sleep -Milliseconds 200
        [User32]::PostMessage($hwnd, [User32]::WM_KEYUP, [User32]::VK_TAB, [IntPtr]::Zero)

        [User32]::PostMessage($hwnd, [User32]::WM_KEYDOWN, [User32]::VK_RETURN, [IntPtr]::Zero)
        Start-Sleep -Milliseconds 200
        [User32]::PostMessage($hwnd, [User32]::WM_KEYUP, [User32]::VK_RETURN, [IntPtr]::Zero)

        # Pausa despues de intentar presionar el boton
        #Write-Output "Pausando despues de intentar presionar el boton. Presiona Enter para continuar..."
        #Pause
    } else {
        Write-Output "No se encontro la ventana de desinstalacion."

        # Pausa para verificar
        #Write-Output "Pausando despues de no encontrar la ventana. Presiona Enter para continuar..."
        #Pause
    }

    # Pausa final para ver los resultados
    #Write-Output "Pausando al final del script. Presiona Enter para continuar..."
    #Pause
}

# Llamar a la funcion para desinstalar el programa
Uninstall-Program

Agradecido como siempre por vuestra ayuda y consejos.

Hasta la próxima...
« Última modificación: 21 Noviembre 2024, 20:08 pm por Mauricio De Abreu » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.891



Ver Perfil
Re: Desinstalación desatendida
« Respuesta #15 en: 22 Noviembre 2024, 04:04 am »

Aquí les dejo el código por si a alguien le sirve.

Me ha dejado algo descolocado ver que al final hayas decidido hacerlo de la forma más sofisticada y compleja de las que propuse, admito que no me lo esperaba ya que no es nada común que alguien solicite ayuda en torno a un Batch-script, para luego demostrar tener la voluntad y la capacidad / conocimiento necesario de hacerlo en un script de PowerShell "hibridado" con C#, ya sea con o sin la ayuda de una IA como ChatGPT.

Si en el futuro tienes dudas sobre .NET (VB.Net, C#) estaré encantando de echar una mano en el subforo dedicado a ello.

Gracias por compartir el código con el resto de personas.

Saludos!
« Última modificación: 22 Noviembre 2024, 04:11 am por Eleкtro » En línea



Mauricio De Abreu

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Desinstalación desatendida
« Respuesta #16 en: 23 Noviembre 2024, 22:36 pm »

Estimado Elektro...

Muy agradecido por tus palabras,

La verdad es que no soy de los que se rinden por muy difícil que sea el reto. Pero sin tu descripción jamás lo hubiera hecho, aun teniendo la ayuda de la Ai.

Cabe aclarar, que aunque tengo conocimientos de programación en varios lenguajes, es más que obvio que tuve ayuda adicional, ya que desconozco el lenguaje en cuestión.

Mi ayudante fue Copilot, con varias sugerencias de mi parte.

Por otro lado, será un placer y estaré más que encantado de contar en el futuro con tu valiosa ayuda.

Hasta la pronto!!

Un abrazo desde el norte del sur
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(SOLUCIONAD)Ayuda, importar configuración Firefox 3.6 desatendida... tiene tela.
Software
SuperDraco 1 3,268 Último mensaje 28 Febrero 2011, 12:15 pm
por SuperDraco
¿Instalación Desatendida?
Software
Yoker66666 2 2,284 Último mensaje 25 Julio 2012, 13:44 pm
por Yoker66666
Ayuda con instalación desatendida Debian 7
GNU/Linux
ccrunch 0 2,019 Último mensaje 27 Febrero 2014, 20:11 pm
por ccrunch
[APORTE] Archivo de instalación desatendida para Windows 10
Windows
Eleкtro 1 9,176 Último mensaje 20 Diciembre 2015, 01:38 am
por karso
Desinstalación Bose Work Configuration Desinstalación Desatendida
Scripting
HectorScript 0 2,903 Último mensaje 25 Marzo 2022, 21:27 pm
por HectorScript
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines