2009-11-26 55 views
3

我會製作像Google工具欄翻譯功能的工具,但它是用於桌面的。 我想要做的是 突出顯示任何應用程序中的文本(word,pdf,live messenger等),並通過谷歌翻譯API翻譯,作爲工具提示返回。C#,檢測窗口上選定的文本?

我有關於監控文本的搜索msdn,我只發現使用複製&粘貼和監控剪貼板來勾選事件。

那麼,有什麼想法嗎? 謝謝。

+0

你的意思是你在任何地方選擇一個特定的文本,工具提示會彈出一個翻譯? – Pieter888 2009-11-26 13:04:19

+0

是~~看起來像谷歌工具欄 – Cheung 2009-11-26 14:30:01

回答

3

一個起點是獲得對當前前景窗口的引用。下面的代碼將獲得當前選定的窗口和窗口的標題:

[ DllImport("user32.dll") ] 

static extern int GetForegroundWindow(); 

[ DllImport("user32.dll") ] 
static extern int GetWindowText(int hWnd, StringBuilder text, int count); 

private void GetActiveWindow() 
{ 

const int nChars = 256; 
int handle = 0; 
StringBuilder Buff = new StringBuilder(nChars); 

    handle = GetForegroundWindow(); 

    if (GetWindowText(handle, Buff, nChars) > 0) 
    { 
    this.captionWindowLabel.Text = Buff.ToString(); 
    this.IDWindowLabel.Text = handle.ToString(); 
    } 

} 

你可以運行一個計時器內這樣的代碼:即給用戶10秒內選擇一個窗口。

我不知道如何在窗口中檢索選定的文本,但我會爲你考慮。

+0

謝謝〜它幾乎是我想要的。我想我應該使用熱鍵作爲觸發器,而不是僅僅將鼠標放在單詞上。 – Cheung 2009-11-26 14:36:31

0

我認爲您需要首先獲取當您的程序處於活動狀態時激活的任何窗口的句柄。我的猜測是你需要在這裏查看InteropServices來做到這一點。

使用Windows API。

0

聽起來好像你需要讓你的代碼攔截任何進程的任何窗口句柄,這是它有點複雜,因爲你必須確保你有訪問權限來訪問另一個進程。

說到這一點,我不認爲這是一個好主意,因爲通過在winapi調用中捕獲文本選擇事件,可能會引起另一個進程崩潰,而不會提到事實:您將不得不確定該過程是否選擇了任何文本。我可以給出的最好的方向是......這篇文章是關於如何監視CodeProjecthere的一個過程,這可以是朝正確方向邁出的一步,牢記所使用的代碼是用於.NET 1.0框架。

希望這會有所幫助,祝你好運, 最好的問候, 湯姆。

+0

順便說一句,我應該提到這一點,因爲你的代碼是在一個託管的過程中要小心,攔截和捅另一個可能是非託管過程的手段可能會使經驗有點毛... 保重! – t0mm13b 2009-11-26 13:10:03