吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4597|回复: 47
收起左侧

[Windows] 桌面IP显示小工具

  [复制链接]
风清扬方丈 发表于 2026-4-19 12:36
           因工作需求,单位的电脑都是在一个局域网内,基本所有电脑都安装好了内网远程工具,很多同事出现系统或电脑问题报障时不知道IP多少,所以就想着弄一个桌面显示的小工具。
           这个工具是用豆包写的,功能比较单一,可能也还不完善,有好的建议或者技术大佬也可以优化下,目前我只测试了WIN10,源码我放下面。
           这次分享主要分为4个,有需要的可以各取所需。3个的区别之处我罗列下:
           1、BAT形式:该方式是使用电脑自带的CMD命令窗口进行执行的,无需安装其他程序,设置开机启动。
           ✅ 字体红色显示
           ✅ 屏幕居中,置顶最上层显示(不会被其他程序覆盖)
           ✅ 透明无背景
           ✅ 不可直接关闭、不可编辑

           ❌无法自动刷新IP
                关闭需要任务管理器结束这个任务:Windows PowerShell
           蓝奏云下载https://wwbov.lanzout.com/i46tA3nlxqqd


[Bash shell] 纯文本查看 复制代码
@echo off
setlocal enabledelayedexpansion

set "psPath=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"

for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /i "ipv4 地址"') do (
    set "ip=%%a"
    goto :break
)
:break
set "ip=%ip: =%"
if "%ip%"=="" (
    echo 无法获取IP地址,请检查网络连接。
    pause
    exit /b
)
start /b "" "%psPath%" -WindowStyle Hidden -Command "Add-Type -AssemblyName System.Windows.Forms; $ip='%ip%'; $form=New-Object System.Windows.Forms.Form; $form.Text='IP Display'; $form.FormBorderStyle='None'; $form.ControlBox=$false; $form.ShowInTaskbar=$false; $form.TopMost=$true; $form.BackColor='Magenta'; $form.TransparencyKey='Magenta'; $form.StartPosition='Manual'; $label=New-Object System.Windows.Forms.Label; $label.Text='IP:' + $ip; $label.Font=New-Object System.Drawing.Font('Arial',17); $label.AutoSize=$true; $label.BackColor='Magenta'; $label.ForeColor='Red'; $form.Controls.Add($label); $form.ClientSize=$label.Size; $x=([System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width - $form.Width) / 2; $y=0; $form.Location=New-Object System.Drawing.Point($x,$y); $form.Add_Shown({$form.Activate()}); $form.Add_FormClosing({$_.Cancel=$true}); [void]$form.ShowDialog()"




           2、EXE形式:该方式是使用Python代码编译并打包的,好处是代码不会被他人修改。

           ✅ 字体红色显示
           ✅ 屏幕居中,桌面显示(不会挡住其他程序显示)
           ✅ 透明无背景(有点瑕疵,部分颜色背景会有一点点白底)
           ✅ 不可直接关闭、不可编辑
           ❌Win7貌似打开会提示缺少DLL,可能依赖Python环境
           蓝奏云下载:https://wwbov.lanzout.com/is6bP3nlxqre


           3、EXE形式:该方式是使用Python代码编译并打包的,增加了可拖拽窗口。

           ✅ 字体红色显示
           ✅ 屏幕居中,置顶最上层显示(不会被其他程序覆盖)
           ✅ 透明无背景(有点瑕疵,部分颜色背景会有一点点白底)
           ✅ 不可直接关闭、不可编辑
           ✅ 窗口可拖拽(避免挡住系统内容显示)
           ❌Win7貌似打开会提示缺少DLL,可能依赖Python环境

           蓝奏云下载https://wwbov.lanzout.com/i0c3u3nlxqtg

           
[Python] 纯文本查看 复制代码
import tkinter as tk[size=5]
[/size]import socket

