C 玻璃窗钩

C 玻璃窗钩,c,windows,winapi,go,keyboard-hook,C,Windows,Winapi,Go,Keyboard Hook,我正在编写一个应用程序,它将使用Win32 API WH_键盘挂钩,这样它就可以在没有焦点的情况下被激活(即显示在前台)。回调自然是一个函数指针(HOOKPROC类型)。很多关于whu-KEYBOARD和WH-KEYBOARD-LL的文档都说回调必须驻留在DLL中,不能直接在EXE中,但我发现在Windows XP及以上版本中并非如此,所以我认为这是一个历史怪癖 应用程序是用Go编写的。我知道(并对此做出了贡献),但我没有看到任何可以用来处理函数指针的东西。由于goroutines的结构,这可能

我正在编写一个应用程序,它将使用Win32 API WH_键盘挂钩,这样它就可以在没有焦点的情况下被激活(即显示在前台)。回调自然是一个函数指针(HOOKPROC类型)。很多关于whu-KEYBOARD和WH-KEYBOARD-LL的文档都说回调必须驻留在DLL中,不能直接在EXE中,但我发现在Windows XP及以上版本中并非如此,所以我认为这是一个历史怪癖

应用程序是用Go编写的。我知道(并对此做出了贡献),但我没有看到任何可以用来处理函数指针的东西。由于goroutines的结构,这可能吗?我知道从Go调用C很简单,但是对于这样的回调函数指针,我们该怎么做呢

现在,我的难题是编写一个EXE,通过标准输出发送消息,单独编译,使用
go bindata
将其包括在内,并在运行时将其写入一个临时文件并执行,同时goroutine监视该进程的标准输出。这让我畏缩。请告诉我有一个更好的方法,不使用外部进程和可怕的IPC黑客。

阅读wiki页面

您必须在C中定义回调,然后从中调用Go函数:

首先导出Go回调:

//export gocb
func gocb() {

}
然后在say
hook.c

#include "_cgo_export.h"

void c_callback() {
    gocb();
}
这是我的代码,我破解它是为了测试一些东西,之后就没有时间清理它了


这里有一个(丑陋的)例子:,

几个月前我在研究这个问题,如果不是新的,我肯定错过了。非常感谢!它已经成为围棋的一部分有一段时间了,可能是从1.0或1.1开始的