Home  >  Article  >  Backend Development  >  How to hide Golang application into taskbar

How to hide Golang application into taskbar

PHPz
PHPzOriginal
2023-03-30 09:05:18862browse

Golang is an efficient programming language with advantages such as memory safety, so more and more developers are beginning to use this language for development. In Golang, various operations can be achieved through system calls, and one of the interesting features is to hide Golang applications into the taskbar.

Hide to the taskbar can effectively protect the security of the application, for example, in some cases, we may not want others to know which application we are running. Of course, this feature can also be used to improve the user experience. For example, when using some tool applications, they can be hidden in the taskbar so as not to affect the user's normal use.

The way to implement this function is through Golang’s system call. Specifically, you need to use the Shell_NotifyIcon function in the win32 API to put the application into the taskbar. The following is the implementation code:

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

In the main function, we first call GetCurrentProcessID to obtain the ID of the current process, and then create a value hWnd of type syscall.Handle to represent the handle of the current application. Then create a variable nid of the NOTIFYICONDATA type and set its related properties, including uFlags as NIF_MESSAGE|NIF_ICON|NIF_TIP, which means placing the application in the taskbar. Then call the Shell_NotifyIcon function to put the application in the taskbar.

At the same time, we can also set the prompt information of the application in the taskbar. For example, we set nid.szTip to "Golang hide to taskbar" so that when the user places the cursor on the application icon, they can see the corresponding prompt information.

Finally, we wait for the user to press the OK key in the MessageBox.Call statement, so that the application remains hidden in the taskbar. When the user closes the application, we call the Shell_NotifyIcon function again to delete the application from the taskbar.

In short, through the above code, we can easily implement the function of hiding Golang applications in the taskbar. Of course, if you need to hide other types of applications, you can also use similar methods to achieve this.

The above is the detailed content of How to hide Golang application into taskbar. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn