2009-08-26 70 views
0

我想寫我自己的Windows XP及更高版本的全局片段工具。這將始終運行在後臺工具中,該工具將在全局定義的熱鍵上彈出,允許我選擇帶替代參數的代碼段,然後將展開後的代碼段粘貼到任何我曾經進入的控件的文本輸入中激活它,最後,讓我回到那個以前的應用程序/輸入框。如何使用.NET編寫我自己的Global Snippets程序?

我知道該怎麼做大部分的算法方面,但我不知道如何完成這些基於Windows的功能:

1 - 全局熱鍵:我如何在Windows中定義鍵序列(從.net?),即使在另一個應用程序文本框中輸入數據時也能工作? (通常這將是一個瀏覽器窗口)

2 - 粘貼到另一個應用程序:我可以使用粘貼緩衝區和Ctrl-C,但我想避免額外的擊鍵。

3 - 將原始窗口返回控制:無縫返回到我的輸入流:我該怎麼做?事實上,我的工具在彈出之前甚至不知道我的位置?

我想自己寫這個的原因首先是學習如何(因爲還有其他工具是這樣我想做的),其次,我不知道任何具有參數替換的片段工具我想要。

所以,這兩個問題是:A)我應該怎麼做?和B)我如何才能完成上述第1項至第3項?

+0

我在搜索具有這些確切要求的工具時發現了此問題。我一直在尋找幾個星期,並沒有發現任何真正滿足這種需求的東西。你有沒有:找到符合這些要求的東西,或者自己寫下這些東西? – emkayultra 2010-02-17 23:31:22

+0

不,對不起。這裏的答案和我一樣接近,但它仍然從vb.net上得到了一些問題。 – RBarryYoung 2010-02-18 03:39:52

回答

2

您需要使用全局系統鍵盤鉤子來捕獲熱鍵。有一個CodeProject article顯示如何在.NET中執行此操作。

一旦你「困住」你的擊鍵,你可以使用Windows API來獲取當前的窗口句柄。但是,我會盡量避免激活您的應用程序。你應該能夠粘貼你的新文本,並允許應用程序處理它。

使用Windows API的缺點是,它不適用於所有情況,「破損」的情況越來越普遍。例如,WPF應用程序不會爲窗口內的每個元素提供HWND,因此獲取當前的「控件」句柄只會爲您提供窗口,而不是適當的元素。


編輯:另一個參考來源是這個article in MSDN Magazine。它演示瞭如何通過C#使用P/Invoke來完成此操作。

+0

這篇文章是關於編寫一個非託管的VC++ DLL來在VB/C#中啓用它。 unmnaged VC++有點超越我了,無論如何我離家更近了? – RBarryYoung 2009-08-26 18:00:56

+0

這裏有另一篇文章:http://msdn.microsoft.com/en-us/magazine/cc188966.aspx這一個完全在C#中完成,使用P/Invoke。不幸的是,你需要爲此使用P/Invoke和Windows API,因爲框架中沒有hook API。 – 2009-08-26 18:11:10

+0

我鼓勵你將第二個參考文獻移到你的答案中,我絕對認爲它更有幫助。 – RBarryYoung 2009-09-03 19:40:00

相關問題