【问题标题】:SetWindowPos not doing anything despite providing all parameters尽管提供了所有参数,但 SetWindowPos 没有做任何事情
【发布时间】:2018-11-20 20:20:24
【问题描述】:

我已经导入了 SetWindowPos 和 GetForegroundWindow:

[DllImport("user32.dll", CharSet = CharSet.Ansi)]
private static extern IntPtr GetForegroundWindow();


[DllImport("user32.dll", CharSet = CharSet.Ansi)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, UInt32 uFlags);

我尝试过使用它们,虽然 GetForegroundWindow 确实返回了一个有效值,但 SetWindowPos 没有做任何事情:

IntPtr hWID = GetForegroundWindow();
SetWindowPos(hWID, IntPtr.Zero, 50, 500, 800, 800, 0x0004);

我需要设置一些功能吗?还是我忘记了权限?

似乎将相同的代码块插入 .NET 项目会产生想要的结果。有没有办法在 UWP 中实现这一点,还是我必须在 .NET 中做到这一点?

【问题讨论】:

    标签: uwp dllimport setwindowpos


    【解决方案1】:

    由于各种原因,大多数 User API 不适用于 UWP 应用程序。商店也不支持它们,因此如果您想提交您的应用,您将无法提取。

    目前,UWP 对窗口的支持有限,但我们一直在寻求改进(例如在 WPF 应用程序中启用 XAML 控件)。

    【讨论】:

    • 有道理。除了试用之外,是否有一种简单的方法来检查 UWP/商店是否支持 API?文档页面上的一些信息会很棒。此外,似乎正确的做法是在 .NET WPF 中重做这个应用程序,或者使用“runFullTrust”。我假设如果我尝试 zse runFullTrust 与使用桌面网桥,商店没有区别?而且我不在乎主项目是否是 UWP,在 WPF 中执行并使用桌面桥会更简单?
    • @JonnyLee 您可以通过将桌面扩展添加到您的 UWP 应用程序包并从那里进行 SetWindowPos 调用来完成此任务。请参阅此处的快速教程:stefanwick.com/2018/04/06/uwp-with-desktop-extension-part-1 - 顺便说一句,UWP 中更好的窗口支持不会解决这个问题,因为您正在尝试在其他应用程序的窗口(可能是也可能不是 UWP 窗口)上进行操作。
    • 如果您查看页面底部,文档应该会告诉您 API 是否适用于桌面和/UWP。
    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2012-09-07
    • 2016-10-02
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多