SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
OpenNETCFを使ってデバイス制御
~ Windows Mobile meet OpenNETCF ~


                    CH3COOH(酢酸)
OpenNETCFとデバイス制御
~ .NET Compact Framework meet OpenNETCF ~



                        CH3COOH(酢酸)
お詫び
• デバイス制御分を多めに考えていましたが、
  原稿を落としたので一部内容を変更してお送
  り致します
自己紹介
• CH3COOH(酢酸) です
• 会計システムと戦っているプログラマ(?)
• 1円単位のお金の調整する
  簡単なお仕事を毎日終電までしてます
• Windows Mobile超可愛いです
• WM6.5端末が発売されるのが今から楽しみ
  です(但し、イーモバイルに限る)
Windows Mobileとは
• Windows CEをベースにした
  携帯電話とPDA向けのプラットフォーム
• 「スマートフォン」と呼ばれる分野の代表格

• 今日はWindows MobileでOpenNETCFから
  デバイスを制御したりするお話をします
Windows Mobile端末に
      搭載されているデバイス
• カメラ
• GPS
• Bluetooth
• 赤外線
• 無線LAN
• 加速度センサ
• バイブレータ
Windows Mobile以外の
     スマートフォン搭載デバイス
• HTC HT-03A(Android)
  – カメラ、無線LAN、Bluetooth、GPS、加速度センサ
• Apple iPhone 3GS
  – カメラ、無線LAN、Bluetooth、GPS、加速度センサ


• 各種端末で大体同じデバイスが載ってる!
Windows Mobileアプリの種類

• ネイティブ(C++)
  – 特定のCPUやOS向けに作られるアプリ
  – Windows MobileだとTodayとか
• Widget(WM6.5~)
  – HTMLとJavaScriptで作るアプリ
  – Windows Mobile 6.5からの新機能
• .NET Compact Framework
  – .NET Frameworkのサブセット
    VB.NETやC#で開発が出来ます
.NET Compact Frameworkで
    サポートされているデバイス
• カメラ
• GPS
• BlueTooth
• 赤外線
• 無線LAN
• 加速度センサ
• バイブレータ
.NET Compact Frameworkからの
        デバイス制御
• .NET Compact Frameworkで、
  未サポートのデバイスを使用するには、
  Win32APIをP/Invokeで呼び出します
• ここではバイブレータを使用するための
  サンプルコードをご紹介します
P/Invokeを使った
                   長~~~いコード(1)
• バイブレータを制御するNLed APIを
  使うのでP/Invokeの定義を行います

Public Class Led

    <DllImport("coredll.dll", SetLastError:=True)> _
    Private Shared Function NLedGetDeviceInfo(ByVal h As UInteger, _
                                ByRef pOutput As NLED_COUNT_INFO) As Boolean
    End Function

    <DllImport("coredll.dll", SetLastError:=True)> _
    Private Shared Function NLedSetDevice(ByVal h As UInteger, _
                              ByRef pOutput As NLED_SETTINGS_INFO) As Boolean
    End Function

    Private Const NLED_COUNT_INFO_ID As UInteger = 0
    Private Const NLED_SETTINGS_INFO_ID As UInteger = 2
P/Invokeを使った
           長~~~いコード(2)
• さきほど定義したNled APIに
  渡す構造体を定義します

  Private Structure NLED_SETTINGS_INFO
     Public LedNum As UInteger
     Public OffOnBlink As Integer
     Public TotalCycleTime As Long
     Public OnTime As Long
     Public OffTime As Long
     Public MetaCycleOn As Integer
     Public MetaCycleOff As Integer
  End Structure

   Private Structure NLED_COUNT_INFO
      Public cLeds As UInteger
   End Structure
P/Invokeを使った
               長~~~いコード (3)
  Public Shared Function GetLedCount() As Integer
    Dim info As New NLED_COUNT_INFO()
    Dim LEDCount As Integer = 0
    If NLedGetDeviceInfo(NLED_COUNT_INFO_ID, info) Then
        LEDCount = CInt(info.cLeds)
    End If
    Return LEDCount
  End Function

  Public Shared Sub SetLedStatus(ByVal ledID As Integer, _
                                 ByVal status As Integer)
     Dim info As New NLED_SETTINGS_INFO()
     With info
       .LedNum = System.Convert.ToUInt32(ledID)
       .OffOnBlink = System.Convert.ToUInt16(status)
     End With
     NLedSetDevice(NLED_SETTINGS_INFO_ID, info)
  End Sub
