2015-04-04 3 views
0

Мне интересно, есть ли библиотеки, которые помогают мне взять под контроль другое окно. Например, если у пользователя есть calc.exe, я бы хотел, чтобы мой код переместил его, изменил его размер, возможно, даже удалил его фрейм, приложил к нему материал, idk.Принимая управление другим окном с помощью Go

Прямо сейчас я знаю, как это сделать с помощью языков сценариев, таких как autoit или autohotkey или еще много чего.

+0

https://github.com/AllenDang/w32 реализует API Win32 и обладает всеми необходимыми функциональными возможностями. – tobiash

ответ

3

Да, существует несколько библиотек, которые можно найти с помощью godoc.org или go-search.org. В этом примере я использую w32 и w32syscall (который поставляет некоторые дополнительные функции):

package main 

import (
    "log" 
    "strings" 
    "syscall" 

    "github.com/AllenDang/w32" 
    "github.com/hnakamur/w32syscall" 
) 

func main() { 
    err := w32syscall.EnumWindows(func(hwnd syscall.Handle, lparam uintptr) bool { 
     h := w32.HWND(hwnd) 
     text := w32.GetWindowText(h) 
     if strings.Contains(text, "Calculator") { 
      w32.MoveWindow(h, 0, 0, 200, 600, true) 
     } 
     return true 
    }, 0) 
    if err != nil { 
     log.Fatalln(err) 
    } 
} 

Оба этих библиотеки просто подвергая основной win32 API с минимальной упаковкой, так что вам придется читать corresponding documentation от Microsoft чтобы действительно знать, как их использовать.

+0

Спасибо. Смогу ли я также достичь этого https://msdn.microsoft.com/en-us/library/windows/desktop/bb688195(v=vs.85).aspx с обертками w32 go? – user1340531

+0

Похоже, что он определен в библиотеке w32: http://godoc.org/github.com/AllenDang/w32#DwmExtendFrameIntoClientArea – Caleb

+0

Он возвращает 0 и ничего не делает к сожалению, даже после того, как я говорю, что кадр изменился w32.SetWindowPos (ч, 0,0, 0, 200, 600, w32.SWP_FRAMECHANGED) – user1340531

Смежные вопросы