色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Windows托盤氣球通知無效排查:Shell_NotifyIcon字段與系統(tǒng)策略

Windows托盤氣球通知無效排查:Shell_NotifyIcon字段與系統(tǒng)策略 托盤圖標(biāo)出現(xiàn)在任務(wù)欄右下角右鍵菜單響應(yīng)正常雙擊也能喚出主窗口唯獨(dú)調(diào)Shell_NotifyIcon發(fā)出去的那個(gè)氣球通知屏幕上一點(diǎn)動(dòng)靜都沒有——而且返回值還是TRUE。這個(gè)現(xiàn)象我前后遇到過三四回每次根因都不一樣有一次是uFlags漏了NIF_INFO有一次是程序被改成后臺(tái)常駐方式導(dǎo)致圖標(biāo)壓根沒掛到 explorer 上還有一次是測(cè)試機(jī)上把通知和操作的總開關(guān)關(guān)掉了。所以看到氣球通知無效這種描述先別急著翻代碼得先把無效這兩個(gè)字拆開判斷它到底屬于哪一類。這篇是寫給正在做 Windows 桌面端常駐托盤程序的人看的以 CWin32為主順帶把 C#WinForms和 WPF 封裝層上的等價(jià)坑一起擺出來。讀完至少能做到兩件事一是清楚Shell_NotifyIcon發(fā)氣泡時(shí)到底是哪幾個(gè)字段在起作用二是手上有一套能自己往下查的鏈路而不是對(duì)著屏幕干瞪眼改參數(shù)。氣球通知這東西看著只有幾行 API實(shí)際上牽扯到結(jié)構(gòu)體版本、字符集、窗口消息循環(huán)、系統(tǒng)通知策略、會(huì)話隔離五個(gè)層面任何一層出問題表現(xiàn)都是沒反應(yīng)所以分層定位比試錯(cuò)重要得多。1. 三種不彈故障點(diǎn)完全不同1.1 圖標(biāo)壓根沒進(jìn)托盤區(qū)這是最容易被跳過的一步。很多人在排查氣泡的時(shí)候默認(rèn)圖標(biāo)都在那兒了肯定是氣泡的問題但實(shí)際情況里圖標(biāo)顯示正常并不代表NIM_ADD成功過——有一種情況是圖標(biāo)顯示出來了但那是上一次進(jìn)程殘留的僵尸圖標(biāo)鼠標(biāo)劃過就消失點(diǎn)它也沒反應(yīng)。真正判斷圖標(biāo)是否屬于當(dāng)前進(jìn)程最簡(jiǎn)單的辦法是把鼠標(biāo)懸停在圖標(biāo)上看szTip里設(shè)置的提示文字有沒有出現(xiàn)如果提示文字是空白的或者顯示的是別的程序的文字那基本可以確定當(dāng)前進(jìn)程根本沒加上圖標(biāo)氣泡自然無從談起。NIM_ADD失敗的原因里hIcon為空是最常見的一個(gè)。Win32 里常見寫法是先LoadIcon或者LoadImage拿一個(gè)HICON再填進(jìn)nid.hIcon。這里有個(gè)真實(shí)存在的坑如果這個(gè)HICON是通過CreateIconIndirect、CopyIcon這類函數(shù)動(dòng)態(tài)生成的而代碼里又在NIM_ADD之后順手調(diào)了DestroyIcon托盤圖標(biāo)會(huì)立刻變成一塊空白或者花屏。原因是 shell 并沒有把圖標(biāo)數(shù)據(jù)拷貝走它只是持有了這個(gè)句柄你銷毀了它那邊就指向了一塊已經(jīng)失效的內(nèi)存。正確的釋放時(shí)機(jī)是NIM_DELETE之后再DestroyIcon順序不能反。還有一種更隱蔽的程序被注冊(cè)成了服務(wù)或者用計(jì)劃任務(wù)以不管用戶是否登錄都運(yùn)行的方式啟動(dòng)。這種進(jìn)程運(yùn)行在會(huì)話 0Session 0而會(huì)話 0 是沒有交互式桌面的Shell_NotifyIcon可能返回成功圖標(biāo)卻永遠(yuǎn)不可能出現(xiàn)在用戶眼前。判斷方法很簡(jiǎn)單任務(wù)管理器里看這個(gè)進(jìn)程屬于哪個(gè)會(huì)話如果不是當(dāng)前登錄用戶的會(huì)話號(hào)那所有 UI 相關(guān)的 API 都是白搭。另外提一句Windows 11 的托盤區(qū)把默認(rèn)圖標(biāo)折疊進(jìn)了溢出面板用戶不點(diǎn)開小箭頭是看不到的。這不是故障但排查時(shí)容易被誤判成圖標(biāo)沒加進(jìn)去先確認(rèn)一下托盤設(shè)置里的隱藏的圖標(biāo)菜單。1.2 圖標(biāo)在氣泡死活不出來這一類才是標(biāo)題里說的情況。此時(shí)NIM_ADD是成功的szTip能正常顯示右鍵菜單也能彈唯獨(dú)氣泡不出來。常見原因按出現(xiàn)頻率排下來大概是uFlags沒帶NIF_INFO、NIM_MODIFY之前圖標(biāo)狀態(tài)已經(jīng)丟了、szInfo為空字符串、系統(tǒng)通知開關(guān)被關(guān)閉、發(fā)送氣泡時(shí)消息循環(huán)處于阻塞狀態(tài)。uFlags這個(gè)問題我在代碼評(píng)審里見過不止一次。有人寫了一個(gè)UpdateTrayIcon()函數(shù)把NIF_ICON | NIF_MESSAGE | NIF_TIP全填上然后在這個(gè)函數(shù)末尾順手填了szInfo和szInfoTitle以為這樣氣泡就會(huì)跟著圖標(biāo)一起更新。實(shí)際上Shell_NotifyIcon是嚴(yán)格按uFlags位掩碼來決定讀哪些字段的沒置NIF_INFO位szInfo那一段內(nèi)存它連看都不看。同理dwInfoFlags的圖標(biāo)類型、NIIF_NOSOUND這類標(biāo)志也都只在NIF_INFO置位時(shí)才生效。還有一種是先刪后沒加。某些程序在響應(yīng)WM_ENDSESSION或者顯示器的WM_DISPLAYCHANGE時(shí)會(huì)先NIM_DELETE再重新NIM_ADD如果中間某次NIM_ADD因?yàn)榇翱诰浔鸁o效而失敗后續(xù)的NIM_MODIFY就會(huì)一直返回失敗氣泡當(dāng)然也發(fā)不出來。所以我習(xí)慣把是否已添加做成一個(gè)顯式的狀態(tài)位任何一次NIM_ADD失敗都要記錄下來后續(xù)發(fā)氣泡前先檢查這個(gè)狀態(tài)。1.3 氣泡彈了但標(biāo)題是空的或者全是亂碼嚴(yán)格來說這不算無效但它經(jīng)常和無效混為一談因?yàn)橛脩艨吹揭黄綁K或者空白會(huì)直接反饋通知沒顯示。亂碼的根因幾乎只有一個(gè)結(jié)構(gòu)體用了 ANSI 版本而字符串傳的是寬字符或者反過來。NOTIFYICONDATA在 SDK 頭文件里是通過UNICODE宏展開成NOTIFYICONDATAW或NOTIFYICONDATAA的如果工程屬性里的字符集是使用多字節(jié)字符集而你代碼里寫的是L...編譯器要么報(bào)錯(cuò)要么悄悄截?cái)嘧罱KszInfo里只有一個(gè)字符加個(gè)結(jié)尾。這個(gè)坑在遷移老項(xiàng)目時(shí)特別容易踩到。老工程當(dāng)年是 MBCS后來為了支持多語(yǔ)言整體改成 Unicode結(jié)果某個(gè)自己封裝的托盤類里還留著char緩沖區(qū)和新結(jié)構(gòu)體拼接編譯能過跑起來就是亂碼。定位辦法是直接看sizeof(NOTIFYICONDATA)的值Unicode 版本在 x64 下大概是 976 字節(jié)這個(gè)量級(jí)如果在調(diào)試器里看到cbSize明顯偏小那基本就是字符集或者結(jié)構(gòu)體定義對(duì)不上。2. NOTIFYICONDATA 里決定氣泡生死的字段2.1 uFlags、szInfo、szInfoTitle 三者的聯(lián)動(dòng)關(guān)系先把一段能用的代碼擺出來后面所有的討論都圍繞它展開。下面這段是添加圖標(biāo)的初始化注意uFlags里沒有NIF_INFO因?yàn)樘砑与A段不需要?dú)馀軳OTIFYICONDATA nid { 0 }; nid.cbSize sizeof(NOTIFYICONDATA); nid.hWnd hMainWnd; nid.uID IDI_TRAY; nid.uFlags NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage WM_TRAY_CALLBACK; nid.hIcon hTrayIcon; StringCchCopy(nid.szTip, ARRAYSIZE(nid.szTip), L常駐托盤工具); if (!Shell_NotifyIcon(NIM_ADD, nid)) { // 這里一定要留日志后面排查全靠它 }發(fā)氣泡是另一段獨(dú)立邏輯uFlags只保留NIF_INFObool ShowBalloon(HWND hWnd, UINT id, const wchar_t* title, const wchar_t* text, DWORD infoFlags) { NOTIFYICONDATA nid { 0 }; nid.cbSize sizeof(NOTIFYICONDATA); nid.hWnd hWnd; nid.uID id; nid.uFlags NIF_INFO; nid.dwInfoFlags infoFlags; StringCchCopy(nid.szInfoTitle, ARRAYSIZE(nid.szInfoTitle), title); StringCchCopy(nid.szInfo, ARRAYSIZE(nid.szInfo), text); return Shell_NotifyIcon(NIM_MODIFY, nid) ! FALSE; }這里有兩個(gè)細(xì)節(jié)值得說。第一NIM_MODIFY階段uFlags只寫NIF_INFO是完全正確的語(yǔ)義是這次我只改氣泡部分其它字段別動(dòng)不需要把NIF_ICON再寫一遍。第二szInfo傳空字符串注意不是空指針是長(zhǎng)度為 0 的字符串的語(yǔ)義是移除當(dāng)前顯示的氣泡不是什么都不做。有些代碼在錯(cuò)誤分支里填了個(gè)空字符串當(dāng)兜底結(jié)果就是看起來什么都沒發(fā)生。字段長(zhǎng)度也有硬上限szInfo是 256 個(gè)WCHARszInfoTitle是 64 個(gè)WCHAR都包含結(jié)尾的空字符。超長(zhǎng)會(huì)被截?cái)嘤肧tringCchCopy這類安全函數(shù)能保證不出界但內(nèi)容確實(shí)會(huì)丟。我見過標(biāo)題寫了一長(zhǎng)串路徑導(dǎo)致后面全被切掉的看起來像標(biāo)題顯示不全其實(shí)是長(zhǎng)度超限。2.2 cbSize、uVersion 與那個(gè)共用體的歷史包袱cbSize是所有NOTIFYICONDATA故障里最隱蔽的一個(gè)。這個(gè)字段的用途是讓 shell 知道調(diào)用方用的是哪個(gè)版本的結(jié)構(gòu)體因?yàn)閺?Windows 2000 到現(xiàn)在這個(gè)結(jié)構(gòu)體加過好幾輪字段。寫sizeof(NOTIFYICONDATA)在正常情況下永遠(yuǎn)是對(duì)的問題出在兩種場(chǎng)景一是工程引用了很老的第三方 SDK 頭文件結(jié)構(gòu)體定義本身就缺字段sizeof算出來偏小二是用 C# 或其它語(yǔ)言手工定義StructLayout時(shí)字段漏了或者順序錯(cuò)了。第二種場(chǎng)景我踩過。C# 里為了不依賴 WinForms 的NotifyIcon有人會(huì)自己DllImport一個(gè)Shell_NotifyIcon然后手寫一個(gè)NOTIFYICONDATA結(jié)構(gòu)體。少寫一個(gè)guidItem或者把uTimeout的位置寫錯(cuò)編譯一點(diǎn)問題沒有運(yùn)行起來cbSize對(duì)不上NIM_ADD直接返回FALSE。這種情況在調(diào)試器里看一眼cbSize和預(yù)期值差多少基本就能定位。再說uVersion。NOTIFYICONDATA里uTimeout和uVersion是共用同一塊內(nèi)存的union { UINT uTimeout; UINT uVersion; };也就是說你不能在同一次調(diào)用里既設(shè)超時(shí)又設(shè)版本號(hào)。設(shè)置版本要用NIM_SETVERSION把uVersion填成NOTIFYICON_VERSION_4這個(gè)動(dòng)作會(huì)改變后續(xù)回調(diào)消息的編碼方式——lParam的低字是消息 ID高字是圖標(biāo) ID。很多人加了NIM_SETVERSION之后發(fā)現(xiàn)右鍵菜單不彈了就是因?yàn)榛卣{(diào)處理還在按老格式解析lParam。所以這條命令不是加了更好而是加了就得改回調(diào)。NOTIFYICON_VERSION_4還有另一個(gè)副作用uTimeout被徹底忽略氣泡停留時(shí)長(zhǎng)完全由系統(tǒng)的輔助功能設(shè)置決定。如果你有代碼依賴精確控制氣泡顯示 3 秒還是 10 秒那在 v4 下是做不到的。2.3 dwInfoFlags 里幾個(gè)會(huì)反向生效的標(biāo)志dwInfoFlags決定氣泡左側(cè)那個(gè)小圖標(biāo)的樣式常見取值是NIIF_NONE、NIIF_INFO、NIIF_WARNING、NIIF_ERROR、NIIF_USER。前四個(gè)都是系統(tǒng)內(nèi)置圖標(biāo)直接寫就行NIIF_USER則需要額外配合hBalloonIcon字段。這里有個(gè)真實(shí)的坑NIIF_USER置位但hBalloonIcon留空時(shí)不同 Windows 版本的處理不一致有的版本回退到hIcon有的版本干脆畫一個(gè)默認(rèn)圖標(biāo)還有的版本會(huì)導(dǎo)致整個(gè)氣泡不顯示。我現(xiàn)在的做法是要么不用NIIF_USER用就老老實(shí)實(shí)把hBalloonIcon填上別指望系統(tǒng)幫你兜底。另一個(gè)有意思的標(biāo)志是NIIF_RESPECT_QUIET_TIMEWindows 7 引入的。置位之后如果系統(tǒng)處于安靜時(shí)間現(xiàn)在叫專注助手這條氣泡會(huì)被直接丟棄不是延遲顯示是丟棄。這個(gè)標(biāo)志的設(shè)計(jì)初衷是尊重用戶不想被打擾的意愿但如果你的程序發(fā)的是關(guān)鍵提醒置了這個(gè)位就等于主動(dòng)放棄了顯示機(jī)會(huì)。反過來如果你不置這個(gè)位系統(tǒng)在某些版本上仍然會(huì)按全局策略抑制橫幅——這一點(diǎn)各版本行為不完全一致所以不要用它來做能不能顯示的開關(guān)。NIIF_NOSOUND相對(duì)簡(jiǎn)單加上就不響提示音。有個(gè)細(xì)節(jié)是它不影響氣泡本身的顯示只影響聲音所以別把它和靜音模式下氣泡不顯示混為一談。3. 代碼沒問題但屏幕沒反應(yīng)系統(tǒng)層攔在哪3.1 通知總開關(guān)、專注助手與安靜時(shí)間這是排查時(shí)最容易漏掉的一層因?yàn)樗辉谀愕拇a里而在用戶的機(jī)器上。Windows 10 之后系統(tǒng)設(shè)置里有一個(gè)通知和操作的總開關(guān)關(guān)掉之后所有應(yīng)用的通知全部靜默下面還有按應(yīng)用細(xì)分的開關(guān)以及專注助手的幾種模式關(guān)閉、僅優(yōu)先通知、僅鬧鐘。Shell_NotifyIcon發(fā)出的氣泡在 Windows 8 之后已經(jīng)被系統(tǒng)當(dāng)作通知來管理了所以它會(huì)完整地受這些開關(guān)影響。表現(xiàn)是Shell_NotifyIcon返回TRUE氣泡不出現(xiàn)通知中心里也找不到。這種情況你改一萬行代碼都沒用。排查手段是讓測(cè)試機(jī)恢復(fù)到默認(rèn)狀態(tài)通知總開關(guān)打開、專注助手關(guān)閉、當(dāng)前應(yīng)用在通知列表里處于允許狀態(tài)。還有一點(diǎn)如果程序以管理員權(quán)限運(yùn)行而系統(tǒng)設(shè)置里的通知是按應(yīng)用配置的某些版本下管理員進(jìn)程的通知配置和普通進(jìn)程不是同一份表現(xiàn)就是普通權(quán)限下能彈、提權(quán)后不彈。這個(gè)差異在不同系統(tǒng)版本上表現(xiàn)不一致我的做法是測(cè)試矩陣?yán)锕潭ò胀?quán)限和管理員權(quán)限兩行別只測(cè)一種。老系統(tǒng)上還有一個(gè)注冊(cè)表開關(guān)HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced下的EnableBalloonTips值為 0 時(shí)禁用氣球提示。這個(gè)鍵在新系統(tǒng)上是否仍然生效取決于版本但在 Windows 7 時(shí)代它是標(biāo)準(zhǔn)的關(guān)閉方式排查老環(huán)境時(shí)值得看一眼。組策略里也有對(duì)應(yīng)的關(guān)閉通知?dú)馇蛱崾卷?xiàng)域環(huán)境下的機(jī)器可能被統(tǒng)一下發(fā)。3.2 會(huì)話與用戶身份Session 0 和 RunAs 的死角前面提過會(huì)話 0 的問題這里展開說。Windows 的服務(wù)宿主機(jī)制決定了服務(wù)進(jìn)程運(yùn)行在會(huì)話 0那是一個(gè)沒有交互式桌面的獨(dú)立會(huì)話。任何在會(huì)話 0 里調(diào)用的 UI 相關(guān) API包括Shell_NotifyIcon、MessageBox、CreateWindow要么失敗要么創(chuàng)建一個(gè)用戶永遠(yuǎn)看不到的窗口。這個(gè)問題在實(shí)際項(xiàng)目里通常表現(xiàn)為開發(fā)機(jī)上好好的裝到客戶機(jī)上就沒通知。區(qū)別在于開發(fā)機(jī)是雙擊 exe 運(yùn)行的客戶機(jī)上是通過服務(wù)或者計(jì)劃任務(wù)啟動(dòng)的。定位方法是在任務(wù)管理器里加一列會(huì)話 ID看進(jìn)程對(duì)應(yīng)的數(shù)字是不是和當(dāng)前登錄用戶一致。如果不一致那問題不在代碼在于部署方式——要么改成用戶登錄后自啟動(dòng)要么用會(huì)話隔離機(jī)制把 UI 部分拆成一個(gè)運(yùn)行在用戶會(huì)話里的獨(dú)立進(jìn)程。還有一種情況是以另一個(gè)用戶身份運(yùn)行比如右鍵以其他用戶身份運(yùn)行或者用憑據(jù)管理器啟動(dòng)。這時(shí)圖標(biāo)會(huì)加到那個(gè)用戶的托盤里當(dāng)前登錄用戶看不到但那個(gè)用戶如果同時(shí)在線快速用戶切換在他自己的桌面里是能看到圖標(biāo)的。現(xiàn)象就是我這邊沒圖標(biāo)但換個(gè)賬號(hào)登錄就有了很容易被誤判成偶發(fā) bug。3.3 Windows 8 之后氣球改頭換面成 Toast這條屬于知道就行不知道會(huì)繞遠(yuǎn)路的范疇。從 Windows 8 開始Shell_NotifyIcon發(fā)出的氣球通知在視覺上已經(jīng)變成了 toast 樣式——從屏幕右下角滑入、停留幾秒、然后收進(jìn)通知中心。接口沒變樣式變了。這個(gè)變化帶來兩個(gè)實(shí)際影響。第一通知中心會(huì)成為這些氣泡的歸檔地用戶在通知中心里能看到歷史消息這意味著重復(fù)發(fā)同一條消息的行為和老系統(tǒng)不一樣了老系統(tǒng)上重復(fù)發(fā)會(huì)不斷彈新的新系統(tǒng)上可能出現(xiàn)合并或者覆蓋。第二某些系統(tǒng)版本上如果程序沒有設(shè)置AppUserModelID通知在系統(tǒng)里的歸屬會(huì)是一個(gè)默認(rèn)的宿主表現(xiàn)是通知列表里看不到你的應(yīng)用名用戶在設(shè)置里想允許你的通知都找不到對(duì)應(yīng)條目。設(shè)置AppUserModelID的 API 是SetCurrentProcessExplicitAppUserModelID在進(jìn)程啟動(dòng)早期調(diào)用。如果對(duì)通知的可靠性要求比較高其實(shí)可以考慮直接走 Toast 通知那套接口代價(jià)是需要注冊(cè)快捷方式、需要處理激活回調(diào)工程復(fù)雜度上一個(gè)臺(tái)階。托盤氣球勝在簡(jiǎn)單二十行代碼就能跑Toast 勝在可控能拿到點(diǎn)擊、能進(jìn)通知中心歸檔、能被用戶精細(xì)管理。選哪個(gè)取決于你的通知是順手提示一下還是業(yè)務(wù)流程的一環(huán)。4. 一條能自己走完的排查鏈路4.1 用三十行最小工程把業(yè)務(wù)代碼摘出去我處理這類問題的固定第一步是新建一個(gè)空的 Win32 工程只保留一個(gè)隱藏主窗口、一個(gè)托盤圖標(biāo)、一個(gè)定時(shí)器定時(shí)器每三秒發(fā)一次氣泡。這個(gè)工程大概三十行寫完不超過十分鐘。之所以要先做這一步是因?yàn)樵谡鎸?shí)項(xiàng)目里氣泡不顯示可能是業(yè)務(wù)邏輯、線程調(diào)度、窗口生命周期三者疊加出來的你直接在里面改參數(shù)改一次跑一次變量太多判斷不了哪個(gè)改動(dòng)起了作用。最小工程的骨架大致是這樣LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: AddTrayIcon(hWnd); SetTimer(hWnd, TIMER_BALLOON, 3000, nullptr); return 0; case WM_TIMER: if (wParam TIMER_BALLOON) { ShowBalloon(hWnd, IDI_TRAY, L測(cè)試標(biāo)題, L這是一條測(cè)試氣泡, NIIF_INFO); } return 0; case WM_DESTROY: RemoveTrayIcon(hWnd); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, msg, wParam, lParam); }如果這個(gè)最小工程能彈氣泡說明 API 用法和系統(tǒng)環(huán)境都沒問題問題在你的業(yè)務(wù)代碼里如果彈不出來說明問題在環(huán)境或者調(diào)用方式上接下來往系統(tǒng)層查。這一步能省掉一半的排查時(shí)間。4.2 返回值、窗口消息、監(jiān)視工具三處取證最小工程也不彈的時(shí)候取證要分三路走。第一路看返回值。Shell_NotifyIcon返回FALSE說明 shell 明確拒絕了這時(shí)基本可以鎖定字段錯(cuò)誤cbSize不對(duì)、hWnd無效、uID沖突。返回TRUE但無顯示說明接收端沒問題問題在展示端系統(tǒng)策略、會(huì)話、桌面可見性。這兩條分支的排查方向完全相反所以返回值必須看。第二路看窗口消息。如果要做氣泡點(diǎn)擊響應(yīng)uCallbackMessage指定的消息會(huì)在氣泡被點(diǎn)擊時(shí)發(fā)到你的窗口。用一個(gè)能抓窗口消息的工具掛在目標(biāo)窗口上觀察發(fā)氣泡前后有沒有WM_USER范圍內(nèi)的消息流動(dòng)。這一步主要是確認(rèn) shell 到底有沒有收到請(qǐng)求。第三路看系統(tǒng)狀態(tài)。通知設(shè)置、專注助手、會(huì)話 ID、是否提權(quán)這四項(xiàng)各花一分鐘確認(rèn)比讀一天文檔有用。我現(xiàn)在的習(xí)慣是在程序的關(guān)于頁(yè)面里放一個(gè)隱藏的診斷入口一鍵打印這幾項(xiàng)狀態(tài)客戶反饋問題時(shí)讓他截個(gè)圖能省掉好幾輪來回。現(xiàn)象優(yōu)先懷疑驗(yàn)證方式NIM_ADD返回 FALSEcbSize、hIcon為空、窗口句柄無效調(diào)試器里看cbSize與sizeof是否一致圖標(biāo)在氣泡無返回值 TRUEuFlags漏NIF_INFO斷點(diǎn)檢查發(fā)送時(shí)的uFlags值圖標(biāo)不在氣泡無會(huì)話 0、圖標(biāo)句柄被提前釋放任務(wù)管理器看會(huì)話 ID檢查DestroyIcon時(shí)機(jī)氣泡出但標(biāo)題空白字符集不匹配看sizeof(NOTIFYICONDATA)與工程字符集設(shè)置時(shí)好時(shí)壞消息循環(huán)被阻塞、定時(shí)器被搶占檢查主線程是否有長(zhǎng)耗時(shí)同步操作特定機(jī)器必現(xiàn)通知開關(guān)、專注助手、組策略重置通知設(shè)置為默認(rèn)后復(fù)測(cè)4.3 把什么時(shí)候不彈記錄成日志這一點(diǎn)聽起來平淡但它決定了后續(xù)排查是幾天還是幾小時(shí)。我在托盤模塊里加了一組固定的日志點(diǎn)NIM_ADD的結(jié)果、NIM_DELETE的結(jié)果、每次發(fā)氣泡前的uFlags和dwInfoFlags值、發(fā)氣泡的返回值、當(dāng)前進(jìn)程的會(huì)話 ID 和是否提權(quán)。這些信息加起來不到二十行代碼但客戶現(xiàn)場(chǎng)出問題時(shí)看一眼日志就能把范圍縮小到一兩個(gè)方向。有個(gè)細(xì)節(jié)日志里不要把szInfo全文打進(jìn)去用戶數(shù)據(jù)可能很長(zhǎng)也可能包含不該落盤的內(nèi)容打個(gè)長(zhǎng)度和標(biāo)題就夠了。5. 托管封裝層WinForms 與 WPF 的等價(jià)坑5.1 NotifyIcon.ShowBalloonTip 的前置條件C# 的 WinForms 里NotifyIcon類把Shell_NotifyIcon包了一層接口看著簡(jiǎn)單坑一樣不少。ShowBalloonTip(int timeout)要能生效至少得滿足三個(gè)條件Visible為true、Icon不為null、圖標(biāo)已經(jīng)被系統(tǒng)接受。第一個(gè)條件是硬性的Visible false時(shí)調(diào)ShowBalloonTip不拋異常也不顯示最容易漏。第二個(gè)條件很多人以為只要給Icon賦值就行實(shí)際上如果你是從資源文件動(dòng)態(tài)加載圖標(biāo)流用完順手把StreamDispose掉了Icon對(duì)象的內(nèi)部句柄可能已經(jīng)失效表現(xiàn)就是托盤圖標(biāo)顯示成一塊空白氣泡也跟著不顯示。第三個(gè)條件在窗體生命周期早期容易出問題。在Form_Load里立刻調(diào)ShowBalloonTip有些機(jī)器上不生效因?yàn)檫@時(shí)窗口句柄剛創(chuàng)建托盤圖標(biāo)還沒真正掛上去。穩(wěn)妥做法是Load之后用BeginInvoke推遲到消息隊(duì)列下一輪再調(diào)或者在Shown事件里調(diào)。timeout參數(shù)在 Vista 之后基本被忽略了實(shí)際時(shí)長(zhǎng)由系統(tǒng)的輔助功能設(shè)置決定。這一點(diǎn)和老系統(tǒng)不一樣如果產(chǎn)品文檔里寫了氣泡顯示 5 秒最好改成約 5 秒實(shí)際由系統(tǒng)設(shè)置決定免得后面被當(dāng)成 bug 提。5.2 消息泵被堵住時(shí)氣泡會(huì)遲到Shell_NotifyIcon內(nèi)部是通過窗口消息和任務(wù)欄通信的這意味著它依賴調(diào)用線程的消息循環(huán)。如果主線程正在跑一個(gè)長(zhǎng)耗時(shí)同步任務(wù)比如讀一個(gè)大文件、等一個(gè)網(wǎng)絡(luò)請(qǐng)求、跑一段密集計(jì)算那么即使你在另一個(gè)線程里調(diào)ShowBalloonTip調(diào)用也可能被卡住直到主線程的消息泵重新轉(zhuǎn)起來?,F(xiàn)象很有迷惑性日志顯示已發(fā)送氣泡但用戶是在幾秒甚至幾十秒之后才看到或者干脆看不到因?yàn)橐呀?jīng)過了時(shí)效。這類問題在后臺(tái)任務(wù)完成時(shí)彈通知的場(chǎng)景里特別常見因?yàn)楹笈_(tái)任務(wù)完成的時(shí)刻主線程往往正在刷新界面。處理辦法是有的把耗時(shí)任務(wù)放到后臺(tái)線程主線程只負(fù)責(zé) UI或者在不依賴NotifyIcon對(duì)象的場(chǎng)景下用一個(gè)獨(dú)立的隱藏窗口在自己的線程里跑消息循環(huán)來處理托盤消息。后者工程量大些但如果托盤邏輯要脫離主窗口獨(dú)立存活比如主窗口可以關(guān)閉但程序不退出這個(gè)結(jié)構(gòu)反而更清晰。WPF 這邊沒有內(nèi)置的托盤圖標(biāo)控件社區(qū)里常見的做法是引用 WinForms 的NotifyIcon或者用第三方庫(kù)。第三方庫(kù)如果自己實(shí)現(xiàn)了Shell_NotifyIcon的互操作那前面說的cbSize、uFlags、字符集三件事依然適用換語(yǔ)言不換原理。選庫(kù)的時(shí)候可以看一眼它有沒有處理NOTIFYICON_VERSION_4沒處理的話右鍵菜單的坐標(biāo)計(jì)算在某些機(jī)器上會(huì)偏。6. 把這套東西做成不容易再出問題的結(jié)構(gòu)6.1 用一個(gè)帶狀態(tài)位的發(fā)送函數(shù)收口在項(xiàng)目里我最后的做法是把托盤的添加刪除發(fā)氣泡三個(gè)動(dòng)作集中在一個(gè)小模塊里模塊內(nèi)部維護(hù)一個(gè)bool added狀態(tài)位任何一次NIM_ADD成功才置位NIM_DELETE后清零。發(fā)氣泡的入口函數(shù)第一件事就是檢查這個(gè)狀態(tài)位沒置位就先嘗試添加一次。這樣不管上層怎么調(diào)用都不會(huì)出現(xiàn)圖標(biāo)沒了還在發(fā)氣泡的靜默失敗。同時(shí)這個(gè)模塊對(duì)外只暴露一個(gè)ShowBalloon(title, text, level)函數(shù)level是個(gè)枚舉映射到NIIF_INFO、NIIF_WARNING、NIIF_ERROR。這樣上層不需要知道dwInfoFlags的存在后面如果要換實(shí)現(xiàn)比如換成 Toast 通知改動(dòng)面只在一個(gè)文件里。還有一個(gè)小設(shè)計(jì)發(fā)氣泡函數(shù)返回一個(gè)枚舉區(qū)分發(fā)送成功、發(fā)送失敗、系統(tǒng)策略可能抑制三種結(jié)果。第三種判斷不了那么準(zhǔn)可以根據(jù)會(huì)話 ID 和通知開關(guān)做個(gè)粗略推斷。有這個(gè)返回值上層在做關(guān)鍵提醒時(shí)就能選擇走別的通道比如閃爍任務(wù)欄、改托盤圖標(biāo)顏色而不是把所有希望都押在氣泡上。6.2 退出時(shí)的清理和僵尸圖標(biāo)NIM_DELETE一定要在窗口銷毀之前調(diào)而且要用和NIM_ADD完全相同的hWnd和uID。我見過填錯(cuò)uID導(dǎo)致圖標(biāo)刪不掉的情況表現(xiàn)是程序退出后圖標(biāo)還掛在那兒鼠標(biāo)劃過才消失。這不僅僅是觀感問題——?dú)埩舻膱D標(biāo)會(huì)占用那個(gè)uID下次啟動(dòng)如果復(fù)用同一個(gè) ID行為可能不可預(yù)期。另一個(gè)清理時(shí)機(jī)是WM_ENDSESSION系統(tǒng)關(guān)機(jī)或者注銷時(shí)程序不一定能走完正常的退出流程。在這個(gè)消息里補(bǔ)一次NIM_DELETE能減少殘留。還有崩潰場(chǎng)景進(jìn)程直接掛掉不會(huì)執(zhí)行任何清理代碼圖標(biāo)一定殘留這個(gè)沒辦法只能靠系統(tǒng)自己回收。如果程序支持多實(shí)例uID的分配要小心。兩個(gè)實(shí)例用同一個(gè)hWnd和uID是不可能的hWnd天然不同但如果用了自己生成的guidItem標(biāo)識(shí)兩個(gè)實(shí)例可能會(huì)互相覆蓋。多實(shí)例場(chǎng)景建議用單實(shí)例機(jī)制直接禁掉或者在guidItem里加入進(jìn)程相關(guān)的區(qū)分信息。6.3 版本差異下的降級(jí)策略不同 Windows 版本對(duì)氣泡的處理差異實(shí)際項(xiàng)目里沒必要逐一適配但有三條底線值得守住。第一條不要在NIM_ADD的時(shí)候一次性把NIF_INFO也帶上試圖順便彈個(gè)氣泡添加和修改分成兩次調(diào)用邏輯清晰出問題也好定位。第二條NIM_SETVERSION只在確實(shí)需要 v4 的回調(diào)格式時(shí)才調(diào)調(diào)了就同步改回調(diào)解析邏輯兩者必須一起改。第三條uTimeout不要依賴需要多停留一會(huì)兒的需求用重復(fù)發(fā)送或者改成帶交互的通知來實(shí)現(xiàn)更好別指望這個(gè)字段。我在實(shí)際項(xiàng)目里的體會(huì)是托盤氣泡這個(gè)功能的問題密度和代碼量完全不成比例——二十行代碼的功能可能需要幾百行的排查經(jīng)驗(yàn)來兜底。所以能把它封裝干凈就封裝干凈別讓業(yè)務(wù)邏輯直接碰NOTIFYICONDATA后面換人維護(hù)或者系統(tǒng)升級(jí)改一個(gè)文件就夠了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美少妇高潮久久91| …亚洲黄色厕厕女女在线播…| 波多野结衣先锋影音| 9久综合网| 17c嫩草51久久91嫩草| 国产丝袜美腿美女麻豆| 男人的天堂亚洲| 亚洲精品成人动漫在线| 骚妻少妇精品性色无码四色A V| 国产精品成人无码av无码免费| 国产尤物在线三区| 日本蜜桃| 水野优香在线观看| 爱媛媛久久国产福利| 酒色综合网| 亚洲自拍欧美国产首页网曝| 精品超碰国产| 亚洲图片激情综合另类| 日韩大香蕉AV影片| 人妻人久久精品中文字幕| 伊色综合天堂色97| 99久久久无码国产精品性男| 日韩成人精品| 欧美一区二区三区不卡高清视频| 色妇91| 国产999精品久久久久久| 中文字幕乱码人妻二区三区| 亚洲欧美另类小说| 亚洲欧美综合网| 中文字幕一区 二 区 三 四 五 区日 日 骚| 国产无马视频| av一区二区三区四区| 94色色电影网| 蜜臀在线网站| 4tube欧美女厕所| 欧美日韩另类字幕中文| 美女在线H91| 亚洲欧美经典一区二区| 五月天婷精品激情| 日韩欧美午夜视频在线| 内射老妇BBWX0C0CK| 日本久久久久久久久久| 熟女91网| 欧美天天在线| 精品美女少妇一区二区| 久久久天堂| 蜜桃臀久久| 亚欧美综合网。| 啊啊啊啊啊啊好湿好爽视频| 成人网欧美风情| 91亚洲不卡一区| 97网址www| 丰满人妻一区二区三区在线| 亚洲狼狼干综合1| 大香蕉99热| 国产污视频麻豆传媒一区二区| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧苏综合色综合| 美国人人操人人操| 91人人操| 日本不卡高清视频| 无码国产精品久久久久| 久久日韩毛| 精品人人| 品亲网欧美品亲网| 超碰精品人妻狠狠干| 蜜桃狠狠色伊人亚洲综合| 欧美一区二区三区成人性生活| 国产性爱欧美性爱在线| 亚州精品人妻一二三区| 国产人人干| 性欧美| 欧美丝袜91| 91综合网在线| 人妻 中文 日韩| 国产av美女被艹的乱叫| 综合色99| 亚洲资源网| 国产午夜精品理论片a大结局| 麻豆国产原创AV色哟哟| 老熟女91av| 久草在| asc国产精品| 99视频内射三四| 四虎免费在线播放| 久久香蕉国产线看观看亚洲女人 | 日韩激情毛片一级久久久| 熟妇的味道HD中文字幕| 久久久 国产精品| 大香蕉97久久| 搡老女人老91妇女熟女| 天天综合-91入口| 久久久久国产精品久久久| 人人做,人人操,人人摸| 99热| 精品一区二区三区四区外站| 怡红院成人视频| 国产精品成人AV片免费看网站| h4610国产人妻| 日本有码影片下载| 夜夜做夜夜爽精品视频| 国产精品露脸在线观看| 中文字幕啊啊啊在线观看视频| 久久九九一区二区三区成人| 60秒不遮不挡| 丰满少妇乱子伦精品无| 最新av在线| 少妇的嫩逼图片| 色y情视频免费看| www.夜夜| 加勒比无码毛片| 人干人人人操人人摸| 日韩在线视频1234| 色姑娘综合网| 用力操死我| 91美女在线| 人妻aa| 亚洲色图20p| 久久精品操| 久久三| 久久日本熟妇熟色高清| 高颜值美女口爆高潮浪叫| 噜噜噜在线视频| 少妇 综合| 久久久精品九| 色综合尤物| 久久99草| 秋霞影音一区二区三区| 日本最新1区2区3区| 久热影视| 最新av在线| 日韩综合成人免费视频| 97超级欧美| 粉嫩av平台| 97色爱| 亚洲婷婷丁香在线| 天堂蜜桃无码视频一区二区| 久久久久白虎| 日韩内射视频| 综合五月婷婷亚洲一区| 97超碰巨乳| 久久av无码| 欧美一二三区四五区| 在线日韩日本亚洲国产| 色综和网| 久久99久久99精品免视看婷婷| 夜夜爽夜夜摸夜夜操免费视频| 日韩乱伦AⅤ| 搞中出视频在线观看| 另类图片综合| 91精品丝袜久久久久久无码人妻| 亚洲一区二区中文字幕| 999久久久久久久久| 殴美在线AⅤ| 亚洲综合校园春色| 国产精品自产拍在线观看社区| 熟女91网| 另类综合另类| 免费日韩黄片| 一区二区播放| 啊啊啊 在线观看| 久久久97| 67914在线兔费成人视频| 97在线精品| 天天久久| 天天综合网1| 日韩精品一区的| 欧美性夜| 青青草大香蕉在线视频| av72网| 亚洲免费看片| 一个人免费视频观看在线WWW| 久久久久久波多野吉衣高潮| 探花精品视频| 国产一区二区三区免费视频在性观看| 欧洲一区二区三区四区在线观看| 992这里有精品| 日韩少妇无码| 啊啊啊在线看| 2025亚洲男人天堂| 亚洲色综合| 亚洲欧美黄| 天综合网| WWW黄片COM| 欧美精品久久96人妻无码| 爱妻综合网| 五月香婷婷| 午夜激情成人在线观看| 98福利在线视频| 久久色激情一区二区三区| 久久亚洲欧美中文字幕国语| 丝袜AV一区二区三区| 国产精品视频播放| 六六久久日韩不卡| 熟女乱伦二区| 亚洲综合激情五月久久| 99热在线播放| 小情侣高清国产在线视频| 中国操逼无码| 伊人久久AV诱惑悠悠| 色超碰综合| 99999精品视频| 强奸乱伦麻豆| 久久黄色性爱视频| 草莓精品视频在线免费观看| 日韩性爱啪啪视频| 97欧美日韩综合| 日韩97视频| 99999精品成人| 亚洲少妇中文字幕网址| 午夜福利免费精品视频| AV和黑人在线播放| 精品欧美不卡在线播放| 秋霞 色色| 校园春色 亚洲| 亚洲国产精品久久久男人的天堂| 日本九九久久99播| 国内毛片无码一级毛片| 亚洲AV无码成人精品久久| 思思热免费在线视频| 91暧暧| 色牛牛AV| 色99在线| 激情五月天婷婷| 99色综合| 亚洲精品1区| 人人爽夜夜玩视频| 少妇贴图| 99视频这有这里有精品| 大伊香蕉在线视频免费| 天天综合91在线| 狠狠爱综合| 久久免费精彩视频| 97资源超碰| 天美传媒国产原创中文字幕亚洲欧美另类| 人人摸人人干| 欧美成人国产精品| 婷婷久久久精品| 色拍偷亚洲| rivers-china.com| 亚州综合网| 97色网| 国产黄片在线免费观看| 亚洲精品一区中文字幕乱码| 欧美亚洲丝袜美女电影| 91五月天| 91超碰在线观看| 精品人妻一区二区三区免费视频| 又大又大又大又粗爽高潮观看| 一道α片欧美| 免费a在线播放v| 亚洲综合色男人网| 麻豆区久久久久亚| 精…码一二三区| 亚洲av性爱电影| 国产一区在线免费播放| 五月婷婷色| 色呦呦、国产精品| 久久粉色| 奇米四色影视777久久久| 国产人妻天天干精品| 久久婷婷国产一区二区色| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 九九九九九九九九九五码| 少妇久久久免费| aa片毛片| 精品国产肉丝袜在线拍国语| 亚洲精品丝袜| AV天堂因数| 中文字幕交换人妻| 婷婷15月天青娱乐| 欧美一级在线观看成人| 影音先锋国产精品| 亚洲码和欧洲精品激情系列| 亚洲AV永久无码精品成人调教| 成人精品无码| 女色视频社区| 亚洲高潮影院| 日本欧美一区二区三区免费| 欧日韩不卡视.频| 欧美天堂亚洲电影院一区在线播放| 91精品人妻一区二区三区蜜臀| 强奸乱伦av电影| 一区二区首页| 国产免费一区2区3区| 欧美网站免费| 大屁股国产在线视频| 日韩欧美福利视频看看| 超碰97起碰| 久久久久96| 秋霞免费无码视频日韩A片| 国产尤物AV尤物在线观看不卡| 欧美97日韩| 欧美亚洲综合高清在线| 日韩黄色成人性爱| 超碰在线第一页| 天天射天天| 狠狠躁AV| 超碰免费人妻人人| 蜜臀精品1区2区| 97狠狠| 九九色色| 啊啊啊好多水| 欧美精品丝袜久久久中文字幕| 亚洲综合伊人无码久久| 久久99网站| 久久久久久99999国产精品| 国产宅男宅女在线观看| 日韩精品.久久精品.AV女优.天美传媒| 啊v在线观看视频| 性爱av在线免费观看| 欧美性综合| 黄色激情电影在线观看| 中国熟女网站| 成人亚欧免费视频| 精品白丝一区| 人人色97| 三级日韩一区二区三区| 最新9久久久9免费视频| 草草影院最新网址| 亚洲色图A| 一区二区日韩欧美久久| 国产在线播放成人免费| 久草精品国产蜜臀 | 2024人人操人人摸| 久久内射| 97超碰69| 国产精品探花色| 国产乱人妻精品入口| 久久99午夜精品一区人妻| 亚洲激情欧美色图 | 超碰成人免费| 亚洲成a人v欧美综合天堂下载| 天天综合日韩网| 欧美真人抽搐一进一出gif| 天天拍天天操| 殴美在线AⅤ| 中国和日本人色哪个不下载能放| 天天透伊人| 国产精品爱欲| 操一对老熟妇爽上天视频| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 91婷婷| 欧美在线天堂| 欧美性爱一区| 丁香五月婷婷五月| 人人摸.人人色| 日韩BBN| 一区二区日韩欧美久久| 人妻丰满熟妇一区二区三| 国产天天噜一噜久久久| 射 色综合| 精品国产一区二区三区四区在线看 | 97人人爱人人乐| 久久综合日韩亚洲欧美| 性爱乱伦网址| 伊人网青青| 情色图区| 日韩精品人妻中文字幕不卡乱码| 91色五月俺来也| 麻豆国产免费影片| 天天操人人操狠狠插| 老鸭窝在线视频播放| 9999伦理视频| 91麻豆天美国产欧美| 亚洲h片在线免费观看| 色色97爱| 欧美色图自拍| 东京热av男人的天堂| av在线人气| 黄色高清无码无码破解免费暗网| 人人艹亚洲| 国产精品com| 不卡六六在线91| 色超碰综合| 日产国产精品中文久久婷婷| 蜜桃久久综合视频| 大香蕉久久| 黄在线| 欧美一二三级精品在线| 俺去啦俺来也久久综合| 超碰97丝袜| 青草精品视频一日本久久久久网站| 日韩美脚一区二区网站| 三级片大波波| 97色欧州| 啊啊啊啊操死我了| 亚洲AV资源| 中文字幕日韩国产传媒欧美精品| 在线 制服丝袜中出 人妻| 9999免费精彩视频| 女人午夜视频777| 成人八戒网站| 亚州AV无码国产精品| 操逼视频免费日韩无码| AV不卡在线| 亚洲无码?第一页| 国产h片在线观看视频| 久久久久久久久久久免费精品| 国产午夜精品一区二区三区牛牛| 欧美亚洲天天| 九九九九九精品| 热热色中文无码| 欧美性性性| 91亚洲欧美激情| 1240青青草一区二区三区视频天爱| 精品免费囯产一区二区三区 | 97人人模人人爽人人| 亚洲av淫乱| 99久久99九九99九九九| 少妇高潮99p| 99热这里只有精品地址| 亚洲精品视频二区| 宅男91视频在线播放| 中文字幕丝袜人妻| 国产欧美黑人丰满在线| 国产精品久久久久久夜夜夜夜| 天操天操夜操夜月月年年操操| 超碰在线综合97| 欧美色图另类图片| 中文?日韩?免费?精品| 国产又猛又粗又爽又黄| 色情成人五月天| 欧美日日网| 天天日天天舔东京热 | 无码免费在线观看黄色片| 欧美亚洲尤物久久| 五月天婷婷久久| 四虎影库国产精品免费| 欧美亚洲宗合色性图| 久久久性爱| 性色AV网站| 秋霞久久亚洲精品成人| 国产一区96在线| 欧州激情视频在线一区二区| 亚洲高清欧美总合| 岛国在线免费视频| 亚洲图片偷拍视频区| 成人在线视频二区| 综合九九| 日韩Va亚洲va欧美Ⅴa久久| 亚洲五月婷婷| 亚州综合AⅤ| 欧美色97| 国产久久成人| 国产精品一区二区在钱播放| 丰满人妻一区二区中文| 国产精品不卡高清在线观看| 亚洲 欧美日韩 另类| 九久9热| 激情四射婷婷六月天| 久久专区| 久久亚洲婷婷| 操老熟女AV| 亚洲精品国产熟女| 久久25| 91bbbbbb| 91人妻Pr| 色香91| 天天做日日做天天欢。| 成人性爱AV在线免费观看| 中文?日韩?免费?精品| 婷婷在线播放| 欧美碰碰综合色| 自慰白浆在线观看| av橘色网站| 国产九九九九九九九九| 日韩熟女视频二区| 人妻中文字幕日韩电影| 久久久久久久综合,国产| 日韩欧美aⅴ综合网站发布| 91国产大片| 综合伊人网12色| 久久久久久久久久黄色网| 手机看片日韩人妻| 神马久久啊啊| 成人在线视频网| 羞涩视频| 日韩一级二级三级免费看完整版国语版 | 99热在线只有精品| 亚洲资源站| 五月天久久综合网| 亚洲一区日韩| 国产精品久久成人免费| 久偷拍| 九九国产| 97亚洲精品超碰| 亚洲人妻久久| 免费伦费视频在线观看| 国产小视频91| 花野真衣| 青青草在线视频美女| 日韩综合97p| 8x福利精品第一福利视频导航| 亚洲国男人的天堂| 97中文超碰| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 中文乱码99| 日韩猛交| 亚洲综合113页| 亚洲人妻在线一区| 青青伊人加勒比海| 丁香五月婷婷基地| 中文字幕AV中出| 天天添天天干电影| 亚洲日本激情| 97国产伦理| 亚洲砖码砖专无区2023| 嗯嗯啊好爽| 国产三级中文有码在线视频| 亚洲九九视频| 久久草草欧美精品| 中文字幕成人理论在线| 熟女人妻一区二区三区免费看| 久久五月丁香| 日产欧美电影一区二区三区| 老女人91| 综合日韩激情另类图片| 国产精品免费视频不卡| 亚洲欧美999| 性欧美999| 330Dv国产女人终合视频极品人与兽 | 思思热免费在线视频| 久久久九| 肉丝中文无码高清| 嗯嗯,啊啊,国产精品| 啊嗯好大视频在线观看| 男人干美女| 夜夜青青无码影院| 亚洲另类天堂| 综合国产影视三级| 啪啪自拍九九综合| 九九九国产| 91处女在线观看| 91bbb| 日韩强奸av| 欧美丝袜91| 精品九九| 婷婷色影院| 一本精品日本在线视频精品| 色婷婷日韩精品一区二区三区| 嗯嗯啊啊亚欧精品| 亚洲 国产 精品一区| 伊人网免费视频| 午夜男人的天堂| 欧美第二页午夜| 超碰久在线天天做| 国产乱人妻精品入口| 小草av不卡亚洲二区| 人妻激情偷乱视频一区二区三区 | 北野未奈加勒比av| 顶级丝袜熟女一区二区三区| 亚洲综合色图欧美| av网站在线观看了| 久久久久久久97| 国产日韩在线播放av| 韩日欧亚a级| 欧美日韩 强奸乱伦| 日本一级特级毛片视频| 亚洲伊人青青草| aaa淫乱视频| 亚洲最大91网| 91性高朝久久久久久久久| 久久的网站啊啊啊啊啊| 超碰这里有精品| 人人 操人人 操人人| 中文字暮97| 中文三一区| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 刺激性视频黄页| 屌逼麻豆| www.99热| 久草免费在线一区二区| 亚洲囯产精品女人久久久| 久欲AV| 久久啊啊啊| 中日韩久久久| 黑丝少妇麻豆| 91无遮挡| 欧美中出1| 九一亚洲国产免费| 久久69| 人妻少妇视频在线播放| 欧美人妻一区二区| 婷婷av在线中文字幕| 麻豆这里只有精品| 欧亚日韩三区| 97人妻色| 久久99黄色卞西瓜| 丝袜美腿91| 亚洲 欧美 小说| 97色综合中文网| 老熟妇乱轮| 亚洲国产精品成人综合| 亚洲最大AV网| 2018色综合天天操| 欧美性后入| 欧美日韩亚洲国产中文永久天天看| 加勒比综合a∨| 唯美清纯 妖精视频| A片大香蕉在线| 国产日韩精品人妻久久久久色欲网站| 一区二区三区机械有限公司| 香蕉婷婷| 亚洲精品天天影视综合网 | 99超碰网| 秋霞一级鲁丝片A片| 中国一级特黄大片护士 | 日韩少妇无码| 国产无遮挡| 成人精品欧洲亚洲| 超碰2017| 亚洲国产成人高清在线| 天操老女人| 亚洲a色| 久久男人精品| 青青操青娱乐| 天天搞欧美| 日欧操屄| 狠狠操夜夜操蜜桃视频三区| 激情婷婷丁香| 久久久久久性爱免费视频| 精品久久久久av影院| 啊啊啊啊啊啊在线看| 蜜桃精品一区二区三区久在线| 啊啊啊好多水| 精品视频免费在线一区| 久久发布国产伦子伦精品| 综合少妇网| 国产aⅴ无码片毛片一级网站| 麻豆天美国美国产| 日本黄色XXX| A 天堂| 欧美日韩性感| 密臀成人视频久久久| 亚洲欧美在线观看免费| 久久天天躁日日躁狠狠躁 | 免费看片黄| 欧美成不卡网| 极品国产内射| 久久久精品国产亚洲伊人| 青青草原香蕉日本Ap| 欧美精品日韩久久久九| 天天干天天日天天射黄色片| 精精夜夜| 97国产超碰| 久操热| 97久久久久久久久久| 囯产操逼片| 日本 情色 1区2区3区| 国产无码精品高清| 性色av一区二区| 青青青国产手线观看视频2| 免费视频在线观看啊啊啊啊啊| 97爱综合| 大香蕉在线视频15| www久久国产精品| 又黄又粗又硬又长又大| 亚洲无码视频免费在线观看网址!| 欧美日韩99精品麻豆传媒| 欧美精品系列| 狠狠干综合| 呦呦一区| 91日日| 少妇3P性爱自拍| 欧美 综合 亚洲| 黑人精品成人一区二区三区| 久久97视频| 99久久九九| 久操精品| 久久香蕉超碰97国产精品| 亚洲性爱免费电影| 老色鬼成人精品视频下载大在线观看| 久久精品国产亚洲AV嘿嘿| 91熟女少妇| 精品一区二区三区蜜桃臀赵总 | 亚洲日韩精品久久久久一区壹牛| 久久久穴999| 久久精品一区二区三区蜜桃臀| 亚洲AV成人在线| 97色网| 亚洲欧洲色情高清| 亚洲精品乱码久久久久久蜜桃麻豆 | 超碰97综合| 久久內射| 99热这里只有精品地址| 呦呦一区| 国产超碰欧美| 懂色综合久久久| 亚洲第一狼人丝袜美女另类| 久久久久极品| 91女人的网站| 久精品无码av一区二免费国产在线观看| 亚洲精品一区二区三区在线播放| 粉嫩久久久极品| 狼人综合婷婷激情四射 | 麻豆AV短剧| 欧美视频在线视频免费va| 日韩免费a级毛片无码a∨| 欧美天堂超碰97| 视频二区美腿丝袜制服人妻欧美| 欧美精品23| 精品天堂| 天天热精品| 久久婷婷国产一区二区色| 夜间福利片1000无码| 日本一级真人黄色性爱视频| 免费亚洲国产精品久久一区| 日本免费一区二| 亚洲人综合19| 国产精品97超碰| 1204av韩国| 日本91白丝| 超碰成人国产| 久久人人爽爽人人爽人人片αV| 男人的天堂Va| 青草园大香蕉| 丝袜av一区二区三区| 婷婷久久综合| 激情看片网站| 亚洲三区视频| 91搞逼视频| 老司机午夜精品视频| 天天搞欧美| s片在线观看| 极品少妇99| 五月天婷婷综合网| 色婷婷导航| 国产精品久久久久无码AV会牛| 国内偷拍精品一区二区| 精品一区二区三区麻豆| 久久久9 9 9精品| 日韩无码AB| av亚洲天堂资源网站| 看看小穴| 天天综合网国产| 男人亚洲91首页在线| 一级A啪啪啪啪| 色综合网1| 欧美综合区| 日本在线播放不卡一区| 黄片aaaaa一区| 日韩一级二级三级免费看完整版国语版 | 久9久精品视频| 色五月69夫妻| 欧美性暴力猛交XXXX| 欧美久久毛片基地| 爱干爱射网啊啊啊| 久久熟妇五十路一区| 亚91亚洲网| 99久久com免费视频′| 激激五月| 九九天堂| 欧美亚洲20p| 亚洲永久永久永久永久一级一级一级精品| 91精品久久久久久77777| 日本熟妇人妻中出视频| A 天堂在线观看视频| 强奸乱伦Av网| 日本福利二区视频| 9九九九九视频在线观看| 婷婷色中文字幕| 天天综合,91综合永久| 欧美日韩国产传媒在线精品| 国产原创精品| 欧美日韩亚洲天堂网| 欧洲精品久久| 欧美综合色综合| 熟女熟妇一区二区三四区| 91天堂| 精品国产Av无码久久久亚洲| 超碰无码加勒比| 欧美日本中字另类在线| 国产农村一一级特黄毛片| 色五月网址| 殴美,日韩国产伦精品| 五月天伊人| 国产日产欧产美韩系列麻豆免费| 91热色| 视频国产欧美在线播放| 日韩操逼HD| 午夜寂寞欧美| 久久国产三区| 九九九九九用不成了| 综合网97| 老熟女网站| 91色综合| 国产欧美岛国精品一区| 91亚州日韩高清| 清柠毛片| 亚洲熟女乱色一区二区三区久久久| 夜夜久久久| 翔田千里AV无码秘 三区| 激情网色| 99国产精品人妻人伦| 中国小夫妻勾搭露脸淫荡对白| 国产9l 大屁股| AA级电影三区| 九九碰九九爱97超碰| 人人性爱视频免费| 国产美女高潮叫床视频| 97人肏| 91热色| 日本三级A片网站com| 欧美东京热精品A∨| 欧美三级免费伊人| 丝袜AV一区二区三区| 无码137片内射在线影院| 亚洲色诱惑| 色臀aV| www国产无码| 激情五月综合| 蜜臀aV午夜一区二区三区| 91成人18| 色婷婷成人| 玖玖超碰熟| 7777奇米影视久久| 天天操av懂色| 久一区久久蜜桃| 岛国艾薇凹凸视频天堂| 青青草久久一区网| J?P?NESEHD熟女熟妇伦| 亚洲精品美女久久久久久久久| 91路www| 日韩在线一区二区| 区日韩亚洲乱码av电影| 婷婷8月天青娱乐| 簧片免费看视频| 亚洲少妇色图自慰直播| 日韩av电影成人在线| 大香蕉男女超碰精品在线| 99re6在线视频精品免费完整版安卓版| 亚洲性爱乱操x| 中文字幕艹艹| 久久高潮妇女视频| 五月婷婷无码| 精品国产乱子伦一区二区三区,精品一| 精品久久久久av影院| 美女诱惑在线一区| 在线播放一级无码视频| 打av高清| 99久国产精品午夜性色福利| 亚洲中文字幕乱码无码一区二区| 亚洲另类春色| 亚洲情色电影网| 91精品国产91久久青草| 91呆哥人妻| 91男女| 久久久久久国产精品| 天美传媒av在线| 天天色,天天干,天天干| 超碰日韩美妻| 国产亚州日韩欧美看片| 九九热午夜欧亚国产视频| 太久视频| 99热18这里只有精品| 国产熟女完整版中字| 粉嫩AV输入| 黑丝自慰喷水网站| 九一亚洲国产免费| 超碰97男女| 五月天啪啪| 青青11操操操操操操操操| 亚洲丝袜少妇在线| 韩国三级理论在线| 精品9区| 草草影院日本第一页| 国产成人天堂| 爽极品影院| 91性| www.久久制服糖| 搡老女人老91妇女熟女| 国产成人+综合亚洲+天堂| 97免费在线观看| 黄色高清久久无码依人| 艹少妇网站| 成人性交午夜免费片| WWW4虎| 国产精品久久久久中文字幕| 97超级久久| 啊啊啊好湿国产一二| 欧美一级黄片视频在线| 99久久久| 日日碰狠狠添天天爽超| dy888午夜老子影视达达兔| 草伊人高潮喷水超碰| 欧美在线观看综合国产| 欧美78P| 精品9区| 美女啊啊啊啊pc| 成人小说视频在线精品欧美| 蜜屁av| 久久国产对白激情浪潮| 日韩不卡毛片Av免费高清| 97免费在线观看视频| 校园春色亚洲无码| 91原创在线观看| 99精品视频在线观看免费| 美女9118禁| 欧美天堂亚洲电影院一区在线播放| 欧美一区二区亚洲天堂| 26uuu偷拍亚洲欧洲综合| 夜夜夜夜久久久久| 夜夜嗷嗷一区二区| 亚洲激情网一二三四区| 国产亚洲精品第一最新| 最近2018中文字幕在线高清第一页| 精品无码一区二区人妻久久蜜桃| 日韩内射视频| 大香蕉啪啪啪| 午夜偷拍久久熟女| 手机在线免费看的av| 欧美 亚洲 在线| 中文字幕久久精视频久久大全| 夜夜嗨AV一区天天| www.色操逼| 嗯啊抽插大香蕉网页| 91黄站| 亚洲中文字幕av| 欧亚日韩综合精品国产| 九九九九一区| 亚洲AV成人无码一二三久久| 亚洲天天影视色综合| 久久久五月天| 国产精品岛国片在线观看| 国产又猛又粗又爽又黄| 国产精品粉嫩福利在线| 人妻无码久久一区二区三区免费| 亚洲熟妇图片| 亚洲 综合 欧美| 成人性爱电影网| 亚洲精品a人片在线观看视| 欧美一级久久久丰满| 亚欧美综合| 欧美激情黑人| 国产AV人人夜夜澡人人爽麻豆| 欧美天堂超碰97| 欧美无圣光在线| 美女97超碰| 人妻人人澡人人爽人人| 午夜免费视频1000| 久久98| 午夜免费视频1000| 亚洲无套久久嗯嗯| 97超碰国产精品| 97视频在线观看播放与子乱对白在线……| 99在线精品视频| 大香蕉操久久| 志村玲子视频一区二区| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 操狠狠| 高清不卡国产| 国产操偷| 无码高清专| 国产精品成人无码av无码免费| 操逼操逼逼操操逼91| 园内精品自拍视频在线播放| 看日韩操逼| 久久老子无码午夜伦不卡| 中文字幕日韩人妻视频一区二区三区| 中文字幕五月婷婷免费| 蜜桃视频成a人v在线| 国内毛片免费h片在线| 亚洲国产日韩欧美熟妇在线| 亚洲丝袜色| 伊人久久大香蕉线AV五月天| 男人的亚洲天堂| 在线情色电影 91大| 日本一二三免费久久| 日日爱99| 久久超碰国产一区二区三区| 欧美大波激情xxxx| 国产精品香蕉热久久新品| 五月丁香激情综合网| caopeng97| 欧美少妇色综合| 91青青| 黄色香蕉视频网站一区| 亚洲1区2区三区高清中文字幕| 五月天丁香网| 欧美性暴力猛交XXXX| 久久9精品网站| 婷婷午夜清品久久久久久久性色视频观| 精品国产Av无码久久久亚洲| 亚洲天堂7777| 欧美性天天影视| 东京热av男人的天堂| 亚洲图片欧美偷拍| 俄罗斯一区二区视频在线观看| 中文字幕精品一区二| 九九亚洲视频| 粉嫩AV一区夜夜嗨| 久久久久久九九九九九| 国产午夜精品理论片一二三区区| 精品伊人久久久大香线蕉小说| 九九久久一区二区三区| 人人澡人人澡人人| 欧美999| 国产九九九九九九九九| 亚洲丝袜B诱惑| 精品人妻一区二区蜜桃视频 | 香蕉人人操tv| 亚洲骚女一区二区三区| 天欧美在线| 性爱视频免费网址| 99视频只有精品| 欧美夜色| 久久性爱视频免费看| 欧美亚洲中文字幕| 国产青青美女玩逼视频| 高清孕妇孕交 交| 亚洲精品aa久久伊人| 男插女青青影院| 日韩啪啪视频| 国产成人bd在线观看| 97久久精品国产| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 亚洲AV成人无码久久精品播放| 少妇诱惑视频| 国产精品诱惑| 日韩中文字幕视频在线观看| 色大香蕉97N| 国产偷拍网站| 亚洲欧美一区二区三区在钱蜜桃 | 日韩另类| 亚洲精品久久久久久| 在线观看AV片| 成人影 天天操 亚洲| 99av| 丁香六月婷婷久久综合| 啊啊啊水好多| 国产精品69人妻无码久久久| 综合激情97 | 久九干| 久久69| 亚洲人精| 国产色产精品在线观看| 五月天丁香欧洲日韩| 欧美亚洲首页| 91美女丝袜诱惑视频| 精品传媒在线一区| 2010男人的天堂| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 日本操逼视频导航| 国产第二页| 老司机射| 久久精品成人| 看日韩操逼| 国产精选视频| 精品少妇后入一区二区三区四区人妻巨乳| 奶水 人妻 哺乳 在线| 国产无马av| 亚洲高清欧美总合| 亚洲色图超碰在线| 尤物av网站免费在线播放| 精品国产乱码久久久久A| 天天澡天天爽日日AV| 操我啊啊啊啊啊| 一级片在线观看高清无码| 熟女网站最新| 在线观看中文av字幕| 午夜经典| 91在线美女| 在线观看高清AV| 五月开心久久AV官网| 国产成人精品亚洲日本| 97这里有精品| 亚洲欧美日韩有码| 亚洲精品一区二区精品| 99re6国产精品99re| 日本人妻A片成人免费看片| 97视频网站| 精品乱码久久久久| 青娱乐国产盛宴视频| 蜜臀久久久99久久久久 | 色情婷婷久久五月天| 国产尹人在线视频免费| 97久久久网站| 蜜桃臀 后入 一区 二区 三区 在线| 亚洲成aⅴ人片不卡无码| 国产精品电| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 97亚洲在线| h在线看免费版在线看| 欧美少妇色图| 午夜AV污污污| 亚洲 欧美都市激情| 亚洲精品性爱片| 97欧美色| 亚洲精品天天影视综合网 | 国产又长又大又粗的视频| 人人色人人操在线| 一级做受视频免费是看美女| 熟女久久久| 亚州操操穴网| 黄片免费看的| 亲子敌伦对白在线播放| 中文字幕精品专区搜索结果91| 91人妻人人妻| 自拍鲍鱼一区在线高清观看免费| 欧美色网络| 啊啊啊好疼| 亚州成人a∨| 婷婷五月成人| 久久综合资源一区二区| 亚洲欧美91| 91精品国产乱码| 91成人在线| 东京热激情视频一二三区| 天天草天天日| 干美女人妻| 亚洲综合99999| 天综合网| 十八禁啪啦拍视频无遮挡| 日本人妻最新在线中| 国产农村妇女毛片精品久久| 亚洲精品一区二区免费在线观看| 人人手机欧洲亚洲国产人妻| 亚洲国产综合图区中文字幕 | 涩涩这里只有精品视频| 天堂亚洲精品| 狠狠躁日日躁夜夜躁A| 成年男人的天堂| 亚洲经典啪啪| 久久AV无码网址| 亚洲好看强奸乱伦| 亚洲伊人久久综合97| 熟妇人妻精品一区二区| 日日夜夜模| 东北老女人的激情视频| 久久手机视直播| 午夜精品久久久久久久男人的天堂 | 99综合| 国产精品探花在线| 美女极品一区二区三区| 飘花国产午夜精品不卡| 午夜国产成人精品视频| 国产深夜福利| 久久久亚洲精品中文字幕人妻| 91痴汉| 久久久啊啊啊| 校园激情狠狠四射| 插插综合网天天影视网| 激情小说亚洲图片| jiujiujiujingpin| 天堂涩涩| 懂色影视久久| 91热色| 国产麻豆一区二三区| 91N综合网在线| 亚洲中文字幕一区| 208天天久久九九九| 蜜臀一二三区| 久久久精品一区二区| 国产欧美日产一区二区三区 - 国产欧美日| 一区二区三区色综合| 99re6国产精品99re| 黑人粗大V S日韩女优视频| 国产精品久久久久久久久久久久久久久 | 麻豆蜜桃视频在线观看|