Skip to content

Instantly share code, notes, and snippets.

@moutend
Created June 30, 2017 06:48
Show Gist options
  • Save moutend/8f94e66a4150270ff405d4b7ab9bb8ac to your computer and use it in GitHub Desktop.
Save moutend/8f94e66a4150270ff405d4b7ab9bb8ac to your computer and use it in GitHub Desktop.
// +build windows
package main
import (
"fmt"
"log"
"os"
"syscall"
"time"
"unsafe"
"github.com/moutend/winhook"
)
var count int
func add(code, wParam, lParam uint64) uintptr {
fmt.Println("called", count, code, wParam, lParam)
var kb *winhook.KBDLLHOOKSTRUCT
kb = (*winhook.KBDLLHOOKSTRUCT)(unsafe.Pointer(uintptr(lParam)))
fmt.Println(kb)
count++
return winhook.CallNextHookEx(0, code, wParam, lParam)
}
func main() {
var err error
if err = run(os.Args); err != nil {
log.Fatal(err)
}
fmt.Println("done")
return
}
func run(args []string) (err error) {
fmt.Println("@@@")
fn := syscall.NewCallback(add)
lr := winhook.SetWindowsHookExW(winhook.WH_KEYBOARD_LL, fn, 0, 0)
if lr != 0 {
fmt.Println("unknown error %v", lr)
}
fmt.Println("sleeping")
go func() {
time.Sleep(10 * time.Second)
r := winhook.UnhookWindowsHookEx(lr)
fmt.Println("unhook", r)
}()
var r bool
var msg *winhook.MSG
for n := 0; n < 10; n++ {
r = winhook.GetMessageW(&msg, 0, 0, 0)
fmt.Println("received ", r, n)
}
time.Sleep(20 * time.Second)
fmt.Println("done")
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment