我如何获得pid和Handle,然后获得位置?
我对此没有任何线索。请忽略以下代码。
package main
import (
"fmt"
"syscall"
)
func main () {
if err := syscall.Setregid(int(233), int(233)); err != nil {
fmt.Println("setregid:", err)
}
}
尽管您发布了代码(这只能在Linux下运行),但每个人似乎都在假设您在Windows下询问它是如何完成的。
正如@ remy-lebeau所提到的,你可以使用FindWindow()
和GetWindowRect()
来实现这个目的:
package main
import (
"fmt"
"syscall"
"unsafe"
)
type HWND uintptr
type RECT struct {
Left, Top, Right, Bottom int32
}
var (
user32, _ = syscall.LoadLibrary("user32.dll")
findWindowW, _ = syscall.GetProcAddress(user32, "FindWindowW")
getWindowRect, _ = syscall.GetProcAddress(user32, "GetWindowRect")
)
//HWND WINAPI FindWindow(
// _In_opt_ LPCTSTR lpClassName,
// _In_opt_ LPCTSTR lpWindowName
//);
func FindWindowByTitle(title string) HWND {
ret, _, _ := syscall.Syscall(
findWindowW,
2,
0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))),
0,
)
return HWND(ret)
}
//BOOL WINAPI GetWindowRect(
// _In_ HWND hWnd,
// _Out_ LPRECT lpRect
//);
func GetWindowDimensions(hwnd HWND) *RECT {
var rect RECT
syscall.Syscall(
getWindowRect,
2,
uintptr(hwnd),
uintptr(unsafe.Pointer(&rect)),
0,
)
return &rect
}
func main() {
defer syscall.FreeLibrary(user32)
hwnd := FindWindowByTitle("New Tab - Google Chrome")
fmt.Printf("Return: %d\n", hwnd)
if hwnd > 0 {
rect := GetWindowDimensions(hwnd)
fmt.Printf("Return: %v\n", rect)
}
}
请注意,为简洁起见,不会进行错误处理。