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

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

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

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

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

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

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

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

修改文件:src\github.com\lxn\win\user32.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
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值