Maison >développement back-end >Golang >Comment imprimer dans la fenêtre de commande à partir d'une application Go GUI compilée avec `-ldflags -H=windowsgui` ?

Comment imprimer dans la fenêtre de commande à partir d'une application Go GUI compilée avec `-ldflags -H=windowsgui` ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 20:25:12730parcourir

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

Comment imprimer la sortie dans la fenêtre de commande pour les applications GUI compilées avec -ldflags -H=windowsgui

Compilation d'une application Go avec -ldflags - H=windowsgui destiné à être utilisé comme interface utilisateur graphique (GUI) peut présenter des défis lors de l'impression de la sortie vers la fenêtre de commande. En effet, les processus GUI sous Windows ne sont généralement pas associés à une console.

Problème

Lorsqu'une application est compilée avec l'indicateur -H=windowsgui, les tentatives d'impression la sortie à l'aide de méthodes standard telles que println ou fmt.Println n'entraîne aucun affichage dans la commande window.

Solution

Pour imprimer la sortie dans ce scénario, vous devez attacher explicitement le processus à la console de son processus parent. Ceci peut être réalisé à l'aide de la fonction API AttachConsole, qui est accessible via le package 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")
    }
}

Appelez AttachConsole(ATTACH_PARENT_PROCESS) avant de tenter d'imprimer la sortie, qui connectera le processus à la console parent. Après cette étape, vous pouvez utiliser les méthodes d'impression standard comme d'habitude.

Options supplémentaires

Si AttachConsole échoue, vous pouvez envisager ces alternatives :

  • Créez une fenêtre de console avec AllocConsole() : Cela créera une nouvelle fenêtre de console pour le processus, mais peut ne soit pas idéal pour afficher de brèves informations comme un numéro de version.
  • Utiliser une boîte de dialogue GUI : Afficher les informations dans une boîte de dialogue d'interface utilisateur graphique, qui peut fournir une expérience utilisateur plus claire et associer le informations plus naturellement avec l'application GUI.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn