在某些时候,窗口切换过去切换过来,很麻烦,特别是一边记录,一边又要看其他参考文件时,更是觉得烦不胜烦。下面以win10系统为例子,比如用记事本记录东西的时候,可能会去参考其他的图片、网页以及文档等,两个窗口间还比较好点,要是在多个窗口间切换时很容易出错,此刻只需要记事本它永远显示在最上层,切换起来就更加方便了,可以用到以下的方法。

网上有些说使用快捷可以置顶某个窗口,比如Shift + Alt + Tab‌可以把某个窗口设置为始终在最前,先将焦点移至该窗口,然后依次按下“Shift”、“Alt”和“Tab”键。这样,该窗口就会被设置为当前活动窗口,并保持在最前面。我试了下,不能,只是Alt + Tab倒是可以在两个窗口之间切换,也有的说Win + Shift + 上箭头键‌可以直接将当前窗口置顶显示,其实只是将窗口上下填充满屏幕,同样Win + Shift + 下箭头键也只是把窗口折叠到任务栏中。查阅很多资料,都说程序置顶没有快捷键。网站支持程序置顶的软件有很多,但是需要权限,我觉得用纯代码结合win系统自带的工具才是最理想的。

1.生成ps1文件

复制以下指令代码:


Add-Type @"
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 static readonly uint SWP_NOSIZE = 0x0001;
    public static readonly uint SWP_NOMOVE = 0x0002;
}
"@
$hwnd = (Get-Process Notepad).MainWindowHandle
[Win32]::SetWindowPos($hwnd, [Win32]::HWND_TOPMOST, 0, 0, 0, 0, [Win32]::SWP_NOMOVE -bor [Win32]::SWP_NOSIZE)


打开记事本粘贴到里面,然后另存为.ps1文件,保存于自己喜欢的位置,需要程序置顶的时候,右键“使用powerhell运行”即可。首次运行,它会弹出一个案例策略,需要输入Y或者A确认,因为Y代表是,A就代表全是,再次运行只能看到窗口,但随即又会快速关闭掉。

2.终止记事本置顶方法1:

在不需要记事本置顶的时候,可以把先复制以下的指令代码:


Add-Type @"
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_NOTOPMOST = new IntPtr(-2); // 关键参数
    public static readonly uint SWP_NOSIZE = 0x0001;
    public static readonly uint SWP_NOMOVE = 0x0002;
}
"@
$hwnd = (Get-Process Notepad).MainWindowHandle
[Win32]::SetWindowPos($hwnd, [Win32]::HWND_NOTOPMOST, 0, 0, 0, 0, [Win32]::SWP_NOMOVE -bor [Win32]::SWP_NOSIZE)


说明:将 hWndInsertAfter 参数从 -1(HWND_TOPMOST)改为 -2(HWND_NOTOPMOST),强制取消窗口置顶状态。

使用的时候,只需要用右键右下角的win图标,找到“windows powerhell(管理员)”,因为带管理员的比不带管理员的权限高,所以用它没错。在弹出的shell窗口中,右键一下,就会自动将剪贴板中的代码粘贴到窗口中,回车即可,最后一个PS上面出现True时就成功的取消掉程序的置顶功能。要是出现找不到名为“xxx”的进程,要么就是需要置顶的程序开启,如果已经确需要置顶的程序已经开启,那么就是取消的指令代码中程序名设置错误,需要检查并修改。

3.终止记事本置顶方法2

如果懒得复制以上的指令代码,最简单的办法就是关闭掉当前已经置顶的程序,再次打开就取消置顶功能了。

5.使用顺序

先打开需要置顶的记事本或者文本文件,然后再找到保存的ps1文件,右键“使用powerhell运行”即可让当前记事本置顶,如果是先运行PS1文件,再打开记事本是没有效果的,即便进程中已经有sihost.exe这个进程也不生效,只能再次运行一次PS1文件才生效。而且这个脚本只对一个窗口有效,如果预先打开两个记事本窗口,那么它是对谁都不起作用,要是已经置顶了一个记事本窗口,等待运行ps1文件后又打开另外一个记事本窗口,那么后面打开的这个窗口只会隐藏在先打开那么记事本窗口的下面,也是无法切换的。因此,使用该方法让记事本置顶,一次只能打开一个窗口,不可以多开。

6.其他应用置顶和终止需要的设置方法

其他软件应用程序在有置顶的需求情况时,也可以用这个方法来实现。在指令代码中有一段为:

$hwnd = (Get-Process notepad).MainWindowHandle

其中的notepad就是记事本的真实文件名,准确来说应该叫做notepad.exe,只是在这里不需要后缀而已。

比如我喜欢用notepad2来代替系统自带的记事本时,那么就用查找功能,搜索:

notepad

把它替换成

notepad2

就能实现置顶了。当然其他程序也是一样,比如想让办公软件word实现置顶,同样用记事本查找功能搜索:

notepad

把它替换成

WINWORD

这样一来也就实现了对应程序的置顶功能,需要注意的是,win系统的程序都带有exe这样的后缀,但是在这里不需要指出后缀,只要前面的名字即可,非常苛刻的是你必须要找到所需置顶程序的真实的文件名,比如word如果只通过开始菜单去查找,找到的通常只是快捷方式,一般名称为Microsoft Word xxx,用这个名字去替换指令代码中的程序名,往往是没有任何效果,在真实的安装目录中,它的文件名通常为WINWORD.exe,所以只有把指令中的程序名称替换成WINWORD才能生效。

如果需要终止这些程序置顶时,在第二组指令代码中,同样也需要把程序名称替换成你当前置顶的程序名称。因为程序名称是随时变化的,你完全可能用:

Get-Process

去搜索,因为在它的后面紧跟着的就是程序名称,并且两组指令代码都是一样,自然也就好修改。

你可能想看:
文章来源:http://www.zhu-sir.com/jiaocheng/73.html
百度搜索本文
谷歌搜索本文
喜欢这篇文章的读者还看了以下文章!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

返回顶部