今天有个客户在我的MOBILE手机上做开发,遇到个需要检测POWER键RESUME的问题. 他们直接说在应用层检测这个是不可能的.
那么我们就把不可能变成可能, 无非就是熟悉一下微软的游戏规则而已.
下面给出的代码,在整个程序开始时, 调用InitPowerNotify一下, 建立起MSG QUEUE和NOTIFY, 然后开个线程读MSG QUEUE等待RESUME触发. 如果等到RESUME事件, 则在PowerThread的TBD处加入处理代码, 如果程序结束, 那么调用一下EndPowerNotify, 把线程结束掉把HANDLE清理掉.
以下代码在WM6.1上验证过可用。里面我写了很多DBGMSG, 这个是我自己做的一个把LOG写到文件里的函数, 用户可以删掉. 由于程序去检测POWER RESUME, 之前一定会有一次POWER SLEEP, 那么USB线连着VS2005调试就断掉了,所以只能把LOG写到文件里来看,而无法单步调试或把LOG输出到VS2005的OUTPUT窗口.
最后我有个疑问, 在反初始化时, 我调用StopPowerNotifications结果返回值是FALSE, 代表该函数失败,但是立刻GetLastError得到的ERR号却也是0. 有没有高人能够解释一下?
1
#include <windows.h>
2
#include <pm.h>
3
#include <Msgqueue.h>
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
#define QUEUE_ENTRIES 3
6
#define MAX_NAMELEN 200
7
#define QUEUE_SIZE (QUEUE_ENTRIES * sizeof(POWER_BROADCAST) + MAX_NAMELEN)
8
#define MSGQ_NAME TEXT("PowerNotify")
9
#define EXIT_THREAD_MSG 0x12345678
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
static BOOL g_bPowerEnd = FALSE;
12
static HANDLE g_hNoti = NULL;
13
static HANDLE g_hMsgQ = NULL;
14
static HANDLE g_hPowerThread = NULL;
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
DWORD WINAPI PowerThread(PVOID pParam)
18
{
19
BYTE buf[QUEUE_SIZE];
20
DWORD dwRead, dwFlag;
21
22
DBGMSG(ZONE_LOG, (TEXT("++PowerThread\n")));
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
do
25
{
26
if( ReadMsgQueue(g_hMsgQ, &buf, QUEUE_SIZE, &dwRead, 10, &dwFlag) )
27
{
28
POWER_BROADCAST* pBroad = (POWER_BROADCAST*)&buf;
29![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
if(pBroad->Message == PBT_RESUME)
31
{
32
DBGMSG(ZONE_LOG, (TEXT("PowerThread detected RESUME\n")));
33![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
//检测到POWER键按下,系统RESUME
35
//TBD: 把RESUME时的处理写这儿
36
}
37
else if(pBroad->Message == EXIT_THREAD_MSG)
38
{
39
DBGMSG(ZONE_LOG, (TEXT("PowerThread deteced EXIT\n")));
40
g_bPowerEnd = TRUE;
41
break;
42
}
43
else
44
{
45
DBGMSG(ZONE_LOG, (TEXT("PowerNotify detected nothing\n")));
46
}
47
}
48
49
}
50
while(!g_bPowerEnd);
51![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
DBGMSG(ZONE_LOG, (TEXT("--PowerThread\n")));
53![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
return 1;
55
}
56![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
BOOL InitPowerNotify()
58
{
59
BOOL result = FALSE;
60
MSGQUEUEOPTIONS options;
61![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
DBGMSG(ZONE_LOG, (TEXT("++InitPowerNofity\n")));
63![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
memset(&options, 0, sizeof(options));
65![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
if(g_hPowerThread) //等待线程已经存在了,该模块已启动
67
{
68
result = TRUE;
69
goto cleanup;
70
}
71
72
options.dwSize = sizeof(MSGQUEUEOPTIONS);
73
options.dwFlags = MSGQUEUE_ALLOW_BROKEN;
74
options.dwMaxMessages = QUEUE_ENTRIES;
75
options.cbMaxMessage = sizeof(POWER_BROADCAST) + MAX_NAMELEN;
76
options.bReadAccess = TRUE;
77![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
g_hMsgQ = CreateMsgQueue(MSGQ_NAME, &options);
79![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
if(!g_hMsgQ)
81
{
82
ASSERT(0);
83
DBGMSG(ZONE_LOG, (TEXT("CreateMsgQueue for power notify failed\n")));
84
goto cleanup;
85
}
86
else
87
{
88
DBGMSG(ZONE_LOG, (TEXT("CreateMsgQueue for power notify success\n")));
89
}
90![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
g_hNoti = RequestPowerNotifications(g_hMsgQ, PBT_RESUME);
92
93
if(!g_hNoti)
94
{
95
ASSERT(0);
96
DBGMSG(ZONE_LOG, (TEXT("RequestPowerNotifications failed\n")));
97
goto cleanup;
98
}
99
else
100
{
101
DBGMSG(ZONE_LOG, (TEXT("RequestPowerNotifications success\n")));
102
}
103![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104
g_bPowerEnd = FALSE;
105
g_hPowerThread = CreateThread(NULL, 0, PowerThread, NULL, 0, NULL);
106
107
if(!g_hPowerThread)
108
{
109
ASSERT(0);
110
DBGMSG(ZONE_LOG, (TEXT("CreateThread for PowerNotify failed\n")));
111
goto cleanup;
112
}
113![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
cleanup:
115
DBGMSG(ZONE_LOG, (TEXT("--InitPowerNofity\n")));
116
return result;
117
}
118![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
119
BOOL EndPowerNotify()
120
{
121
BOOL bRet = FALSE;
122
HANDLE hWriteMsgQ = NULL;
123
MSGQUEUEOPTIONS options;
124![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
DBGMSG(ZONE_LOG, (TEXT("++EndPowerNotify\n")));
126![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
if(!g_hPowerThread)
128
{
129
DBGMSG(ZONE_LOG, (TEXT("PowerThread has been exit\n")));
130
goto cleanup;
131
}
132
133
memset(&options, 0, sizeof(options));
134
135
options.dwSize = sizeof(MSGQUEUEOPTIONS);
136
options.dwFlags = MSGQUEUE_ALLOW_BROKEN;
137
options.dwMaxMessages = QUEUE_ENTRIES;
138
options.cbMaxMessage = sizeof(POWER_BROADCAST) + MAX_NAMELEN;
139
options.bReadAccess = FALSE;
140
141
hWriteMsgQ = CreateMsgQueue(MSGQ_NAME, &options);
142![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
if(hWriteMsgQ)
144
{
145
POWER_BROADCAST writebuf;
146
writebuf.Message = EXIT_THREAD_MSG;
147
if(FALSE == WriteMsgQueue(hWriteMsgQ, &writebuf, sizeof(writebuf), 1000, 0) )
148
{
149
DBGMSG(ZONE_LOG, (TEXT("WriteMsgQueue failed\n")));
150
}
151
else
152
{
153
DBGMSG(ZONE_LOG, (TEXT("WriteMsgQueue succeed\n")));
154
}
155
156
if(FALSE == CloseMsgQueue(hWriteMsgQ))
157
{
158
DBGMSG(ZONE_LOG, (TEXT("CloseMsgQueue failed\n")));
159
}
160
}
161
else
162
{
163
DBGMSG(ZONE_LOG, (TEXT("WriteMsgQ create failed\n")));
164
}
165
166
DBGMSG(ZONE_LOG, (TEXT("Wait for PowerThread exit
\n")));
167
168
g_bPowerEnd = TRUE;
169
170
if( WaitForSingleObject(g_hPowerThread, 1000) == WAIT_OBJECT_0 )
171
{
172
DBGMSG(ZONE_LOG, (TEXT("PowerThread exit success\n")));
173
g_hPowerThread = NULL;
174
bRet = TRUE;
175
}
176
else
177
{
178
DBGMSG(ZONE_LOG, (TEXT("PowerThread exit failed timeout\n")));
179
}
180![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181
cleanup:
182![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
183
if(g_hNoti)
184
{
185
if( FALSE == StopPowerNotifications(g_hNoti) )
186
{
187
DBGMSG(ZONE_LOG, (TEXT("StopPowerNotifications failed, err = %d\n"), GetLastError()));
188
}
189
190
g_hNoti = NULL;
191
}
192![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193
if(g_hMsgQ)
194
{
195
if(!CloseMsgQueue(g_hMsgQ))
196
{
197
DBGMSG(ZONE_LOG, (TEXT("CloseMsgQueue failed\n")));
198
}
199
200
g_hMsgQ = NULL;
201
}
202![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
203
DBGMSG(ZONE_LOG, (TEXT("--EndPowerNotify\n")));
204
return bRet;
205
}
206![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
124
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
126
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
129
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
130
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
132
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
134
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
136
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
138
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
139
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
140
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
141
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
142
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
144
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
145
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
146
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
147
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
148
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
149
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
150
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
151
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
152
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
153
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
155
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
156
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
158
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
159
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
160
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
161
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
162
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
163
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
164
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
165
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
166
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
167
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
168
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
169
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
170
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
171
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
172
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
174
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
175
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
176
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
178
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
179
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
180
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
182
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
183
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
184
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
185
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
186
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
187
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
188
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
189
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
190
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
191
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
192
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
194
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
195
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
196
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
197
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
198
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
199
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
200
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
201
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
202
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
203
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
204
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
205
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
206
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)