Hãy cho tôi biết độ phân giải màn hình của tôi!


33

Xuất độ phân giải màn hình của thiết bị theo định dạng cụ thể[width]x[height] (không có dấu ngoặc). Ví dụ, một đầu ra có thể là 1440x900.

Đây là một trình kiểm tra trực tuyến mà bạn có thể sử dụng để kiểm tra độ phân giải màn hình của chính mình.


17
Định dạng đầu ra cụ thể không có gì thú vị, nhưng có lẽ đã quá muộn để thay đổi ngay bây giờ
Luis Mendo

3
Hành vi nên là gì nếu nhiều màn hình được kết nối?
Jonathan Allan

4
Tôi cho rằng trước tiên chúng ta không được phép thay đổi độ phân giải của bạn và sau đó cho bạn biết những giá trị đó, phải không?
Kỹ sư Toast

3
APL \ 360 (chỉ có thể chạy trên môi trường máy đánh chữ IBM / 360), 5 byte:'0x0'
Adám

4
Tôi thích cái này không đủ tiêu chuẩn cho các ngôn ngữ chơi gôn và khuyến khích mọi người khám phá giới hạn của những ngôn ngữ thực tế.
robbie

Câu trả lời:


38

JavaScript (ES6), 32 byte

(_=screen)=>_.width+"x"+_.height

Đầu ra là hàm return. Thêm vào f=lúc bắt đầu và gọi như thế f(). Sử dụng khởi tạo tham số để khởi tạo tham số _cho screenđối tượng. Phần còn lại là tự giải thích.

f=(_=screen)=>_.width+"x"+_.height
console.log(f())

Lưu ý: Truyền đối số cho hàm này sẽ khiến nó bị lỗi.


JavaScript (Giải pháp trước), 35 byte

with(screen)alert(width+"x"+height)

Không bao giờ nghĩ rằng một ngày nào đó tôi sẽ sử dụng with! Tôi không nghĩ rằng điều này có thể được chơi gôn hơn nữa.


Nếu REPL được cho phép, s=screen,s.width+"x"+s.height(29 ký tự) cũng hoạt động.
Kobi

Ôi. Sử dụng tốt giá trị đối số mặc định.
Matthew Roh

Giải pháp 35 byte có thể tiết kiệm năm byte bằng cách không bận tâm alert: with(screen)(width+'x'+height)chỉ trả về chuỗi thích hợp.
KRyan

2
Câu trả lời này là thiếu sót cơ bản. Tôi có thể lừa nó bằng cách phóng to trình duyệt của mình!
Vịt lớn

1
Thôi nào, các bạn thậm chí đang cố gắng : _=screen,_.width+"x"+_.height, 29 byte
M28

33

TI-BASIC, 30 32 29 byte (không cạnh tranh?)

* thở dài * TI-BASIC lấy thêm một byte cho mỗi chữ cái viết thường.

+2 nhờ @Timtech

-3 cảm ơn @Timtech

:If ΔX>.1
:Then
:Disp "96x64
:Else
:Disp "320x240

Điều này chỉ hoạt động vì TI-BASIC chỉ có thể chạy trên máy tính có hai độ phân giải màn hình khác nhau: 96 x 64 và 320 x 240. Tôi chỉ kiểm tra xem màn hình nào tôi có bằng cách đặt Zoom thành thứ gì đó khác nhau tùy theo độ phân giải màn hình đưa ra độ phân giải chính xác.

Bây giờ tôi đang đánh dấu điều này là không cạnh tranh, vì nó được mã hóa cứng.


6
Đó là một sự lạm dụng thông minh;)
Matthew Roh

1
Bạn có thể lưu bằng cách không sử dụng ZDecimalvà sau đó sử dụng một Xmaxso sánh khác nhau , ít nhất là một byte. Ngoài ra, tôi nghĩ rằng bạn cần sử dụng chữ thường xlà hai byte (x2) thay vì chữ hoa một byte tương đương.
Timtech

