使用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)),
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
使用Windows系统提供的API 函数,可以实现很多强大的功能,如操作窗口、机器人自动处理等。以前经常使用VC、VB语言做类似的事。现在喜欢使用golang做系统开发,如果能用golang调用系统API,我就不需要在电脑上安装VB了,那个好老的东西,在win10中居然不能好好工作。我想忘掉它了。虽然以前我用它写了无数的代码。经过搜索查找,发现github.com/lxn/win 是个好东...
这篇转载的文章我运行不起来???尴尬,报的异常原文下面有评论,但是我还是无法解决
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x61ae2e]
goroutine 1 [running, locked to thread]:
main.main()
本人(海东喵) 学过一堆 第三方 的 桌面GUI库,但是那些.
生命不止,继续 go go go!!!golang官方并没有提供Windows gui库,但是今天还是要跟大家分享一下使用golang开发Windows桌面程序,当然又是面向github编程了。知乎上有一个问答:
golang为什么没有官方的gui包?这里,主要使用第三方库lxn/walk,进行Windows GUI编程。lxn/walkgithub地址:
https://github.com/
QEMU自述文件
QEMU是一个通用的开源机器和用户空间仿真器和虚拟器。
QEMU能够在软件中模拟完整的计算机,而无需任何硬件虚拟化支持。 通过使用动态翻译,它可以获得非常好的性能。 QEMU还可以与Xen和KVM虚拟机管理程序集成,以提供仿真硬件,同时允许虚拟机管理程序管理CPU。 借助虚拟机监控程序支持,QEMU可以为CPU实现接近本机的性能。 当QEMU直接仿真CPU时,它能够在另一台机器(例如x86_64 PC板)上运行为一台机器(例如ARMv7板)制造的操作系统。
QEMU还能够为Linux和BSD内核接口提供用户空间API虚拟化。 这允许针对一种架构ABI(例如Linux PPC64 ABI)编译的二进制文件可以在使用不同架构ABI(例如Linux x86_64 ABI)的主机上运行。 这不涉及任何硬件仿真,仅涉及CPU和syscall仿真。
QEMU旨在适应各种用例。
当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场。Go不是脚本语言,但却有着脚本语言的轻便简单的特性。相较于php和python之类以服务器控制台为主要战场的脚本语言来说,Go语言是真正的圆了“动态语言的应用开发梦”。
Windows Api
Windows桌面应用依赖于win api,画出各种应用界面和控件本质上就是调用wind...
首先,go是没有自己的图形开发库的,所以不能直接开发图形界面,必须要借助第三方图形开发库。目前,比较常用的有:Walk,其他的还有待发掘^ _ ^
Walk安装
在安装好go以后,在命令行或者Git Bash执行以下命令进行walk的安装
go get github.com/lxn/walk
在图形界面开发过程中,肯定会需要很多自己添加的图片等等,所以为了最终的go应用程序更加简...
"github.com/lxn/walk"
//declarative包下包含大量控件,加一个点:使用包内的成员时可以省略包名
. "github.com/lxn/walk/declarative"
const (
SIZE_W = 600
SIZE_H = 300
VS = "0.10"
var PWD string...
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"fmt"
"log"
"strings"
"time"
"github...
"syscall" "github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"github.com/lxn/win"
)var (
libuser32 *syscall.DLL
isIconic *sys
DLL文件的调用有两种方式,第一种方式就是利用.h、.lib和.dll三个文件在项目中调用动态链接库,还有一种方式就是利用Win32的API来对动态链接库进行调用
1.利用.h,.lib,.dll实现动态链接库的调用
1)编译的时候需要.h文件和.lib文件,运行的时候需要.dll文件
.h文件:头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件
.lib文件:引入库文件,包含...
fatal: unable to access 'https://
github.
com/AprilRobotics/apriltag.git/': Could not resolve host:
github.
com
这个错误提示说明无法解析主机名 "github.com,因此无法访问该地址。这可能是由于网络连接问题或者DNS配置问题所导致的。你可以尝试以下方法来解决这个问题:
1. 检查你的网络连接,确保你可以正常访问互联网。
2. 确认你的DNS配置是否正确。你可以尝试手动在命令行中使用 `nslookup github.com` 命令来检查是否可以解析该主机名。
3. 如果你使用的是代理服务器,请确保配置正确,并且代理服务器可以正常连接到github.com。
4. 尝试使用其他网络环境,比如切换到其他的网络连接或者使用移动数据网络来验证是否是网络环境的问题。
5. 如果问题仍然存在,你可以尝试使用IP地址代替主机名来访问github.com。你可以使用 `ping github.com` 命令来获取github.com的IP地址,并将其配置为访问地址。
希望这些方法可以帮助你解决问题。如果问题仍然存在,请提供更多的错误信息或者具体的操作系统版本,以便我们提供更准确的帮助。
PHP路上渐行渐远:
SSH文件夹权限更改造成无法登录的修复
PHP路上渐行渐远: