0

I need to use Windows DLLs in my applications, specificaly kernel32.dll. I only find this: WindowsDLL

But that "guide" is not so intiuitive.

For example, in Python you use ctypes. ej: ctypes.windll.kernel32.SetConsoleTextAtribute(handle, color)

How I can made the same thing but in Golang?

Anyone can give some examples of that I want?

1

1 Answer 1

2

Actually the link you have is a good reference. All you need now is choose one of the implementations proposed.

You can find the documentation for kernel32.SetConsoleTextAtribute here: https://learn.microsoft.com/en-us/windows/console/setconsoletextattribute

The exposed API is defined as:

BOOL WINAPI SetConsoleTextAttribute(
  _In_ HANDLE hConsoleOutput,
  _In_ WORD   wAttributes
);

Example for the second option (using syscall.NewProc):

package main

import (
    "os"
    "syscall"
)

const (
    // defined base colors
    ForegroundBlue      uint = 1
    ForegroundGreen     uint = 2
    ForegroundRed       uint = 4
    ForegroundIntensity uint = 8
    BackgroundBlue      uint = 16
    BackgroundGreen     uint = 32
    BackgroundRed       uint = 64
    BackgroundIntensity uint = 128

    // colors can also be mixed
    ForegroundGrey = ForegroundBlue | ForegroundGreen | ForegroundRed
    ForegroundWhite = ForegroundBlue | ForegroundGreen | ForegroundRed | ForegroundIntensity
)

func main() {
    kernel32 := syscall.NewLazyDLL("kernel32.dll")
    setConsoleTextAttribute := kernel32.NewProc("SetConsoleTextAttribute")
    stdOutHandle := os.Stdout.Fd()

    attributes := ForegroundWhite | BackgroundRed
    ret, _, err := setConsoleTextAttribute.Call(stdOutHandle, uintptr(attributes))
    if err != nil {
        panic(err) // calling kernel32.SetConsoleTextAttribute failed
    }

    if ret == 0 {
        print("Could not set the desired attributes")
        // TODO: call GetLastError to get more information
    }

    print("OK")
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.