Csharp/CSharp Tutorial/Windows/Bluetooth
Bluetooth Demo
<source lang="csharp">using System; using System.Runtime.InteropServices; using System.Runtime.ConstrainedExecution; using System.Security; using System.Security.Permissions; using System.Text; using Microsoft.Win32.SafeHandles;
// // Matches Win32 BLUETOOTH_FIND_RADIO_PARAMS // [StructLayout( LayoutKind.Sequential )] class BluetoothFindRadioParams {
public BluetoothFindRadioParams() { dwSize = 4; } public UInt32 dwSize;
} // // Matches Win32 BLUETOOTH_RADIO_INFO // [StructLayout( LayoutKind.Sequential,
CharSet = CharSet.Unicode )]
struct BluetoothRadioInfo {
public const int BLUETOOTH_MAX_NAME_SIZE = 248; public UInt32 dwSize; public UInt64 address; [MarshalAs( UnmanagedType.ByValTStr, SizeConst = BLUETOOTH_MAX_NAME_SIZE )] public string szName; public UInt32 ulClassOfDevice; public UInt16 lmpSubversion; public UInt16 manufacturer;
} // // Safe Bluetooth Enumeration Handle // [SecurityPermission( SecurityAction.Demand,
UnmanagedCode = true )]
sealed public class SafeBluetoothRadioFindHandle
: SafeHandleZeroOrMinusOneIsInvalid
{
private SafeBluetoothRadioFindHandle() : base( true ) { } override protected bool ReleaseHandle() { return BluetoothFindRadioClose( handle ); } [DllImport( "Irprops.cpl" )] [ReliabilityContract( Consistency.WillNotCorruptState, Cer.Success )] [SuppressUnmanagedCodeSecurity] private static extern bool BluetoothFindRadioClose( IntPtr hFind );
} public class EntryPoint {
private const int ERROR_SUCCESS = 0; static void Main() { SafeFileHandle radioHandle; using( SafeBluetoothRadioFindHandle radioFindHandle = BluetoothFindFirstRadio(new BluetoothFindRadioParams(), out radioHandle) ) { if( !radioFindHandle.IsInvalid ) { BluetoothRadioInfo radioInfo = new BluetoothRadioInfo(); radioInfo.dwSize = 520; UInt32 result = BluetoothGetRadioInfo( radioHandle, ref radioInfo ); if( result == ERROR_SUCCESS ) { // Let"s send the contents of the radio info to the // console. Console.WriteLine( "address = {0:X}", radioInfo.address ); Console.WriteLine( "szName = {0}", radioInfo.szName ); Console.WriteLine( "ulClassOfDevice = {0}", radioInfo.ulClassOfDevice ); Console.WriteLine( "lmpSubversion = {0}", radioInfo.lmpSubversion ); Console.WriteLine( "manufacturer = {0}", radioInfo.manufacturer ); } radioHandle.Dispose(); } } } [DllImport( "Irprops.cpl" )] private static extern SafeBluetoothRadioFindHandle BluetoothFindFirstRadio( [MarshalAs(UnmanagedType.LPStruct)] BluetoothFindRadioParams pbtfrp, out SafeFileHandle phRadio ); [DllImport( "Irprops.cpl" )] private static extern UInt32 BluetoothGetRadioInfo( SafeFileHandle hRadio, ref BluetoothRadioInfo pRadioInfo );
} /*Quote from: Book Accelerated C# 2005
* By Trey Nash * ISBN: 1-59059-717-6 * 432 pp. * Published: Aug 2006 * Price: $39.99
- /</source>