@Timtech Tôi phải sử dụng Zoom hai byte (như ZDecimal) vì zoom mặc định ( ZStandard) giống nhau trên cả hai máy tính. Tôi sẽ sửa lỗi viết hoa.
Scott Milner

1
Ồ, tôi hiểu ý của bạn. Nếu bạn sử dụng ZStandardmặc dù, sẽ ΔXkhác nhau giữa các máy tính? Ngoài ra, ZDecimalchỉ có một byte, vì vậy đây là 31 byte.
Timtech

2
Vì một số lý do, phản ứng tức thời của tôi là "điều đó hợp lệ, nhưng sẽ không hợp lệ nếu chỉ có một độ phân giải màn hình khả dĩ", nhưng quan điểm đó có vẻ không nhất quán trong nội bộ. Vì vậy, tôi thực sự không chắc chắn liệu điều này có gian lận hay không.

20

JavaScript (ES6), 32 byte

_=>(s=screen).width+'x'+s.height

console.log((_=>(s=screen).width+'x'+s.height)())


2
phiên bản lambda có thể chấp nhận được
Felipe Nardi Batista

6
_=>(s=screen).width+'x'+s.heightlưu một byte
Felipe Nardi Batista

@FelipeNardiBatista Cảm ơn, ý nghĩ đó cũng xảy ra với tôi :)
SethWhite

1
Làm tốt lắm! +1 :)
Arjun

5
Tôi thích cách tất cả các mục nhập của JS luôn ngắn hơn một số lượng lớn các câu trả lời khác. Hầu như không bao giờ xảy ra.
Draco18

11

macOS, bash, awk, grep, tr, 51 52 byte

/*/*/sy*r SPDisplaysDataType|awk '/so/{print$2$3$4}'

Chạy system_profiler, nhận được SPDisplaysDataTypethông tin, tìm kiếm đầu tiên sotrong Resolution, và in độ phân giải màn hình. Đối với nhiều màn hình, điều này in tất cả các độ phân giải.

Ví dụ về lệnh đang chạy.


Các biến thể trước, malcompliant:

/*/*/sy*r SPDisplaysDataType|grep so|tr -d 'R :a-w'

Tôi vừa chạy cái này trên MacBook Pro với màn hình thứ hai kèm theo. Tôi đã nhận 2880x1800\n1920x1080@60Hz(hai dòng). Tôi không biết nếu điều đó không đủ điều kiện ... hay?
Floris

@Floris đã OP chỉ định cách ứng xử khi có nhiều màn hình?
Thuyền trưởng Man

Không - nhưng định dạng @60Hzrõ ràng không có trong spec.
Floris

Tôi đoán bạn có thể tack trên |sed 1q, nâng đếm byte lên đến 58 byte.
zgrep

Tôi đã sửa lỗi không tuân thủ bằng cách chuyển sang awkvà có thêm một byte. :)
zgrep


9

Xử lý 3, 37 byte

fullScreen();print(width+"x"+height);

fullScreen()khiến ứng dụng khởi chạy với kích thước tối đa - độ phân giải màn hình. Ít hơn một byte so với hiển nhiên

print(displayWidth+"x"+displayHeight);

8

AutoHotKey, 34 byte

SysGet,w,0
SysGet,h,1
Send,%w%x%h%

Lưu phần này trong một tệp có phần mở rộng .AHK và chạy nó từ dấu nhắc lệnh


1
Tại sao không sử dụng Sendchứ không phải MsgBox?
Kỹ sư Toast

@EngineerToast cảm ơn! Điều đó đã lưu hai byte
jmriego

7

C (Windows), 79 78 77 byte

Cảm ơn @Johan du Toit vì đã tiết kiệm một byte!

#import<windows.h>
#define G GetSystemMetrics
f(){printf("%dx%d",G(0),G(1));}

2
Tôi vẫn đang loay hoay với 'GetDeviceCaps' cho đến khi tôi thấy câu trả lời của bạn :-) Bạn vẫn có thể lưu 1 byte bằng cách sử dụng như sau:#define G GetSystemMetrics f(){printf("%dx%d",G(0),G(1));}
Johan du Toit

