Go / Golang尝试通过系统调用获取窗口信息。 (如EnumWindows等)

时间:2013-10-17 20:41:39

标签: windows go

感谢阅读和您的任何评论。

上下文:

  • 我已经成为UI / R& D开发(原型设计等)超过20年,刚刚开始服务器/后端开发。
  • 我是Go的新手 - 不到2个月 - 并且有1)经历GoByExample的大部分工作,2)在Amazon EC2实例上设置一个原始的,有效的Web服务器。
  • 我用另一种语言创建了一个UI,为另一个第三方应用程序 - 一个产生多个窗口的游戏提供HUD(Heads Up Display)。 (想想在多个窗口中运行的多个扑克桌。)
  • 我将HUD连接到我创建的Go客户端。
  • 由于第一语言的限制,我使用Go获取操作系统信息。
  • 我想继续使用Go因为我真的很喜欢它。
  • 我在使用Windows 7计算机。

目标(一个或多个):

  • 大图:当用户移动窗口时,我希望HUD随之移动。
  • 要做到这一点,我需要有关WindowText以“Game”开头的主窗口的信息。
  • 理想情况是这样的:

    windows: [ { windowHwnd:hwnd, windowText:windowText, windowX:x, windowY:y, windowWidth:width, windowHeight:height },
    .
    .
    .
    { windowHwnd:hwnd, windowText:windowText, windowX:x, windowY:y, windowWidth:width, windowHeight:height } ]
    

我采取的步骤:

  • 我抓住并修改了github.com/AllenDang/w32,我认为格式化系统为Go。
    • 当我需要来自user32.go的不公开功能时,我添加它。
  • 尝试使用带结果的GetForegroundWindow和GetWindowText,然后使用GetWindow(hwnd,previous)来完成所有内容
  • 通读:
    • 系统调用文档(http://golang.org/pkg/syscall/
    • 系统调用/ dll_windows.go
    • 系统调用/ env_windows.go
    • 系统调用/ exec_windows.go
    • 系统调用/ syscall.go
    • 系统调用/ syscall_windows.go
    • 系统调用/ syscall_windows_386.go
    • 系统调用/ syscall_windows_amd86.go
    • 系统调用/ syscall_windows_test.go
    • 系统调用/ zsyscall_windows_386.go
    • 系统调用/ zsyscall_windows_amd86.go
    • 系统调用/ ztypes_windows.go
    • 系统调用/ ztypes_windows_386.go
    • 系统调用/ ztypes_windows_amd86.go
  • Windows开发人员中心的每个潜在窗口函数
  • 搜索了StackExchange,Google,DuckDuckGo
  • 我可以看到有什么东西(TestEnumWindows)

问题:

  • 更好的解决方案?在我的无知中,我很容易忽略一些方法,如:GiveGeoffreyExactlyWhatHeWants()
  • 我在正确的球场吗?
  • 这可以在Go吗?
  • 正确的方向是什么?
  • 这是否是别人需要的东西?

1 个答案:

答案 0 :(得分:3)

目前尚不清楚你想要什么,但也许http://play.golang.org/p/YfGDtIuuBw会有所帮助。它使用EnumWindows查找具有特定标题的窗口。

亚历