Heim >Backend-Entwicklung >Golang >Wie können Go-GUI-Anwendungen im Befehlsfenster gedruckt werden?

Wie können Go-GUI-Anwendungen im Befehlsfenster gedruckt werden?

Linda Hamilton
Linda HamiltonOriginal
2024-11-29 10:44:11278Durchsuche

How Can Go GUI Applications Print to the Command Window?

Ausgabe an das Befehlsfenster mit Windows-GUI-verknüpften Go-Anwendungen drucken

Beim Kompilieren von Go-Anwendungen mit der Flagge -ldflags -H=windowsgui Die resultierende ausführbare Datei ist so eingestellt, dass sie als Windows-GUI-Anwendung ausgeführt wird. Standardmäßig haben GUI-Anwendungen keinen Zugriff auf die Konsole, wodurch die Ausgabe gedruckter Zeichenfolgen verhindert wird.

Um dieses Problem zu beheben, kann das Syscall-Paket verwendet werden, um den GUI-Prozess explizit an die übergeordnete Konsole anzuhängen. Dadurch kann die Anwendung die Ausgabe im Befehlsfenster drucken:

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

Nach dem Anschließen an die übergeordnete Konsole kann die Anwendung die Ausgabe mit der Standardfunktion fmt.Println() drucken oder direkt in syscall.Stdout schreiben. Wenn AttachConsole() jedoch fehlschlägt, sollte die Anwendung entweder:

  • mit AllocConsole() ihr eigenes Konsolenfenster erstellen.
  • Die Ausgabe in einem GUI-Dialogfeld anzeigen.

Das obige ist der detaillierte Inhalt vonWie können Go-GUI-Anwendungen im Befehlsfenster gedruckt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn