WinCC VBS利用EXCEL调用Windows API函数.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WinCC VBS利用EXCEL调用Windows API函数 By dcount 2008-11-1 前面已经讨论过利用VBS的CreateObject方法来干很多以前不敢想象的事情,但Windows API却没有办法,虽有DynmicWrapper.dll这样的东西,毕竟使用起来不方便,而且功能也有限。如果利用EXCEL作为突破口,VBS调用EXCEL的宏,而由EXCEL的宏来调用Windows API正可以很好的解决这一问题。 简单举例 在API.XLS的Sheet1中加入如下代码: Private Declare Function SHShutDownDialog Lib shell32 Alias #60 (ByVal YourGuess As Long) As Long Public Sub ShowShutDownDlg() 显示关机界面 SHShutDownDialog 0 End Sub 在WinCC调用之前先用EXCEL运行一下,效果如下: 接下来由WinCC的VBS调用如下: Dim oExcelFile,oExcel,oWorkBook,oSheet oExcelFile= HMIRuntime.ActiveProject.Path + \APIXLS\API.XLS Set oExcel = CreateObject(Excel.Application) Set oWorkBook = oExcel.workbooks.OPen(oExcelFile) Set oSheet = oWorkBook.Sheets(Sheet1) oExcel.run Sheet1.ShowShutDownDlg oWorkBook.Close Set oWorkBook = Nothing oExcel.quit Set oExcel = nothing 效果和EXCEL中是一模一样的,^_^。 如何传递参数,和取得返回值 但大多数时候我们需要调用一些API函数,传递某些值来获取返回值,比如FindWindow。 oExcel.run传递参数是可以的,比如EXCEL有宏: Public Sub TestMsg(Msg As String) MsgBox Msg End Sub 那么调用的时候用oExcel.run Sheet1. TestMsg,”TEST MSG HERE” 即可。 但oExcel.run却不支持返回值的,因此得另想办法。其实也简单,利用Sheet1的表格来存放返回值就可以了,EXCEL宏调用后将值写入Range中,而VBS则读取该Range的值即可,以此达到取得返回值之目的,^_^。下面以FindWindow为例: 在API.XLS的Sheet1中加入如下代码: Private Declare Function FindWindow Lib user32 Alias FindWindowA (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Sub xlsFindWindow(WindowTitle As String) Dim hwnd As Long hwnd = FindWindow(vbNullString, WindowTitle) Sheet1.Range(A1).Value = hwnd End Sub 接下来由WinCC的VBS调用如下: Dim oExcelFile,oExcel,oWorkBook,oSheet oExcelFile= HMIRuntime.ActiveProject.Path + \APIXLS\API.XLS Set oExcel = CreateObject(Excel.Application) Set oWorkBook = oExcel.workbooks.OPen(oExcelFile) Set oSheet = oWorkBook.Sheets(Sheet1) oExcel.run Sheet1.xlsFindWindow,WinCC-Runtime - #向FindWindow传递参数 MsgBox oSheet.Range(A1).Value #从Sheet中取得返回值 oExcel.DisplayAlerts = False #关闭EXCEL提示,因为我们对Sheet进行了修改,退出的时候会提示是否保存 oWorkBook.Close Set oWorkBook = Nothing oExcel.quit Set oExcel = nothing 性能优化 大家都知道EXCEL调用起来是很慢的,尤其是每次Create

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档