go+govcl+go-ole实现的windows远程桌面

jjmgx · · 7789 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一直用go写后台服务用,几乎没有写过gui程序,近日对各种的golang的gui库了解了一下,最后选择了用govcl试试,感觉还是不错的。用起来很顺手,下面把我写的基于MsTscAx控件的远程桌面程序发出来和大家共享下,一共就50行代码, 效果图如下: ![image.png](https://static.studygolang.com/200525/2ac418a835b879589b61ceac203656c5.png) ```` 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的小伙伴,希望能提供一下支持多标签页的方法。不胜感激~

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7789 次点击  ∙  2 赞  
加入收藏 微博
12 回复  |  直到 2022-05-07 12:27:51
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传