C/Visual C - API LockWorkStation

 
Vista:

API LockWorkStation

Publicado por JArroyo (2 intervenciones) el 01/08/2003 13:10:09
Estoy realizando una aplicacion que en un momento determinado realiza un bloqueo de la máquina (CTRL+ALT+SUPR) mediante llamada a la API LockWorkStation. Pero me encuentro con el siguiente problema al compilar me da el mensaje "undeclared identifier" a pesar de incluir la libreria winuser.h en mi código. El caso es que en MSDN no veo nada especial para que una simple llamada a esta API sin parámetros de este mensaje. Estoy programando en entorno 2000 Server y el programa correrá en 2000 Professional.

¿Alguien me puede ayudar?

Gracias por adelantado
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

Problema con "undeclared identifier" al usar `LockWorkStation` en Windows 2000

Publicado por Alejandro (1286 intervenciones) el 18/07/2025 00:31:35
J. Arroyo, el error "undeclared identifier" a pesar de incluir `winuser.h` suele indicar que el compilador no reconoce la función, probablemente porque no está habilitada para la versión de Windows que estás usando o porque no tienes definida la versión del sistema operativo en las macros de compilación.

Causas comunes y soluciones:

1. Definir la versión de Windows en las macros de compilación:
Windows 2000 requiere que definas la macro `_WIN32_WINNT` con un valor adecuado para que las funciones de la API estén disponibles. Para Windows 2000, el valor correcto es `0x0500`.

2. Cómo hacerlo:
- Antes de incluir `windows.h` o `winuser.h`, define la macro en tu código:
1
2
#define _WIN32_WINNT 0x0500
#include <windows.h>
- O, si usas un archivo de encabezado predefinido, asegúrate de que esta macro esté definida antes de incluir los headers.

3. Verifica que estás usando la SDK correcta:
- Asegúrate de que tu entorno de desarrollo tenga instalada la SDK de Windows 2000 o superior, y que tu proyecto esté configurado para usarla.

4. Ejemplo mínimo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _WIN32_WINNT 0x0500
#include <windows.h>
 
int main() {
    BOOL result = LockWorkStation();
    if (result) {
        // La estación se bloqueó correctamente
    } else {
        // Error al bloquear
        DWORD error = GetLastError();
        // Manejar error
    }
    return 0;
}

Resumen:
- Define `_WIN32_WINNT` con `0x0500` antes de incluir los headers.
- Asegúrate de que tu entorno de compilación tenga la SDK adecuada.
- La función `LockWorkStation()` está disponible en Windows 2000, pero solo si la macro de versión está correctamente definida.
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