7

PowerShell, 67 60 55 byte

-7 cảm ơn Martin Ender

-5 (thực sự là 12!) Từ Leaky Nun , pháp Regex vượt xa tôi.

Đây là dài nhưng không dài hơn System.Windows.Forms.SystemInformation.PrimaryMonitorSizegiải pháp khủng khiếp

(gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"

đầu tiên chúng tôi Get-WmiObject( gwmi) để truy xuất Win32_VideoControllerđối tượng chứa thành viên có tên VideoModeDescriptionlà chuỗi theo định dạng 1920 x 1080 x 4294967296 colors, sau đó tôi chạy thay thế regex để có định dạng chính xác.

PS H:\> (gwmi win32_videocontroller|% v*n)-replace" |x \d+\D+$"
1920x1080

Tôi nghĩ sẽ (gwmi win32_videocontroller|% v*n)-replace" |x[^x]+$"cạo một vài byte bằng cách điều chỉnh regex.
TessellatingHeckler

6

Toán học, 51 byte

SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]~Infix~x

Điều này có thể không phù hợp với bạn tùy thuộc vào thiết bị bạn đã kết nối (tôi không biết). Điều này sẽ luôn hoạt động (giả sử bạn có ít nhất một màn hình được nối):

Infix[Last/@("FullScreenArea"/.SystemInformation["Devices","ScreenInformation"][[1]]),x]

Giải trình

SystemInformation[] trả về một biểu thức của biểu mẫu

SystemInformationData[{
  "Kernel" -> {__},
  "FrontEnd" -> {__},
  "Links" -> {__},
  "Parallel" -> {__},
  "Devices" -> {__},
  "Network" -> {__},
}]

Chúng tôi quan tâm "Devices", có thể được truy cập trực tiếp như SystemInformation["Devices"]hoặc SystemInformation[][[1,5,2]]. Kết quả sẽ là một danh sách các hình thức

{
  "ScreenInformation" -> {__},
  "GraphicsDevices" -> {__},
  "ControllerDevices" -> {__}
}

Chúng tôi muốn "ScreenInformation", có thể được truy cập bằng SystemInformation["Devices","ScreenInformation"]hoặc ngắn gọn hơn SystemInformation[][[1,5,2,1,2]]. Kết quả sẽ có dạng

{
  {
  "ScreenArea" -> {__},
  "FullScreenArea" -> {{0,w_},{0,h_}},
  "BitDepth" -> _,
  "Resolution" -> _
  },
  ___
}

Độ dài của danh sách sẽ là số lượng màn hình bạn đã kết nối. Màn hình đầu tiên là SystemInformation[][[1,5,2,1,2,1]]và chiều rộng và chiều cao có thể được trích xuất khi SystemInformation[][[1,5,2,1,2,1,2,2,;;,2]]chúng ta chỉ cần chèn một Infix xđịnh dạng đầu ra.


6

Java 7, 123 114 byte

String f(){java.awt.Dimension s=java.awt.Toolkit.getDefaultToolkit().getScreenSize();return s.width+"x"+s.height;}

Phương thức này sẽ không hoạt động trong bản cài đặt Java không đầu (như trên TIO) vì nó sử dụng các thư viện awt. Trong phần mềm này, việc gọi getScreenSizesử dụng Giao diện gốc Java để gọi ra (thường là vào thư viện C) cho chiều rộng màn hình và chiều cao màn hình.

-9 byte nhờ Olivier Grégoire đã nhắc nhở tôi rằng tôi có thể trả lại chuỗi thay vì in nó.


2
Tôi vừa định đăng ...
Leaky Nun

@LeakyNun Cả bạn và tôi. Chọc +1 .
Kevin Cruijssen

Quá tệ, đầu ra bị hạn chế ...x..., vì void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]",""));}đầu ra nào 1920,1200ngắn hơn ..
Kevin Cruijssen

1
@KevinCruijssen vâng tôi cũng đã thử chơi với nó. Điều "quá tệ" thực sự là việc sử dụng regex trong java quá nặng về số lượng byte.
Chọc

