相关疑难解决方法(0)

如何在 C# 程序中获取任务栏通知区域宽度?

我正在 C# Winforms 应用程序中开发一个功能,它需要确定任务栏的 Windows“通知区域”的宽度(特别是当停靠在屏幕底部的默认位置时)。

为了提供更好的上下文,程序显示小的、瞬态的、无边界的窗口(类似于工具提示),我们希望确保通知区域“系统托盘”图标和时钟永远不会被这些窗口之一覆盖。

下面是我想要获得的宽度的屏幕截图(来自 Windows 10),以及它的用途:

任务栏通知区域需要的宽度尺寸,以及使用说明

到目前为止,我已经探索了 .Net 框架,并研究了 Win32 API 调用,但是我无法确定任何潜在的解决方案(也无法确定这是否确实可行)。

任何建议将不胜感激。理想情况下,解决方案最早可与 Windows 7 兼容,但这并不是绝对要求。

.net c# winapi winforms

6
推荐指数
1
解决办法
1268
查看次数

GetClientRect 返回缩放尺寸?

我打电话 GetClientRect在 C# 中通过 pinvoke以获取我用作 DirectX 渲染目标区域的面板的尺寸(在 WindowsForm 上)。我本以为 WinAPI 给了我未缩放的(即,无论 Windows 显示 DPI 设置如何,返回的值都应该相同)尺寸,但它似乎给了我缩放的尺寸(至少在 Windows 8.1 上,因为我还没有测试过)在其他操作系统上)。

ClientRectangle属性还返回与 相同的缩放尺寸GetClientRect。当我将表单更改AutoScaleModenone.

这是预期的行为GetClientRect吗?如果是这样,我如何获得未缩放的尺寸?

编辑:这仅影响 Windows 8.1。在 Windows 7 上对其进行了测试,GetClientRect 返回未缩放的尺寸!

c# pinvoke winapi winforms autoscalemode

5
推荐指数
1
解决办法
1519
查看次数

Windows格式错误的解析VB.NET

当我启动应用程序时,结果如下: 在此处输入图片说明

我也尝试使用Metro gui,但是什么也没有...

我的问题也是,我应该设置Visual Studio的哪个选项来获得Winform的正常(而不是模糊的)分辨率?

.net vb.net resolution dpi winforms

5
推荐指数
1
解决办法
665
查看次数

如何修复 Visual Studio 2017 Windows 窗体的 DPI 缩放问题

自从我在 2015 年购买了这台带有 4k 显示屏的笔记本电脑以来,我就一直遇到这个问题。经过很多努力,我设法解决了这个问题,但我已经厌倦了。VS2017 应该是 DPI 感知的,因此在创建简单的 MDI 父表单并运行应用程序时,我不希望出现任何问题。但令我沮丧的是,toolStrip 中的图标(只是 MDI 父窗体中的标准图标)缩放得非常糟糕。当我创建一个带有按钮的表单时,该表单在 Visual Studio 2017 设计器中看起来很好,并且我运行应用程序并加载表单时,按钮文本未完全显示。我的显示设置如下:

  • 分辨率:3840x2160
  • 缩放 250%(在显示设置中),因为在 100% 时一切都无法读取

