100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > golang远程桌面服务器 go+govcl+go-ole实现的windows远程桌面

golang远程桌面服务器 go+govcl+go-ole实现的windows远程桌面

时间:2023-06-24 16:43:04

相关推荐

golang远程桌面服务器 go+govcl+go-ole实现的windows远程桌面

一直用go写后台服务用,几乎没有写过gui程序,近日对各种的golang的gui库了解了一下,最后选择了用govcl试试,感觉还是不错的。用起来很顺手,下面把我写的基于MsTscAx控件的远程桌面程序发出来和大家共享下,一共就50行代码,

效果图如下:

![image.png](/25/2ac418a835b879589b61ceac203656c5.png)

````

package main

import (

"syscall"

"unsafe"

"/ying32/govcl/vcl/types/colors"

"/go-ole/go-ole"

"/go-ole/go-ole/oleutil"

_ "/ying32/govcl/pkgs/winappres"

"/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的小伙伴,希望能提供一下支持多标签页的方法。不胜感激~

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。