Wox/wox.core/util/window/window_darwin.go

51 lines
951 B
Go

package window
/*
#cgo CFLAGS: -x objective-c
#cgo LDFLAGS: -framework Foundation -framework Cocoa
#include <stdlib.h>
int getActiveWindowIcon(unsigned char **iconData);
char* getActiveWindowName();
int getActiveWindowPid();
*/
import "C"
import (
"bytes"
"errors"
"image"
"image/png"
"unsafe"
)
func GetActiveWindowIcon() (image.Image, error) {
var iconData *C.uchar
length := C.getActiveWindowIcon(&iconData)
if length == 0 {
return nil, errors.New("failed to get active window icon")
}
defer C.free(unsafe.Pointer(iconData))
data := C.GoBytes(unsafe.Pointer(iconData), length)
img, err := png.Decode(bytes.NewReader(data))
if err != nil {
return nil, err
}
return img, nil
}
func GetActiveWindowName() string {
name := C.getActiveWindowName()
if name == nil {
return ""
}
defer C.free(unsafe.Pointer(name))
return C.GoString(name)
}
func GetActiveWindowPid() int {
pid := C.getActiveWindowPid()
return int(pid)
}