# ------------------ 获取本机IPv4地址 ------------------
def get_local_ip():
    try:
        socket.setdefaulttimeout(2)
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
        s.close()
        return ip
    except Exception:
        try:
            hostname = socket.gethostname()
            ip = socket.gethostbyname(hostname)
            if ip.startswith('127.'):
                return "未获取到有效IP"
            return ip
        except Exception:
            return "获取IP失败"

# ------------------ 主窗口类 ------------------
class IPDisplay:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("")
        self.root.overrideredirect(True)        # 无边框
        self.root.attributes('-topmost', True)  # 置顶

        # 透明键颜色
        self.transparent_color = "#abcdef"
        self.root.config(bg=self.transparent_color)
        self.root.attributes('-transparentcolor', self.transparent_color)

        # 可选:工具窗口样式(消除阴影边框)
        try:
            self.root.wm_attributes('-toolwindow', 1)
        except:
            pass

        # 标签:去除所有可能产生白色边缘的属性
        self.label = tk.Label(
            self.root,
            font=("Arial", 20, "bold"),
            fg="red",
            bg=self.transparent_color,
            text="获取IP中...",
            highlightthickness=0,
            bd=0
        )
        self.label.pack(padx=5, pady=3)

        # 禁止关闭窗口
        self.root.protocol("WM_DELETE_WINDOW", lambda: None)

        # 拖拽相关变量
        self.drag_start_x = 0
        self.drag_start_y = 0
        self.drag_start_win_x = 0
        self.drag_start_win_y = 0

        # 绑定鼠标事件到标签(点击文字即可拖拽)
        self.label.bind("<Button-1>", self.on_drag_start)
        self.label.bind("<B1-Motion>", self.on_drag_motion)
        self.label.bind("<ButtonRelease-1>", self.on_drag_stop)

        # 初始显示并居中
        self.update_ip()
        self._center_top()          # 仅初始化时居中一次

        # 定时刷新(60秒),只更新内容,不改变位置
        self.refresh_interval = 60000
        self.root.after(self.refresh_interval, self.refresh_loop)

        self.root.mainloop()

    def update_ip(self):
        ip = get_local_ip()
        self.label.config(text=f"IP: {ip}")
        self.root.update_idletasks()

    def _center_top(self):
        """将窗口置于屏幕顶部中央"""
        screen_width = self.root.winfo_screenwidth()
        width = self.root.winfo_reqwidth()
        height = self.root.winfo_reqheight()
        x = (screen_width - width) // 2
        y = 0
        self.root.geometry(f"{width}x{height}+{x}+{y}")

    def refresh_loop(self):
        """定时刷新IP,不移动窗口位置"""
        self.update_ip()
        self.root.after(self.refresh_interval, self.refresh_loop)

    # ------------------ 拖拽方法 ------------------
    def on_drag_start(self, event):
        """记录按下时的窗口位置和鼠标位置"""
        self.drag_start_x = event.x_root
        self.drag_start_y = event.y_root
        win_x = self.root.winfo_x()
        win_y = self.root.winfo_y()
        self.drag_start_win_x = win_x
        self.drag_start_win_y = win_y

    def on_drag_motion(self, event):
        """计算偏移量,移动窗口"""
        dx = event.x_root - self.drag_start_x
        dy = event.y_root - self.drag_start_y
        new_x = self.drag_start_win_x + dx
        new_y = self.drag_start_win_y + dy
        self.root.geometry(f"+{new_x}+{new_y}")

    def on_drag_stop(self, event):
        """拖拽结束,不做额外操作"""
        pass

if __name__ == "__main__":
    IPDisplay()

           Python取消置顶比较简单注释掉这行代码就行 self.root.attributes('-topmost', True) # 置顶

           我的需求比较单一简单,所以就只显示了IP地址。其他大佬如果还有其他需求可以延伸交流。谢谢!



                      

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
Cudet + 1 谢谢@Thanks!
bxyhy + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