1
@Poke Bạn thực sự đúng. Tôi đã có thể sử dụng những gì tôi trình bày ở trên xthay vì ,sử dụng một số thay thế regex, nhưng nó nhiều hơn năm byte so với câu trả lời hiện tại của bạn: void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll("[^\\d,]","").replace(",","x"));}hoặc void f(){System.out.print((java.awt.Toolkit.getDefaultToolkit().getScreenSize()+"").replaceAll(".*?(\\d+).*?(\\d+).*","$1x$2"));}Ah, điều gì không nặng nề trong Java ..; p
Kevin Cruijssen

6

C #, 101 95 89 byte

_=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};

-6 byte nhờ @TheLethalCoder bằng cách nhắc nhở tôi OP không đề cập đến việc in ấn, vì vậy trả về một chuỗi cũng tốt. Và thêm -6 byte bằng cách thay đổi nó thành lambda.


Bạn có thể lưu 11 byte bằng cách biên dịch thành Func<string>: ()=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};. Tuy nhiên, bạn có lợi nhuận voidnhưng bạn đang trả lại stringvì vậy bạn cần thêm 2 byte cho điều đó.
TheLethalCoder

1
Thách thức cũng không nói rõ rằng bạn không thể lấy đầu vào để bạn có thể thêm đầu vào không sử dụng để lưu một byte khác tức là_=>{var s=System.Windows.Forms.Screen.PrimaryScreen.Bounds;return s.Width+"x"+s.Height;};
TheLethalCoder

1
Oh bỏ qua nhận xét trả về bạn đang viết kết quả, bạn có thể lưu 6 byte bằng cách trả lại.
TheLethalCoder

Và trừ khi bạn có thể nghĩ ra một cách để rút ngắn nó var s=System.Windows.Forms.Screen.AllScreens[0].Bounds;cũng sẽ giống như vậy nhưng bạn có thể đánh gôn nó với ý tưởng đó trong đầu.
TheLethalCoder

6

Bash + xrandr, 44 ký tự

read -aa<<<`xrandr`
echo ${a[7]}x${a[9]::-1}

xrandrthuộc về máy chủ X, trên Ubuntu được cung cấp bởi gói x11-xserver-utils .

Chạy mẫu:

bash-4.3$ read -aa<<<`xrandr`;echo ${a[7]}x${a[9]::-1}
1920x1080

xrandr + grep + produc-linux, 30 ký tự

xrandr|grep -oP '\d+x\d+'|line

Nhờ vào:

Chạy mẫu:

bash-4.3$ xrandr|grep -oP '\d+x\d+'|line
1920x1080

Tôi không có bash với màn hình, sẽ xrandr|grep *làm việc?
Jonathan Allan

Chắc chắn rồi. Nhưng hiện tại, tôi grepvà các sednỗ lực phân tích xrandrđầu ra ( pastebin.com/uTVcjWCq ) đã dài hơn.
manatwork

Có lẽ xrandr|grep *|cut -d' ' -f1nào? (sử dụng dòng khớp từ dán của bạn @ TIO )
Jonathan Allan

À, ý bạn là chọn độ phân giải từ danh sách theo nhãn hiệu * *? Nghĩ đến khả năng đó, nhưng tôi không chắc liệu có hoạt động với nhiều màn hình được kết nối hay không. Theo tôi nhớ, điều đó sẽ liệt kê độ phân giải hiện tại của mỗi màn hình được kết nối.
manatwork

À đúng rồi, không chắc OP muốn gì trong kịch bản như vậy!
Jonathan Allan

5

Python 2, 73 byte

from ctypes import*
u=windll.user32.GetSystemMetrics;
print u(0),'x',u(1)

print u(0),'x',u(1)nhỏ hơn và ví dụ của anh ấy ( liên kết ) cho phép nó
Felipe Nardi Batista

1
To clarify, If it's equivalent to the output from What is my screen resolution, It's valid.trong trang web đó, có khoảng trống giữa mỗi phần
Felipe Nardi Batista

@FelipeNardiBatista Cập nhật, cảm ơn.
Neil

5

Octave , 41 byte

Nhờ @Arjun@StephenS cho sửa chữa.

fprintf('%ix%i',get(0,'ScreenSize')(3:4))

0là một điều khiển cho các đối tượng đồ họa gốc. Thuộc tính của nó 'ScreenSize'chứa tọa độ của màn hình tính bằng pixel. Các mục thứ ba và thứ tư cung cấp thông tin mong muốn.


5

APL (Dyalog) , 23 byte

' 'R'x'⍕⌽⊃⎕WG'DevCaps'

⎕WG'DevCaps'W indow G et Dev ice Cap abilitie s

 chọn thuộc tính đầu tiên (chiều cao, chiều rộng)

 đảo ngược

 định dạng như văn bản

' '⎕R'x'R không gian eplace với "x" s


"thay thế bằng" x "ở vị trí 5 (khoảng trắng)" điều này sẽ gây ra sự cố trên màn hình nhỏ, ví dụ 640x480 (mà VM sử dụng)
Baldrickk


4

C (thư viện SDL2) 113 88 84

(-4 ký tự do trợ giúp của @AppleShell)

Vâng. nó biên dịch.

m[3];main(){SDL_Init(32);SDL_GetDesktopDisplayMode(0,m);printf("%dx%d",m[1],m[2]);}

Chạy với: gcc snippet.c -lSDL2 && ./a.out


3
Tôi nghĩ bạn có thể rút ngắn điều này bằng cách thực hiện mtoàn cầu và bỏ qua int:m[3];main(){...
Appleshell

truy cập bằng cách m+1nên ngắn hơn m[1]phải không? hoặc không thể có trong C mà chỉ có trong C ++? chắc chắn printf có một số mã thông báo bổ nhiệm
Gizmo

@gizmo thật không may AFAIK không có công cụ in printf nào làm điều đó ..
ăn kiêng

4

Python 2, 61 49 byte

Cảm ơn @ Jonathan-allan, @ felipe-nardi-batista

from Tkinter import*
print'%sx%s'%Tk().maxsize()

Đối với các thiết lập hiển thị đơn, điều này phù hợp với đầu ra từ trang web. Điều này cung cấp toàn bộ độ phân giải cho nhiều màn hình.


print'x'....lưu một byte
Felipe Nardi Batista

v=Tk().maxsize(), print'%sx%s'%vtiết kiệm 9 byte.
Jonathan Allan

Rất tiếc, và sau đó print'%sx%s'%Tk().maxsize()lưu thêm 4> _ <
Jonathan Allan

3

bash + xdpyinfo 42 31 byte

xdpyinfo|grep dim|cut -d' ' -f7

Từ trang nam:

xdpyinfo - is  a utility for displaying information about an X server.

@Floris @manatwork Cảm ơn bạn đã tiết kiệm một vài byte!


Crossed out 4 vẫn là 4 :(
Christopher

Không cần không gian xung quanh các đường ống; Tôi nghĩ là an toàn để tìm kiếm chỉ dim dim; bạn có thể viết -d\ thay vì -d' '. Sau đó, khi nói đến cả hai grepcho một dòng và cutmột phần của dòng đó, thường ngắn hơn với một awkcuộc gọi duy nhất : xdpyinfo|awk '/dim/&&$0=$2'.
manatwork

Tôi nghi ngờ bạn có thể grep thứ gì đó ngắn hơn dimensionsnhưng tôi không có xdpyinfotrên hệ thống của mình ...
Floris

3

xrandr + awk, 25 byte

xrandr|awk /\*/{print\$1}

nhập mô tả hình ảnh ở đây


1
Điều này không hoạt động. grep *mở rộng dấu hoa thị cho tất cả các tệp trong thư mục.
Jens

@Jens đã sửa. Cảm ơn bạn đã chỉ ra
Pandya

Cảm ơn; một gợi ý: cách đánh vần đúng cho grep|cutawk.
Jens

Nó vẫn không hoạt động. Nó đầu ra *0. Đầu ra xrandr của tôi là *0 3360 x 1050 ( 889mm x 278mm ) *0.
Jens

@Jens thì bạn cần -f2Btw, bạn có thể kiểm tra xrandr|awk '/\*/{print $2}'không?
Pandya

3

Phổ ZX cơ bản, 10 byte

chỉ để hoàn thiện:

PRINT "256x192"

đầu ra 256x192. Spectrum có độ phân giải màn hình cứng cố định.


... và sử dụng một byte đơn cho các từ khóa như PRINT.
Jens

2

Đang xử lý, 51 byte

void setup(){fullScreen();print(width+"x"+height);}

Kết quả này ở định dạng này : width height. Ngoài ra, chương trình tạo một cửa sổ có kích thước bằng màn hình bạn đang sử dụng (vì mọi chương trình Xử lý đều tạo một cửa sổ theo mặc định) và chương trình này chỉ xuất ra chiều cao và chiều rộng của cửa sổ / phác thảo này.


Oh, định dạng là WIDTHxHEIGHT.
Matthew Roh

@SIGSEGV Chỉ cần chú ý đến nó
Kritixi Lithos

2

xdpyinfo+ awk, 28 byte

$ xdpyinfo|awk /dim/{print\$2}
3360x1050

Đã thử nghiệm trên Cygwin với hai đầu.


1
xdpyinfo|awk /dim/{print\$2}mất 28 byte chứ không phải 24
Pandya

@Pandya Tôi cần kính mới :-)
Jens


1

Tiếng Litva , 116 byte

((import html-toolkit)
(htmlOnLoad #::((var S(index(getWindow)screen))
(print(+(index S width)"x"(index S height))))))

