Heim > Backend-Entwicklung > Golang > Wie drucke ich aus einer Go-GUI-Anwendung, die mit „-ldflags -H=windowsgui' kompiliert wurde, in das Befehlsfenster?

Wie drucke ich aus einer Go-GUI-Anwendung, die mit „-ldflags -H=windowsgui' kompiliert wurde, in das Befehlsfenster?

Mary-Kate Olsen
Freigeben: 2024-12-03 20:25:12
Original
728 Leute haben es durchsucht

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

So drucken Sie die Ausgabe im Befehlsfenster für GUI-Anwendungen, die mit -ldflags -H=windowsgui kompiliert wurden

Kompilieren einer Go-Anwendung mit -ldflags - H=windowsgui zur Verwendung als grafische Benutzeroberfläche (GUI) kann beim Drucken der Ausgabe im Befehlsfenster zu Problemen führen. Dies liegt daran, dass GUI-Prozesse unter Windows normalerweise nicht mit einer Konsole verknüpft sind.

Problem

Wenn eine Anwendung mit dem Flag -H=windowsgui kompiliert wird, wird versucht zu drucken Die Ausgabe mit Standardmethoden wie println oder fmt.Println führt dazu, dass im Befehl nichts angezeigt wird Fenster.

Lösung

Um die Ausgabe in diesem Szenario zu drucken, müssen Sie den Prozess explizit an die Konsole seines übergeordneten Prozesses anhängen. Dies kann mithilfe der AttachConsole-API-Funktion erreicht werden, auf die über das Syscall-Paket zugegriffen werden kann:

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 Login kopieren

Rufen Sie AttachConsole(ATTACH_PARENT_PROCESS) auf, bevor Sie versuchen, die Ausgabe zu drucken, wodurch der Prozess mit der übergeordneten Konsole verbunden wird. Nach diesem Schritt können Sie wie gewohnt Standarddruckmethoden verwenden.

Zusätzliche Optionen

Wenn AttachConsole fehlschlägt, können Sie diese Alternativen in Betracht ziehen:

  • Erstellen Sie ein Konsolenfenster mit AllocConsole(): Dadurch wird ein neues Konsolenfenster für den Prozess erstellt, möglicherweise jedoch nicht Ideal für die Anzeige kurzer Informationen wie einer Versionsnummer.
  • Verwenden Sie einen GUI-Dialog: Zeigen Sie die Informationen in einem grafischen Benutzeroberflächendialogfeld an, was für eine übersichtlichere Benutzererfahrung sorgen und die Informationen verknüpfen kann natürlicher mit der GUI-Anwendung.

Das obige ist der detaillierte Inhalt vonWie drucke ich aus einer Go-GUI-Anwendung, die mit „-ldflags -H=windowsgui' kompiliert wurde, in das Befehlsfenster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage