2010-02-24 64 views
2

我使用RegisterHotKey Win32 API來偵聽Ctrl_V組合鍵並使用WndProc方法來處理此熱鍵通知。現在,即使除了調用base.WndProc(ref mesg)之外,我沒有在這個方法中執行任何操作,Paste操作似乎不會傳遞到Windows上,因此粘貼不起作用。我設法通過顯式調用SendKeys(「^ V」)來獲得工作粘貼,但它不適用於非文本數據。我也嘗試SendMessage Win32 API如下無法使用SendKeys或SendMessage以編程方式粘貼非文本對象

SendMessage(foregroundWindowHandle, 0x302, 0, 0); 

但即使這是行不通的。

我無法弄清楚如何執行我的代碼,然後讓Windows爲圖像,文件等執行粘貼。解決此問題的任何幫助都將非常及時並得到高度讚賞。

更新:我發現問題是,正在生成粘貼命令的窗口沒有得到焦點。更正這個後,粘貼工作正常記事本。此外,我現在使用Alt_Shift_V作爲熱鍵,以避免與默認粘貼命令衝突。所以粘貼非文本數據可以正常工作。但是,將文本粘貼到Visual Studio和Office應用程序中不起作用。 SendKeys(「^ V」)似乎在這些應用程序中以不同的方式進行解釋。任何想法如何讓這個工作?

+1

你在粘貼到的干擾:

代碼的簡單和方便的全局鉤子實現,可以發現?也許前景窗口只接受文字? – Seth 2010-02-24 21:20:13

+0

我不完全粘貼,我只是試圖將粘貼命令傳遞到首先生成它的窗口。對於圖像,我曾嘗試使用Explorer和MS Paint。我也嘗試在Windows資源管理器中複製粘貼文件,但沒有運氣 – Sanket 2010-02-25 06:10:04

回答

1

而不是註冊一個熱鍵,註冊一個全局鉤子。

我已經使用全局鉤子來做類似於你過去做的事情,並且它工作得很好。

http://www.codeproject.com/KB/cs/globalhook.aspx

這不會與粘貼操作:)

+0

重新閱讀您的問題我發現您可能想要執行您的操作 - 在執行粘貼操作之前,在這種情況下,我的建議不起作用。我會留下它,以防萬一它有用:) – omglolbah 2010-02-26 12:52:34

+0

感謝噸omglolbah,使用全局鉤子爲我做了伎倆! – Sanket 2010-03-05 23:39:02

0

我想你應該截取Ctrl-V Key消息(通過WndProc),做你所需要的,然後讓base.WndProc處理關鍵消息。你也可以處理OnKeyDown事件。 在WinForms中,您可以將Form.KeyPreview設置爲true,以便在子控件之前查看消息。

+0

感謝Timores。正如我在我的問題本身中提到的,我打電話base.WndProc()但仍然粘貼不起作用 – Sanket 2010-02-25 06:11:51

0

如果你只是想採取一些行動,然後傳遞消息,註冊一個熱鍵並不是解決方案。這聽起來像你需要一個鍵盤鉤子(SetWindowsHookEx API)。

+0

感謝Mattias,我會研究它。但是很可能爲Ctrl_V添加一個鉤子可能不起作用,因爲我現在正在使用Alt_Shift_V作爲熱鍵。請參閱更新後的問題 – Sanket 2010-02-26 07:45:32

相關問題