我试图找到解决方案,但我能找到的唯一可行的方法是通过注册表将我的 Visual Studio 设计器设置为 dpi-unaware(链接在这里

帮助任何人?

更新当我添加一个新的 MDI 表单并设置 DPI 感知关闭时,除了 Visual Studio 本身(模糊)之外,一切看起来都很好。

winforms windows-10 visual-studio-2017

5
推荐指数
2
解决办法
1万
查看次数

Windows 窗体 C# 中的字体模糊

我在使导出的 C# 项目中的字体与设计器中的字体一样清晰时遇到了问题。当我设计它时,它看起来很完美,但是当我运行程序或导出它时,字体很模糊。

示例屏幕截图 #1

示例屏幕截图 #2

c# winforms

4
推荐指数
1
解决办法
5689
查看次数

通过手柄捕获窗口的屏幕

我试图只捕获桌面中的特定窗口,但是却得到了混合图像,窗口的一部分和桌面区域的一部分。

我想念什么?

这是我的代码:

RECT rect = new RECT();

if (!SetForegroundWindow(handle))
    throw new Win32Exception(Marshal.GetLastWin32Error());

if (!GetWindowRect(handle, out rect))
    throw new Win32Exception(Marshal.GetLastWin32Error());

Thread.Sleep(500);

Rectangle windowSize = rect.ToRectangle();
Bitmap target = new Bitmap(windowSize.Width, windowSize.Height);
using (Graphics g = Graphics.FromImage(target))
{
    g.CopyFromScreen(0, 0, 0, 0, new Size(windowSize.Width, windowSize.Height));
}

target.Save("foo.png", System.Drawing.Imaging.ImageFormat.Png);
Run Code Online (Sandbox Code Playgroud)

c# windows screen-capture

3
推荐指数
2
解决办法
6950
查看次数

在 VS2017 下调整对话框大小

这是非常奇怪的。我移植了一个在 VS2008 下运行良好的项目,但是当我用 VS2017 构建它时,一行的存在导致我的对话框调整大小 - 代码甚至不需要运行,它只需要出现在一个子例程中跑!我已经创建了我可以想出的最简单的程序版本来显示这种行为。尝试在不同版本的 Visual Studio 下构建/运行。我希望解释为什么会发生这种情况以及如何解决它。谢谢。

using System;
using System.IO;
using System.Windows.Forms;
using System.Windows.Media.Imaging; // Need reference to PresentationCore

namespace Test2017
{
    public class MainDlg : Form
    {
        [STAThread]
        static void Main() { Application.Run(new MainDlg()); }

        public MainDlg()
        {
            SuspendLayout();
            var button = new Button { Location = new System.Drawing.Point(7, 56), Size = new System.Drawing.Size(263, 23), Text = "Note size before and after clicking" };
            button.Click += Button_Click;
            ClientSize = new System.Drawing.Size(282, 253);
            Controls.Add(button);
            ResumeLayout(false);
            PerformLayout(); …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio

3
推荐指数
1
解决办法
78
查看次数

C# 屏幕截图全窗口

我正在尝试使用 .NET Framework 编写一个控制台应用程序。我想截图我的屏幕。我已经使用过其他答案,如下所示:

/sf/answers/1741565801/

问题是这并不能捕获我的整个屏幕。底部和右侧大约缺失 1/5。

如何使用 C# .NET Framework 捕获整个屏幕?

.net c# console-application

3
推荐指数
1
解决办法
8418
查看次数

Windows设备坐标与虚拟坐标

我试图在MSDN上找到答案,但是我不清楚它是如何工作的。我所有的工作都在Windows 8.1上进行。

这是我的问题。我正在使用具有3200x1800高分辨率显示器的笔记本电脑。我一直在使用EnumDisplayMonitors来获取屏幕的边框。

如果我的显示设置为默认设置,这似乎可以正常工作。但是我注意到,当我更改“窗口”显示设置以提供更大的文本时,EnumDisplayMonitor返回的分辨率也会改变。与其获得3200x1800,不如获得2133x1200。

我猜是因为我要求输入更大的文本,因此Windows选择将屏幕表示为较小的分辨率。

看来,如果我查看虚拟屏幕属性,则所有内容均以屏幕的实际坐标表示,即3200x1800。但是用于获取窗口和监视矩形的API似乎可以在此“其他”坐标空间上运行。

是否有任何文档/ Windows API来处理这些“其他坐标”和“虚拟坐标”之间的转换?即,如果我想让EnumDisplayMonitor或GetMonitorInfo给我真实的屏幕坐标,该如何将2133x1200转换为3200x1800?

windows coordinates

2
推荐指数
1
解决办法
1249
查看次数

如何避免 MDIParent 表单调整大小

我正在设计一个 Windows 窗体应用程序。我有一个以最大化状态加载的 MDIParent 窗体,并在最大化状态下加载其子窗体。但是,当我打开 OpenFileDialog 或任何 datareader 对象时,MDIParent 将缩小到较小的尺寸及其所有窗体和控件。

这个解决方案Opening child form 导致 mdiform 改变大小和收缩在我的情况下不适用/工作。

此解决方案https://support.microsoft.com/en-nz/help/967173/restoring-a-maximized-or-minimized-mdi-parent-form-causes-its-height-t对我不起作用。

一些背景:我在几乎所有的 WinForm 应用程序中都看到了这种行为,但我从来没有热衷于解决它。当我开始调查时,我能够缩小到上面强调的原因。一些帖子将其描述为 Windows 错误,但只要屏幕分辨率开始超过 1024 (VS 2010),就我的情况而言,它一直存在。我希望它不仅仅是一个 Windows 错误...

mdiparent mdichild winforms

1
推荐指数
1
解决办法
270
查看次数