[Windows Mobile]OpenNETCF.Desktop.Communication Library 以及使用範例

  • 30051
  • 0
  • 2013-04-15

OpenNETCF.Desktop.Communication Library 以及使用範例

 

1. 簡介

之前在藍色小舖中,有人發問是否可以利用程式讓行動裝置的檔案複製到電腦中,簡單來說就是運用 Remote API,當時找了幾篇文章(連結放在本文最後),針對此部份,寫個文章整理一下,主要是使用 OpenNETCF Desktop Communication Library,可由 OpenNETCF 網站取得。此 Library 將Microsoft's Remote API (RAPI) 包進去,因為我們可以透過它使用 RAPI 提供的功能,例如本機電腦與行動裝置檔案傳輸、設定登錄檔、取得行動裝置資訊等。

 

2. 使用前的準備作業

2.1 下載

首先到OpenNETCF Desktop Communication Library網站下載,請參考下圖網址與下載位置。

 image

 

2.2 使用 OpenNETCF Desktop Communication Library

新增專案後,選擇加入現有專案,把 OpenNETCF Desktop Communication Library 加入

image image image

 

OpenNETCF Desktop Communication Library重新編譯,取得編譯後的 OpenNETCF.Desktop.Communication.dll,將此檔案加入參考

 image  image  image

最後,在程式碼中 using,就可以開始使用它了


using OpenNETCF.Desktop.Communication;

 

3. OpenNETCF Desktop Communication Library 方法

Connect  建立與裝置的同步連接。

CopyFileFromDevice 將裝置中的檔案複製到 PC。

CopyFileOnDevice 將裝置某個位置的檔案複製到裝置的另一新位置。

CopyFileToDevice 將 PC 中的檔案複製到裝置。

CreateDeviceDirectory 在裝置中創建目錄。

CreateProcess 啟動裝置中的應用程式。

DeleteDeviceFile 刪除裝置中的檔案。

DeviceFileExists 檢查裝置中是否存在檔案。

Disconnect  中斷與裝置的連接。

EnumFiles  提供與 FileName 參數提供的條件相匹配的 FileInformation 清單。

GetDeviceCapabilities 檢索裝置的特定裝置訊息。

GetDeviceFileAttributes 檢索特定裝置檔案的屬性。

GetDeviceFileSize 檢索裝置檔案的大小,以位元組為單位。

GetDeviceFileTime 檢索裝置檔案的日期時間。

GetDeviceMemoryStatus 檢索裝置的記憶體狀態。

GetDeviceSystemFolderPath 檢索到裝置系統檔案夾的路徑。

GetDeviceSystemInfo 檢索裝置的系統詳細訊息。

GetDeviceSystemPowerStatus 檢索裝置的電源狀態。

GetDeviceVersion 檢索裝置的作業系統版本。

MoveDeviceFile 將現有裝置檔案移到或重命名到一個新位置。

RemoveDeviceDirectory 刪除裝置中的目錄。

SetDeviceFileAttributes 設定裝置中檔案的屬性。

SetDeviceFileTime 設定裝置中檔案的日期時間。

 

 

4. 範例

4.1 裝置檔案複製到本機電腦

程式碼


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

using OpenNETCF.Desktop.Communication;

namespace WindowsFormsRAPI
{
    public partial class Form1 : Form
    {
        RAPI m_rapi; // 宣告 RAPI 物件 m_rapi
        public Form1()
        {
            InitializeComponent();
            m_rapi = new RAPI();  // m_rapi 實例化 
        }

        // 連線
        private void btnConnect_Click(object sender, EventArgs e)
        {
            m_rapi.Connect(true);  // 建立與裝置的同步連接
        }

        // 斷線
        private void btnDisConnect_Click(object sender, EventArgs e)
        {
            m_rapi.Disconnect();  // 中斷與裝置的連接
        }

