2012-09-18 72 views
0

我试图在vba应用程序(在powerpoint-幻灯片放映期间)和我写的.net应用程序之间传递消息。悄悄地发送密钥

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

但是,此方法导致powerpoint失去焦点。

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

+3

http://damianblog.com/2009/07/05/excel-wcf/ –

+4

是很困难的建议不知道你想要什么样的解决方案做什么(什么消息?,多久?),基于什么事件/数据/时间?)。如果你写了App,那么SendKeys可能不是前进的方向。 – user3357963

+0

我有一个背景.net应用程序,我试图让它知道当前的powerpoint状态。换句话说 - 幻灯片播放是否开启,幻灯片显示 –

回答

0

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

首先,我们注册的PowerPoint evets,因为这样的:

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#?

最后,我们恢复对演示文稿,结束事件的原始剪贴板值

1

如果发生在同一台计算机上,最简单的方法可能是让PPT将其状态写入注册表,其他应用程序将其状态写入(GetSetting(), SaveSetting())。

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

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

+0

这两个应用程序运行在同一台机器上,我不喜欢轮询文件系统更改的整个概念,因为它很容易出错(权限等) 。) –

+0

在这种情况下,使用'SaveSetting()'在PPT-VBA端将信息推入注册表,'= GetSetting()'从其他应用程序中检索它们 – MikeD