怎样在IDE的Macro中使用剪贴板功能

简介:
  在VS.NET 2003以及VS 2005的Macro中,虽然说我们可以非常方便的引用使用.NET Framework,不过Framework中一些和线程模式相关的类库却并不能直接被使用。其中非常有用的Clipboard类就因为Macro执行环境的线程模式原因不能执行,真是一大遗憾的说。那么有没有办法解决呢?

    我们来看一下Macro中直接使用Clipboard有什么问题呢?我们随便创建一个Sub,比如:Test。在Test中我们执行Clipboard.SetDataObject(new Object),会怎么样呢?得到一个错误提示:
The current thread must set to Single Thread Apartment (STA) mode before OLE calls can be made.  Ensure that your Main function has STAThreadAttribute marked on it.

    说得也还明白,需要STA模式的进程/线程才能使用Clipboard类操作剪贴板。有人曾尝试使用C#编写了一个使用Clipboard类的dll,然后在Macro中调用这个assembly,结果还是得到上面的这个错误;还有人使用EditPoint.Paste()和EditPost.Copy()方法来使用剪贴板,但是这个方法只能让EditPoint的内容和剪贴板交互,而不能为剪贴板设置任意的值,显然不是通用的剪贴板操作方式。

    正因为Macro可以调用.NET Framework,所以我们就创建一个STA的线程来访问剪贴板就行了,实现访问剪贴板的代码如下:
Dim ClipboardData  As IDataObject

Sub GetClipboardContent()
     Dim staThread  As  New Threading.Thread( AddressOf GetClipboard)
    staThread.ApartmentState = Threading.ApartmentState.STA
    staThread.Start()
    staThread.Join()
End Sub

Private  Sub GetClipboard()
    ClipboardData =  Nothing
    ClipboardData = Clipboard.GetDataObject()
End Sub

Sub SetClipboardContent( ByVal  format  As  StringByRef data  As  Object)
     If ClipboardData  Is  Nothing  Then
        ClipboardData =  New DataObject
     End  If
    ClipboardData.SetData( format, data)
     Dim staThread  As  New Threading.Thread( AddressOf SetClipboard)
    staThread.ApartmentState = Threading.ApartmentState.STA
    staThread.Start()
    staThread.Join()
End Sub

Private  Sub SetClipboard()
     If  Not ClipboardData  Is  Nothing  Then
        Clipboard.SetDataObject(ClipboardData,  True)
     End  If
End Sub

    上次我说到VS 2005的有个 小bug,不能Copy出在线文档的Full Path,其实我们可以使用Macro来完成这个工作的。代码如下,正好也演示了Clipboard的操作:
Sub CopyWindowCaption()
     Dim strWindowCaption  As  String
    strWindowCaption =  Nothing
     Try
        strWindowCaption = DTE.ActiveWindow.ProjectItem.Name
     Catch
        strWindowCaption = DTE.ActiveWindow.Caption
     End  Try
    SetClipboardContent(DataFormats.Text, strWindowCaption)
End Sub

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
IDE 小程序 API
【社区每周】IDE 3.8.10 Beta 版新增按需编译功能(1月第四期)
【社区每周】IDE 3.8.10 Beta 版新增按需编译功能(1月第四期)
59 6
|
6月前
|
IDE 小程序 JavaScript
6月开发者日回顾|IDE多功能更新,质量洞察、全息检测工具全新升级
6月开发者日回顾|IDE多功能更新,质量洞察、全息检测工具全新升级
52 0
|
6月前
|
IDE 小程序 开发工具
【社区每周】商家平台数据中心功能升级;IDE 3.4.1 Beta 版本上线(1月第一期)
【社区每周】商家平台数据中心功能升级;IDE 3.4.1 Beta 版本上线(1月第一期)
65 11
|
6月前
|
IDE 小程序 JavaScript
【意见征集】IDE 3.0 Beta版上线,有什么功能意见想对产品经理说?
【意见征集】IDE 3.0 Beta版上线,有什么功能意见想对产品经理说?
39 0
|
12月前
|
Web App开发 前端开发 JavaScript
JavaScript浏览器开发者工具和常用的IDE的调试功能
JavaScript浏览器开发者工具和常用的IDE的调试功能
|
IDE 开发工具 Android开发
Python IDE:PyCharm中的那些实用功能
最近我从一个好友那听说了PyCharm以及它新的免费社区版logr。我这个朋友用Eclipse也很长时间了,对PyCharm也是赞不绝口,所以我决定至少在家办公的时候试着用用PyCharm。目前为止,我已经深深的喜欢上了它,甚至于在日常工作时也用PyCharm(社区版采用Apache2授权)。
296 0
Python IDE:PyCharm中的那些实用功能
|
Kubernetes Dubbo Java
IDE 插件新版本发布,总有一个功能帮到你——开发部署提速 8 倍
对于开发者而言,提高工作效率大概有 2 种主要方式,第一种方式就是加快自己的工作速度,争取在同一段时间内多码一些代码、多干一些活来实现多产;而聪明的开发者会选择第二种方式,就是通过插件,让一些重复性的、繁琐性的工作被自动化,从而节省出时间来做一些实质性的业务,达到轻松又高效的工作步调。
4032 0
IDE 插件新版本发布,总有一个功能帮到你——开发部署提速 8 倍
|
监控 小程序 IDE
【重磅来袭】阿里小程序IDE上线8大功能
本次阿里小程序IDE 共更新上线了8项功能 分别是: uni-app 跨平台研发支持 开发监控 性能调试诊断升级 预检测新增代码扫描 预览和真机调试交互优化 沙箱重装上阵 IDE扩展市场 支付宝IoT小程序研发支持
3213 0
|
IDE 开发工具 Android开发