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,
}

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

相关推荐
_Evan_Yao2 分钟前
面向对象实战:用 Java/Python 设计一个简单的“怪物战斗”小游戏
java·开发语言
c++之路5 分钟前
CMake 系列教程(一):CMake 基础知识
c语言·开发语言·c++
AI行业学习5 分钟前
CC‑Switch v3.16.1-下载、配置、安装(2026‑06‑01 最新官方版)
开发语言·人工智能·windows·python
赵庆明老师7 分钟前
JS检查提交的文件是否合规
开发语言·前端·javascript
Irissgwe9 分钟前
C++ STL bitset 和位图详解
开发语言·c++·stl·位图·bitset
我还记得那天10 分钟前
C语言随机数生成机制与猜数字游戏实现
c语言·开发语言·游戏
伊灵eLing40 分钟前
GoLang 语言基础
开发语言·后端·golang
两年半的个人练习生^_^41 分钟前
JMM 进阶:彻底理解 synchronized 实现原理
java·开发语言
小白不白11143 分钟前
Invoke的用法
开发语言·人工智能·数码相机·计算机视觉·c#
techdashen1 小时前
What is maintenance, anyway?
开发语言·后端·rust