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

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

相关推荐
Hello World . .2 小时前
数据结构:二叉树(Binary tree)
c语言·开发语言·数据结构·vim
叫我辉哥e12 小时前
新手进阶Python:办公看板升级交互式可视化+移动端适配+多终端同步
开发语言·python
1candobetter2 小时前
JAVA后端开发——Spring Boot 组件化自动配置机制
java·开发语言·spring boot
一个网络学徒2 小时前
python练习3
开发语言·python
专注VB编程开发20年2 小时前
无 $ 后缀的变体版函数(Mid、InStr)
java·开发语言
程序员敲代码吗2 小时前
C++运行库修复指南:解决游戏办公软件报错问题
开发语言·c++·游戏
熊猫钓鱼>_>2 小时前
深入理解Java堆栈:从原理到面试实战
java·开发语言·面试·职场和发展·面向对象·堆栈·oop
孞㐑¥2 小时前
算法—哈希表
开发语言·c++·经验分享·笔记·算法
骆驼爱记录2 小时前
Word通配符技巧:高效文档处理指南
开发语言·c#·自动化·word·excel·wps·新人首发