Thứ Sáu, 16 tháng 9, 2016

Device Capabilities trong Windows Store App Development

  Không có nhận xét nào
Ở bài này mình sẽ hướng dẫn các bạn tạo app có tên DeviceTesting, mục đích app này sẽ là kiểm tra có hay không Device Printer, nếu có thì hiện ra danh sách (ID, tên, tình trạng kết nối) nhờ Windows.Devices.Enumeration API.

1, Device là gì?


Device là toàn bộ các thiết bị phần cứng được hoặc chưa được nhận diện, cụ thể ở đây là trong Windows. Ví dụ như: chuột, camera, keyboard, card wifi, ram, cpu, screen,..

2, Enumerating Devices


Windows.Devices.Enumeration và Windows.Devices.Enumeration.Pnp là 2 namespaces liệt kê các device được kết nối hoặc ngắt kết nối. Windows.Devices.Enumeration cung cấp hai phương pháp, cụ thể là FindAllAsync và CreateWatcher để liệt kêê các device.

- FindAllAsync: tìm kiếm điện thoại chỉ một lần thiết bị được kết nối. Điều này sẽ không cập nhật được bất cứ khi nào người dùng thêm hoặc xóa các device

- CreateWatcher: luôn luôn cập nhật và liệt kê các thiết bị bằng cách đẩy thông báo, như người dùng thêm hoặc bỏ các device.

3, Code thôi


Đầu tiên tạo một project rồi.

Mở MainPage.xaml ra code theo hình :)

Lười thì tool copy, paste :))
<Page
x:Class="DeviceTesting.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:DeviceTesting"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<grid Background="Black" x:Name="ContentRoot" Margin="0,25,-29,20">
<textblock FontSize="15" Text="Select Device" Margin="145,25,800,675"/>
<textblock FontSize="15" Text="Class GUID:" Margin="145,175,850,525"/>
<textblock FontSize="15" Name="txtResult" Foreground="White" Margin="379,309,465,383"/>
<listbox Name="lstDevices" Width="400" Margin="375,10,400,600">
<listboxitem Name="WebCam" Content="WebCam"/>
<listboxitem Name="PortDevices" Content="PortDevices"/>
<listboxitem Name="Printer" Content="Printer"/>
</ListBox>
<textblock Name="txtClassGuid" Margin="375,160,400,525"/>
<button Name="btnEnumerate" Content="Enumerate" Margin="375,240,0,438" Click="btnEnumerate_Click" Height="45"/>
<listbox Name="lstResult" Foreground="White" IsEnabled="False" Margin="145,345,30,10" />
</Grid>
</Page>

Code xong thì Design sẽ ra ntn..

Mở MainPage.xaml.cs để code xử lý:

Tool copy, paste
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Devices.Enumeration.Pnp;
using Windows.Devices.Enumeration;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238

namespace DeviceTesting
{
///




/// An empty page that can be used on its own or navigated to within a Frame.
///

public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
lstDevices.SelectionChanged += new SelectionChangedEventHandler(fnDeviceChanged);
}
void fnDeviceChanged(object sender, SelectionChangedEventArgs e)
{
if(lstDevices.SelectedItem == Printer)
{
txtClassGuid.Text = "{0ECEF634-6EF0-472A-8085-5AD023ECBCCD}";
}
}

async void btnEnumerate_Click(object sender, RoutedEventArgs eventArgs)
{
var s = "System.Devices.InterfaceClassGuid:=\"" + txtClassGuid.Text + "\"";
var i = await DeviceInformation.FindAllAsync(s, null);
txtResult.Text = i.Count + " devices found\n\n";

lstResult.Items.Clear();
foreach(DeviceInformation d in i)
{
var id = "Id: " + d.Id;
var name = d.Name;
var isEnavled = "Is Enabled:" + d.IsEnabled;
var item = id + " is \n" + name + " and \n" + isEnavled;
lstResult.Items.Add(item);
}
}

}
}

Xong! Thưởng thức thành quả nào (à nhớ chọn Printer thì mới ra nhé, vì code chỉ demo thôi :))

4, Tài liệu tham khảo


https://msdn.microsoft.com/library/windows/apps/windows.devices.enumeration.aspx
https://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.enumeration.pnp.aspx

Video hướng dẫn bởi Mr.Tuan :)

Không có nhận xét nào :

Đăng nhận xét