End Class
P/Invokeを使った
            長~~~いコード (4)
• バイブレートさせるための定義が終わったので、
  ようやくバイブをさせることが出来ます

  Private Sub Button2_Click(ByVal sender As System.Object, _
                            ByVal e As System.EventArgs) _
                            Handles Button2.Click

    ' バイブレーション開始
    LedVibrate.SetLedStatus(1, 1)

    ' 2秒間鳴動させた後、バイブを停止する
    System.Threading.Thread.Sleep(2000)
    LedVibrate.SetLedStatus(1, 0)

  End Sub
OpenNETCFのあるとき

• OpenNETCF.orgのSmart Device Frameworkを
  使えば、面倒な定義が不要になります
• OpenNETCF.WindowsCE.dllを参照し、
  バイブさせるサンプルコードを書いてみました。
OpenNETCFを使った
             短くシンプルなコード
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) _
                          Handles Button1.Click

  ' バイブレーション開始
  Dim led As New OpenNETCF.WindowsCE.Notification.Led()
  led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.On)

  ' 2秒間鳴動させた後、バイブを停止する
  System.Threading.Thread.Sleep(2000)
  led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.Off)

End Sub




• これだけ。
OpenNETCFとは
• .NET Compact Frameworkから
  Windows Mobileを使いやすくする為の
  SharedSource Licenseのクラスライブラリ
OpenNETCFのライセンス形態
• OpenNETCF Shared Source License
  を採用しています
• ソースコードを自分のアプリに組み込まなけ
  れば、無料で使うことができます
• 自分のアプリに組み込んで使う場合は、ライ
  センスを購入する必要があります
他にOpenNETCFで何が出来るの?

• 無線機能の有効・無効化
• LEDの点灯・消灯
• Vibraterの振動
• マイクを使って録音
• etc etc…
無線機能の有効・無効化
• OpenNETCF.WindowsMobile名前空間
• BluetoothRadio クラス
  – Bluetoothデバイスの制御を行います
 ‘ Bluetooth端末を有効にする
 bt.RadioState = OpenNETCF.WindowsMobile.RadioState.On


• WiFiRadio クラス
  – 無線LANデバイスの制御を行います
• PhoneRadio クラス
  – 電話機能の制御を行います
LEDの点灯・消灯
• OpenNETCF.WindowsCE.Notification
  名前空間
• Led クラス
  – LEDの点灯を行ったり、LEDの情報を取得します
 ‘ ID2のLEDを点灯させます
 Dim led As New OpenNETCF.WindowsCE.Notification.Led()
 led.SetLedStatus(2, OpenNETCF.WindowsCE.Notification.Led.LedState.On)



  – バイブレータに振られているIDを指定することで、
    このLEDクラスでもバイブさせる事が出来ます
バイブレータの振動
• OpenNETCF.WindowsMobile名前空間
• Vibrateクラス
  – バイブレータの制御を行います

 ' バイブレート開始
 OpenNETCF.WindowsMobile.Vibrate.Play()

 ' バイブレート停止
 OpenNETCF.WindowsMobile.Vibrate.Stop()
マイクを使って録音
• OpenNETCF.Media.WaveAudio名前空間
• Recorderクラス
    – 音声の録音を行います
‘ 録音を開始する
audioRecorder = new OpenNETCF.Media.WaveAudio.Recorder()
audioRecorder.RecordFor(
         System.IO.File.OpenWrite(filePath),_
         10000, _
         OpenNETCF.Media.WaveAudio.SoundFormats.Stereo16bit44kHz)

' 録音を停止する
audioRecorder.Stop()
もっと何か出来ないの?
• .NET CFで削られているクラスがある!
 – FtpWebRequest クラス
   • OpenNETCF.Net.Ftp 名前空間
 – SmtpCredential クラス
   • OpenNETCF.Net.Mail 名前空間
