首页 > 后端开发 > Golang > 正文

如何将Golang应用程序隐藏到任务栏中

PHPz
发布: 2023-03-30 09:05:18
原创
1158人浏览过

golang是一门高效的编程语言,具有内存安全等优势,因此越来越多的开发者开始使用这门语言进行开发。在golang中,可以通过系统调用来实现各种操作,其中一个有趣的功能是将golang应用程序隐藏到任务栏中。

隐藏到任务栏可以有效地保护应用程序的安全性,例如在某些情况下,我们可能不希望其他人知道我们正在运行的应用程序是哪个。当然,这个功能也可以用于改善用户体验,例如在使用一些工具类应用程序时,可以将其隐藏到任务栏中,从而不影响用户的正常使用。

实现这个功能的方法是通过Golang的系统调用来实现。具体来说,需要使用win32 API中的Shell_NotifyIcon函数来将应用程序放入任务栏。以下是实现代码:

package main

import (
    "strconv"
    "syscall"
    "unsafe"
)

var (
    user32     = syscall.MustLoadDLL("user32")
    shell32    = syscall.MustLoadDLL("shell32")
    kernel32   = syscall.MustLoadDLL("kernel32")
    MessageBox = user32.MustFindProc("MessageBoxW")
    _          = shell32.MustFindProc("Shell_NotifyIconW")
    GetCurrentProcessID = kernel32.MustFindProc("GetCurrentProcessId")
)

type NOTIFYICONDATA struct {
    cbSize           uint32
    hWnd             syscall.Handle
    uID              uint32
    uFlags           uint32
    uCallbackMessage uint32
    hIcon            syscall.Handle
    szTip            [128]uint16
}

const NIM_ADD = 0x00000000
const NIM_MODIFY = 0x00000001
const NIM_DELETE = 0x00000002
const NIF_MESSAGE = 0x00000001
const NIF_ICON = 0x00000002
const NIF_TIP = 0x00000004

func main() {
    procId, _, _ := GetCurrentProcessID.Call()
    hWnd := syscall.NewCallback(func(hwnd syscall.Handle, lParam uintptr) uintptr {
        return 0
    })
    nid := NOTIFYICONDATA{}
    nid.cbSize = uint32(unsafe.Sizeof(nid))
    nid.hWnd = syscall.Handle(hWnd)
    nid.uID = uint32(procId)
    nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP
    nid.hIcon = syscall.Handle(syscall.GetModuleHandle(nil))
    copy(nid.szTip[:], syscall.StringToUTF16("Golang 隐藏到任务栏"))
    Shell_NotifyIcon(NIM_ADD, unsafe.Pointer(&nid))
    MessageBox.Call(0, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("按 OK 关闭"))), 0)
    Shell_NotifyIcon(NIM_DELETE, unsafe.Pointer(&nid))
}

func Shell_NotifyIcon(dwMessage uint32, pnid unsafe.Pointer) uint32 {
    ret, _, _ := shell32.MustFindProc("Shell_NotifyIconW").Call(
        uintptr(dwMessage),
        uintptr(pnid),
    )
    return uint32(ret)
}
登录后复制

在main函数中,我们首先调用GetCurrentProcessID获取当前进程的ID,然后创建一个syscall.Handle类型的值hWnd用于表示当前应用程序的句柄。然后创建NOTIFYICONDATA类型的变量nid,并将其相关属性设置好,其中包括uFlags为NIF_MESSAGE|NIF_ICON|NIF_TIP表示将应用程序放入任务栏中。接着调用Shell_NotifyIcon函数将应用程序放入任务栏中。

同时,我们也可以设置应用程序在任务栏中的提示信息。例如,我们将nid.szTip设置为"Golang 隐藏到任务栏",这样当用户将光标放在应用程序图标上时,就可以看到相应提示信息。

立即学习go语言免费学习笔记(深入)”;

最后,我们在MessageBox.Call语句中等待用户按下OK键,这样应用程序就一直隐藏在任务栏中。当用户关闭应用程序时,我们再次调用Shell_NotifyIcon函数将应用程序从任务栏中删除即可。

总之,通过以上代码,我们可以轻松实现将Golang应用程序隐藏到任务栏中的功能。当然,如果需要隐藏其他类型的应用程序,同样也可以使用类似的方法来实现。

以上就是如何将Golang应用程序隐藏到任务栏中的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号