Jak mogę uzyskać rozdzielczość ekranu (wysokość, szerokość) w pikselach?Jak mogę uzyskać rozdzielczość ekranu w R
Odpowiedz
Można użyć interfejsu commad lini WMI
> system("wmic desktopmonitor get screenheight")
ScreenHeight
900
mógł uchwycić wynikać z system
(scr_width <- system("wmic desktopmonitor get screenwidth", intern=TRUE))
# [1] "ScreenWidth \r" "1440 \r" "\r"
(scr_height <- system("wmic desktopmonitor get screenheight", intern=TRUE))
# [1] "ScreenHeight \r" "900 \r" "\r"
z wieloma ekranami, wyjście jest np
[1] "ScreenWidth \r" "1600 \r" "1600 \r" ""
Chcemy wszystko ale pierwsze i ostatnie wartości, konwertowane na liczby
as.numeric(c(
scr_width[-c(1, length(scr_width))],
scr_height[-c(1, length(scr_height))]
))
# [1] 1440 900
Błąd w systemie ("Wmic monitor pulpitu dostaje przepustowość", intern = TRUE): nie znaleziono "wmic". Czy muszę coś zainstalować? –
@ gd047 wmic jest na pewno dostępny na Windows Professional Edition (XP/7). Wiem, że go brakuje w XP Home, ale nie wiem, czy można go zainstalować. – Marek
To nie było na drodze! –
W systemie Windows można zadzwonić pod numer GetSystemMetrics
, mijając SM_CXSCREEN
i SM_CYSCREEN
. Zwraca szerokość/wysokość ekranu głównego monitora monitora w pikselach.
DWORD dwWidth = GetSystemMetrics(SM_CXSCREEN);
DWORD dwHeight = GetSystemMetrics(SM_CYSCREEN);
Uważam, że plakat chce zrobić to z języka R zamiast C++. –
@David Hefferman tak, prawda, przepraszam, w każdym razie znalazłem to [link] (http://www.nceas.ucsb.edu/scicomp/usecases/CreateRPackageWithC) może pomóc – Arash
Łatwo z JavaScript: wystarczy zrobić
window.screen.height
window.screen.width
można wywołać JavaScript z badań przy użyciu pakietu SpiderMonkey z OmegaHat.
Można też solve this with Java i skorzystać z pakietu rJava do niego dostęp.
library(rJava)
.jinit()
toolkit <- J("java.awt.Toolkit")
default_toolkit <- .jrcall(toolkit, "getDefaultToolkit")
dim <- .jrcall(default_toolkit, "getScreenSize")
height <- .jcall(dim, "D", "getHeight")
width <- .jcall(dim, "D", "getWidth")
Nie przetestowałem tego tak jak ja walcząc o zbudowanie pakietu. Przekażę raport, gdy już to zrobię. –
Co jest ze sprawą? Wiem, że pomysły są tylko w połowie kompletne, ale są to jednak ważne możliwości. –
Wydaje mi się, że powinno to być możliwe do osiągnięcia bez JVM! Osobiście po prostu zamknęłabym niektóre wywołania interfejsu Win32 API, ale z pewnością gdzieś jest pakiet, który pozwala na zapytanie o informacje o sprzęcie. –
Akceptowane odpowiedź nie działa na Windows 8 i późniejszych.
Użyj tego:
system("wmic path Win32_VideoController get VideoModeDescription,CurrentVerticalResolution,CurrentHorizontalResolution /format:value")
Aby dostać się rozdzielczość ekranu w wektorze, można wdrożyć go jako:
suppressWarnings(
current_resolution <- system("wmic path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution /format:value", intern = TRUE) %>%
strsplit("=") %>%
unlist() %>%
as.double()
)
current_resolution <- current_resolution[!is.na(current_resolution)]
Teraz musisz wektor o długości 2:
> current_resolution
[1] 1920 1080
Jaki ekran? Mam dwa. –
Bardziej użytecznym pytaniem jest: dlaczego; czy jest coś takiego jak tk lub inny GUI? – mbq
@mbq gvisMotionChart potrzebuje szerokości i wysokości wykresu, który generuje. Pomyślałem więc, że mogę zmienić te parametry zgodnie z rozdzielczością ekranu użytkownika. –