        // 將 PC 中的檔案複製到裝置
        private void btnCopyToDev_Click(object sender, EventArgs e)
        {
            try
            {
                // 判斷是否連線
                if (!m_rapi.Connected)
                {
                    MessageBox.Show("尚未與裝置連線!");
                    return;
                }
                m_rapi.CopyFileToDevice(@"C:\PDAFile.txt", @"\My Documents\PDAFile.txt", true); // PC的檔案複製到裝置
            }
            catch ( Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

 

執行結果

image

 

4.2 將裝置中的檔案複製到 PC

將 4.1 的程式多加 Button 控制項,用以將 4.1 從本機複製到裝置的檔案,複製回本機電腦中,程式碼如下


        // 將裝置中的檔案複製到 PC
        private void btnCopyToPC_Click(object sender, EventArgs e)
        {
            try
            {
                // 判斷是否連線
                if (!m_rapi.Connected)
                {
                    MessageBox.Show("尚未與裝置連線!");
                    return;
                }
                m_rapi.CopyFileFromDevice(@"D:\PDAFile.txt", @"\My Documents\PDAFile.txt", true); // 將裝置中的檔案複製到PC
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

執行結果

image

 

4.3 檢索裝置的電源狀態

多加 Button 控制項,用以顯示裝置目前剩餘的電池百分比,程式碼如下


        private void btnPower_Click(object sender, EventArgs e)
        {
            try
            {
                // 判斷是否連線
                if (!m_rapi.Connected)
                {
                    MessageBox.Show("尚未與裝置連線!");
                    return;
                }
                SYSTEM_POWER_STATUS_EX sps = new SYSTEM_POWER_STATUS_EX();
                m_rapi.GetDeviceSystemPowerStatus(out sps); // 檢索裝置的電源狀態
                MessageBox.Show(sps.BatteryLifePercent.ToString() + "%", "剩餘電池百分比");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }  

SYSTEM_POWER_STATUS 裡面可用的取得的資訊如下圖所示,而程式使用的是 BatteryLifePercent

image

執行結果

image

 

4.4 檢索裝置的系統詳細訊息

多加 Button 控制項,用以顯示裝置最小與最大定址空間,程式碼如下


        // 檢索裝置的系統詳細訊息
        private void btnOSver_Click(object sender, EventArgs e)
        {
            try
            {
                // 判斷是否連線
                if (!m_rapi.Connected)
                {
                    MessageBox.Show("尚未與裝置連線!");
                    return;
                }
                SYSTEM_INFO osv = new SYSTEM_INFO();
                m_rapi.GetDeviceSystemInfo(out osv); // 檢索裝置的系統詳細訊息
                MessageBox.Show("最小定址空間 : " + osv.lpMinimumApplicationAddress.ToString() + " 最大定址空間 : " + 
                    osv.lpMaximumApplicationAddress.ToString(), "定址空間");  // 取得最小與最大定址空間
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }  

執行結果

image

 

4.5 檢索裝置的記憶體狀態

多加 Button 控制項,用以顯示總虛擬記憶體與可用虛擬記憶體,程式碼如下


        // 檢索裝置的記憶體狀態
        private void btnSetTime_Click(object sender, EventArgs e)
        {
            try
            {
                // 判斷是否連線
                if (!m_rapi.Connected)
                {
                    MessageBox.Show("尚未與裝置連線!");
                    return;
                }
                MEMORYSTATUS ms = new MEMORYSTATUS();
                m_rapi.GetDeviceMemoryStatus(out ms); // 檢索裝置的記憶體狀態
                MessageBox.Show("總虛擬記憶體 : " + ms.dwTotalVirtual.ToString() + " 可用虛擬記憶體 : " +
                    ms.dwAvailVirtual.ToString(), "虛擬記憶體");  // 總虛擬記憶體與可用虛擬記憶體
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }             
        }  

image

 

5. 參考

使用 Microsoft's Remote API (RAPI)

[推薦工具]OpenNETCF.Desktop.Communication Library

行動運算的桌面端

如何使用 RAPI 以新增到Windows CE 5.0 裝置上登錄機碼和值