Frage

Ich versuche, das folgende zu erhalten, die Höhe und Breite des Haupt-Displays zu verwenden:

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

Allerdings ist es auf einem externen nicht aufgelöste externen Verbindungsfehler Fehler (LNK1120). Ich habe versucht, die Verknüpfung user32.lib (wie dokumentiert hier ), und erhielt den gleichen Fehler, sowie die Anbindung an wmbase.lib (wie dokumentiert hier ) und erhielt den Fehler, dass wmbase.lib existiert nicht! Was mache ich falsch?

Beachten Sie, dass ich nur plain-ol‘C bin mit - nicht C ++. Ist dies die richtige Funktion zu verwenden, um die Bildschirmauflösung (in Pixeln) des Hauptdisplays zu bekommen?

Ich versuche im Moment diese auf MSVC zu kompilieren, würde aber eine Lösung tragbar anderen Compilern bevorzugen.

Danke.

Bearbeiten

So ist es, wie die Parameter sieht ich nach waren SM_CXSCREEN und SM_CYSCREEN suchen, nicht SM_CXBORDER und SM_CYBORDER. Allerdings kann ich immer noch nicht gelingt, zu bekommen dies zu kompilieren.

Hier ist der tatsächliche Fehler, wenn das alles stellt klar (wenn user32.lib verknüpft):

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

(Ich versuche, ein Python / C-Modul zu kompilieren, ist also, warum man die seltsamen Verzeichnisse sehen)

War es hilfreich?

Lösung

Sie wollen statt #include <windows.h> <winuser.h>. Wie sie ist, wird es wahrscheinlich einige der Modifikatoren auf dem Prototyp immer falsch, wie es ist.

Edit: da Sie immer noch Probleme haben, können wir vielleicht mit einem vereinfachten Test starten und sehen, was Sie erhalten. Glücklicherweise GetSystemMetrics() braucht kein Fenstergriff oder irgendetwas so e es von einer einfachen Konsolenanwendung aufrufen können:

#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;
}

Hier ist ein Bildschirmausdruck von Kompilieren und Ausführen diese:

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

Wenn dies nicht kompilieren und ausführen, haben Sie wahrscheinlich ein Problem mit Ihrer Installation. Ist dies der Fall, dann ist das Problem wahrscheinlich irgendwo im Projekt Sie gerade arbeiten.

Andere Tipps

Dies wird nicht mit Ihrem Link Fehler helfen, aber auch Sie sich fragen, ob das der richtige Weg ist, um die Anzeigegröße zu erhalten. Die params Sie vorbei an GetSystemMetrics wird nicht zurückkehren, was Sie wollen. Prüfen Sie die verfügbaren Fahnen auf der Dokumentation . Sehen Sie sich auch Systemparameters verwenden. Welche zu verwenden rufen Kontext abhängt, was genau wollen Sie finden -. Monitorgröße vs Arbeitsbereich, etc.

Die Lösung ist entweder COMPILE_MULTIMON_STUBS in einem Modul zu definieren.

#define COMPILE_MULTIMON_STUBS
#include <multimon.h>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top