【问题标题】:Sending keys silently静默发送密钥
【发布时间】:2012-09-18 22:46:17
【问题描述】:

我正在尝试在 vba 应用程序(在幻灯片放映期间使用 powerpoint)和我编写的 .net 应用程序之间传递消息。

我能想到的唯一方法是发送按键。

但是,这种方法会导致 powerpoint 失去焦点。

你能提出一个解决方案吗?

【问题讨论】:

  • 在不知道您打算做什么(什么消息?,多久一次?,基于什么事件/数据/时间?)的情况下,很难提出解决方案。如果您编写了应用程序,那么 SendKeys 可能不是前进的方向。
  • 我有一个后台 .net 应用程序,我试图让它知道当前的 powerpoint 状态。换句话说 - 幻灯片是否打开,以及显示的是什么幻灯片

标签: vba excel powerpoint


【解决方案1】:

如果所有事情都发生在同一台机器上,最简单的方法可能是让 PPT 将其状态写入注册表,从其他应用程序读取它的位置 (GetSetting(), SaveSetting())。

如果 PTT 和其他进程在不同的机器上运行,您可以考虑将状态写入一个可以异步读取的小文本文件中。

不同机器上的两个进程/应用程序之间(同步)通信的另一种方式是使用sockets 并通过网络发送信息。

【讨论】:

  • 这两个应用程序在同一台机器上运行,我不喜欢轮询文件系统更改的整个概念,因为它容易出错(权限等)
  • 在这种情况下,使用 PPT-VBA 端的SaveSetting() 将信息推送到注册表中,并使用=GetSetting() 从您的其他应用程序中检索它们
【解决方案2】:

我发现了一种在 vba 和 .net 之间进行通信的有趣方式,无需文件系统操作、套接字或外部对象。

首先,我们注册 powerpoint 事件,如下所示:

http://www.vbaexpress.com/kb/getarticle.php?kb_id=327

其次,我们在演示开始事件上更新 VBA 中的剪贴板:

http://word.mvps.org/faqs/macrosvba/ManipulateClipboard.htm

第三,我们在.net上使用剪贴板作为监听器:

How do I monitor clipboard content changes in C#?

最后,我们在演示结束事件上恢复原始剪贴板值

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 2010-11-18
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2011-09-11
    相关资源
    最近更新 更多