簡體   English   中英

在所有應用程序中注冊全局鍵盤快捷鍵

[英]Registering a global keyboard shortcut across all applications

我正在嘗試創建一個將在按下鍵盤快捷鍵時處理選定文本的應用程序。 我使用了該方法的一部分來獲取當前選定的文本(似乎沒有其他方法可以從任何應用程序中獲得選定的文本:

string GetSelectedText()
{
    var oldClip = Clipboard.GetText();
    SendKeys.SendWait("^c");
    string selection = Clipboard.GetText();
    Clipboard.SetText(oldClip); // preserve clipboard
    return selection;
}

我首先想到的是使用系統任務欄圖標。 單擊后,圖標將使用上述方法來獲取當前選擇並進行處理。 但是,使用這樣的剪貼板要求應用程序處於焦點狀態,而單擊系統任務欄圖標會使該圖標成為焦點,然后方法才能運行。

我的下一個想法是使用全局鍵盤快捷鍵。 我遇到了有關獲取全局熱鍵的文章 ,實際上它可以監聽鍵盤組合,但只能在一個應用程序中,這不是我想要的-我想在任何應用程序中監聽鍵盤快捷鍵。

我已經讀過這篇文章 (來自此答案 ), 該文章確實設法在任何應用程序中偵聽鍵,但一次卻僅設法偵聽一個鍵(例如,單個LControl或Shift或C等)。

我的問題是:無論焦點在什么應用程序上,我如何都可以監聽鍵的某種組合,並執行上面的方法來獲取當前選擇?

如果有更好的方法來檢索當前選擇,或者可以在應用程序不處於焦點狀態時進行選擇,則也將給出解釋如何可能的答案; 但是,主要重點是監聽所有應用程序中的鍵盤組合。

我最終使用了Chris Dunaway提到的庫MouseKeyboardLibrary

正如您可能在他提出的評論主題中看到的那樣,它最初對我不起作用。 原來,由於無效的模塊IntPtr ,該庫對我IntPtr.Zero ,因此我將庫更改為使用IntPtr.Zero ,在此之前它使用Marshal來獲取模塊指針,這使其按預期運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM