2013-04-28 19 views
6

Nie znam dobrze architektury .NET (4.5), więc oto pytanie, na które nie mogę znaleźć odpowiedzi do.Uzyskaj rozdzielczości ekranu w klasie C# (bez formularzy/wpf/aps.net/...)

Jak uzyskać rozdzielczość ekranu podstawowego, gdy nie działa z formularzami systemu Windows lub innym środowiskiem graficznym, takim jak WPF, Silverlight, ASP.NET itp.? Próbuję uzyskać rozdzielczość w bibliotece klas (dll) i przekazać go stamtąd.

Czy .NET ma taką funkcjonalność?

+0

Możesz dodać odwołanie do Windows Forms, nawet jeśli nie posiadają interfejs GUI. Czy to jest opcja? –

+0

http://stackoverflow.com/questions/1317235/c-get-complete-desktop-size?rq=1 – bizzehdee

+0

@SamPlusPlus: Dzięki, ale to nie działa, podczas dodawania odwołania pojawia się błąd. – DerpyNerd

Odpowiedz

10

Chociaż nie pracujesz w środowisku WinForm, nadal możesz dodać odniesienie do jego bibliotek DLL. Dodanie odniesienia do System.Windows.Forms.dll oznacza, że ​​można użyć:

SystemInformation.VirtualScreen.Width 
SystemInformation.VirtualScreen.Height 
+2

+1: należy zauważyć, że [PrimaryMonitorSize] (http://msdn.microsoft.com/en-us/library/system.windows.forms.systeminformation.primarymonitorsize.aspx) jest prawdopodobnie bardziej odpowiedni w tym przypadku (dotyczy tylko wielu -monitor konfiguruje). –

+0

Hej, i dziękuję ... Próbowałem wcześniej dodać odniesienie, ale jakoś nie zadziałało! Postanowiłem dać jeszcze jeden strzał i teraz działa:/Dzięki za popchnięcie mnie, abym spróbował ponownie! – DerpyNerd

1

Oto, co trzeba.

Jest już za późno, ale myślę, że przydałby się dla innej :) Odpowiedzią jest użycie P/Invoke z SystemMetric.

Możesz uzyskać rozmiar ekranu podstawowego bez dodawania odwołania do pliku System.Windows.Forms.dll.

http://pinvoke.net/default.aspx/Enums.SystemMetric

Nie lubię importować duże DLL za pomocą jednego prostego sposobu XD

+0

Nie jestem pewien, nie importuje DLL dla jednej skuteczności wpływu funkcji nawet więcej niż odniesienia do DLL z aplikacji raz? Mam na myśli, odniesienia do biblioteki DLL, która jest już częścią platformy .NET, nie sprawiają, że twoja aplikacja jest bardziej obszerna niż importowanie biblioteki DLL za każdym razem, gdy potrzebujesz funkcji. Czy czegoś brakuje? – DerpyNerd

+0

W rzeczywistości istnieje wiele metod .NET przy użyciu P/invoke do wywoływania funkcji win 32 api. Powinieneś uzyskać dostęp do pliku referencesource.microsoft.com, aby to zobaczyć. Więc jeśli nie chcesz importować .NET dll, możesz wywołać bezpośrednio ap32 win32. W takim przypadku wystarczy utworzyć wyliczenie SystemMetric z jedną lub dwiema wartościami, aby uzyskać rozmiar ekranu. Następnie wywołaj funkcję GetSystemMetrics. –

Powiązane problemy