1. 程式人生 > 實用技巧 >今日份靈感開發

今日份靈感開發

前段時間領導安排了個小任務,就是用c#開發個快捷鍵程式,按一下快捷鍵將某裝置的資料採集出來,列印在例如excel表等等的介面上,共有兩個資料先將第一個資料列印在第一個單元格里,再將第二個資料列印在第二個單元格里。

由於最近在搞另一個專案的聯調工作,擱置了那麼幾天,今天拿起來又搞了搞,有一說一,c#這東西我是真的不熟,壓根沒正經學過,前段時間從網上找了幾段程式碼,實現了一些快捷鍵觸發函式、開機自啟動等功能,但是,列印資料這一塊一直不太理想。

上網查了查很多資料都是一些老文章,偶然間發現了兩個比較簡單的辦法。一個就是將資料放入剪下板,再模擬ctrl + v粘出去,另外一個是我自己研究的時候偶然發現直接SendKeys.Send也可以列印文字。

經過實踐發現效果並不好,出現了一些詭異的狀況,例如只打印出了第二個字串、科學計數法表示的資料打印出來與原始資料不一樣... ...頭大... ...

忽然靈光一現,看了一下SendKeys中還有哪些方法,然後發現了Flush方法,用於處理訊息佇列中當前所有windows訊息。

雖然不懂原理,但是冷靜分析一波,這說明存在一個佇列,存放的是windows訊息,那啥是windows訊息呢?莫非就是用SendKeys傳送的那些模擬快捷鍵的指令?

            Clipboard.SetDataObject("資料");
            SendKeys.Send("^v");
            SendKeys.Flush();
            Thread.Sleep(
10); SendKeys.Send("{TAB}"); SendKeys.Flush(); Thread.Sleep(10); Clipboard.SetDataObject("另一個數據"); SendKeys.Send("^v"); SendKeys.Flush();

最終改為這個鬼樣子,將一個windows訊息存入佇列後,立即處理掉,測試了一下發現還是會出現問題。思考了一下,猜測是由於執行太快引起的,有可能是處理不過來那麼多訊息吧?然後加了休眠,最終效果還算理想吧。

感覺自己在亂搞... ...