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

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日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装