正人君子! 2022-08-22 11:48 采纳率: 100%
浏览 43
已结题

C#使用win32api设置命令窗体位置时失效

问题遇到的现象和发生背景

C#使用win32api设置命令窗体位置时失效

问题相关代码,请勿粘贴截图

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
调用方式
//Win32ApiTool.MoveWindow(intPtr, 0, 0, 1920, 1080, true);
Win32ApiTool.SetWindowPos(intPtr, (IntPtr)Win32ApiTool.HWND_TOP, 0, 0, s.Width, s.Height, Win32ApiTool.SWP_SHOWWINDOW );

运行结果及报错内容

命令窗体的大小生效了 但是位置无效

img

我的解答思路和尝试过的方法

尝试过
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);
也是这样的

使用下面代码获取位置 确实是离顶部和左边有距离
// 获取置顶窗口位置
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);

我想要达到的结果

目前来说资源管理器 浏览器、自己的窗体等等都可以正常使用 就唯独命令窗体无法修改显示位置

  • 写回答

2条回答 默认 最新

  • 正人君子! 2022-08-24 09:39
    关注

    已解决 换了下思路
    既然可以改变大小说明句柄拿到了
    故采取
    //先让其忽略大小改变位置 在让其忽略位置改变大小 便可实现位置和大小的改变
    Win32ApiTool.SetWindowPos(intPtr, (IntPtr)Win32ApiTool.HWND_TOP, s.X, s.Y, s.Width, s.Height, Win32ApiTool.SWP_SHOWWINDOW | Win32ApiTool.SWP_NOSIZE);
    Win32ApiTool.SetWindowPos(intPtr, (IntPtr)Win32ApiTool.HWND_TOP, s.X, s.Y, s.Width, s.Height, Win32ApiTool.SWP_SHOWWINDOW | Win32ApiTool.SWP_NOMOVE);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