C# SetWindowPos函数
在C#中,SetWindowPos函数用于设置窗口的位置和大小。
原型:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
参数说明:
-
hWnd: 要设置位置和大小的窗口的句柄(handle)。 -
hWndInsertAfter: 确定窗口的 Z 顺序,即窗口如何在 Z 顺序中放置。通常可以使用以下值之一:IntPtr.Zero: 将窗口放在 Z 顺序的顶部。new IntPtr(-1): 将窗口放在所有非顶层窗口的顶部。new IntPtr(-2): 将窗口放在所有窗口的顶部。- 其他窗口句柄:将窗口放在指定窗口的顶部。
-
X和Y: 窗口的新位置的左上角的 X 和 Y 坐标。 -
cx和cy: 窗口的新宽度和高度。 -
uFlags: 设置窗口位置和大小的标志。可以使用以下标志的组合来控制窗口的行为:-
SWP_NOSIZE: 维持当前尺寸(忽略 cx 和 cy 参数)。 -
SWP_NOMOVE: 维持当前位置(忽略 X 和 Y 参数)。 -
SWP_NOZORDER: 维持当前 Z 顺序(忽略 hWndInsertAfter 参数)。 -
SWP_SHOWWINDOW: 如果窗口在调用时是隐藏的,显示窗口。 -
SWP_HIDEWINDOW: 隐藏窗口。 -
SWP_NOACTIVATE: 不激活窗口。仅适用于SWP_SHOWWINDOW标志。 -
SWP_DRAWFRAME: 在调整窗口大小时,重绘窗口边框(通常与SWP_FRAMECHANGED一起使用)。 -
SWP_NOOWNERZORDER: 不改变拥有者窗口的 Z 顺序。 -
SWP_NOSENDCHANGING: 防止窗口接收WM_WINDOWPOSCHANGING消息。 -
SWP_FRAMECHANGED: 使系统发送WM_NCCALCSIZE消息,即使窗口的尺寸没有改变。 -
SWP_NOCOPYBITS: 防止窗口重绘。 -
SWP_NOREPOSITION: 不重新定位窗口,即使大小或位置发生变化。
-
示例用法:
1、改变窗口大小:
using System;
using System.Runtime.InteropServices;// 定义常量和方法签名
public class Win32
{[DllImport("user32.dll")]public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);public const uint SWP_SHOWWINDOW = 0x40;
}// 获取窗口句柄并调用 SetWindowPos 函数改变窗口大小
IntPtr hWnd = // 窗口句柄
int newX = // 新的 X 坐标
int newY = // 新的 Y 坐标
int newWidth = // 新的宽度
int newHeight = // 新的高度Win32.SetWindowPos(hWnd, Win32.HWND_TOPMOST, newX, newY, newWidth, newHeight, Win32.SWP_SHOWWINDOW);
其中窗口句柄可以使用FindWindow函数获取窗口句柄(后面同),如:
[DllImport("user32.dll", SetLastError = true)]public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);IntPtr hWnd = Win32.FindWindow(null, "窗口标题"); // 替换为窗口的类名或标题
2、移动到屏幕的左上角:
using System;
using System.Runtime.InteropServices;// 定义常量和方法签名
public class Win32
{public const int SWP_NOSIZE = 0x0001;public const int SWP_NOMOVE = 0x0002;public const int SWP_NOZORDER = 0x0004;public const int SWP_SHOWWINDOW = 0x0040;[DllImport("user32.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
}// 在代码中调用 SetWindowPos 函数将窗口移动到屏幕左上角
IntPtr hWnd = // 窗口句柄
Win32.SetWindowPos(hWnd, IntPtr.Zero, 0, 0, 0, 0, Win32.SWP_NOSIZE | Win32.SWP_SHOWWINDOW);
3、使其成为Topmost窗口并移动到屏幕的左上角:
using System;
using System.Runtime.InteropServices;// 定义常量和方法签名
public class Win32
{public const int SWP_NOSIZE = 0x0001;public const int SWP_NOMOVE = 0x0002;public const int SWP_NOZORDER = 0x0004;public const int SWP_SHOWWINDOW = 0x0040;public const int HWND_TOPMOST = -1;public const int HWND_NOTOPMOST = -2;[DllImport("user32.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
}// 在代码中调用 SetWindowPos 函数将窗口移动到屏幕左上角并设置为Topmost
IntPtr hWnd = // 窗口句柄
Win32.SetWindowPos(hWnd, Win32.HWND_TOPMOST, 0, 0, 0, 0, Win32.SWP_NOSIZE | Win32.SWP_SHOWWINDOW);
4、显示窗口:
using System;
using System.Runtime.InteropServices;// 定义常量和方法签名
public class Win32
{public const int SW_SHOWNORMAL = 1;[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}// 获取窗口句柄并调用 ShowWindow 函数显示窗口
IntPtr hWnd = // 窗口句柄
Win32.ShowWindow(hWnd, Win32.SW_SHOWNORMAL);
5、隐藏窗口:
using System;
using System.Runtime.InteropServices;// 定义常量和方法签名
public class Win32
{public const int SW_HIDE = 0;[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}// 获取窗口句柄并调用 ShowWindow 函数隐藏窗口
IntPtr hWnd = // 窗口句柄
Win32.ShowWindow(hWnd, Win32.SW_HIDE);
相关文章:
C# SetWindowPos函数
在C#中,SetWindowPos函数用于设置窗口的位置和大小。 原型: [DllImport("user32.dll", SetLastError true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int …...
zookeeper快速入门五:用zookeeper实现服务注册与发现中心
系列: zookeeper快速入门一:zookeeper安装与启动-CSDN博客 zookeeper快速入门二:zookeeper基本概念-CSDN博客 zookeeper快速入门三:zookeeper的基本操作 zookeeper快速入门四:在java客户端中操作zookeeper-CSDN博客…...
Java 中 BitSet 类的用法
Java 中 BitSet 类的用法 API构造置位为 true清除为 false查找位反转长度运算流其他 原理底层数据结构如何工作 API 构造 无参构造 :默认为 64 个 bit 的容量 BitSet bitset new BitSet();有参构造 :设置为 n 个 bit 的容量 BitSet bitset new BitSe…...
Jenkins-pipeline流水线构建完钉钉通知
添加钉钉机器人 在钉钉群设置里添加机器人拿出Webhook地址,设置关键词 Jenkins安装钉钉插件 Dashboard > 系统管理 > 插件管理,搜索构建通知,直接搜索Ding Talk也行 安装DingTalk插件,重启Jenkins 来到Dashboard > 系…...
汽车制造业供应商管理会面临哪些问题?要如何解决?
汽车行业的供应链是及其复杂的,并且呈全球化分布,企业在知识产权方面的优势很可能是阶段性的。企业需要持续保持领先,将面临巨大的挑战,尽快地将产品推向市场是保持领先的唯一途径。然而,如果没有正确的方式去实现安全…...
day28|93. 复原 IP 地址|Leetcode 78. 子集|90.子集II
Leetcode 93. 复原 IP 地址 链接:93. 复原 IP 地址 class Solution { public:vector<string> res;string path;int pointNum 0;vector<string> restoreIpAddresses(string s) {backtracking(0, s);return res;}void backtracking(int start, string …...
怎样提升小程序日活?签到抽奖可行吗?
一、 日活运营策略 小程序应该是即用即走的,每个小程序都在用户中有自己的独特定位,可能是生活日常必备(美食、团购、商城),也可能是工作办公必备(文档、打卡、工具)。 如果你想要让自己的小程…...
hive语法树分析,判断 sql语句中有没有select *
pom依赖参考以下博文java 通过 IMetaStoreClient 取 hive 元数据信息-CSDN博客1 节点处理器类 import lombok.Getter; import org.apache.hadoop.hive.ql.lib.Dispatcher; import org.apache.hadoop.hive.ql.lib.Node; import org.apache.hadoop.hive.ql.parse.ASTNode; impor…...
【论文阅读】MSGNet:学习多变量时间序列预测中的多尺度间序列相关性
MSGNet:学习多变量时间序列预测中的多尺度间序列相关性 文献介绍摘要总体介绍背景及当前面临的问题现有解决方案及其局限性本文的解决方案及其贡献 背景知识的相关工作背景知识问题表述: Method论文主要工作1.输入嵌入和剩余连接 (Input Embedding and R…...
智慧城市与数字孪生:共创未来城市的智慧生活
目录 一、智慧城市与数字孪生的概念与特点 二、智慧城市与数字孪生共创智慧生活的路径 1、城市规划与建设的智能化 2、城市管理与服务的智慧化 3、城市安全与应急管理的智能化 三、智慧城市与数字孪生面临的挑战与对策 四、智慧城市与数字孪生的发展趋势与展望 1、技术…...
【Ubuntu】FTP站点搭建
配置顺序 前提条件:确保软件仓库可以正常使用,确保已正常配置IP地址 1.安装FTP服务 2.编辑FTP配置文件 3.设置开机自启 4.创建用户 5.配置用户限制名单 6.重启服务 7.查看运行状态 8.测试在同一局域网下的Windows查看文件 1.安装FTP服务 sudo apt insta…...
RK3228H is the same SoC as rk3328.
RK3228H is the same SoC as rk3328....
Golang 开发实战day04 - Standard Library
Golang 开发实战day04 - Standard Library 接下来开始我们第四天学习,Go语言标准库提供了丰富的功能,可以帮助开发者快速完成各种任务。 golang就像其他语言一样,附带了一些非常轻量级的函数和特性,都是开箱即用的,这里…...
程序员排查BUG指南
程序员排查BUG(错误)是软件开发过程中的重要一环, 以下是一份程序员排查BUG的指南,帮助你更有效地识别、定位和修复问题: 1、重现BUG:确保能够准确地重现BUG,这是解决问题的第一步。尽量记录重现BUG的步骤。…...
【Vue】elementUI-MessageBox组件相关
官方代码: <template><el-button type"text" click"open">点击打开 Message Box</el-button> </template><script>export default {methods: {open() {this.$confirm(此操作将永久删除该文件, 是否继续?, 提示…...
数据库运行状况和性能监控工具
数据库监控是跟踪组织中数据库的可用性、安全性和性能的过程,它涉及通过跟踪各种关键指标来分析数据库的性能,确保数据库的正常运行并具有深入的可见性,并在出现潜在问题时触发即时警报,以采取主动措施来确保数据库的高可用性。 …...
CTF-辨别细菌
题目描述:try your best to find the flag. 进入靶场后发现是一个游戏,需要全部答对才可以得到最后的flag 查看了一下源码,发现有一个答案模板的模块 尝试解释一下代码 <!-- 答案模版 --> <script id"template_game_pi…...
RuoYi-Vue开源项目2-前端登录验证码生成过程分析
前端登录验证码实现过程 生成过程分析 生成过程分析 验证码的生成过程简单概括为:前端登录页面加载时,向后端发送一个请求,返回验证码图片给前端页面展示 前端页面加载触发代码: import { getCodeImg } from "/api/login&q…...
error: C preprocessor fails sanity check
问题 ./configure --prefix/opt/mips_lib/libev --hostmipsel-openwrt-linux CCmipsel-openwrt-linux-gcc运行后提示 checking how to run the C preprocessor... mipsel-openwrt-linux-gcc --sysroot/opt/mt7628/toolchain-mipsel_24kc_gcc-8.4.0_musl -I/opt/mt7628/toolch…...
Kubernetes实战(三十一)-安装containerd
1 资源 containerd项目官方地址 GitHub - containerd/containerd: An open and reliable container runtime containerd的发布版本地址: Releases containerd/containerd GitHub 2 安装containerd 2.1 解压安装 2.1.1 下载压缩包 curl -LO https://github…...
Claude Design 登场,设计工具分化,Figma“Sketch 时刻”将至?
关于 Claude Design 的思考与感悟 2026 年 4 月 18 日,山姆亨利戈尔德试用了 Claude Design,并对局势发展有了一些想法。随着产品团队规模扩大,设计需在工程组织中证明自身价值,促使设计向系统化发展。Figma 发明了组件、样式、变…...
微服务开发者的瑞士军刀:Spring Cloud Alibaba五大核心组件选型与混搭使用指南
微服务架构实战:Spring Cloud Alibaba组件选型与协同设计指南 在当今快速迭代的互联网产品开发中,微服务架构已成为应对复杂业务场景的标准解法。但面对琳琅满目的技术组件,如何构建既满足当前需求又具备演进能力的架构体系?Sprin…...
什么是不会表达情绪?情绪管理困难与学习障碍的关系是什么?
情绪管理困难如何影响孩子的学习和行为表现 情绪管理困难能显著影响孩子的学习和行为表现。首先,情绪困扰可能导致家庭作业拖延,孩子在情绪低落时往往会拖延完成作业,从而影响学业成绩。其次,课堂上的行为问题也常与情绪管理有关。…...
从源码到实战:深度定制你的Stable-Baselines3 Actor-Critic网络(含共享层设计)
从源码到实战:深度定制你的Stable-Baselines3 Actor-Critic网络(含共享层设计) 在强化学习领域,Actor-Critic架构因其结合了策略梯度与值函数估计的双重优势,已成为解决复杂决策问题的首选方案。而Stable-Baselines3作…...
三步解锁QQ音乐加密格式:qmc-decoder让你的音乐收藏真正自由
三步解锁QQ音乐加密格式:qmc-decoder让你的音乐收藏真正自由 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾为QQ音乐下载的歌曲无法在其他播放器播放而…...
Redis桌面管理器终极指南:告别命令行,用Another Redis Desktop Manager轻松管理数据库
Redis桌面管理器终极指南:告别命令行,用Another Redis Desktop Manager轻松管理数据库 【免费下载链接】AnotherRedisDesktopManager 🚀🚀🚀A faster, better and more stable Redis desktop manager [GUI client], co…...
从葡萄酒评价到无人机编队:用Python实战复现数学建模经典赛题(附完整代码)
从葡萄酒评价到无人机编队:用Python实战复现数学建模经典赛题(附完整代码) 数学建模竞赛的魅力在于将抽象问题转化为可计算的模型,而Python正是实现这一过程的利器。当我在实验室第一次用几行代码完成葡萄酒品质分类时,…...
Applite:3步告别终端命令,用图形界面轻松管理macOS应用
Applite:3步告别终端命令,用图形界面轻松管理macOS应用 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为繁琐的终端命令而头疼吗?macO…...
深入理解ESP32 BLE扫描:从扫描间隔、窗口到白名单,如何优化你的设备发现策略?
ESP32 BLE扫描性能优化实战:从参数调优到智能过滤策略 在物联网设备爆炸式增长的今天,BLE(低功耗蓝牙)技术已成为连接智能设备的首选方案之一。作为开发者,我们经常面临一个核心挑战:如何在资源受限的嵌入式…...
Chapter 13: Physical Layer - Electrical
Chapter 13: Physical Layer - Electrical 书籍: PCI Express Technology 3.0 (MindShare Press, 2012) 页码: Book Pages 448-486 | PDF Pages 520-545 学习日期: 2026-04-13本章概要 本章描述 PCIe Physical Layer 的电气部分,包括向后兼容性、组件接口、高速信号…...
