Vb.net 在windows控制台项目中获取屏幕大小

Vb.net 在windows控制台项目中获取屏幕大小,vb.net,Vb.net,我有一个vb.net控制台项目,它可以启动许多应用程序,并将它们移动和调整到我想要的双监视器设置位置(Win7) 所有作品都很棒,除了我似乎无法获得可用的屏幕大小。我的意图是,如果我知道屏幕区域是1000像素宽的,那么我会将我的应用程序的大小调整为它的1/3,并容纳三个 Screen.PrimaryScreen.Bounds Screen.PrimaryScreen.WorkingArea 声明屏幕未声明。我浏览了互联网,虽然有一些表单项目的解决方案,但我找不到任何控制台项目的解决方案。。。 谢

我有一个vb.net控制台项目,它可以启动许多应用程序,并将它们移动和调整到我想要的双监视器设置位置(Win7)

所有作品都很棒,除了我似乎无法获得可用的屏幕大小。我的意图是,如果我知道屏幕区域是1000像素宽的,那么我会将我的应用程序的大小调整为它的1/3,并容纳三个

Screen.PrimaryScreen.Bounds Screen.PrimaryScreen.WorkingArea

声明屏幕未声明。我浏览了互联网,虽然有一些表单项目的解决方案,但我找不到任何控制台项目的解决方案。。。 谢谢,也许这会有帮助。下面的“Main”是主窗体的名称

' 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)

这将获得以字符和像素为单位的大小:

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
导入System.Runtime.InteropServices
模块1
公共结构
公共左整数
作为整数的公共Top
作为整数的公权
公共底部为整数
端部结构
私有函数GetWindowRect(ByVal hWnd作为IntPtr,ByRef lpRect作为RECT)作为布尔值
端函数
副标题()
WriteLine(String.Format(“宽度:{0}”,Console.WindowWidth))
WriteLine(String.Format(“高度:{0}”,Console.WindowHeight))
Dim hWnd=Process.GetCurrentProcess().MainWindowHandle
dimras RECT
如果GetWindowRect(hWnd,r),则
WriteLine(String.Format(“宽度:{0}”,r.Right-r.Left))
WriteLine(String.Format(“高度:{0}”,r.Bottom-r.Top))
如果结束
端接头
端模块

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

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
正如Vincent在评论中提到的,您还需要添加对
System.Windows.Forms
的引用,因为在控制台应用程序中默认情况下不会引用它。以下是我在项目中的参考资料:

我的输出是下一个:

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
边界:高度:1080,宽度:1920
工作区域:高度:1040,宽度:1920

为了给您提供更多帮助,我将我的解决方案上载到


希望这能解决您的问题。

我刚刚尝试过使用
Screen.PrimaryScreen.Bounds
Screen.PrimaryScreen.WorkingArea
,它们工作得非常好。我必须在顶部添加
Imports System.Windows.Forms
,它才能工作。我在模块的顶部包含了System.Windows.Forms import,但它仍然抱怨屏幕错误BC30451未声明“屏幕”。由于它的保护级别,它可能无法访问。Ve他正在使用控制台应用程序,为什么要使用表单?只是把它放在那里供他参考。也许它能在某种程度上有所帮助。拥有更多的知识是没有坏处的,但这与他的问题无关。答案应尝试回答问题,而不是给出仅部分(或根本不)与OP问题相关的有用提示。这就是论坛的目的,这是一个问答(问答)网站。它应该只是一个问题和一个简单的答案。问题是OP甚至不能访问
屏幕
类。这就是需要回答的问题很抱歉这么苛刻,但这就是堆栈溢出的工作原理。@VisualIncent,但它可以从控制台应用程序访问。OP想要的是屏幕大小,而不是控制台窗口的大小……感谢您努力回答我的问题。Dummy您的答案对控制台窗口非常有用,但不幸的是,这是我需要的完整屏幕尺寸,以便我可以划分我的应用程序以完全适应屏幕。非常感谢。是的,我错过了添加参考的东西,并将其作为导入阅读,这显然不起作用。我对visualstudios比较陌生,在vb.net方面也没有专家。也许你能帮我看看你的代码。。我从存储库下载了您的项目。当我打开项目时,它不会显示任何代码,即visual Studio的中心窗格为空白。我知道我可能需要点击一些东西来显示代码,但找不到它…抱歉,新手…你只需要打开
ConsoleScreenSize.sln
,所有内容都应该显示出来。我在底部的解决方案资源管理器中找到了它。我做了一些事情,使我自己的源代码也消失了。谢谢Paul,你的代码(现在是我的)工作得非常完美。我还必须添加system.drawing参考(如上面的列表所示)和拼图的最后一块单击到位。我不知道如果没有你的帮助我会不会找到这个,所以再次谢谢你,伙计……没问题,这就是Stackoverflow的目的。祝你在接下来的工作中好运。