wm6 上怎么控制震动

hdp626 2009-05-06 05:33:45
看了下sdk 说windows mobile 6 不支持vibrate API 啊
那要怎么实现类似的功能呢
...全文
428 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
usepc 2009-05-08
  • 打赏
  • 举报
回复
static __inline void SetLED(int nLed,BOOL bOn)
{
NLED_SETTINGS_INFO sInfo;
ZeroMemory(&sInfo,sizeof(NLED_SETTINGS_INFO));
sInfo.LedNum = nLed;
sInfo.OffOnBlink = bOn ? 1 : 0;
NLedSetDevice(NLED_SETTINGS_INFO_ID, &sInfo);
}

void SetLedVibCount(int nLed,int count)
{
for (int i=count;i!=0;i--)
{
SetLED(nLed,TRUE);
Sleep(400);
SetLED(nLed,FALSE);
Sleep(200);
}
}
小李匪盗 2009-05-07
  • 打赏
  • 举报
回复
http://www.devdiv.net/thread-8080-1-3.html
世外涛缘 2009-05-07
  • 打赏
  • 举报
回复
找到了点儿代码,供楼主参考。
C#的代码,要是用C++就直接调用API好了。
public class LedLib
{
private int m_count;
private const int NLED_COUNT_INFO_ID = 0;
private const int NLED_SUPPORTS_INFO_ID = 1;

public LedLib()
{
NLED_COUNT_INFO pOutput = new NLED_COUNT_INFO();
if (!NLedGetDeviceCount(0, ref pOutput))
{
throw new Exception("震动模块初始化错误!");
}
this.m_count = (int)pOutput.cLeds;
}

[DllImport("coredll.dll", EntryPoint = "NLedGetDeviceInfo")]
private static extern bool NLedGetDeviceCount(short nID, ref NLED_COUNT_INFO pOutput);
[DllImport("coredll.dll", EntryPoint = "NLedGetDeviceInfo")]
private static extern bool NLedGetDeviceSupports(short nID, ref NLED_SUPPORTS_INFO pOutput);
[DllImport("coredll.dll")]
private static extern bool NLedSetDevice(short nID, ref NLED_SETTINGS_INFO pOutput);
public void SetLedStatus(uint led, LedState newState)
{
NLED_SETTINGS_INFO pOutput = new NLED_SETTINGS_INFO();
pOutput.LedNum = led;
pOutput.OffOnBlink = (int)newState;
bool flag = NLedSetDevice(2, ref pOutput);
}

public enum LedState
{
Off,
On,
Blink
}

[StructLayout(LayoutKind.Sequential)]
private struct NLED_COUNT_INFO
{
public uint cLeds;
}

[StructLayout(LayoutKind.Sequential)]
private struct NLED_SETTINGS_INFO
{
public uint LedNum;
public int OffOnBlink;
public int TotalCycleTime;
public int OnTime;
public int OffTime;
public int MetaCycleOn;
public int MetaCycleOff;
}

[StructLayout(LayoutKind.Sequential)]
private struct NLED_SUPPORTS_INFO
{
public uint LedNum;
public int lCycleAdjust;
public bool fAdjustTotalCycleTime;
public bool fAdjustOnTime;
public bool fAdjustOffTime;
public bool fMetaCycleOn;
public bool fMetaCycleOff;
}
}





/// <summary>
/// 实现震动
/// </summary>
/// <param name="setTimes">震动毫秒数</param>
public static void Play(int setTimes)
{
try
{
LedLib led = new LedLib();
led.SetLedStatus(1, LedLib.LedState.On);
Thread.Sleep(setTimes);
led.SetLedStatus(1, LedLib.LedState.Off);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
Roy_ly 2009-05-07
  • 打赏
  • 举报
回复
mark,受教了~
czbever 2009-05-07
  • 打赏
  • 举报
回复
HRESULT Vibrate(
DWORD cvn,
const VIBRATENOTE * rgvn,
BOOL fRepeat,
DWORD dwTimeout
);
而对于PPC,你可以使用
BOOL NLedDriverSetDevice(
INT nInfoId,
PVOID pInput
);
在PPC上,震动是以LED灯的形式控制的,你可以使用
BOOL WINAPI NLedGetDeviceInfo(
UINT nInfoId,
void* pOutput
);
得到LED灯的数量,其中最后一盏灯就是震动发生器。

具体细节可以参看Windows mobile 6 documentation中有关Notification LED Drivers的章节。

up
wt0731 2009-05-07
  • 打赏
  • 举报
回复
2楼应该可以帮你
cytlyy 2009-05-06
  • 打赏
  • 举报
回复
这个以前就讨论过,可以参考:http://topic.csdn.net/u/20081019/10/82B01F58-A6D6-4C50-B7F8-8F1A46E8B75D.html

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