2013-10-17 67 views
4

感謝您閱讀和您可能有任何意見。Go/Golang試圖通過系統調用獲取窗口信息。 (如在EnumWindows等)

語境:

  • 我是一個UI/R & d DEV(成型等)超過20年,剛開始的服務器/後端開發。
  • 我對Go非常陌生 - 不到2個月 - 並且1)遍歷GoByExample的大部分內容,並且2)在Amazon EC2實例上設置一個原始的正常運行的Web服務器。
  • 我創建了另一種語言的用戶界面,爲另一個第三方應用程序提供HUD(平視顯示器) - 這是一款產生多個窗口的遊戲。 (想想在多個窗口中運行多個撲克桌。)
  • 我將HUD連接到了我創建的Go客戶端。
  • 由於第一語言的限制,我使用Go來獲取操作系統信息。
  • 我想繼續使用Go,因爲我非常喜歡它。
  • 我在Windows 7機器上。

目標(S):

  • 大畫面:當用戶移動的窗口,我想HUD與移動它。
  • 爲此,我需要關於WindowText以「遊戲」開頭的主窗口的信息。
  • 理想的做法是這樣的:

    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,以前的),只是演練一切
  • 通讀:
    • 系統調用文檔(http://golang.org/pkg/syscall/
    • 系統調用/ dll_windows.go
    • syscall/env_windows.go
    • syscall/exec_windows.go
    • syscall/syscall.go
    • 系統調用/ syscall_windows.go
    • 系統調用/ syscall_windows_386.go
    • 系統調用/ syscall_windows_amd86.go
    • 系統調用/ syscall_windows_test.go
    • 系統調用/ zsyscall_windows_386.go
    • 系統調用/ zsyscall_windows_amd86。去
    • 系統調用/ ztypes_windows.go
    • 系統調用/ ztypes_windows_386.go
    • 系統調用/ ztypes_windows_amd86.go
  • 在Windows開發人員中心的每一個潛在的窗函數
  • 搜索StackExchange,谷歌,DuckDuckGo
  • 我可以看到有什麼東西(TestEnumWindows)

問題存在:

  • 更好的解決方案嗎?在我的無知中,我可以很容易地忽略一些方法,如:GiveGeoffreyExactlyWhatHeWants()
  • 我是否在正確的球場?
  • 這在Go中可行嗎?
  • 什麼是正確的方向?
  • 這是別人需要的東西嗎?
+0

正想發佈另一個鏈接到https://code.google.com/p/go-wiki/wiki/WindowsDLLs我希望有答案,但亞歷克斯可能會指出我在正確的方向! – Geoffrey

回答

2

不清楚你想要什麼,但也許http://play.golang.org/p/YfGDtIuuBw將有所幫助。它使用EnumWindows來查找具有特定標題的窗口。

亞歷

+0

我敢打賭,這正是我要找的。 – Geoffrey

+0

完美!謝謝你幫我跳過那個障礙,亞歷克斯。你統治! – Geoffrey

+0

再次感謝,亞歷克斯。我現在有一些窗口,其中有一些關鍵字正是我想要的。搜索是通過正則表達式完成的,所以它是理想的。 – Geoffrey