ホームページ >バックエンド開発 >Golang >Go GUI アプリケーションはどのようにしてコマンド ウィンドウに出力できるのでしょうか?

Go GUI アプリケーションはどのようにしてコマンド ウィンドウに出力できるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-29 10:44:11277ブラウズ

How Can Go GUI Applications Print to the Command Window?

Windows GUI にリンクされた Go アプリケーションを使用してコマンド ウィンドウに出力を出力する

-ldflags -H=windowsgui フラグを使用して Go アプリケーションをコンパイルする場合、結果として得られる実行可能ファイルは、Windows GUI アプリケーションとして実行されるように設定されます。デフォルトでは、GUI アプリケーションはコンソールにアクセスできないため、印刷文字列が出力されません。

この問題に対処するには、syscall パッケージを使用して、GUI プロセスを親のコンソールに明示的に接続できます。これにより、アプリケーションはコマンド ウィンドウに出力を印刷できるようになります。

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

親のコンソールに接続した後、アプリケーションは標準の fmt.Println() 関数を使用するか、syscall.Stdout に直接書き込むことで出力を印刷できます。ただし、AttachConsole() が失敗した場合、アプリケーションは次のいずれかを行う必要があります:

  • AllocConsole() を使用して独自のコンソール ウィンドウを作成する。
  • GUI ダイアログに出力を表示する。

以上がGo GUI アプリケーションはどのようにしてコマンド ウィンドウに出力できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。