我为开源做贡献:github.com/lxn/win - Go语言中文社区

我为开源做贡献:github.com/lxn/win


使用Windows系统提供的API 函数,可以实现很多强大的功能,如操作窗口、机器人自动处理等。

以前经常使用VC、VB语言做类似的事。现在喜欢使用golang做系统开发,如果能用golang调用系统API,我就不需要在电脑上安装VB了,那个好老的东西,在win10中居然不能好好工作。我想忘掉它了。虽然以前我用它写了无数的代码。

经过搜索查找,发现github.com/lxn/win 是个好东西,提供很多系统调用功能。用它写代码基本上很舒服。

但是当我找 FindWindowEx 时,居然没有提供,只有FindWindow。

一开始,我想人家没提供可能不行吧,也许这个API不能好好工作,有什么难言之隐吧。

只能用EnumChildWindows 代替它,来做所有控件查找工作。后来感觉不够,于是决定偿试自己搞个 FindWindowEx。

没想到成了,居然能好好工作,列出来,供大家使用:

修改文件:srcgithub.comlxnwinuser32.go

// here:	findWindow *windows.LazyProc
findWindowEx *windows.LazyProc

// here: findWindow = libuser32.NewProc("FindWindowW")
findWindowEx = libuser32.NewProc("FindWindowExW")

//here: func FindWindow(lpClassName, lpWindowName *uint16) HWND {
// add by rhinosharp team
func FindWindowEx(hWndParent HWND, hWndChild HWND, lpClassName, lpWindowName *uint16) HWND {
ret, _, _ := syscall.Syscall6(findWindowEx.Addr(), 4,
uintptr(hWndParent),
uintptr(hWndChild),
uintptr(unsafe.Pointer(lpClassName)),
intptr(unsafe.Pointer(lpWindowName)),
0,
0)

return HWND(ret)
}

 

已经向https://github.com/lxn/win作了递交:

 

包装一下,方便调用:

// StringToUTF16PtrElseNil String To UTF16Ptr if empty string trans to nil
func StringToUTF16PtrElseNil(str string) *uint16 {
	if str == "" {
		return nil
	}
	return syscall.StringToUTF16Ptr(str)
}

// FindWindow find window hwnd by name class="" if nil,nil mean ignore it
func FindWindow(class, title string) win.HWND {
	var hwnd win.HWND
	hwnd = win.FindWindow(StringToUTF16PtrElseNil(class), StringToUTF16PtrElseNil(title))
	return hwnd
}

// FindWindowEx find window hwnd by name class="" if nil,nil mean ignore it
func FindWindowEx(hWndParent, hWndChild win.HWND, class, title string) win.HWND {
	var hwnd win.HWND
	hwnd = win.FindWindowEx(hWndParent, hWndChild,
		StringToUTF16PtrElseNil(class),
		StringToUTF16PtrElseNil(title))
	return hwnd
}

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Dreamfine/article/details/100019114
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-08-25 16:11:31
  • 阅读 ( 2468 )
  • 分类:Go开源项目

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