WPF应用跟随桌面切换

有些程序可能设计的初衷是全局使用,但是实际使用过程中会涉及到切换桌面

假设程序启动在桌面1,当前工作在桌面2,当程序被使用激活时,会自动跳回桌面1

显然这个不符合全局使用的初衷

现在我们来解决

首先我们的主程序窗口要取消焦点获取:

cs 复制代码
Focusable = false;

然后在窗口加载完的时候加上:

cs 复制代码
IntPtr handle = new WindowInteropHelper(this).Handle;
var temp = GetWindowLongPtr(handle , GetWindowLongFields.GWL_EXSTYLE);
SetWindowLongPtr(handle, GetWindowLongFields.GWL_EXSTYLE, new IntPtr((int)temp | 0x08000000));

这里用到的两个User32的API需要导入:

cs 复制代码
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetWindowLongPtr(IntPtr hWnd, GetWindowLongFields nIndex);

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SetWindowLongPtr(IntPtr hWnd, GetWindowLongFields nIndex, IntPtr dwNewLong);

还有一个枚举:

cs 复制代码
public enum GetWindowLongFields
{
    GWL_WNDPROC = -4,
    GWL_HINSTANCE = -6,
    GWL_HWNDPARENT = -8,
    GWL_STYLE = -16,
    GWL_EXSTYLE = -20,
    GWL_USERDATA = -21,
    GWL_ID = -12,
}

至此,无论你的桌面怎么切换,你的程序就会始终跟随你的桌面了

相关推荐
AI科技星10 分钟前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡16 分钟前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
kkeeper~41 分钟前
0基础C语言积跬步之字符函数与字符串函数(上)
c语言·开发语言
hhb_6181 小时前
Swift核心技术难点与实战案例解析
开发语言·ios·swift
一楼的猫1 小时前
从工具链视角对比:番茄作家助手 vs 第三方写作辅助方案
java·服务器·开发语言·前端·学习·chatgpt·ai写作
程序leo源2 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
枫叶林FYL2 小时前
项目九:异步高性能爬虫与数据采集中枢 —— 基于 Crawl<sub>4</sub>AI 与 Playwright 的现代化数据采集平台 项目总览
爬虫·python·深度学习·wpf
likerhood2 小时前
Java static 关键字从浅入深
java·开发语言
猫猫的小茶馆2 小时前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
计算机安禾2 小时前
【c++面向对象编程】第38篇:设计原则(二):里氏替换、接口隔离与依赖倒置
开发语言·c++