小编Ric*_*ahl的帖子

DwmGetWindowAttribute 使用 PInvoke 返回 0

我试图通过捕获特定窗口来进行屏幕捕获,并且为了准确地计算出要捕获的窗口的大小,我想使用 DwmGetWindowAttribute()。当我在 Windows 10 上使用 PInvoke 调用此函数时,Rect即使结果值为 0(成功),结构也始终为空。传入的窗口句柄也是有效的,因为有后备代码调用GetWindowRect()它的工作原理(尽管存在边界问题)。

我有点不知所措。我不久前使用过相同的代码(也许在 Windows 8.1 上?)并且相同的代码似乎可以工作,但现在无论我做什么,对该函数的调用总是返回一个空结构。

这是相关代码。

定义:

    [DllImport("dwmapi.dll")]
    static extern int DwmGetWindowAttribute(IntPtr hwnd, int dwAttribute, out Rect pvAttribute, int cbAttribute);


    [Flags]
    public enum DwmWindowAttribute : uint
    {
        DWMWA_NCRENDERING_ENABLED = 1,
        DWMWA_NCRENDERING_POLICY,
        DWMWA_TRANSITIONS_FORCEDISABLED,
        DWMWA_ALLOW_NCPAINT,
        DWMWA_CAPTION_BUTTON_BOUNDS,
        DWMWA_NONCLIENT_RTL_LAYOUT,
        DWMWA_FORCE_ICONIC_REPRESENTATION,
        DWMWA_FLIP3D_POLICY,
        DWMWA_EXTENDED_FRAME_BOUNDS,
        DWMWA_HAS_ICONIC_BITMAP,
        DWMWA_DISALLOW_PEEK,
        DWMWA_EXCLUDED_FROM_PEEK,
        DWMWA_CLOAK,
        DWMWA_CLOAKED,
        DWMWA_FREEZE_REPRESENTATION,
        DWMWA_LAST
    }

    [Serializable, StructLayout(LayoutKind.Sequential)]
    public struct Rect
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;

        public Rectangle ToRectangle()
        {
            return …
Run Code Online (Sandbox Code Playgroud)

c# windows pinvoke

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

是否可以在 Windows Sandbox 上安装 .NET 应用程序?

我目前正在使用 Windows Sandbox,但似乎无法运行 .NET 应用程序。尽管 Sandbox 安装了 .NET 4.8,但当我尝试运行下载的 .NET 桌面应用程序时,它抱怨运行时不可用。

在此处输入图片说明

尝试安装特定的运行时(4.7.2 是我下载的内容)会出现上述错误。

那么有没有办法在沙箱上运行 .NET 应用程序呢?

.net windows .net-runtime windows-sandbox

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

添加要在运行时可供 Razor 页面使用的程序集/类型

我正在尝试构建一个动态 Web 界面,在其中我可以动态指向文件夹并使用 ASP.NET Core 提供该文件夹中的 Web 内容。通过使用 ASP.NET Core 中的 FileProviders 重新路由 Web 根文件夹,可以非常轻松地实现此目的。这适用于 StaticFiles 和 RazorPages。

但是,对于 RazorPages 来说,问题是一旦执行此操作,您就无法动态添加其他类型的引用。我希望能够选择添加一个文件夹 (PrivateBin),在启动时我可以循环遍历该文件夹、加载程序集,然后让这些程序集在 Razor 中可见。

不幸的是,它不起作用,因为即使使用运行时编译,Razor 似乎也看不到加载的程序集。

我在启动期间使用以下内容来加载程序集。请注意,加载这些文件的文件夹不在默认的 ContentRoot 或 WebRoot 中,而是在新的重定向的 WebRoot 中。

// WebRoot is a user chosen Path here specified via command line --WebRoot c:\temp\web
private void LoadPrivateBinAssemblies()
{
    var binPath = Path.Combine(WebRoot, "PrivateBin");
    if (Directory.Exists(binPath))
    {
        var files = Directory.GetFiles(binPath);
        foreach (var file in files)
        {
            if (!file.EndsWith(".dll", StringComparison.CurrentCultureIgnoreCase) &&
               !file.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase))
                continue;

            try
            {
                var asm …
Run Code Online (Sandbox Code Playgroud)

c# razor-pages asp.net-core-3.0

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

WPF XAML绑定和CurrentCulture显示

当CurrentCulture被更改时,我看到XAML文档中的一些无效行为.当我在Window中有这样的元素时:

<Window x:Class="WpfLocalizationLocBaml.Test"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"
        x:Name="wndTest"
    Title="Test" Height="300" Width="300">
    <StackPanel>

        <TextBlock x:Name="lblCultureName" 
                   Text="{Binding Source={x:Static glob:CultureInfo.CurrentCulture},
                                  Path=DisplayName}" />


        <TextBlock x:Name="lblLocaleDateValue" 
                   Text="{Binding ElementName=wndTest, Path=TestDate}"/>

        <TextBlock x:Name="lblLocaleNumberValue" 
                   Text="{Binding ElementName=wndTest,Path=NumberValue,StringFormat=c}" />

    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

以及MessageBox.Show(NumberValue.ToString("c")); 表格开始时,我看到不同的结果.

如果我使用默认语言运行表单一切都很明显.但是,如果我在代码中更改文化或在启动时绑定到日期和数字值仍显示en-US格式.显示的MessageBox.Show()值适当地反映当前文化.

问题:WPF在绑定中不尊重CurrentCulture吗?如果是这样,究竟是什么决定了用于绑定的文化.在我的情况下,它显然是en-US,但无论我在我的项目中设置什么作为默认语言,它总是在en-US中绑定.

任何想法赞赏......

wpf localization

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

如何从HTML 5多个文件输入元素捕获上传的文件

如果我有这样的输入元素:

<input type="file" multiple="multiple" name="file1" />
Run Code Online (Sandbox Code Playgroud)

并选择多个文件,浏览器使用相同的'file1'名称元素创建多个文件.这就像是列表框的多选.

那么如何使用Request.Files集合在ASP.NET中捕获它呢?Request.Files.AllKeys集合显示所有文件,但键值完全相同.Request.Files返回每个键的字符串,但我只能使用键检索第一个文件:

var file = Request.Files["file1"];
Run Code Online (Sandbox Code Playgroud)

这给了我第一个文件,但我无法访问也以这种方式选择的其他文件,因为它们没有唯一的名称.迭代也不起作用,因为Request.Files只返回键而不是实际的文件条目.

如何在ASP.NET中捕获这些辅助文件?

asp.net file-upload

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

ASP.NET核心项目:如何防止编写原型

我正在尝试将现有的Angular 2应用程序集成到Visual Studio中的现有ASP.NET Core项目中.这两个项目都是独立工作的,但是当我尝试在Visual Studio中编译ASP.NET Core项目时,我得到了一堆与文件node_modules夹中的文件相关的打字稿编译错误.

在此输入图像描述

我如何能:

  • 保持打字稿不被编译
  • 让编译器不要查看任何内容 node_modules

我可以通过将node_modules文件夹移动到项目根目录来实现此功能,但这需要完全重新安排原始项目依赖项和构建文件,我宁愿避免这种情况.

typescript visual-studio-2015 asp.net-core-1.0

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

C#为Windows中的每个监视器获取DPI缩放比例

我正在使用WPF应用程序中的代码,该代码需要计算Windows中每个监视器的DPI缩放大小。我能够确定主屏幕的DPI,但由于某些原因,我无法弄清楚如何获得其他显示器的比例尺-其他显示器都返回与主显示器相同的DPI。

有一些代码可以做到这一点,所以请多多包涵。第一组代码处理基于HWND的DPI。该代码获取活动的监视器,然后检索DPI设置,然后将数字与96 DPI(通常为100%)的比率进行比较。

public static decimal GetDpiRatio(Window window)
{
    var dpi = WindowUtilities.GetDpi(window, DpiType.Effective);
    decimal ratio = 1;
    if (dpi > 96)
        ratio = (decimal)dpi / 96M;

    return ratio;
}
public static decimal GetDpiRatio(IntPtr hwnd)
{            
    var dpi = GetDpi(hwnd, DpiType.Effective);            
    decimal ratio = 1;
    if (dpi > 96)
        ratio = (decimal)dpi / 96M;

    //Debug.WriteLine($"Scale: {factor} {ratio}");
    return ratio;
}

public static uint GetDpi(IntPtr hwnd, DpiType dpiType)
{            
    var screen = Screen.FromHandle(hwnd);            
    var pnt = new Point(screen.Bounds.Left + 1, screen.Bounds.Top …
Run Code Online (Sandbox Code Playgroud)

windows wpf dpi

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

mat-card-avatar 在初始页面加载时未正确渲染

我有一个简单的垫卡头像布局,它在我的应用程序的许多页面的标题中显示圆形图标。我发现在许多页面上(但不是所有页面,即使使用相同类型的代码)都没有mat-card-avatar在初始渲染通道上正确渲染。

我正在使用这段代码:

<h1 fxLayout="row">
      <div mat-card-avatar class="header-icon">
        <mat-icon>home</mat-icon>
      </div>
      Welcome {{ user.userName }}
</h1>
Run Code Online (Sandbox Code Playgroud)

第一次渲染时(即完全刷新浏览器),预期的圆形图标显示为方形:

在此输入图像描述

如果我然后导航到具有相同布局样式的另一个视图,则可以mat-card-avatar正确呈现,就像然后导航回原始视图一样:

在此输入图像描述

真正奇怪的是,我在很多页面上使用相同的基本布局,在某些页面上如所描述的那样失败,而在其他页面上则有效。大多数其他有效的方法往往更加复杂。

我怀疑这是一个计时问题,但我查看了代码并尝试了移动包含,但没有任何效果。也许与这种情况相反的是,图标显示的原色也来自样式 - 因此肯定会应用一些材质样式。

在调试器中查看渲染的 HTML,我发现渲染的 HTML 没有任何区别 - 相同的 HTML 标记、类和样式,无论以哪种方式渲染,这确实很奇怪。

有没有人遇到过这个问题,或者对可能导致这个问题的原因以及任何解决方法有任何建议?

material-design angular-material angular

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

LibGit2Sharp 和身份验证 UI

我正在使用 LibGit2Sharp 向应用程序添加许多 Git 操作。我添加了 来Microsoft.Alm.Authentication帮助进行身份验证和凭证管理器访问。它非常适合检索已从命令行输入的凭据。

但是,有什么方法可以连接到凭据管理器的登录 UI,提示输入 Github、BitBucket 和 VSTS 的用户名和密码。此 UI 会从命令行自动弹出,但在使用 LibGit2Sharp 时不会触发。

我查看了 Github 上的 GitCredentialManager 项目,我可以看到提供 UI 的组件,但在尝试弄清楚如何显式挂钩这些组件之前,我是否遗漏了一些方法,即这是作为Microsoft.Alm.Authentication(或相关包)?或者有人可以指出如何最好地将其连接起来的示例或指南吗?

c# authentication libgit2sharp credential-manager

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

ASP.NET MVC删除操作未触发

我有一个ASP.NET MVC 5控制器使用属性路由,似乎没有使用DELETE操作.

 [Route("deletealbum/{id}")]
 [AcceptVerbs(HttpVerbs.Delete)]
 public ActionResult DeleteAlbum(int id)
 {
     // rest of the code omitted here
     return Json(true, JsonRequestBehavior.AllowGet);
 }
Run Code Online (Sandbox Code Playgroud)

我明确地将路由名称更改为deletename以排除其他路由过载冲突.

上面的操作没有触发 - 我从IIS中找不到404.但是,如果我将上面的动作切换到HttpVerbs.Get路线是没有问题的.

长期以来第一次使用MVC而不是Web API构建API,我无法弄清楚为什么路由没有触发 - 它几乎看起来像任何DELETE操作都被阻止了.我在不同的控制器中看到相同的行为 - GET工作正常,但是DELETE操作返回404.是否需要翻转某些配置设置以启用其他动词?

asp.net-mvc asp.net-mvc-routing

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

FoxPro Internet Explorer COM自动化:点击在IE 10及更高版本中不起作用?

我最近需要更新一个旧的FoxPro遗留应用程序,该应用程序使用Internet Explorer Automation来通过单击某些href链接并将数据输入到表单并提交来驱动网页内容.

这曾经工作得很好但是用IE 11(Windows 10)以及IE 10(Windows 7)检查Windows的最新版本我发现任何对元素的点击事件调用都没有效果而且它们无声地失败 - 没有错误,但也没有点击.

o = CREATEOBJECT('InternetExplorer.Application')
o.visible = .t.
o.Navigate('http://test.com/ControlBasics.wcsx')

wait window 'page loading...' timeout 1.5

* Target object has no id so navigate DOM to get object reference
oLinks = o.Document.getElementsByTagName('a')
oLink = oLinks.item(0)
oLink.Click()

* o.navigate(oLing.href) && works but not sufficient

o.document.getElementById('txtName').value = 'Rick'
oButton = o.document.getElementById('btnSubmit')
oButton.Click()
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,.click()事件触发器都没有任何效果.然而,对文本框的分配工作正常,因此页面是脚本化的.

有人知道发生了什么变化或者可能会对行为产生什么影响,以便自动化以前工作的事件代码不再有效吗?

com internet-explorer foxpro ie-automation

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