Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyembunyikan aplikasi Golang ke dalam bar tugas

Bagaimana untuk menyembunyikan aplikasi Golang ke dalam bar tugas

PHPz
PHPzasal
2023-03-30 09:05:18824semak imbas

Golang ialah bahasa pengaturcaraan yang cekap dengan kelebihan seperti keselamatan memori, jadi semakin ramai pembangun mula menggunakan bahasa ini untuk pembangunan. Di Golang, pelbagai operasi boleh dicapai melalui panggilan sistem, dan salah satu ciri menarik ialah menyembunyikan aplikasi Golang ke dalam bar tugas.

Sembunyikan pada bar tugas boleh melindungi keselamatan aplikasi dengan berkesan, contohnya, dalam beberapa kes, kami mungkin tidak mahu orang lain mengetahui aplikasi yang kami jalankan. Sudah tentu, fungsi ini juga boleh digunakan untuk meningkatkan pengalaman pengguna Sebagai contoh, apabila menggunakan beberapa aplikasi alat, ia boleh disembunyikan dalam bar tugas supaya tidak menjejaskan penggunaan biasa pengguna.

Cara untuk melaksanakan fungsi ini adalah melalui panggilan sistem Golang. Khususnya, anda perlu menggunakan fungsi Shell_NotifyIcon dalam API win32 untuk meletakkan aplikasi ke dalam bar tugas. Berikut ialah kod pelaksanaan:

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

Dalam fungsi utama, kami mula-mula memanggil GetCurrentProcessID untuk mendapatkan ID proses semasa, dan kemudian mencipta nilai hWnd jenis syscall.Handle untuk mewakili pemegang aplikasi semasa. Kemudian buat nid pembolehubah jenis NOTIFYICONDATA dan tetapkan sifat berkaitannya, termasuk uFlags sebagai NIF_MESSAGE|NIF_ICON|NIF_TIP, yang bermaksud meletakkan aplikasi dalam bar tugas. Kemudian panggil fungsi Shell_NotifyIcon untuk meletakkan aplikasi dalam bar tugas.

Pada masa yang sama, kami juga boleh menetapkan maklumat segera aplikasi dalam bar tugas. Sebagai contoh, kami menetapkan nid.szTip kepada "Golang hide to taskbar" supaya apabila pengguna meletakkan kursor pada ikon aplikasi, mereka boleh melihat maklumat segera yang sepadan.

Akhir sekali, kami menunggu pengguna menekan kekunci OK dalam kenyataan MessageBox.Call, supaya aplikasi kekal tersembunyi dalam bar tugas. Apabila pengguna menutup aplikasi, kami memanggil fungsi Shell_NotifyIcon sekali lagi untuk memadam aplikasi daripada bar tugas.

Ringkasnya, melalui kod di atas, kita boleh melaksanakan fungsi menyembunyikan aplikasi Golang dalam bar tugas dengan mudah. Sudah tentu, jika anda perlu menyembunyikan jenis aplikasi lain, anda juga boleh menggunakan kaedah yang sama untuk mencapai ini.

Atas ialah kandungan terperinci Bagaimana untuk menyembunyikan aplikasi Golang ke dalam bar tugas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn