Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencetak ke Tetingkap Perintah daripada Aplikasi Go GUI Disusun dengan `-ldflags -H=windowsgui`?

Bagaimana untuk Mencetak ke Tetingkap Perintah daripada Aplikasi Go GUI Disusun dengan `-ldflags -H=windowsgui`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 20:25:12730semak imbas

How to Print to the Command Window from a Go GUI Application Compiled with `-ldflags -H=windowsgui`?

Cara Mencetak Output ke Tetingkap Perintah untuk Aplikasi GUI Disusun dengan -ldflags -H=windowsgui

Menyusun aplikasi Go dengan -ldflags - H=windowsgui untuk digunakan sebagai antara muka pengguna grafik (GUI) boleh memberikan cabaran dalam mencetak output kepada tetingkap arahan. Ini kerana proses GUI pada Windows biasanya tidak dikaitkan dengan konsol.

Masalah

Apabila aplikasi disusun dengan bendera -H=windowsgui, cuba mencetak output menggunakan kaedah standard seperti println atau fmt.Println menyebabkan tiada apa-apa yang dipaparkan dalam arahan tetingkap.

Penyelesaian

Untuk mencetak output dalam senario ini, anda perlu melampirkan proses secara eksplisit pada konsol proses induknya. Ini boleh dicapai menggunakan fungsi API AttachConsole, yang boleh diakses melalui pakej syscall:

package main

import (
    "fmt"
    "syscall"
)

const (
    ATTACH_PARENT_PROCESS = ^uint32(0) // (DWORD)-1
)

var (
    modkernel32 = syscall.NewLazyDLL("kernel32.dll")

    procAttachConsole = modkernel32.NewProc("AttachConsole")

)

func AttachConsole(dwParentProcess uint32) (ok bool) {
    r0, _, _ := syscall.Syscall(procAttachConsole.Addr(), 1, uintptr(dwParentProcess), 0, 0)
    ok = bool(r0 != 0)
    return
}

func main() {
    ok := AttachConsole(ATTACH_PARENT_PROCESS)
    if ok {
        fmt.Println("Okay, attached")
    }
}

Panggil AttachConsole(ATTACH_PARENT_PROCESS) sebelum cuba mencetak output, yang akan menyambungkan proses ke konsol induk. Selepas langkah ini, anda boleh menggunakan kaedah pencetakan standard seperti biasa.

Pilihan Tambahan

Jika AttachConsole gagal, anda boleh mempertimbangkan alternatif ini:

  • Buat tetingkap konsol dengan AllocConsole(): Ini akan mencipta tetingkap konsol baharu untuk proses, tetapi mungkin tidak sesuai untuk memaparkan maklumat ringkas seperti nombor versi.
  • Gunakan dialog GUI: Paparkan maklumat dalam kotak dialog antara muka pengguna grafik, yang boleh memberikan pengalaman pengguna yang lebih bersih dan mengaitkan maklumat secara lebih semula jadi dengan aplikasi GUI.

Atas ialah kandungan terperinci Bagaimana untuk Mencetak ke Tetingkap Perintah daripada Aplikasi Go GUI Disusun dengan `-ldflags -H=windowsgui`?. 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