• 同じく削られたイベントやメソッドも復活!
 – Combobox2
 – Clipboard2
   • OpenNETCF.Windows.Forms 名前空間
もっともっと何か出来ないの!?
• やっぱり携帯電話だから・・・
• 発着信履歴取得
 – Phone クラス
   • OpenNETCF 名前空間
• RSSを読む処理は案外面倒・・・
 – FeedEngine クラスなど
   • OpenNETCF.Rss 名前空間
デバイスを活用した
     ソリューションの提案
• GPSを使った営業支援システム
 – GPSロガーで経路を記録して、
   そのまま営業日報として配信
• カメラを使った出張買取サービス
 – 車の出張買取サービスで査定情報の入力や
   キズなどを撮影したデータを本部に配信
まとめ


  デバイスの制御は面倒くさい!

  .NET CFからのデバイスの制御は
       もっと面倒くさい!!

OpenNETCFを使ってもっと本質の部分に
リソースを投入してみては如何でしょうか
最後に
• Windows Mobile CF プログラミング Tips
 – http://ch3cooh.jp/tips/wm/
 – CFのサンプルコードやP/Invokeを使ったデバイ
   スの操作に関するTipsなどを掲載しています
• スマートフォン勉強会
 – http://smartphone.techtalk.jp/
 – スマートフォン全般の使い方や、アプリケーション
   の開発手法をみんなで学んでいく勉強会です
 – 大阪は奇数月、東京では偶数月に開催してます
• ご清聴ありがとうございました

Weitere ähnliche Inhalte

Mehr von Kenji Wada

20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れるKenji Wada
 
Windows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよWindows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよKenji Wada
 
Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2Kenji Wada
 
Windows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよWindows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよKenji Wada
 
Windows MobileとWeb Api
Windows MobileとWeb ApiWindows MobileとWeb Api
Windows MobileとWeb ApiKenji Wada
 
今更Web Apiにハマりました
今更Web Apiにハマりました今更Web Apiにハマりました
今更Web ApiにハマりましたKenji Wada
 
Windows Mobile de Hello World
Windows Mobile de Hello World Windows Mobile de Hello World
Windows Mobile de Hello World Kenji Wada
 
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングDesign Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングKenji Wada
 

Mehr von Kenji Wada (8)

20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる
 
Windows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよWindows Phone 7 についてGdgd話すよ
Windows Phone 7 についてGdgd話すよ
 
Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2Windows PhoneについてGdgd話すよ Rev 2
Windows PhoneについてGdgd話すよ Rev 2
 
Windows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよWindows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよ
 
Windows MobileとWeb Api
Windows MobileとWeb ApiWindows MobileとWeb Api
Windows MobileとWeb Api
 
今更Web Apiにハマりました
今更Web Apiにハマりました今更Web Apiにハマりました
今更Web Apiにハマりました
 
Windows Mobile de Hello World
Windows Mobile de Hello World Windows Mobile de Hello World
Windows Mobile de Hello World
 
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミングDesign Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
Design Wave Magazine 2008年5月号附録基板を使った お手軽加速度センサプログラミング
 

Kürzlich hochgeladen

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 

Kürzlich hochgeladen (20)

Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 

OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~

  • 2. OpenNETCFとデバイス制御 ~ .NET Compact Framework meet OpenNETCF ~ CH3COOH(酢酸)
  • 3. お詫び • デバイス制御分を多めに考えていましたが、 原稿を落としたので一部内容を変更してお送 り致します
  • 4. 自己紹介 • CH3COOH(酢酸) です • 会計システムと戦っているプログラマ(?) • 1円単位のお金の調整する 簡単なお仕事を毎日終電までしてます • Windows Mobile超可愛いです • WM6.5端末が発売されるのが今から楽しみ です(但し、イーモバイルに限る)
  • 5. Windows Mobileとは • Windows CEをベースにした 携帯電話とPDA向けのプラットフォーム • 「スマートフォン」と呼ばれる分野の代表格 • 今日はWindows MobileでOpenNETCFから デバイスを制御したりするお話をします
  • 6. Windows Mobile端末に 搭載されているデバイス • カメラ • GPS • Bluetooth • 赤外線 • 無線LAN • 加速度センサ • バイブレータ
  • 7. Windows Mobile以外の スマートフォン搭載デバイス • HTC HT-03A(Android) – カメラ、無線LAN、Bluetooth、GPS、加速度センサ • Apple iPhone 3GS – カメラ、無線LAN、Bluetooth、GPS、加速度センサ • 各種端末で大体同じデバイスが載ってる!
  • 8. Windows Mobileアプリの種類 • ネイティブ(C++) – 特定のCPUやOS向けに作られるアプリ – Windows MobileだとTodayとか • Widget(WM6.5~) – HTMLとJavaScriptで作るアプリ – Windows Mobile 6.5からの新機能 • .NET Compact Framework – .NET Frameworkのサブセット VB.NETやC#で開発が出来ます
  • 9. .NET Compact Frameworkで サポートされているデバイス • カメラ • GPS • BlueTooth • 赤外線 • 無線LAN • 加速度センサ • バイブレータ
  • 10. .NET Compact Frameworkからの デバイス制御 • .NET Compact Frameworkで、 未サポートのデバイスを使用するには、 Win32APIをP/Invokeで呼び出します • ここではバイブレータを使用するための サンプルコードをご紹介します
  • 11. P/Invokeを使った 長~~~いコード(1) • バイブレータを制御するNLed APIを 使うのでP/Invokeの定義を行います Public Class Led <DllImport("coredll.dll", SetLastError:=True)> _ Private Shared Function NLedGetDeviceInfo(ByVal h As UInteger, _ ByRef pOutput As NLED_COUNT_INFO) As Boolean End Function <DllImport("coredll.dll", SetLastError:=True)> _ Private Shared Function NLedSetDevice(ByVal h As UInteger, _ ByRef pOutput As NLED_SETTINGS_INFO) As Boolean End Function Private Const NLED_COUNT_INFO_ID As UInteger = 0 Private Const NLED_SETTINGS_INFO_ID As UInteger = 2
  • 12. P/Invokeを使った 長~~~いコード(2) • さきほど定義したNled APIに 渡す構造体を定義します Private Structure NLED_SETTINGS_INFO Public LedNum As UInteger Public OffOnBlink As Integer Public TotalCycleTime As Long Public OnTime As Long Public OffTime As Long Public MetaCycleOn As Integer Public MetaCycleOff As Integer End Structure Private Structure NLED_COUNT_INFO Public cLeds As UInteger End Structure
  • 13. P/Invokeを使った 長~~~いコード (3) Public Shared Function GetLedCount() As Integer Dim info As New NLED_COUNT_INFO() Dim LEDCount As Integer = 0 If NLedGetDeviceInfo(NLED_COUNT_INFO_ID, info) Then LEDCount = CInt(info.cLeds) End If Return LEDCount End Function Public Shared Sub SetLedStatus(ByVal ledID As Integer, _ ByVal status As Integer) Dim info As New NLED_SETTINGS_INFO() With info .LedNum = System.Convert.ToUInt32(ledID) .OffOnBlink = System.Convert.ToUInt16(status) End With NLedSetDevice(NLED_SETTINGS_INFO_ID, info) End Sub End Class
  • 14. P/Invokeを使った 長~~~いコード (4) • バイブレートさせるための定義が終わったので、 ようやくバイブをさせることが出来ます Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button2.Click ' バイブレーション開始 LedVibrate.SetLedStatus(1, 1) ' 2秒間鳴動させた後、バイブを停止する System.Threading.Thread.Sleep(2000) LedVibrate.SetLedStatus(1, 0) End Sub
  • 15. OpenNETCFのあるとき • OpenNETCF.orgのSmart Device Frameworkを 使えば、面倒な定義が不要になります • OpenNETCF.WindowsCE.dllを参照し、 バイブさせるサンプルコードを書いてみました。
  • 16. OpenNETCFを使った 短くシンプルなコード Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click ' バイブレーション開始 Dim led As New OpenNETCF.WindowsCE.Notification.Led() led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.On) ' 2秒間鳴動させた後、バイブを停止する System.Threading.Thread.Sleep(2000) led.SetLedStatus(1, OpenNETCF.WindowsCE.Notification.Led.LedState.Off) End Sub • これだけ。
  • 17. OpenNETCFとは • .NET Compact Frameworkから Windows Mobileを使いやすくする為の SharedSource Licenseのクラスライブラリ
  • 18. OpenNETCFのライセンス形態 • OpenNETCF Shared Source License を採用しています • ソースコードを自分のアプリに組み込まなけ れば、無料で使うことができます • 自分のアプリに組み込んで使う場合は、ライ センスを購入する必要があります
  • 20. 無線機能の有効・無効化 • OpenNETCF.WindowsMobile名前空間 • BluetoothRadio クラス – Bluetoothデバイスの制御を行います ‘ Bluetooth端末を有効にする bt.RadioState = OpenNETCF.WindowsMobile.RadioState.On • WiFiRadio クラス – 無線LANデバイスの制御を行います • PhoneRadio クラス – 電話機能の制御を行います
  • 21. LEDの点灯・消灯 • OpenNETCF.WindowsCE.Notification 名前空間 • Led クラス – LEDの点灯を行ったり、LEDの情報を取得します ‘ ID2のLEDを点灯させます Dim led As New OpenNETCF.WindowsCE.Notification.Led() led.SetLedStatus(2, OpenNETCF.WindowsCE.Notification.Led.LedState.On) – バイブレータに振られているIDを指定することで、 このLEDクラスでもバイブさせる事が出来ます
  • 22. バイブレータの振動 • OpenNETCF.WindowsMobile名前空間 • Vibrateクラス – バイブレータの制御を行います ' バイブレート開始 OpenNETCF.WindowsMobile.Vibrate.Play() ' バイブレート停止 OpenNETCF.WindowsMobile.Vibrate.Stop()
  • 23. マイクを使って録音 • OpenNETCF.Media.WaveAudio名前空間 • Recorderクラス – 音声の録音を行います ‘ 録音を開始する audioRecorder = new OpenNETCF.Media.WaveAudio.Recorder() audioRecorder.RecordFor( System.IO.File.OpenWrite(filePath),_ 10000, _ OpenNETCF.Media.WaveAudio.SoundFormats.Stereo16bit44kHz) ' 録音を停止する audioRecorder.Stop()
  • 24. もっと何か出来ないの? • .NET CFで削られているクラスがある! – FtpWebRequest クラス • OpenNETCF.Net.Ftp 名前空間 – SmtpCredential クラス • OpenNETCF.Net.Mail 名前空間 • 同じく削られたイベントやメソッドも復活! – Combobox2 – Clipboard2 • OpenNETCF.Windows.Forms 名前空間
  • 25. もっともっと何か出来ないの!? • やっぱり携帯電話だから・・・ • 発着信履歴取得 – Phone クラス • OpenNETCF 名前空間 • RSSを読む処理は案外面倒・・・ – FeedEngine クラスなど • OpenNETCF.Rss 名前空間
  • 26. デバイスを活用した ソリューションの提案 • GPSを使った営業支援システム – GPSロガーで経路を記録して、 そのまま営業日報として配信 • カメラを使った出張買取サービス – 車の出張買取サービスで査定情報の入力や キズなどを撮影したデータを本部に配信
  • 27. まとめ デバイスの制御は面倒くさい! .NET CFからのデバイスの制御は もっと面倒くさい!! OpenNETCFを使ってもっと本質の部分に リソースを投入してみては如何でしょうか
  • 28. 最後に • Windows Mobile CF プログラミング Tips – http://ch3cooh.jp/tips/wm/ – CFのサンプルコードやP/Invokeを使ったデバイ スの操作に関するTipsなどを掲載しています • スマートフォン勉強会 – http://smartphone.techtalk.jp/ – スマートフォン全般の使い方や、アプリケーション の開発手法をみんなで学んでいく勉強会です – 大阪は奇数月、東京では偶数月に開催してます