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