VM中實現手機震動功能的類
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
namespace AnotherTodayScreenItem.Utl
{
///
/// 手機震動功能
///
class ShakeOperation
{
/*
利用C#開發Pocket PC程式,想在程式裡呼叫裝置的震動功能,至少再wm5中還沒有這樣的API,上網查了不少例子,都只能再c++下呼叫。既然這樣,那唯一的辦法是運用P/Invoke了,在“coredll.dll”中有這樣兩個函式
BOOL WINAPI NLedGetDeviceInfo( UINT nInfoId, void *pOutput );
BOOL WINAPI NLedSetDevice( UINT nDeviceId, void *pInput );
NLedGetDeviceInfo是獲得LED數量,NLedSetDevice是來設定LED狀態的,我們只有通過它來啟動或者關閉Pocket PC裝置的震動與否。
說明一下:一般PPC裝置都有兩個LED,一個就是揚聲器0(Radio LED),另一個則是振動器1(Vibrator)了。
在我的PPC裝置上發現第二個是Vibrator,不知道是不是所有的PPC都是這樣子的。後來查到“On the HTC Himalaya the vibration device is implemented at index 1。”也就是HTC核心的都是1.*/
class NLED_SETTINGS_INFO
{
public uint LedNum;
public uint OffOnBlink;
public int TotalCycleTime;
public int OnTime;
public int OffTime;
public int MetaCycleOn;
public int MetaCycleOff;
}
class NLED_COUNT_INFO
{
public int cLeds;
}
const int NLED_COUNT_INFO_ID = 0;
const int NLED_SETTINGS_INFO_ID = 2;
//振動器狀態
public enum Status
{
FF = 0,
ON,
BLINK
}
/**/
///
/// 獲得LED個數
///
[DllImport("coredll.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode,
EntryPoint = "NLedGetDeviceInfo", PreserveSig = true, SetLastError = true)]
extern static bool NLedGetDeviceInfo(uint nID, NLED_COUNT_INFO pOutput);
/**/
///
/// 設定LED狀態
///
[DllImport("coredll.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode,
EntryPoint = "NLedSetDevice", PreserveSig = true, SetLastError = false)]
extern static bool NLedSetDevice(uint nID, NLED_SETTINGS_INFO pOutput);
/**/
///
/// 獲得LED個數
///
public int GetLedCount()
{
int wCount = 0;
NLED_COUNT_INFO nci = new NLED_COUNT_INFO();
if (NLedGetDeviceInfo(NLED_COUNT_INFO_ID, nci))
{
wCount = nci.cLeds;
}
return wCount;
}
/**/
///
/// 設定LED狀態
///
/// Led(1/0),一般是1,即第二個LED
/// 狀態
public void SetLedStatus(int wLed, Status wStatus)
{
NLED_SETTINGS_INFO nsi = new NLED_SETTINGS_INFO();
nsi.LedNum = (uint)wLed;
nsi.OffOnBlink = (uint)wStatus;
NLedSetDevice(NLED_SETTINGS_INFO_ID, nsi);
}
/**/
///
/// 設定LED狀態
///
/// Led(1/0)
/// 狀態
/// 持續時間
public void SetLedStatus(int wLed, Status wStatus, int millisecondsTimeout)
{
this.SetLedStatus(wLed, wStatus);
System.Threading.Thread.Sleep(millisecondsTimeout);
//關閉震動
NLED_SETTINGS_INFO nsi = new NLED_SETTINGS_INFO();
nsi.LedNum = (uint)wLed;
nsi.OffOnBlink = (uint)Status.OFF;
NLedSetDevice(NLED_SETTINGS_INFO_ID, nsi);
}
/**/
///
/// 設定LED狀態
///
/// 狀態
public void SetLedStatus(Status wStatus)
{
NLED_SETTINGS_INFO nsi = new NLED_SETTINGS_INFO();
nsi.OffOnBlink = (uint)wStatus;
//自動查詢震動LED
for (int i = 0; i < this.GetLedCount(); i++)
{
nsi.LedNum = (uint)i;
NLedSetDevice(NLED_SETTINGS_INFO_ID, nsi);
}
}
/**/
///
/// 設定LED狀態
///
/// 狀態
/// 持續時間
public void SetLedStatus(Status wStatus, int millisecondsTimeout)
{
this.SetLedStatus(wStatus);
System.Threading.Thread.Sleep(millisecondsTimeout);
//關閉震動
NLED_SETTINGS_INFO nsi = new NLED_SETTINGS_INFO();
nsi.OffOnBlink = (uint)Status.OFF;
for (int i = 0; i < this.GetLedCount(); i++)
{
nsi.LedNum = (uint)i;
NLedSetDevice(NLED_SETTINGS_INFO_ID, nsi);
}
}
/**/
///
/// 迴圈震動
///
/// 次數
public void CycleVibrate(int times)
{
for (int i = 0; i < times; i++)
{
this.SetLedStatus(Status.ON);
Thread.Sleep(400);
this.SetLedStatus(Status.OFF);
Thread.Sleep(200);
}
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14766526/viewspace-561382/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- js如何實現手機呼叫震動功能JS
- 自己動手實現Java中的StringBuffer類Java
- SQLite中中實現 if not exist 類似功能SQLite
- 實現ABP中Person類的許可權功能
- Android中實現短音訊和震動的一些總結Android音訊
- javascript如何實現類的功能JavaScript
- 在Asp.Net中實現類似DWR的功能ASP.NET
- Python在類中實現swith case功能Python
- 如何實現VM框架中的資料繫結框架
- 手寫一個HTTP框架:兩個類實現基本的IoC功能HTTP框架
- js實現手機網頁滑動JS網頁
- 使用PHP4中的 IntegratedTemplate類實現BLOCK功能 (轉)PHPBloC
- 臭名昭著的手機驗證碼功能是如何實現的
- html+canvas 實現簽名功能-手機觸控HTMLCanvas
- PostgreSQL類似OracleMERGE功能的實現SQLOracle
- 手機QQ NFC功能怎麼使用?手機QQ中的NFC功能開啟使用教程
- Android QMUI實戰:實現APP換膚功能,並自動適配手機深色模式AndroidUIAPP模式
- 用 hyperf websocket 實現,類似 qq 單機登入功能Web
- 動手實現程式碼虛擬機器虛擬機
- 設定手機開機就啟動程式的類
- JVM效能最佳化 —— 類載入器,手動實現類的熱載入JVM
- Vue中實現輸入框的自動補全功能Vue
- Windows Phone 7 開發 31 日談——第12日:使手機震動Windows
- 手動實現KVO
- 手動實現PromisePromise
- Python手機開發呼叫DLL實現部分ADB功能Python
- 實現類似IE的列印網頁功能 (轉)網頁
- scala中的匿名子類實現
- motorola手機中在主類中響應其它類中的按鈕訊息 (轉)
- Html5實現手機九宮格密碼解鎖功能HTML密碼
- 情趣震動遙控智慧情趣解決方案/手機連線遠端遙控
- 自己動手實現Android中的三級快取框架Android快取框架
- JSP中實現遮蔽次的功能JS
- 各類遊戲均有不同沉浸感,北通宙斯2扳機震動帶來的臨場感遊戲
- 檢測移動裝置(手機)的PHP類庫PHP
- 自己動手實現OkHttpHTTP
- 手動實現 DI 容器
- VB.NET中實現"關機/休眠/重啟/登出"的類 (轉)