2009-03-06
2009-02-02
.Net CF программное управление bluetooth
Для начала нам нужно подключить пространство имен System.Runtime.InteropServices
Теперь создаем свой класс :
Теперь мы можем попробовать переключить статусы. Например вот так :
using System.Runtime.InteropServices;
Теперь создаем свой класс :
public class Network
{
public enum BluetoothMode
{
Off=0,
Connectable=1,
Discoverable=2
}
[DllImport("BthUtil.dll")]
private static extern int BthGetMode(out BluetoothMode dwMode);
[DllImport("BthUtil.dll")]
public static extern int BthSetMode(BluetoothMode dwMode);
public static String GetBthMode()
{
BluetoothMode mode;
int ret = BthGetMode(out mode);
return mode.ToString();
}
}
Теперь мы можем попробовать переключить статусы. Например вот так :
if (Network.GetBthMode() == "Off") //Проверяем текущее состояние
Network.BthSetMode(Network.BluetoothMode.Connectable); //Переводим в состояние Connectable
else Network.BthSetMode(Network.BluetoothMode.Off); // или же выключаем
Как программно позвонить в WM5, WM6
В Windows Mobile 6 был значительно расширен .Net Compact Framework и то для чего раньше требовалось много шаманство теперь делается в две строчки.
Например чтобы позвонить надо всего лишь подключить пространство имен конструкцией :
А в коде создать экземпляр класса Microsoft.WindowsMobile.Telephony.Phone:
Это очень удобно, но если вы пишете программы под Windows Mobile желательно не ориентироваться только на последнюю версию этой ОС, и обратить внимание еще на предыдущию версию, так как многие девайсы не имеют прошивок на WM6 или же прошивки неоффициальные и не каждый согласиться лишить себя гарантии прошивая непойми что.
Для этого можно подкючить OpenNet CF где уже реализована поддержка необходимых классов. Старая версия фреймворка доступна на бесплатной основе. Покопавшись в ней я выдернул класс отвечающий за звонки.
Для его работы надо подключить Пространство имен System.Runtime.InteropServices.
Размещаем этот класс в собственной библиотеке, подключаем и используем просто:
Возможно этот трюк прокатит и в WM 2003, но я не проверял.
Например чтобы позвонить надо всего лишь подключить пространство имен конструкцией :
using Microsoft.WindowsMobile.Telephony;
А в коде создать экземпляр класса Microsoft.WindowsMobile.Telephony.Phone:
Phone phone = new Phone();
phone.Talk("ваш номер тут");
Это очень удобно, но если вы пишете программы под Windows Mobile желательно не ориентироваться только на последнюю версию этой ОС, и обратить внимание еще на предыдущию версию, так как многие девайсы не имеют прошивок на WM6 или же прошивки неоффициальные и не каждый согласиться лишить себя гарантии прошивая непойми что.
Для этого можно подкючить OpenNet CF где уже реализована поддержка необходимых классов. Старая версия фреймворка доступна на бесплатной основе. Покопавшись в ней я выдернул класс отвечающий за звонки.
Для его работы надо подключить Пространство имен System.Runtime.InteropServices.
using System.Runtime.InteropServices;
public class PhoneTools
{
/// <summary>
/// Make a voice call to the specified number.
/// </summary>
/// <param name="destination">A valid phone number to be dialled.</param>
/// <returns>True if successful else False</returns>
public static bool MakeCall(string destination)
{
return MakeCall(destination, false, null);
}
/// <summary>
/// Make a voice call to the specified number optionally prompting the user before dialling.
/// </summary>
/// <param name="destination">A valid phone number to be dialled.</param>
/// <param name="prompt">If True user will be prompted before call is made, else call will be made without user intervention.</param>
/// <returns>True if successful else False</returns>
public static bool MakeCall(string destination, bool prompt)
{
return MakeCall(destination, prompt, null);
}
/// <summary>
/// Make a voice call to the specified number optionally prompting the user before dialling.
/// </summary>
/// <param name="destination">A valid phone number to be dialled.</param>
/// <param name="prompt">If True user will be prompted before call is made, else call will be made without user intervention.</param>
/// <param name="calledParty">A display name for the party being called.</param>
/// <returns>True if successful else False</returns>
public static bool MakeCall(string destination, bool prompt, string calledParty)
{
//setup structure for native call
MakeCallInfo mci = new MakeCallInfo();
mci.cbSize = 24;
mci.pszDestAddress = Apps.StringToHGlobalUni(destination);
if(calledParty!=null)
{
mci.pszCalledParty = Apps.StringToHGlobalUni(calledParty);
}
if(prompt)
{
mci.dwFlags = CallFlags.PromptBeforeCalling;
}
else
{
mci.dwFlags = CallFlags.Default;
}
//call native function
int result = PhoneMakeCall(ref mci);
//free strings
if(mci.pszDestAddress!=IntPtr.Zero)
{
Apps.FreeHGlobal(mci.pszDestAddress);
}
if(mci.pszCalledParty!=IntPtr.Zero)
{
Apps.FreeHGlobal(mci.pszCalledParty);
}
//check return value
if(result==0)
{
return true;
}
else
{
return false;
}
}
[DllImport("phone.dll", SetLastError = true)]
private static extern int PhoneMakeCall(ref MakeCallInfo ppmci);
//used internally by PhoneMakeCallInfo
private struct MakeCallInfo
{
public int cbSize;
public CallFlags dwFlags;
public IntPtr pszDestAddress;
IntPtr pszAppName;
public IntPtr pszCalledParty;
IntPtr pszComment;
}
/// <summary>
/// Flags which determine the behaviour of the <see cref="M:OpenNETCF.Phone.Phone.MakeCall"/> function.
/// </summary>
private enum CallFlags : int
{
/// <summary>
/// Do not prompt, dial the supplied number.
/// </summary>
Default = 0x00000001,
/// <summary>
/// Prompt the user whether to dial the supplied number.
/// </summary>
PromptBeforeCalling = 0x00000002,
}
}
Размещаем этот класс в собственной библиотеке, подключаем и используем просто:
PhoneTools phone = new PhoneTools();
PhoneTools.MakeCall("ваш номер");
Возможно этот трюк прокатит и в WM 2003, но я не проверял.
Ярлыки:
.net cf,
c#,
development,
phone,
windows mobile,
wm5,
wm6
Подписаться на:
Сообщения (Atom)