gpt4 book ai didi

c - 使用 golang 的 Windows Hook

转载 作者:IT王子 更新时间:2023-10-29 01:03:20 61 4
gpt4 key购买 nike

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

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

现在我的kludge是写一个通过标准输出发送消息的EXE,单独编译它,使用go-bindata包含它并在运行时将它写入一个临时文件并执行它,而协程监视该进程的标准输出。这让我感到畏缩。请告诉我有没有使用外部进程和糟糕的 IPC 黑客的更好方法。

最佳答案

阅读有关 cgo 的维基页面.

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

首先导出你的 Go 回调:

//export gocb
func gocb() {

}

然后在 hook.c 中定义回调

#include "_cgo_export.h"

void c_callback() {
gocb();
}

这是我的代码,我破解它来测试一些东西,之后再也没有时间清理它。

这是一个(丑陋丑陋的)例子:https://github.com/OneOfOne/go-nfqueue/blob/master/nfqueue.go#L129 , https://github.com/OneOfOne/go-nfqueue/blob/master/nfqueue.hhttps://github.com/OneOfOne/go-nfqueue/blob/master/nfqueue.c#L49

关于c - 使用 golang 的 Windows Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129575/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com