52pj985 发表于 2026-4-19 13:46
如何让批处理的脚本中,在右下角显示,并且不要强制置顶呢
yaorongbaobao 发表于 2026-4-19 13:21
FQY188 发表于 2026-4-19 13:00
shanoner 发表于 2026-4-23 13:23
本帖最后由 shanoner 于 2026-4-23 13:34 编辑
52pj985 发表于 2026-4-19 13:46
如何让批处理的脚本中,在右下角显示,并且不要强制置顶呢

[Bash shell] 纯文本查看 复制代码
@echo off
setlocal enabledelayedexpansion

set "psPath=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"

:: 获取 IPv4 地址
for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /i "ipv4 地址"') do (
    set "ip=%%a"
    goto :break_ip
)
:break_ip
set "ip=%ip: =%"
if "%ip%"=="" (
    echo 无法获取 IP 地址,请检查网络连接。
    pause
    exit /b
)

:: 使用 PowerShell 获取 MAC 地址
for /f "delims=" %%a in ('%psPath% -Command "(Get-NetAdapter -Physical | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1).MacAddress"') do set "mac=%%a"
:break_mac

:: 调试信息(可选)
echo IP: %ip%
echo MAC: %mac%

:: 启动 PowerShell 悬浮窗(嵌入桌面,右下角显示)
start /b "" "%psPath%" -WindowStyle Hidden -Command "Add-Type -AssemblyName System.Windows.Forms; Add-Type -AssemblyName System.Drawing; Add-Type -MemberDefinition '[DllImport(\"user32.dll\")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport(\"user32.dll\")] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport(\"user32.dll\")] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);' -Name 'Win32' -Namespace 'Native'; $ip='%ip%'; $mac='%mac%'; $form=New-Object System.Windows.Forms.Form; $form.Text='Network Info'; $form.FormBorderStyle='None'; $form.ControlBox=$false; $form.ShowInTaskbar=$false; $form.TopMost=$false; $form.BackColor='Magenta'; $form.TransparencyKey='Magenta'; $form.StartPosition='Manual'; $label=New-Object System.Windows.Forms.Label; $label.Text=\"IP: $ip`nMAC: $mac\"; $label.Font=New-Object System.Drawing.Font('Consolas', 14, [System.Drawing.FontStyle]::Bold); $label.AutoSize=$true; $label.BackColor='Magenta'; $label.ForeColor='White'; $label.TextAlign='MiddleCenter'; $label.Padding=New-Object System.Windows.Forms.Padding(10, 5, 10, 5); $form.Controls.Add($label); $form.ClientSize=New-Object System.Drawing.Size($label.Width, $label.Height); $workArea=[System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea; $x=$workArea.Width - $form.Width - 10; $y=$workArea.Height - $form.Height - 10; $form.Location=New-Object System.Drawing.Point($x,$y); $form.Add_Shown({ $desktopHandle=[Native.Win32]::FindWindow('Progman', $null); if($desktopHandle -eq [IntPtr]::Zero){$desktopHandle=[Native.Win32]::FindWindow('WorkerW', $null)}; if($desktopHandle -ne [IntPtr]::Zero){[Native.Win32]::SetParent($form.Handle, $desktopHandle); [Native.Win32]::SetWindowLong($form.Handle, -16, 0x10000000)}; $form.Activate() }); $form.Add_FormClosing({$_.Cancel=$true}); [void]$form.ShowDialog()"


增加MAC显示,嵌入桌面不置顶
Mzhang2008 发表于 2026-4-19 12:45
可以扩展一下功能,增加一键设置共享,会比较实用
douyacai 发表于 2026-4-19 12:45
小工具,对于局域网同事很友好,有的人都不会看IP
52pj985 发表于 2026-4-19 14:00
另外发现在Windows 11中,运行后,cmd窗口一直在打开着,关闭cmd窗口后,IP消失,相当于退出了
jun000ze 发表于 2026-4-19 14:10
尝试一下
bachelor66 发表于 2026-4-19 14:25
不影响点击后面的内容,不错                           
cweinet 发表于 2026-4-19 14:41
好像不错的样子
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-5 08:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表