C/Visual C - Detectar la ejecución de porgramas

 
Vista:

Detectar la ejecución de porgramas

Publicado por claudio (37 intervenciones) el 29/03/2001 07:23:47
Quisiera saber como se puede hacer para detectar que se inició un programa (o un dialogo. Ej el de conexión a internet) y poder identificarlo. Esto es para un pequeño sistema de restricción de ejecución programas, y quisiera hacerlo de este modo o de alguno similar, es decir sin utilizar caracteristicas de administración del sistema operativo como podría ser con NT.
Pienso que debe ser creando un hook, pero no se como ni cual, así que cualquier ayuda será agradecida, ya sea en VC++ o en Builder.
Me explico??????
Cualquier cosa haganme saber si no fui claro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Detección de inicio de programas y diálogos mediante hooks

Publicado por Alejandro (913 intervenciones) el 17/09/2024 20:33:48
Entiendo tu pregunta, Claudio. Si deseas detectar cuando se inicia un programa o un diálogo, puedes utilizar técnicas de intercepción de funciones o hooks. Un hook es un mecanismo que te permite interceptar y modificar el comportamiento de una función en tiempo de ejecución.

En el caso de Windows, puedes utilizar la función SetWindowsHookEx para establecer un hook de tipo WH_SHELL o WH_CBT. Estos hooks te permiten recibir notificaciones cuando se inician programas o se crean ventanas de diálogo.

Aquí tienes un ejemplo de cómo puedes utilizar un hook para detectar cuando se inicia un programa en Visual C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <Windows.h>
 
// Declaración de la función de callback del hook
LRESULT CALLBACK HookCallback(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode == HSHELL_WINDOWCREATED) {
        // Se ha creado una nueva ventana
        HWND hWnd = (HWND)lParam;
 
        // Obtener el título de la ventana
        char title[256];
        GetWindowTextA(hWnd, title, sizeof(title));
 
        // Verificar si es el programa que deseas detectar
        if (strcmp(title, "Nombre del programa") == 0) {
            std::cout << "Se ha iniciado el programa: " << title << std::endl;
        }
    }
 
    // Llamar al siguiente hook en la cadena
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}
 
int main() {
    // Establecer el hook
    HHOOK hook = SetWindowsHookEx(WH_SHELL, HookCallback, NULL, 0);
 
    // Esperar a que se presione una tecla para salir
    std::cout << "Presione una tecla para salir..." << std::endl;
    std::cin.get();
 
    // Eliminar el hook
    UnhookWindowsHookEx(hook);
 
    return 0;
}

En este ejemplo, se utiliza el hook de tipo WH_SHELL para recibir notificaciones cuando se crean ventanas. En la función de callback del hook, se verifica si la ventana recién creada corresponde al programa que deseas detectar. Si es así, se muestra un mensaje indicando que se ha iniciado el programa.

Ten en cuenta que este es solo un ejemplo básico y que puede requerir ajustes adicionales según tus necesidades específicas. Además, ten en cuenta que el uso de hooks puede tener implicaciones de seguridad y puede requerir privilegios de administrador en algunos casos.

Espero que esta información te sea útil para implementar la detección de programas o diálogos en tu sistema de restricción de ejecución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar