亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tut24.html

?? WINDOWS程序員使用指南--匯編基礎
?? HTML
?? 第 1 頁 / 共 4 頁
字號:
button, the program checks if the hook is already installed. If it is not,
it call InstallHook function in the hook DLL to install it. Note that we
pass the handle of the main dialog as the parameter of the function so
the hook DLL can send the WM_MOUSEHOOK messages to the right window i.e.
our own.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>When the program is loaded,
the hook DLL is loaded too. Actually, DLLs are loaded immediately after
the program is in memory. The DLL entrypoint function is called before
the first instruction in the main program is execute even. So when the
main program executes the DLL(s) is/are initialized. We put the following
code in the DLL entrypoint function of the hook DLL:</font></font>
<p><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; .if
reason==DLL_PROCESS_ATTACH</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
push hInst</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
pop hInstance</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; .endif</font></font></b>
<p><font face="Arial,Helvetica"><font size=-1>The code just saves the instance
handle of the hook DLL itself to a global variable named hInstance for
use within the InstallHook function. Since the DLL entrypoint function
is called before other functions in the DLL are called , hInstance is always
valid. We put hInstance in .data section so that this value is kept on
per-process basis. Since when the mouse cursor hovers over a window, the
hook DLL is mapped into the process. Imagine that there is already a DLL
that occupies the intended load address of the hook DLL, the hook DLL would
be remapped to another address. The value of hInstance will be updated
to those of the new load address. When the user presses Unhook button and
then Hook button, SetWindowsHookEx will be called again. However, this
time, it will use the new load address as the instance handle which will
be wrong because in the example process, the hook DLL's load address hasn't
been changed. The hook will be a local one where you can hook only the
mouse events that occur in your own window. Hardly desirable.</font></font>
<p><b><font face="Arial,Helvetica"><font size=-1>InstallHook proc hwnd:DWORD</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; push
hwnd</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; pop
hWnd</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; invoke
SetWindowsHookEx,WH_MOUSE,addr MouseProc,hInstance,NULL</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; mov
hHook,eax</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; ret</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>InstallHook endp</font></font></b>
<p><font face="Arial,Helvetica"><font size=-1>The InstallHook function
itself is very simple. It saves the window handle passed as its parameter
to a global variable named hWnd for future use. It then calls SetWindowsHookEx
to install a mouse hook. The return value of SetWindowsHookEx is stored
in a global variable named hHook for use with UnhookWindowsHookEx.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>After SetWindowsHookEx is
called, the mouse hook is functional. Whenever a mouse event occurs in
the system, MouseProc ( your hook procedure) is called.</font></font>
<p><b><font face="Arial,Helvetica"><font size=-1>MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; invoke
CallNextHookEx,hHook,nCode,wParam,lParam</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; mov
edx,lParam</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; assume
edx:PTR MOUSEHOOKSTRUCT</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; invoke
WindowFromPoint,[edx].pt.x,[edx].pt.y</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; invoke
PostMessage,hWnd,WM_MOUSEHOOK,eax,0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; assume
edx:nothing</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; xor
eax,eax</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; ret</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>MouseProc endp</font></font></b>
<p><font face="Arial,Helvetica"><font size=-1>The first thing it does is
to call CallNextHookEx to give the other hooks the chance to process the
mouse event. After that, it calls WindowFromPoint function to retrieve
the handle of the window at the specified screen coordinate. Note that
we use the POINT structure in the MOUSEHOOKSTRUCT structure pointed to
by lParam as the current mouse coordinate. After that we send the window
handle to the main program via PostMessage with WM_MOUSEHOOK message. One
thing you should remember is that: you should not use SendMessage inside
the hook procedure, it can cause message deadlock. PostMessage is recommended.
The MOUSEHOOKSTRUCT structure is defined below:</font></font>
<p><b><font face="Arial,Helvetica"><font size=-1>MOUSEHOOKSTRUCT STRUCT
DWORD</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp; pt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
POINT &lt;></font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp; hwnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp; wHitTestCode&nbsp;
DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp; dwExtraInfo&nbsp;&nbsp;
DWORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>MOUSEHOOKSTRUCT ENDS</font></font></b>
<br>&nbsp;
<ul>
<li>
<font face="Arial,Helvetica"><font size=-1>pt is the current screen coordinate
of the mouse cursor</font></font></li>

<li>
<font face="Arial,Helvetica"><font size=-1>hwnd is the handle of the window
that will receive the mouse message. It's usually the window under the
mouse cursor but not always. If a window calls SetCapture, the mouse input
will be redirected to that window instead. Because of this reason, I don't
use the hwnd member of this structure but choose to call WindowFromPoint
instead.</font></font></li>

<li>
<font face="Arial,Helvetica"><font size=-1>wHitTestCode specifies the hit-test
value. The hit-test value gives more information about the current mouse
cursor position. It specifies on what part of window the mouse cursor is.
For complete list, check your win32 api reference under WM_NCHITTEST message.</font></font></li>

<li>
<font face="Arial,Helvetica"><font size=-1>dwExtraInfo contains the extra
information associated with the message. Normally this value is set by
calling mouse_event and retrieved by calling GetMessageExtraInfo.</font></font></li>
</ul>
<font face="Arial,Helvetica"><font size=-1>When the main window receives
WM_MOUSEHOOK message, it uses the window handle in wParam to retrieve the
information about the window.</font></font>
<p><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp; .elseif
uMsg==WM_MOUSEHOOK</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke GetDlgItemText,hDlg,IDC_HANDLE,addr buffer1,128</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke wsprintf,addr buffer,addr template,wParam</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke lstrcmpi,addr buffer,addr buffer1</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
.if eax!=0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke SetDlgItemText,hDlg,IDC_HANDLE,addr buffer</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
.endif</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke GetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer1,128</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke GetClassName,wParam,addr buffer,128</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke lstrcmpi,addr buffer,addr buffer1</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
.if eax!=0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke SetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
.endif</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke GetDlgItemText,hDlg,IDC_WNDPROC,addr buffer1,128</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke GetClassLong,wParam,GCL_WNDPROC</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke wsprintf,addr buffer,addr template,eax</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke lstrcmpi,addr buffer,addr buffer1</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
.if eax!=0</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke SetDlgItemText,hDlg,IDC_WNDPROC,addr buffer</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
.endif</font></font></b>
<p><font face="Arial,Helvetica"><font size=-1>To avoid flickers, we check
the text already in the edit controls and the text we will put into them
if they are identical. If they are, we skip them.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>We retrieve the class name
by calling GetClassName, the address of the window procedure by calling
GetClassLong with GCL_WNDPROC and then format them into strings and put
them into the appropriate edit controls.</font></font>
<p><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke UninstallHook</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke SetDlgItemText,hDlg,IDC_HOOK,addr HookText</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
mov HookFlag,FALSE</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke SetDlgItemText,hDlg,IDC_CLASSNAME,NULL</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke SetDlgItemText,hDlg,IDC_HANDLE,NULL</font></font></b>
<br><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
invoke SetDlgItemText,hDlg,IDC_WNDPROC,NULL</font></font></b>
<p><font face="Arial,Helvetica"><font size=-1>When the user presses Unhook
button, the program calls UninstallHook function in the hook DLL. UninstallHook
just calls UnhookWindowsHookEx. After that, it changes the text of the
button back to "Hook", HookFlag to FALSE and clears the content of the
edit controls.</font></font>
<br><font face="Arial,Helvetica"><font size=-1>Note the linker switch in
the makefile.</font></font>
<p><b><font face="Arial,Helvetica"><font size=-1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Link /SECTION:.bss,S&nbsp; /DLL /DEF:$(NAME).def /SUBSYSTEM:WINDOWS</font></font></b>
<p><font face="Arial,Helvetica"><font size=-1>It specifies .bss section
as a shared section to make all processes share the same uninitialized
data section of the hook DLL. Without this switch, your hook DLL will not
function correctly.</font></font>
<br>
<hr WIDTH="100%">
<center><b>[<a href="http://win32asm.cjb.net">Iczelion's Win32 Assembly
Homepage</a>]</b></center>

</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品ww久久久久久p站| 国产偷国产偷精品高清尤物| 色天使久久综合网天天| 毛片av一区二区| 美女免费视频一区二区| 精油按摩中文字幕久久| 国产乱码精品一区二区三区av | 99久久99久久久精品齐齐| 国产91丝袜在线播放| 成人国产在线观看| 99精品欧美一区二区三区小说| 成av人片一区二区| 欧美性色黄大片手机版| 日韩一级免费观看| 国产亚洲美州欧州综合国| 亚洲欧洲日产国产综合网| 亚洲精品视频在线观看网站| 五月天视频一区| 久久国产精品一区二区| 国产福利精品一区二区| 色偷偷成人一区二区三区91| 欧美蜜桃一区二区三区| 精品久久免费看| 国产精品二区一区二区aⅴ污介绍| 自拍偷拍欧美激情| 日本网站在线观看一区二区三区| 美洲天堂一区二卡三卡四卡视频| 国产一区二区91| 99re这里只有精品6| 欧美性一二三区| 亚洲精品在线观看视频| 亚洲私人黄色宅男| 日本少妇一区二区| 不卡的av电影| 欧美一卡二卡在线| 国产精品电影一区二区三区| 舔着乳尖日韩一区| 成人av资源站| 精品噜噜噜噜久久久久久久久试看| 国产欧美一区二区精品性| 亚洲观看高清完整版在线观看| 国产精品一区二区91| 欧美性色黄大片手机版| 国产精品理论在线观看| 美国毛片一区二区| 日本道在线观看一区二区| 精品国产亚洲一区二区三区在线观看| 亚洲日本va午夜在线影院| 麻豆免费精品视频| 色屁屁一区二区| 欧美国产一区二区在线观看| 日韩av电影天堂| 精品污污网站免费看| 中文字幕国产一区| 国产一区二区精品久久| 日韩一卡二卡三卡| 天天综合网 天天综合色| 一本色道**综合亚洲精品蜜桃冫| 26uuu国产在线精品一区二区| 一区二区三区免费在线观看| 成人免费看黄yyy456| 精品乱码亚洲一区二区不卡| 日本aⅴ亚洲精品中文乱码| 欧美三级电影精品| 一级特黄大欧美久久久| 91啪亚洲精品| 亚洲人成网站在线| 不卡欧美aaaaa| 亚洲欧美中日韩| 97久久超碰精品国产| 亚洲国产精华液网站w | 亚洲欧美综合色| 成人app在线观看| 国产精品素人一区二区| 成人小视频免费在线观看| 久久五月婷婷丁香社区| 国产精品综合久久| 国产三级三级三级精品8ⅰ区| 国产精品18久久久久| 日本一区二区视频在线| 成人a免费在线看| 尤物av一区二区| 欧美无人高清视频在线观看| 亚洲自拍欧美精品| 日韩一区二区视频| 极品少妇xxxx精品少妇偷拍 | 久久久99精品久久| 国产剧情在线观看一区二区| 国产午夜精品理论片a级大结局| 岛国一区二区三区| 亚洲男同性视频| 欧美一区二区啪啪| 国产精品自拍毛片| 亚洲日本va在线观看| 91精品久久久久久久99蜜桃| 久久福利资源站| 亚洲国产经典视频| 欧美日韩日日夜夜| 精品一区二区三区在线观看| 国产欧美一区二区精品性色超碰| 97久久超碰精品国产| 午夜激情综合网| 国产肉丝袜一区二区| 99在线精品一区二区三区| 亚洲国产wwwccc36天堂| 日韩精品一区二区三区在线播放| 精品一二三四区| 亚洲日本丝袜连裤袜办公室| 欧美一区二区人人喊爽| 成人动漫一区二区在线| 丝袜亚洲精品中文字幕一区| 久久久久国产免费免费| 欧美在线视频全部完| 国产九色精品成人porny | 日本美女一区二区| 国产精品国产a| 精品黑人一区二区三区久久| 欧美亚洲丝袜传媒另类| 免费人成黄页网站在线一区二区| 国产精品午夜久久| 9191久久久久久久久久久| 处破女av一区二区| 日韩国产一二三区| 亚洲日本青草视频在线怡红院 | www.欧美色图| 美女免费视频一区| 同产精品九九九| 亚洲激情五月婷婷| 国产精品人成在线观看免费 | 99久久99久久久精品齐齐| 麻豆视频观看网址久久| 午夜精品福利一区二区蜜股av| 国产精品区一区二区三区| 精品嫩草影院久久| 欧美一级午夜免费电影| 日本韩国精品在线| heyzo一本久久综合| 国产精品一区二区视频| 七七婷婷婷婷精品国产| 午夜久久久久久久久久一区二区| 亚洲欧洲三级电影| 国产精品久久精品日日| 国产精品区一区二区三区| 亚洲国产经典视频| 国产精品久久一卡二卡| 国产欧美一区二区三区网站| 国产网站一区二区三区| 久久精品视频网| 久久五月婷婷丁香社区| 久久久.com| 国产女同性恋一区二区| 久久精品免费在线观看| 久久久久久9999| 欧美极品少妇xxxxⅹ高跟鞋| 欧美激情综合五月色丁香| 国产精品视频观看| 最新久久zyz资源站| 亚洲欧美激情小说另类| 亚洲精选一二三| 午夜精品视频一区| 日产欧产美韩系列久久99| 免费成人你懂的| 国产美女精品人人做人人爽| 国产在线不卡一区| 成人免费视频caoporn| 在线观看欧美精品| 日韩欧美一级二级三级久久久| 精品欧美乱码久久久久久 | 亚洲国产人成综合网站| 性做久久久久久久免费看| 丝袜美腿一区二区三区| 激情小说欧美图片| 成人激情免费电影网址| 91黄视频在线| 日韩女优av电影| 中文字幕在线不卡| 亚洲一区二区中文在线| 日本午夜精品一区二区三区电影| 国产一区视频网站| 91碰在线视频| 日韩一区二区免费在线电影| 久久精品在线免费观看| 亚洲柠檬福利资源导航| 理论片日本一区| 99久久精品情趣| 91精品国产综合久久久蜜臀图片| 久久久另类综合| 婷婷丁香久久五月婷婷| 国产成人免费视频精品含羞草妖精| 色综合久久88色综合天天免费| 91精品国产手机| 亚洲综合在线视频| 久久66热re国产| 在线观看国产日韩| 国产性色一区二区| 天天做天天摸天天爽国产一区| 国产a久久麻豆| 91精品国产色综合久久不卡电影 | 亚洲免费成人av| 韩国一区二区三区|