2012-09-18 260 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