在Windows控制台项目中获取屏幕大小

时间:2017-07-20 13:16:54

标签: vb.net

我有一个vb.net控制台项目,它启动了许多应用程序并在双显示器设置上移动并调整它们的大小(win 7)

除了我似乎无法获得可用的屏幕尺寸之外,一切都很棒。我的意图是,如果我知道屏幕区域是1000像素宽,那么id大小我的应用程序到它的1/3并且适合三个。

Screen.PrimaryScreen.Bounds Screen.PrimaryScreen.WorkingArea

声明未声明屏幕。我搜索了互联网,虽然有一些表格项目的解决方案我找不到任何控制台项目... 感谢

3 个答案:

答案 0 :(得分:1)

我创建了一个简单的项目来演示如何在控制台应用程序中获取屏幕大小 我使用的代码是下一个:

Imports System.Windows.Forms

Module GetScreenSize

    Sub Main()
        Dim rectangle  = Screen.PrimaryScreen.Bounds
        Dim workingArea  = Screen.PrimaryScreen.WorkingArea

        Console.WriteLine("Bounds: Height: " & rectangle.Height & ", Width: " & rectangle.Width)
        Console.WriteLine("WorkingArea: Height: " & workingArea.Height & ", Width: " & workingArea.Width)

        Console.ReadKey()
    End Sub

End Module

正如文森特在评论中提到的那样,你需要添加对System.Windows.Forms的引用,因为它在控制台应用程序中没有默认引用。这是我在项目中的参考资料的图片:

Project References

我的输出是下一个:

  

界限:高度:1080,宽度:1920
  WorkingArea:身高:1040,宽度:1920

为了向您提供更多帮助,我将解决方案上传到my GitHub repo

希望这可以解决您的问题。

答案 1 :(得分:0)

也许这会有所帮助。下面的“主要”是主表格的名称。

' center the form in the center of the users screen
 ' -------------------------------------------------
   Dim r As Rectangle
   If Main.Parent IsNot Nothing Then
     r = Main.Parent.RectangleToScreen(Main.Parent.ClientRectangle)
   Else
     r = Screen.FromPoint(Main.Location).WorkingArea
   End If

   Dim x = r.Left + (r.Width - Main.Width) \ 2
   Dim y = r.Top + (r.Height - Main.Height) \ 2
   Main.Location = New Point(x, y)

答案 2 :(得分:0)

这样可以获得字符和像素的大小:

Imports System.Runtime.InteropServices

Module Module1
    <StructLayout(LayoutKind.Sequential)>
    Public Structure RECT
        Public Left As Integer
        Public Top As Integer
        Public Right As Integer
        Public Bottom As Integer
    End Structure

    <DllImport("user32.dll")>
    Private Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean
    End Function


    Sub Main()
        Console.WriteLine(String.Format("Width: {0}", Console.WindowWidth))
        Console.WriteLine(String.Format("Height: {0}", Console.WindowHeight))


        Dim hWnd = Process.GetCurrentProcess().MainWindowHandle
        Dim r As RECT

        If GetWindowRect(hWnd, r) Then
            Console.WriteLine(String.Format("Width: {0}", r.Right - r.Left))
            Console.WriteLine(String.Format("Height: {0}", r.Bottom - r.Top))
        End If
    End Sub

End Module