Windows Mobile Profil Ayarı

Windows Mobile  yazılım geliştirici arkadaşlar için bir sorundan bahsetmek istiyorum.

Mobil yazılım geliştirirken Standart ve Professional sürümleri olan Mobil işletim sistemi için ayrı ayrı kütüphaneleri kullanırız.

Örneğin; Standart sürümde Profil bilgilerini ( Normal, Toplantı, Sessiz ) PhoneProfileName( ) yapısı ile öğrenebilir ve programınız içerisinde kullanabilirsiniz.

Fakat bu Professional sürüm için bu şekilde olmuyor. Herkes bunu bu şekilde olacağını zannediyor, hatta şöyle ki ;

” Professional sürüm için Profil bilgisini nasıl alırım ? ” şeklindek bir soru yönelttiğimde birçok MVP’ye ( Türkiye dekiler için söylüyorum ). Bana cevapları tabii ki PhoneProfileName( ) ile yapabilirsin olmuştur.

Sevgili mobil severler bu bilinenin akisne yukarıda söz ettiğim yapı ile kesinlikle gerçekleştirilemiyor. Neden derseniz Professional sürüm registry sinde PhoneProfileName ile alakalı bir kayıt yer almıyor olması.

Kütüphanelerde oluşturulan yapıları kullanabilmemiz için registry de mutlaka kayıtları olması gerekmekte veya WIN32 yapılarıyla dönüştürülmüş olmalı.

İşte Professional sürüm için Profil işlemlerini gerçekleştirmek amacıyla WIN32 içerisindeki SNDFILEINFO yapısından SndSetSound( ) u çağırmakla yapılabiliyor.

Aşağıda bunun ile alaklı yazılmış kodları sizlerle paylaşıyorum.

Herkese kolay gelsin…

Orjinal kodlar

public static class RingerNotification {
private static SNDFILEINFO mOldSoundFileInfo = new SNDFILEINFO();

private enum SoundEvent {
All = 0,
RingLine1,
RingLine2,
KnownCallerLine1,
RoamingLine1,
RingVoip
}

public enum SoundType {
On = 0,
File = 1,
Vibrate = 2,
None = 3
}

private struct SNDFILEINFO {
[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 260 )]
public string szPathNameNative;

[MarshalAs( UnmanagedType.ByValTStr, SizeConst = 260 )]
public string szDisplayNameNative;

public SoundType SstType;
}

[DllImport( "aygshell.dll", SetLastError = true )]
private static extern uint SndSetSound( SoundEvent
seSoundEvent, ref SNDFILEINFO pSoundFileInfo, bool fSuppressUI );

[DllImport( "aygshell.dll", SetLastError = true )]
private static extern uint SndGetSound( SoundEvent
seSoundEvent, ref SNDFILEINFO pSoundFileInfo );

public static bool SetRingerVibrate() {
SNDFILEINFO sfi = new SNDFILEINFO();
sfi.SstType = SoundType.Vibrate;
uint ret = SndSetSound( SoundEvent.All, ref sfi, true );
if( ret != 0 ) {
return false;
}
return true;
}

public static bool SetRingerOff() {
SNDFILEINFO sfi = new SNDFILEINFO();
sfi.SstType = SoundType.None;
uint ret = SndSetSound( SoundEvent.All, ref sfi, true );
if( ret != 0 ) {
return false;
}
return true;
}

public static bool SetRingerOn() {
SNDFILEINFO sfi = new SNDFILEINFO();
sfi.SstType = SoundType.On;
uint ret = SndSetSound( SoundEvent.All, ref sfi, true );
if( ret != 0 ) {
return false;
}
return true;
}

public static bool SaveSound() {
uint ret = SndGetSound( SoundEvent.All, ref
mOldSoundFileInfo );
if( ret != 0 ) {
return false;
}
return true;
}

public static bool RestoreSound() {
uint ret = SndSetSound( SoundEvent.All, ref
mOldSoundFileInfo, true );
if( ret != 0 ) {
return false;
}
return true;
}

public static bool GetCurrentSoundType( ref SoundType SoundType ) {
SNDFILEINFO sfi = new SNDFILEINFO();
uint ret = SndGetSound( SoundEvent.All, ref sfi );
SoundType = sfi.SstType;
if( ret != 0 ) {
return false;
}
return true;
}
}