C# 實現簡單的鍵盤協助工具功能及思路

來源:互聯網
上載者:User

OK,剛看到C#Winform實現簡單的虛擬鍵盤這個博文,想起前段時間做的一個功能簡單的小輔助程式【功能:實現一表單始終置頂,但不佔用焦點。對於需要多次重複輸入的字串,實現了滑鼠點擊即可在外部程式輸入】。

然後就回想下思路留作曾經存在的痕迹(勿噴)。

最初代碼和思路與上面部落格內容所差無幾;先發原來的代碼:

 1         protected override CreateParams CreateParams   2         { 3             get 4             { 5                 const int WS_EX_NOACTIVATE = 0x08000000; 6  7                 CreateParams cp = base.CreateParams; 8                 cp.ExStyle |= WS_EX_NOACTIVATE; 9                 return cp;10             }11         }

主要實現表單始終置前但不佔用焦點,並向外部程式發送字串!

在相應事件處理中添加:SendKeys.Send("some characters");

但有一點兒,也是實現這個小程式中遇到的最大的麻煩:SendKeys.Send()不能發送漢字,會被表單IME先行處理,無奈……

解決思路:起初,我是想通過控制IME來實現:主要使用 InputLanguage.CurrentInputLanguage 屬性,但後來發現IME為不同的視窗儲存的是不同的設定,因此不能在一個程式裡面設定另外一個程式的IME狀態(通過低層API可能實現),同時也找了很多其他API,都沒法實現(或者我沒找到);【很有可能通過 SystemParametersInfo 可以實現】(在一些地方提了下問題,呵呵,不過當再次看到回答的時候,博友給出思路的時候已經想到了,並且問題已經解決了……)

後來換了下思路,調用系統剪貼簿實現:

1 Clipboard.SetText(“some characters”);2 3 SendKeys.Send("^v");    //類比Ctrl+V:

因為程式限制,所以不能儲存原剪貼簿內容,在其他地方使用時建議最好在設定剪貼簿之前儲存剪貼簿內容:

1 IDataObject idata = Clipboard.GetDataObject();2 3 Clipboard.SetText(some characters);4 SendKeys.Send("^v");5 6 Clipboard.SetDataObject(idata);

程式表單是要向外部活動表單來發送字串,所以無法擷取目標表單控制代碼,就沒法用SendMessage(),代替的是類比按鍵SendKeys.Send()或SendKeys.SendWait(),當然,用keyboard_event也可以,但這些都是類比按鍵,是會被目標表單的IME處理的。

使用 GetForegroundWindow 找不到相應表單控制代碼……

有點遺憾就是:在移動表單位置的時候,沒有留影子,主要是這個函數的結果:protected override CreateParams CreateParams  ,但一直找不到解決方案……

 

本文地址:http://www.cnblogs.com/Interkey/archive/2013/02/02/2889735.html

 

內容很亂,僅做參考,可提意見,但勿噴~

 

學東西,要主學其思想,不能只學代碼;代碼是人家的,思想才是自己的。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.