Pregunta

Estoy tratando de usar lo siguiente para obtener la altura y la anchura de la pantalla principal:

#include <winuser.h>
size_t width = (size_t)GetSystemMetrics(SM_CXBORDER);
size_t height = (size_t)GetSystemMetrics(SM_CYBORDER);

Sin embargo, está fallando en un error de enlace externos sin resolver (LNK1120). He intentado ligarse a User32.lib (como se documenta aquí ), y recibió el mismo error, así como la vinculación a wmbase.lib (como se documenta aquí ), y recibió el error que wmbase.lib no existe! ¿Qué estoy haciendo mal?

Tenga en cuenta que sólo estoy usando llanura-ol' C - No C ++. ¿Es esta la función correcta de usar para obtener la resolución de la pantalla (en píxeles) de la pantalla principal?

Estoy intentando compilar esto en MSVC en este momento, pero preferiría una solución portátil a otros compiladores.

Gracias.

Editar

Así que parece que los parámetros que estaba buscando eran SM_CXSCREEN y SM_CYSCREEN, no SM_CXBORDER y SM_CYBORDER. Sin embargo, todavía no puede manejar para conseguir esto para compilar.

Aquí está el error real si eso aclara nada (cuando se une a User32.lib):

screen.obj : error LNK2019: unresolved external symbol __imp__GetSystemMetrics@4 referenced in function _getMainDisplaySize
build\lib.win32-2.6\foomodule\bitmap.pyd : fatal error LNK1120: 1 unresolved externals
error: command '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\link.exe"' failed with exit status 1120

(Estoy intentando compilar un módulo de Python / C así que por eso se ven los directorios extraños)

¿Fue útil?

Solución

¿Quieres #include <windows.h> en lugar de <winuser.h>. Tal y como son, probablemente recibiendo algunos de los modificadores en el prototipo equivocado como es.

Edit: ya que todavía tiene problemas, tal vez podamos comenzar con un ensayo simplificado y ver lo que hay. Afortunadamente, GetSystemMetrics() no necesita un identificador de ventana o algo así que e puede llamar desde una simple aplicación de consola:

#include <windows.h>
#include <iostream>

int main() { 
    size_t width = (size_t)GetSystemMetrics(SM_CXSCREEN);
    size_t height = (size_t)GetSystemMetrics(SM_CYSCREEN);

    std::cout << "width = " << width << "\n";
    std::cout << "height = " << height << std::endl; 
    return 0;
}

Aquí hay un volcado de pantalla de compilar y ejecutar la siguiente:

D:\C\source>cl screen_res.cpp user32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

screen_res.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:screen_res.exe
screen_res.obj
user32.lib

D:\C\source>screen_res
width = 1600
height = 1200

Si esto no compilar y ejecutar, es probable que tenga un problema con su instalación. Si lo hace, entonces el problema está probablemente en algún lugar en el proyecto que está trabajando.

Otros consejos

Esto no ayudará con su error de enlace, sin embargo, también pregunta si esa es la manera correcta para obtener el tamaño de la pantalla. Los parametros que está pasando a GetSystemMetrics no devolverán lo que quiere. Compruebe las banderas disponibles en el documentación . También considere el uso de SystemParametersInfo . Que exigen a su uso depende del contexto de lo que es exactamente lo que está tratando de encontrar -. El tamaño del monitor vs área de trabajo, etc.

La solución es o bien definir COMPILE_MULTIMON_STUBS en uno de sus módulos.

#define COMPILE_MULTIMON_STUBS
#include <multimon.h>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top