【Windows 10 應用開發】輸入類比

來源:互聯網
上載者:User

標籤:broker   oar   微軟   onclick   賦值   檔案   檔案中   接收   span   

---恢複內容開始---

Input Injection 直譯為:輸入注入。通俗的譯法為:類比輸入。此注入行為可以類比以下幾種輸入行為:

1、鍵盤按鍵。

2、滑鼠。

3、觸控。

4、書寫筆輸入。

5、快速鍵。這個有限制,僅限於如按 Win 鍵、後退鍵。

 

支援輸入行為注入的API都在 Windows.UI.Input.Preview.Injection 命名空間下,命名空間帶有 【Preview】字樣,估計這個功能還在試運行階段。

這個所謂的注入功能,簡單地說就是可以在UWP應用中類比鍵盤輸入、滑鼠操作等行為,當然,根據UWP的安全性方案,不可能像過去 Win 32 那樣讓你到處亂注,在UWP中,你只能注入當前進程中的UI行為,意思你懂的,不用多說,就是你的應用只能幹你的事,不要搔擾別人。

 

老周個人覺得這個注入 API 沒什麼用,不過既然 SDK 中有,咱們就瞭解一下吧。

 

由於這堆 API 是受限制的,所以很多朋友嘗試調用,結果發生了異常。好,先賣個關子,後文再談。

 

還是老規矩,先給大夥說說怎麼用。其實也很簡單,核心類是 InputInjector, 這個類你不能調用建構函式,要使用它,你要調用靜態方法 TryCreate ,調用後會返回一個 InputInjector 執行個體。

然後,你可以根據需要調用以下方法來發送輸入行為。

1、InjectTouchInput,類比手指觸控行為,參數是一組 InjectedInputTouchInfo 執行個體,每個 InjectedInputTouchInfo 執行個體代表一次觸控,主要參數有觸控點座標,角度(比如雙指旋轉,方向為逆時針),力度。

2、InjectMouseInput,類比滑鼠。方法參數由一組 InjectedInputMouseInfo 對象組成,單個 InjectedInputMouseInfo 對象描述滑鼠座標、左鍵按下或者彈起,等等。

3、InjectPenInput,類比筆的輸入(如電磁筆),資料由一個 InjectedInputPenInfo 對象描述,如筆尖按下的位置等。

4、InjectKeyboardInput,類比鍵盤輸入,資料由一組 InjectedInputKeyboardInfo 對象描述,對數內容大夥都能猜到,當然就跟要按下的鍵的虛鍵碼有關。

 

好,下面老周弄個類比鍵盤輸入的樣本。

        <StackPanel Margin="20">            <TextBox Name="txt" />            <StackPanel Margin=" 2,15" Orientation="Horizontal">                <Button Content="A" Style="{StaticResource btnst}" Click="OnClick"/>                <Button Content="B" Style="{StaticResource btnst}" Click="OnClick" />                <Button Content="C" Style="{StaticResource btnst}" Click="OnClick" />                <Button Content="D" Style="{StaticResource btnst}" Click="OnClick" />                <Button Content="E" Style="{StaticResource btnst}" Click="OnClick" />                <Button Content="F" Style="{StaticResource btnst}" Click="OnClick" />                <Button Content="G" Style="{StaticResource btnst}" Click="OnClick" />            </StackPanel>        </StackPanel>

介面沒什麼玄機,一個 TextBox 當然是用來接收輸入的,其他一串 Button 當然是類比鍵盤按鈕。

這些按鈕都共用同一個Click事件處理方法——OnClick。

 

接下來是寫處理代碼。

首先,在頁面類層級聲明變數。

     InputInjector injector = null;      ……     injector = InputInjector.TryCreate();

隨後處理Click事件。

        private void OnClick(object sender, RoutedEventArgs e)        {            Button btn = (Button)sender;            string content = btn.Content as string;            char c = content[0];            InjectedInputKeyboardInfo keyinfo = new InjectedInputKeyboardInfo();            keyinfo.VirtualKey = (ushort)c;            InjectedInputKeyboardInfo[] infos =            {                keyinfo            };            // 讓文字框獲得鍵盤焦點,不然輸不進去            txt.Focus(FocusState.Keyboard);            injector.InjectKeyboardInput(infos);        }

這段代碼也很簡單,一排按鈕,它們的Content屬性分別是字母A B C D E F G,當按鈕被點擊後,取出這個字元,並用 Char 類型表示,為啥要用它呢,這是為了可以轉換為整數值,因為鍵碼實際是字元的ASCII碼。

得到鍵碼後,賦值給 InjectedInputKeyboardInfo 對象的 VirtualKey 屬性,就指定了要按下哪個鍵了。

這裡有一點各位要注意,就是在你發送輸入行為前一定要加這一行。

txt.Focus(FocusState.Keyboard);

你想啊,要類比鍵盤把字元輸入到輸入框中,所以你得先確保這個輸入框已經獲得鍵盤焦點。

 

樣本完成後,你一定會興高采烈地運行,結果……

 

想哭吧? 別哭,你又不是林妹妹,哭什麼。

此時你一查 SDK 文檔,一拍腦子,是了,這麼木馬般的行為怎麼輕易調用呢,一定要配置資訊清單檔。這種進階行為需要在資訊清單檔中引入這個命名空間:

http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities

然後,你看了文檔,知了,要加入這個聲明:

  <Capabilities>    <Capability Name="internetClient" />    <restcap:Capability Name="inputInjection" />  </Capabilities>

是的,這個思路也沒有錯,而且,如果你的應用要提交到市集的話,也要這樣聲明。

 

然而,當你再次啟動並執行時候,你又想哭了。

 

這TMD怪了,怎麼還是無許可權訪問呢,因為你懂的,太敏感的行為,你是得到市集上申請合作,才能使用的。

是不是就不能用了呢。其實不是的,下面老周告訴你答案。

 

你應該把 Capability 的 Name 改為 inputInjectionBrokered。就是這樣改。

  <Capabilities>    <restcap:Capability Name="inputInjectionBrokered" />  </Capabilities>

這個秘密老周忍不住告訴大夥了,老周花了五毛錢買通了微軟的Team Dev得到了這個秘密。

 

好,這樣改了以後,你一定會微笑著面對生活的,看看效果。

 

 驚喜吧。

 

驚喜完了之後,老周告訴你一個壞訊息,這樣處理後是不能提交到市集的

 

好了,老周就分享到這裡了,該開飯了,今天晚上大廚子阿強要請我和幾個哥們吃飯,他老人家親自下廚。所以,這博文該收尾了。

範例程式碼下載:http://files.cnblogs.com/files/tcjiaan/inputInjectionSample.zip

 

【Windows 10 應用開發】輸入類比

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.