(Ngắt dòng được thêm vào để dễ đọc)

Hãy thử trực tuyến!

Cuối cùng, mô-đun bộ công cụ html của tôi được sử dụng! Chỉ hoạt động trong liên kết Dùng thử trực tuyến, sẽ không hoạt động từ dòng lệnh.

Một vài byte có thể được lưu nếu 1024 x 768có thể là đầu ra hợp lệ. Chúng tôi chỉ sử dụng (+ .. "x" .. )để tránh printkhoảng cách ngầm định.


Hừm. Tôi đã thử nó trực tuyến, nhưng nó 2048x1080thực sự cho một màn hình 4K thực sự 4096x2160. Bất cứ ý tưởng tại sao? Firefox 52.0 trên FreeBSD 11.
Jens

Không ý kiến. Tôi chỉ lấy window.screenvà nhận được widthheightthuộc tính từ nó. Tôi tưởng tượng nếu bạn mở giao diện điều khiển Firefox và gõ vào window.screenbạn sẽ thấy rõ ràng là không chính xác 2048x1080.
Andrakis

1

Lua (khung löve), 116 byte

f,g=love.window.setFullscreen,love.graphics function love.draw()f(1)w,h=g.getDimensions()f(0>1)g.print(w.."x"..h)end

Chương trình thay đổi đầu tiên thành toàn màn hình sau đó lấy chiều rộng và chiều cao và in nó sau đó :)


1

xrandr và sh, 23 byte

$ set `xrandr`;echo $6x$8
3360x1050

Đã thử nghiệm trên hộp CentOS 5 với màn hình được chuyển hướng đến máy Cygwin với hai màn hình. Ở đây xrandrđầu ra đầy đủ là

$ xrandr
 SZ:    Pixels          Physical       Refresh
*0   3360 x 1050   ( 889mm x 278mm )  *0
Current rotation - normal
Current reflection - none
Rotations possible - normal
Reflections possible - none

1

Ruby + xrandr, 37 byte

puts `xrandr`.split[7..9].join[0..-2]

Giải pháp thay thế (52 byte):

puts `xrandr`.match(/t (\d+) (x) (\d+),/)[1..3].join

1

Màu đỏ , 26 byte

system/view/screens/1/size

Đầu ra ví dụ:

1920x1080

Các mã là khá tự giải thích. Đề 1cập đến màn hình đầu tiên

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.