当前位置: 首页 > news >正文

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): 将窗口放在所有窗口的顶部。
    • 其他窗口句柄:将窗口放在指定窗口的顶部。
  • XY: 窗口的新位置的左上角的 X 和 Y 坐标。

  • cxcy: 窗口的新宽度和高度。

  • 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 地址 链接&#xff1a;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 …...

怎样提升小程序日活?签到抽奖可行吗?

一、 日活运营策略 小程序应该是即用即走的&#xff0c;每个小程序都在用户中有自己的独特定位&#xff0c;可能是生活日常必备&#xff08;美食、团购、商城&#xff09;&#xff0c;也可能是工作办公必备&#xff08;文档、打卡、工具&#xff09;。 如果你想要让自己的小程…...

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&#xff1a;学习多变量时间序列预测中的多尺度间序列相关性 文献介绍摘要总体介绍背景及当前面临的问题现有解决方案及其局限性本文的解决方案及其贡献 背景知识的相关工作背景知识问题表述&#xff1a; Method论文主要工作1.输入嵌入和剩余连接 (Input Embedding and R…...

智慧城市与数字孪生:共创未来城市的智慧生活

目录 一、智慧城市与数字孪生的概念与特点 二、智慧城市与数字孪生共创智慧生活的路径 1、城市规划与建设的智能化 2、城市管理与服务的智慧化 3、城市安全与应急管理的智能化 三、智慧城市与数字孪生面临的挑战与对策 四、智慧城市与数字孪生的发展趋势与展望 1、技术…...

【Ubuntu】FTP站点搭建

配置顺序 前提条件&#xff1a;确保软件仓库可以正常使用&#xff0c;确保已正常配置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 接下来开始我们第四天学习&#xff0c;Go语言标准库提供了丰富的功能&#xff0c;可以帮助开发者快速完成各种任务。 golang就像其他语言一样&#xff0c;附带了一些非常轻量级的函数和特性&#xff0c;都是开箱即用的&#xff0c;这里…...

程序员排查BUG指南

程序员排查BUG&#xff08;错误&#xff09;是软件开发过程中的重要一环, 以下是一份程序员排查BUG的指南&#xff0c;帮助你更有效地识别、定位和修复问题&#xff1a; 1、重现BUG&#xff1a;确保能够准确地重现BUG&#xff0c;这是解决问题的第一步。尽量记录重现BUG的步骤。…...

【Vue】elementUI-MessageBox组件相关

官方代码&#xff1a; <template><el-button type"text" click"open">点击打开 Message Box</el-button> </template><script>export default {methods: {open() {this.$confirm(此操作将永久删除该文件, 是否继续?, 提示…...

数据库运行状况和性能监控工具

数据库监控是跟踪组织中数据库的可用性、安全性和性能的过程&#xff0c;它涉及通过跟踪各种关键指标来分析数据库的性能&#xff0c;确保数据库的正常运行并具有深入的可见性&#xff0c;并在出现潜在问题时触发即时警报&#xff0c;以采取主动措施来确保数据库的高可用性。 …...

CTF-辨别细菌

题目描述&#xff1a;try your best to find the flag. 进入靶场后发现是一个游戏&#xff0c;需要全部答对才可以得到最后的flag 查看了一下源码&#xff0c;发现有一个答案模板的模块 尝试解释一下代码 <!-- 答案模版 --> <script id"template_game_pi…...

RuoYi-Vue开源项目2-前端登录验证码生成过程分析

前端登录验证码实现过程 生成过程分析 生成过程分析 验证码的生成过程简单概括为&#xff1a;前端登录页面加载时&#xff0c;向后端发送一个请求&#xff0c;返回验证码图片给前端页面展示 前端页面加载触发代码&#xff1a; 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的发布版本地址&#xff1a; Releases containerd/containerd GitHub 2 安装containerd 2.1 解压安装 2.1.1 下载压缩包 curl -LO https://github…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...