相关疑难解决方法(0)

GetSystemMetrics()为.NET 4.5和.NET 4.0返回不同的结果

在.NET 4.0 - > .NET 4.5应用程序迁移过程中,我发现了一种非常奇怪的行为.我已经能够将这个问题跟踪到这个简短的代码片段:

class Program
{
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    public static extern int GetSystemMetrics(int nIndex);

    static void Main(string[] args)
    {
        const int CXFRAME = 0x20;
        const int CYFRAME = 0x21;

        var dx = GetSystemMetrics(CXFRAME);
        var dy = GetSystemMetrics(CYFRAME);

        Console.WriteLine("{0}x{1}", dx, dy);
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

当使用Target Framework = 4.0(以及2.0,3.0,3.5)编译时,它输出8x8

编译时Target Framework = 4.5,输出4x4

使用MSVS2012调试器运行此示例也始终输出4x4(使用任何目标框架).

其他选项(目标框架配置文件,目标平台,启用/禁用Aero)不会影响结果,唯一改变输出的是目标框架和运行调试器.我已经能够在3台计算机上重现这个问题,不幸的是它们在安装的软件方面几乎完全相同:

  • Windows 7 Ultmate SP1(俄语,所有更新安装)与MSVS2012(英语/ rusian)更新1
  • Windows 8(在虚拟机上)

目前我正在考虑修补一些使用反射SystemParameters调用的.NET类(例如)GetSystemMetrics(),但我不确定如何获得正确的度量值.

问题:

  • 我错过了什么吗?如何GetSystemMetrics() …

c# .net-4.0 getsystemmetrics .net-4.5

6
推荐指数
2
解决办法
7057
查看次数

如何检测Windows设备是否启用了触控功能

如何检测设备是否在c#中为WinForms应用程序(非WPF)启用了触控功能.

我发现有关GetSystemMetrics的信息...无法在c#中找到如何使用它.

我尝试使用System.Windows.Input.Tablet类......即使我使用.Net Framework 4.5,也不会出现在c#中.

我尝试使用System.Windows.Devices ...不会出现在c#中,即使我使用的是.Net Framework 4.5.

我也检查了这个这个,这似乎使这个问题重复.但是,这些都没有回答我的问题.

.net c# winforms

6
推荐指数
2
解决办法
5469
查看次数

如何告诉普通触摸屏?

如果多台屏幕连接到计算机,我想在触摸屏上显示应用程序.通过迭代System.Windows.Forms.Screen.AllScreens我可以获得WorkingArea以移动窗口.但是,Screen没有提供IsTouchscreen方法.

另一方面通过遍历迭代System.Windows.Input.Tablet.TabletDevices我无法找到相应的Screen,因为Screen.DeviceName不匹配TabletDevice.Name.

那么有没有办法以某种方式匹配Screena TabletDevice或者是否有我可以使用的另一种解决方法?

c# wpf screen touchscreen

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

标签 统计

c# ×3

.net ×1

.net-4.0 ×1

.net-4.5 ×1

getsystemmetrics ×1

screen ×1

touchscreen ×1

winforms ×1

wpf ×1