一直用go写后台服务用,几乎没有写过gui程序,近日对各种的golang的gui库了解了一下,最后选择了用govcl试试,感觉还是不错的。用起来很顺手,下面把我写的基于MsTscAx控件的远程桌面程序发出来和大家共享下,一共就50行代码,
效果图如下:
package main
import (
"syscall"
"unsafe"
"github.com/ying32/govcl/vcl/types/colors"
"github.com/go-ole/go-ole"
"github.com/go-ole/go-ole/oleutil"
_ "github.com/ying32/govcl/pkgs/winappres"
"github.com/ying32/govcl/vcl"
)
var Form1 *TForm1
var atlDll = syscall.NewLazyDLL("atl.dll")
var AtlAxAttachControl = atlDll.NewProc("AtlAxAttachControl")
func main() {
vcl.Application.Initialize()
vcl.Application.CreateForm(&Form1)
vcl.Application.Run()
}
type TForm1 struct {
*vcl.TForm
Rdp1 RdpPanel
}
type RdpPanel struct {
*vcl.TPanel
rdp *ole.IDispatch
}
func (f *TForm1) OnFormCreate(sender vcl.IObject) {
f.SetCaption("windows远程桌面")
f.SetBounds(10, 10, 1024, 800)
f.Rdp1.Initrdp(f, 0, 0, 1024, 768, "192.168.2.28", "administrator", "pass")
}
func (rp *RdpPanel) Initrdp(f *TForm1, x, y, w, h int32, ip, username, pass string) {
ole.CoInitialize(0)
rp.TPanel = vcl.NewPanel(f)
rp.SetParent(f)
rp.SetBounds(x, y, w, h)
rp.SetParentBackground(false)
rp.SetColor(colors.ClRed)
unknown, _ := oleutil.CreateObject("MsTscAx.MsTscAx.2")
rp.rdp = unknown.MustQueryInterface(ole.IID_IDispatch)
AtlAxAttachControl.Call(uintptr(unsafe.Pointer(&unknown.RawVTable)), rp.Handle(), 0)
oleutil.PutProperty(rp.rdp, "server", ip)
oleutil.PutProperty(rp.rdp, "username", username)
set, _ := oleutil.GetProperty(rp.rdp, "AdvancedSettings")
set.ToIDispatch().PutProperty("ClearTextPassword", pass)
oleutil.MustCallMethod(rp.rdp, "connect")
ole.CoUninitialize()
}
最后,如果也有用govcl的小伙伴,希望能提供一下支持多标签页的方法。不胜感激~
有疑问加站长微信联系(非本文作者))

多标签用TPageControl就好了
TPageControl我方了没有带关闭按钮,是否有什么方法可以实现?
在TPageControl的OnMouseUp事件中判断鼠标按键+判断Y坐标,然后弹出个TPopupMenu
谢谢指教!
你是作者吗
楼主你的源码能给一下吗,还有liblcl.dll
源码就上面的那么多。liblcl.dll可以到github.com/ying32/govcl/vcl下载
能帮我看下这个问题吗 https://github.com/go-ole/go-ole/issues/209 不知道enum对象如何初始化
这个DEMO有个BUG 远程桌面连接成功后,如果在WINDOWS里切换到其它的窗口再切换回远程桌面则会出现鼠标键盘向远程桌面输入失效~ 麻烦作者试下!本人小白不知道如果解决,已经折磨了两天了. 谢谢作者
我测试正常!
1楼 @ying32 这个DEMO 远程桌面连接成功后,如果在WINDOWS里切换到其它的窗口再切换回远程桌面则会出现鼠标键盘向远程桌面输入失效~请指导
# Form1.Rdp1.SetOnClick(func(sender vcl.IObject) { fmt.Println("sadfas") Form1.Rdp1.SetFocus() })
这样都无效
9楼 @daikin 经过几天的测试以及资料的搜索,发现该问题与 APP 运行的宿主机系统版本有关,WIN7系统确实存在该问题,WIN7以上系统则正常!
该问题的描述及解决: https://support.cloudshare.com/hc/en-us/articles/200281639-Fix-RDP-access-is-visible-but-frozen-when-window-focus-is-changed
终于知道问题的原因在哪里了.