Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyembunyikan tetingkap dalam bahasa Go

Bagaimana untuk menyembunyikan tetingkap dalam bahasa Go

PHPz
PHPzasal
2023-04-14 14:34:351636semak imbas

Bahasa Go ialah bahasa pengaturcaraan yang sangat popular dan digunakan secara meluas dalam pelbagai bidang, terutamanya pengaturcaraan sistem dan pengaturcaraan rangkaian. Pada platform Windows, kadangkala anda perlu menjalankan program di latar belakang Dalam kes ini, anda perlu menyembunyikan tetingkap untuk mengelakkan pop timbul program daripada menjejaskan pengalaman pengguna. Artikel ini terutamanya memperkenalkan cara menyembunyikan tetingkap dalam bahasa Go.

  1. Dapatkan pemegang tingkap

Sebelum mengendalikan tingkap, anda perlu mendapatkan pemegang tingkap. Pada platform Windows, setiap tetingkap mempunyai pemegang unik yang mengenal pasti tetingkap. Anda boleh menggunakan fungsi Windows API FindWindow atau FindWindowEx untuk mendapatkan pemegang tetingkap.

Antaranya, fungsi FindWindow boleh mencari pemegang tetingkap melalui nama kelas dan nama tetingkap tetingkap. Contohnya, untuk mencari tetingkap bernama "MyAppName", anda boleh menggunakan kod berikut:

hwnd := FindWindow(nil, syscall.StringToUTF16Ptr("MyAppName"))

Anda juga boleh menggunakan fungsi FindWindowEx untuk mencari pemegang tetingkap kanak-kanak mengikut pemegang. Contohnya, untuk mencari kawalan butang bernama "MyButton", anda boleh menggunakan kod berikut:

btnHwnd := FindWindowEx(hwnd, 0, syscall.StringToUTF16Ptr("Button"), syscall.StringToUTF16Ptr("MyButton"))

Perlu diambil perhatian bahawa fungsi ini adalah semua fungsi API Windows, jadi perpustakaan WinAPI perlu diperkenalkan .

  1. Sembunyikan tetingkap

Selepas mendapatkan pemegang tetingkap, anda boleh menyembunyikan tetingkap melalui fungsi Windows API ShowWindow. Khususnya, jika anda menetapkan parameter nCmdShow kepada SW_HIDE, anda boleh menyembunyikan tetingkap.

Sebagai contoh, untuk menyembunyikan tetingkap yang diperoleh sebelum ini bernama "MyAppName", anda boleh menggunakan kod berikut:

ShowWindow(hwnd, SW_HIDE)

Jika anda ingin memaparkan semula tetingkap, anda boleh menetapkan parameter nCmdShow untuk SW_SHOW.

  1. Kod Contoh

Berikut ialah contoh kod lengkap yang menunjukkan cara mendapatkan pemegang tetingkap dan menyembunyikan tetingkap:

package main

import (
    "syscall"
    "unsafe"
)

const (
    SW_HIDE = 0
    SW_SHOW = 5
)

var (
    user32      = syscall.NewLazyDLL("user32.dll")
    findWindow  = user32.NewProc("FindWindowW")
    showWindow = user32.NewProc("ShowWindow")
)

func FindWindow(className, windowName *uint16) uintptr {
    ret, _, _ := findWindow.Call(uintptr(0), uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(windowName)))
    return ret
}

func ShowWindow(hwnd uintptr, nCmdShow int32) bool {
    ret, _, _ := showWindow.Call(hwnd, uintptr(nCmdShow))
    return ret != 0
}

func main() {
    hwnd := FindWindow(nil, syscall.StringToUTF16Ptr("MyAppName"))
    if hwnd == 0 {
        panic("window not found")
    }
    ShowWindow(hwnd, SW_HIDE)
}

Perkara untuk ambil perhatian Ya, menjalankan kod di atas memerlukan menyimpan kod sebagai fail .go dan menyusunnya menggunakan arahan go. Secara khusus, anda boleh menggunakan arahan berikut untuk menyusun:

go build -ldflags="-H windowsgui" main.go

Antaranya, parameter -H windowsgui memberitahu pengkompil untuk menjana aplikasi tanpa tingkap.

  1. Ringkasan

Bahasa Go ialah bahasa yang sangat sesuai untuk menulis aplikasi sistem Ia boleh memanggil fungsi Windows API dan melaksanakan pelbagai fungsi peringkat sistem. Artikel ini memperkenalkan cara mendapatkan pemegang tetingkap dan menyembunyikan tetingkap dalam bahasa Go. Saya harap ia akan membantu semua orang.

Atas ialah kandungan terperinci Bagaimana untuk menyembunyikan tetingkap dalam bahasa Go. 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