-4

Win32 API を使用して実行するアプリケーションの wndproc 関数をどのように管理できますか? 私が使用するソフトウェア言語は Go です。

複数の方法を試しましたが、できませんでした。手伝ってくれますか?

Microsoft Spy++でメモ帳アプリのHANDLE(HWND)値を学習しています

次に、SPY ++ を介して Notepad ++ で変更を監視します。

Spy ++ と同じように、私が書いたカスタム WNPROC 関数の管理を手伝ってください。

func main() {

    hwnd := w32.HWND(3736818)
    go SetWindowLongTest(w32.HWND(hwnd))
    time.Sleep(99999 * time.Second)
}


func SetWindowLongTest(hwnd w32.HWND) {
    result, err := win.SetWindowLongPtr(win.HWND(hwnd), win.GWL_WNDPROC, syscall.NewCallback(MyNewWndProc))
    if err != nil {
        fmt.Println("SetWindowLongPtr", err)
    }
    fmt.Println(result)
}



func MyNewWndProc(hwnd w32.HWND, uMsg uint, wParam w32.WPARAM, lParam w32.LPARAM) uintptr {
    fmt.Println(uMsg)
    fmt.Println("myNewWndProc", hwnd)
    return 0
}

  Result: 
    PS C:\Users\Cingozr\go\src> go run .\main.go
    SetWindowLongPtr Access is denied.
    0

方法 2:

func main() {

    hwnd := w32.HWND(3736818)
    go SetClassLongTest(w32.HWND(hwnd))
    time.Sleep(99999 * time.Second)
}

func SetClassLongTest(hwnd w32.HWND) {
    result, err := w32.SetClassLongPtrW(hwnd, -24, syscall.NewCallback(MyNewWndProc))
    if err != nil {
        fmt.Println("SetClassLongPtrW Err", err)
    }
    fmt.Println("SetClassLongPtrW", result)

}

func MyNewWndProc(hwnd w32.HWND, uMsg uint, wParam w32.WPARAM, lParam w32.LPARAM) uintptr {
    fmt.Println(uMsg)
    fmt.Println("myNewWndProc", hwnd)
    return 0
}

Result:
PS C:\Users\Cingozr\go\src> go run .\main.go
SetClassLongPtrW Err Access is denied.
SetClassLongPtrW 0
4

1 に答える 1