记录一下用到的C#在WinCE平台上的相关技巧备查
1。C#在WinCE上实现透明图片
1
2
3
4
5
6
7
8
9
|
using
System.Drawing.Imaging;
public
static
void
DrawImageTransparent(Graphics gx, Image image, Rectangle destRect)
{
ImageAttributes imageAttr =
new
ImageAttributes();
Color transpColor = ((Bitmap)image).GetPixel(image.Width - 1, image.Height - 1);
imageAttr.SetColorKey(transpColor, transpColor);
gx.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAttr);
}
|
2。WinCE上播放声音文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
public
enum
Flags
{
SND_SYNC = 0x0000,
/* play synchronously (default) */
SND_ASYNC = 0x0001,
/* play asynchronously */
SND_NODEFAULT = 0x0002,
/* silence (!default) if sound not found */
SND_MEMORY = 0x0004,
/* pszSound points to a memory file */
SND_LOOP = 0x0008,
/* loop the sound until next sndPlaySound */
SND_NOSTOP = 0x0010,
/* don't stop any currently playing sound */
SND_NOWAIT = 0x00002000,
/* don't wait if the driver is busy */
SND_ALIAS = 0x00010000,
/* name is a registry alias */
SND_ALIAS_ID = 0x00110000,
/* alias is a predefined ID */
SND_FILENAME = 0x00020000,
/* name is file name */
SND_RESOURCE = 0x00040004
/* name is resource name or atom */
}
[DllImport(
"CoreDll.DLL"
, EntryPoint =
"PlaySound"
, SetLastError =
true
)]
public
extern
static
int
WCE_PlaySound(
string
szSound, IntPtr hMod,
int
flags);
/// <summary>
/// 同步播放声音文件
/// </summary>
/// <param name="filename"></param>
public
static
void
PlaySYNCSound(
string
filename)
{
if
(!
string
.IsNullOrEmpty(filename))
{
if
(File.Exists(filename))
{
WCE_PlaySound(filename, IntPtr.Zero, (
int
)(SendClass.Flags.SND_SYNC | SendClass.Flags.SND_FILENAME));
}
}
}
/// <summary>
/// 异步播放声音文件
/// </summary>
/// <param name="filename"></param>
public
static
void
PlaySound(
string
filename)
{
if
(!
string
.IsNullOrEmpty(filename))
{
if
(File.Exists(filename))
{
WCE_PlaySound(filename, IntPtr.Zero, (
int
)(SendClass.Flags.SND_ASYNC | SendClass.Flags.SND_FILENAME));
}
}
}
|
3。获取 / 设置WinCE系统音量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/// <summary>
/// 获取系统音量
/// </summary>
/// <returns></returns>
public
static
int
GetVolume()
{
// By the default set the volume to 0
uint
CurrVol = 0;
// At this point, CurrVol gets assigned the volume
SendClass.Common.waveOutGetVolume(IntPtr.Zero,
ref
CurrVol);
// Calculate the volume
ushort
CalcVol = (
ushort
)(CurrVol & 0x0000ffff);
// Get the volume on a scale of 1 to 20 (to fit the trackbar)
return
CalcVol / (
ushort
.MaxValue / 20);
}
/// <summary>
/// 设置系统音量
/// </summary>
/// <param name="value">要设置的音量值</param>
public
static
void
SetVolume(
int
value)
{
int
volume = CalcVolumeValue(value);
SendClass.Common.waveOutSetVolume(IntPtr.Zero, (
uint
)volume);
RegistryKey hUSER = Registry.CurrentUser.OpenSubKey(
@"ControlPanel\Volume"
,
true
);
hUSER.SetValue(
"Volume"
, volume, RegistryValueKind.DWord);
hUSER.Flush();
hUSER.Close();
}
private
static
int
CalcVolumeValue(
int
value)
{
// Calculate the volume that's being set
int
NewVolume = (
ushort
.MaxValue * value / 20);
// Set the same volume for both the left and the right channels
return
((NewVolume & 0x0000ffff) | (NewVolume << 16));
}
|
4。设定WinCE屏幕背光变暗的等待时间,以及唤醒屏幕背光
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
public
enum
EventFlags
{
EVENT_PULSE = 1,
EVENT_RESET = 2,
EVENT_SET = 3
}
[DllImport(
"coredll.dll"
)]
public
static
extern
IntPtr CreateEvent(IntPtr lpEventAttributes,
bool
bManualReset,
bool
bInitialState, String lpName);
[DllImport(
"coredll.dll"
)]
private
static
extern
void
EventModify(IntPtr h,
int
p);
[DllImport(
"coredll.dll"
)]
public
static
extern
void
CloseHandle(IntPtr h);
public
static
void
CreateChangeEvent(String EventName,
bool
bInitialState)
{
IntPtr hEvent = IntPtr.Zero;
try
{
hEvent = CreateEvent(IntPtr.Zero,
false
, bInitialState, EventName);
if
(hEvent != IntPtr.Zero)
{
EventModify(hEvent, (
int
)EventFlags.EVENT_SET);
}
}
catch
{ }
finally
{
CloseHandle(hEvent);
}
}
/// <summary>
/// 设定背光超时时间
/// </summary>
/// <param name="Seconds">背光超时时间(秒)</param>
/// <param name="IsAC">设定交流供电还是电池供电</param>
/// <returns></returns>
public
static
bool
SetBackLightTimeOut(
int
Seconds,
bool
IsAC)
{
Boolean returnvalue =
false
;
try
{
using
(RegistryKey key = Registry.CurrentUser.OpenSubKey(
"ControlPanel\\Backlight"
,
true
))
{
if
(key !=
null
)
{
if
(IsAC)
{
key.SetValue(
"ACTimeout"
, Seconds, RegistryValueKind.DWord);
key.SetValue(
"UseExt"
, 1, RegistryValueKind.DWord);
}
else
{
key.SetValue(
"BatteryTimeout"
, Seconds, RegistryValueKind.DWord);
key.SetValue(
"UseBattery"
, 1, RegistryValueKind.DWord);
}
// 创建事件通知
CreateChangeEvent(
"BackLightChangeEvent"
,
true
);
}
else
returnvalue =
false
;
}
}
catch
{
returnvalue=
false
;
}
return
returnvalue;
}
/// <summary>
/// 如果屏幕背光是变暗的状态,则亮起屏幕背光
/// </summary>
public
static
void
SetBackLightOn()
{
CreateChangeEvent(
"BackLightChangeEvent"
,
false
);
}
|