在.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台计算机上重现这个问题,不幸的是它们在安装的软件方面几乎完全相同:
目前我正在考虑修补一些使用反射SystemParameters调用的.NET类(例如)GetSystemMetrics(),但我不确定如何获得正确的度量值.
问题:
GetSystemMetrics() …C# WinApps:是否有任何单独的事件可以告诉我们用户已单击组合框旁边的小下拉按钮?
建议?
当我开始一个新的过程时,它会自动获得焦点.如何防止它获得焦点或者将焦点重新集中到我的应用程序?
这是我正在使用的代码:
string path = @"c:\temp\myprocess.exe";
ProcessStartInfo info = new ProcessStartInfo(path);
info.WorkingDirectory = path;
Process p = Process.Start(info);
Run Code Online (Sandbox Code Playgroud)
我只需要执行的过程不要获得焦点.
非常感谢,
Adi Barda