2014-07-27 113 views
3

我想建立一個C#的背景應用程序,將掛鉤鍵盤按鍵(例如CAPS +(A/B/C/....))充當副本到許多不同的剪貼板。編程多個自定義剪貼板,使用Windows剪貼板 - 幾乎沒有併發症

首先,我查找了一個類似CTRL + V的Windows方法:直接粘貼一個完整的字符串。我也嘗試了SendInputs來「粘貼」,錯誤的想法花了很長時間來執行。由於我沒有找到任何商品,我決定使用Windows剪貼板。

的情況是(當我這樣做CAPS + A)

  • 緩存剪貼板中的內容進行檢索後
  • 模擬一個CTRL + C
  • 獲取剪貼板的內容,並將其設置爲可變對應'A'鍵
  • 將剪貼板設置爲默認的緩存值。

這個效果很好,當我在記事本上。但是當CTRL + C在另一個應用程序上執行時(正好5秒,剪貼板不能被我的應用程序訪問),我在步驟3得到異常CLIPBRD_E_CANT_OPEN

我的問題: - 有沒有辦法將Windows一個信號讓它「粘貼」一些給定的文本,就像一個CTRL + V,而不使用Windows剪貼板? - 是否有辦法在5秒內強制剪貼板回到我的應用程序? - 我錯過了一個更智能的場景?

謝謝!

+0

模擬鍵擊*完全是錯誤的方式去做這件事。儘管如此,這是一項非常大的工作,而且我聽起來並不像你要完成任務一樣。您可能需要查看現有的開源(甚至是商業)軟件包,而不是使用C#編寫自己的軟件包。我從來沒有嘗試過,但[同上](http://sourceforge.net/projects/ditto-cp/)看起來像剪貼板管理器,你可以看看。 –

回答

0

看看這個攔截密鑰之前所有的:

[DllImport("user32.dll")] 
public static extern int GetAsyncKeyState(long vKey); 

VK_CONTROL = 0×11
VK_SHIFT = 0x10的
C密鑰= 0x43中

該函數返回一個整數值> 0,如果一個鍵被按下。