亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > VBScript > 正文

BAT批處理、VBScript批量安裝字體腳本分享

2020-06-26 18:40:00
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了BAT批處理、VBScript批量安裝字體腳本分享,本文介紹了幾種方法來實現需求,并對每一種的測試結果做了說明,需要的朋友可以參考下
 

根據新系統要求,經常要部署一些原來系統里沒有的字體,原先我為了圖省事經常會要求用戶手動安裝字體文件,雖然Windows的易用性做得相當不錯,但是仍然要照顧一些不會安裝字體的人,其實把這些字體打包進安裝包更為方便,不過我覺得總不能每有新字體都要搞個安裝包那么麻煩吧。更重要的是仍然有人會問我字體怎么安裝,以前清一色的Windows XP系統,我倒也方便,直接告知打開控制面板找到字體文件夾,把要安裝的字體拖進去即可;現在有Windows 7還是Windows 8等各種版本Windows系統,對于安裝字體這個小小操作我也開始分情況討論了。

使用特殊文件夾或者DESKTOP.INI方法

使用特殊文件夾方法

Windows保留了一種特殊文件夾引用,比如在Windows XP的情況下,新建一個文件夾,然后在文件夾重命名后綴.{645FF040-5081-101B-9F08-00AA002F954E}(注意以點號分隔),然后這個文件夾就變成了回收站的一個引用,當我們點擊進去的時候實際上進去的是回收站。

好了我在想對于字體是不是也可以搞個文件夾引用,這樣直接叫用戶把要安裝的字體拖進去即可,大家注意到這個成功的關鍵在于后面那段長長的ID號,那個學名叫做GUID,通??梢酝ㄟ^注冊表查詢,主要路徑在于:

復制代碼代碼如下:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer

比如回收站就位于下面的注冊表路徑:
復制代碼代碼如下:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Desktop/NameSpace

對于字體我也在如下路徑找到了:
復制代碼代碼如下:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/ControlPanel/NameSpace

 

字體的GUID是{D20EA4E1-3957-11d2-A40B-0C5020524152},但是當我新建一個文件夾并且名稱以.{D20EA4E1-3957-11d2-A40B-0C5020524152}(注意點號)結尾,當我點進去時卻不能進入字體文件夾,于是這個想法被驗證為失敗。

使用Desktop.ini方法

其實建立特殊文件夾還有一個方法就是采用文件夾的Desktop.ini,抱著試試的心態,我在文件夾內部建立了Desktop.ini,內容如下:

復制代碼代碼如下:

[.ShellClassInfo]
IconFile=%SystemRoot%/system32/SHELL32.dll
IconIndex=38
CLSID={D20EA4E1-3957-11d2-A40B-0C5020524152}

 

很遺憾,依然不能直達字體目錄,所以這一種辦法也是行不通的。

本著方便群眾的想法,我決定做個小小的程序,當然我首先求助了萬能的Google。原本想搞個桌面程序來著,也找到老外現成的代碼FontReg – Windows Font Registration & Installation Utility。后來隨著研究的深入,突然發現這玩意兒用批處理或者腳本實現更為簡單。

CMD或BAT批處理安裝字體

通常情況下字體文件夾位于C:/Windows/Fonts,轉換為帶環境變量的通用版本為%SystemRoot%/Fonts/,我們也許想當然的認為將字體復制到這個路徑下就完成了安裝,其實不然,系統安裝字體不單單是將字體文件復制到這個路徑下,其還進行了其他操作,比如更新注冊表字體列表。通常情況下這個列表位于路徑如下:

復制代碼代碼如下:

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Fonts

 

于是對于批處理來說,網上安裝字體流程大概分為兩派,首先第一步復制到Fonts文件夾,這個是公認的,第二步則有不同:一派認為應該更新注冊表;另一派則傾向于使用AddFontResource這個函數。

使用AddFontResource更新系統字體列表

什么是AddFontResource函數?這是個Win32 API函數,位于gdi32.dll動態鏈接庫上,MSDN參考見這里。我們可以編譯調用這個函數,什么?“編譯”?貌似和這里講的批處理差遠了吧,別急,好在這個函數簽名不復雜,其有個AddFontResourceA的ANSI版本,這樣給我們直接外部通過rundll32調用提供了可能,例如下面的代碼片段:

復制代碼代碼如下:

rundll32.exe gdi32.dll,AddFontResourceA %SystemRoot%/Fonts/字體.ttf

 

具體的代碼如下(來源不詳,將該批處理和TTF字體位于同一路徑下,然后雙擊即可):

復制代碼代碼如下:

for /f %%a in ('dir /x /b *.ttf') do (
dir %windir%fonts%%a>nul 2>nul||(copy %%a %windir%fonts>nul 2>nul&rundll32.exe gdi32.dll,AddFontResourceA %windir%fonts%%a)
)

 

實際操作來看,這段代碼在我的電腦上沒有產生任何效果。

使用注冊表更新系統字體列表

參考《Windows 7: Installing fonts via command line/script》這個帖子,找到下面的代碼:


 

  1. @ECHO OFF 
  2. TITLE Adding Fonts.. 
  3. REM Filename: ADD_Fonts.cmd 
  4. REM Script to ADD TrueType and OpenType Fonts for Windows 
  5. REM By Islam Adel 
  6. REM 2012-01-16 
  7.   
  8. REM How to use: 
  9. REM Place the batch file inside the folder of the font files OR: 
  10. REM Optional Add source folder as parameter with ending backslash and dont use quotes, spaces are allowed 
  11. REM example "ADD_fonts.cmd" C:/Folder 1/Folder 2/ 
  12.   
  13. IF NOT "%*"=="" SET SRC=%* 
  14. ECHO. 
  15. ECHO Adding Fonts.. 
  16. ECHO. 
  17. FOR /F %%i in ('dir /b "%SRC%*.*tf"') DO CALL :FONT %%i 
  18. REM OPTIONAL REBOOT 
  19. REM shutdown -r -f -t 10 -c "Reboot required for Fonts installation" 
  20. ECHO. 
  21. ECHO Done! 
  22. PAUSE 
  23. EXIT 
  24.   
  25. :FONT 
  26. ECHO. 
  27. REM ECHO FILE=%~f1 
  28. SET FFILE=%~n1%~x1 
  29. SET FNAME=%~n1 
  30. SET FNAME=%FNAME:-= % 
  31. IF "%~x1"==".otf" SET FTYPE=(OpenType) 
  32. IF "%~x1"==".ttf" SET FTYPE=(TrueType) 
  33.   
  34. ECHO FILE=%FFILE% 
  35. ECHO NAME=%FNAME% 
  36. ECHO TYPE=%FTYPE% 
  37.   
  38. COPY /Y "%SRC%%~n1%~x1" "%SystemRoot%/Fonts/" 
  39. reg add "HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Fonts" /v "%FNAME% %FTYPE%" /t REG_SZ /d "%FFILE%" /f 
  40. GOTO :EOF 
?

仔細閱讀代碼后發現,這段批處理在復制字體并更新注冊表后居然要重啟電腦(汗~),這種做法顯然對最終用戶不太友好,綜合以上我決定放棄批處理的方式安裝字體。

使用VBSCRIPT安裝字體

最后我還是干回老本行,使用VBScript腳本來實現這個功能。腳本的重點是采用Shell.ApplicationActiveX/COM對象實現復制到系統特殊文件夾下,實際上這個操作和用戶手動復制到字體文件夾下一樣,系統會自動為我們安裝字體而不需要我們顧及注冊表更新的問題,對于Vista及更高版本的系統來說,我參考了《The true ultimate font install for Windows 7 and XP vbs》的做法,使用.InvokeVerb("Install")直接調用字體文件對象的安裝命令。

詳細的代碼如下(請復制的朋友手下留情,保留版權信息,謝謝):

 

復制代碼代碼如下:

'
' File Description : VBScript Windows Fonts Installer
'
' Copyright (c) 2012-2013 WangYe. All rights reserved.

' Author: WangYe
' This code is distributed under the BSD license
'
' Usage:
'    Drag Font files or folder to this script
'    or Double click this script file, It will install fonts on the current directory
'    or select font directory to install 
' *** 請不要移除此版權信息 ***
'
Option Explicit
 
Const FONTS = &H14&
Const HKEY_LOCAL_MACHINE = &H80000002
Const strComputer = "." 
 
Const SHELL_MY_COMPUTER = &H11
Const SHELL_WINDOW_HANDLE = 0
Const SHELL_OPTIONS = 0
Function GetOpenDirectory(title)
    Dim ShlApp,ShlFdr,ShlFdrItem
 
    Set ShlApp = WSH.CreateObject("Shell.Application")
    Set ShlFdr = ShlApp.Namespace(SHELL_MY_COMPUTER)
    Set ShlFdrItem = ShlFdr.Self
    GetOpenDirectory = ShlFdrItem.Path
    Set ShlFdrItem = Nothing
    Set ShlFdr = Nothing
 
    Set ShlFdr = ShlApp.BrowseForFolder _
                (SHELL_WINDOW_HANDLE, _
                title, _
                SHELL_OPTIONS, _
                GetOpenDirectory)
    If ShlFdr Is Nothing Then
        GetOpenDirectory = ""
    Else
        Set ShlFdrItem = ShlFdr.Self
        GetOpenDirectory = ShlFdrItem.Path
        Set ShlFdrItem = Nothing
    End If
    Set ShlApp = Nothing
End Function
 
 
Function IsVista()
    IsVista = False
    Dim objWMIService, colOperationSystems, objOperationSystem
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & strComputer & "/root/cimv2")
    Set colOperationSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
        For Each objOperationSystem In colOperationSystems
            If CInt(Left(objOperationSystem.Version, 1)) > 5 Then
                IsVista = True
                Exit Function
            End If
        Next
    Set colOperationSystems = Nothing
    Set objWMIService = Nothing
End Function
 
Class FontInstaller
 
    Private objShell
    Private objFolder
    Private objRegistry
    Private strKeyPath
    Private objRegExp
    Private objFileSystemObject
    Private objDictFontFiles
    Private objDictFontNames
    Private pfnCallBack
    Private blnIsVista
 
    Public Property Get FileSystemObject
        Set FileSystemObject = objFileSystemObject
    End Property
 
    Public Property Let CallBack(value)
        pfnCallBack = value
    End Property
 
    Private Sub Class_Initialize()
        strKeyPath = "Software/Microsoft/Windows NT/CurrentVersion/Fonts"
 
        Set objShell = CreateObject("Shell.Application")
        Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
        Set objFolder = objShell.Namespace(FONTS)
        Set objDictFontFiles = CreateObject("Scripting.Dictionary")
        Set objDictFontNames = CreateObject("Scripting.Dictionary")
        Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!//" &_ 
                     strComputer & "/root/default:StdRegProv")
        Set objRegExp = New RegExp
            objRegExp.Global = False
            objRegExp.Pattern = "^([^/(]+) /(.+$"
 
        blnIsVista = IsVista()
        makeFontNameList
        makeFontFileList
    End Sub
 
    Private Sub Class_Terminate()
        Set objRegExp = Nothing
        Set objRegistry = Nothing
        Set objFolder = Nothing
            objDictFontFiles.RemoveAll
        Set objDictFontFiles = Nothing
            objDictFontNames.RemoveAll
        Set objDictFontNames = Nothing
        Set objFileSystemObject = Nothing
        Set objShell = Nothing
    End Sub
 
    Private Function GetFilenameWithoutExtension(ByVal FileName)
        ' http://social.technet.microsoft.com/Forums/en-US/ebe19301-541a-412b-8e89-08c4263cc60b/get-filename-without-extension
        Dim Result, i
        Result = FileName
        i = InStrRev(FileName, ".")
        If ( i > 0 ) Then
        Result = Mid(FileName, 1, i - 1)
        End If
        GetFilenameWithoutExtension = Result
    End Function
 
    Private Sub makeFontNameList()
        On Error Resume Next
        Dim strValue,arrEntryNames
        objRegistry.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrEntryNames
        For Each strValue in arrEntryNames 
           objDictFontNames.Add objRegExp.Replace(strValue, "$1"), strValue
        Next 
        If Err.Number<>0 Then Err.Clear
    End Sub
 
    Private Sub makeFontFileList()
        On Error Resume Next
        Dim objFolderItem,colItems,objItem
        Set objFolderItem = objFolder.Self
        'Wscript.Echo objFolderItem.Path
        Set colItems = objFolder.Items
        For Each objItem in colItems
            objDictFontFiles.Add GetFilenameWithoutExtension(objItem.Name),objItem.Name
        Next
        Set colItems = Nothing
        Set objFolderItem = Nothing
        If Err.Number<>0 Then Err.Clear
    End Sub
 
    Function getBaseName(ByVal strFileName)
        getBaseName = objFileSystemObject.GetBaseName(strFileName)
    End Function
 
    Public Function PathAddBackslash(strFileName)
        PathAddBackslash = strFileName
        If objFileSystemObject.FolderExists(strFileName) Then
          Dim last
          ' 文件夾存在
          ' 截取最后一個字符
          last = Right(strFileName, 1)
          If last<>"/" And last<>"/" Then
            PathAddBackslash = strFileName & "/"
          End If
        End If
    End Function
 
    Public Function isFontInstalled(ByVal strName)
        isFontInstalled = objDictFontNames.Exists(strName) Or objDictFontFiles.Exists(strName)
    End Function
 
    Public Function isFontFileInstalled(ByVal strFileName)
        isFontFileInstalled = isFontInstalled(objFileSystemObject.GetBaseName(strFileName))
    End Function
 
    Public Sub installFromFile(ByVal strFileName)
        Dim strExtension, strBaseFileName, objCallBack, nResult
        strBaseFileName = objFileSystemObject.GetBaseName(strFileName)
        strExtension = UCase(objFileSystemObject.GetExtensionName(strFileName))
 
        If Len(pfnCallBack) > 0 Then
            Set objCallBack = GetRef(pfnCallBack)
        Else
            Set objCallBack = Nothing
        End If
 
        If strExtension = "TTF" Or strExtension = "TTC" Or strExtension = "OTF" Then
            If Not isFontInstalled(strBaseFileName) Then
                If blnIsVista Then
                    Dim objFont, objFontNameSpace
                    Set objFontNameSpace = objShell.Namespace(objFileSystemObject.GetParentFolderName(strFileName))
                    Set objFont = objFontNameSpace.ParseName(objFileSystemObject.GetFileName(strFileName))
                        'WSH.Echo objFileSystemObject.GetParentFolderName(strFileName)
                        objFont.InvokeVerb("Install")
                    Set objFont = Nothing
                    Set objFontNameSpace = Nothing
                Else
                'WSH.Echo strFileName
                objFolder.CopyHere strFileName
                End If
 
                nResult = 0
            Else
                nResult = 1
            End If
        Else
            nResult = -1
        End If
 
        If IsObject(objCallBack) Then
            objCallBack Me, strFileName, nResult
            Set objCallBack = Nothing
 
        End If
    End Sub
 
    Public Sub installFromDirectory(ByVal strDirName)
        Dim objFolder, colFiles, objFile
        Set objFolder = objFileSystemObject.GetFolder(strDirName)
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
            If objFile.Size > 0 Then
                installFromFile PathAddBackslash(strDirName) & objFile.Name
            End If
        Next
 
        Set colFiles = Nothing
        Set objFolder = Nothing
    End Sub
 
    Public Sub setDragDrop(objArgs)
        ' http://msdn.microsoft.com/en-us/library/c488f3e0(v=vs.84).aspx
        Dim i
        For i = 0 to objArgs.Count - 1
           If objFileSystemObject.FileExists(objArgs(i)) Then
                installFromFile objArgs(i)
           ElseIf objFileSystemObject.FolderExists(objArgs(i)) Then
                installFromDirectory objArgs(i)
           End If
        Next
    End Sub
End Class
 
Sub ForceCScriptExecution()
    ' https://stackoverflow.com/questions/4692542/force-a-vbs-to-run-using-cscript-instead-of-wscript
    ' http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html
    Dim Arg, Str
    If Not LCase( Right( WScript.FullName, 12 ) ) = "/cscript.exe" Then
        For Each Arg In WScript.Arguments
            If InStr( Arg, " " ) Then Arg = """" & Arg & """"
            Str = Str & " " & Arg
        Next
 
        If IsVista() Then
            CreateObject( "Shell.Application" ).ShellExecute _
                "cscript.exe","//nologo """ & _
                WScript.ScriptFullName & _
                """ " & Str, "", "runas", 1
        Else
 
            CreateObject( "WScript.Shell" ).Run _
            "cscript //nologo """ & _
            WScript.ScriptFullName & _
            """ " & Str
 
        End If
        WScript.Quit
    End If
End Sub
 
Sub DisplayMessage(ByRef objInstaller, ByVal strFileName, ByVal nResult)
    WScript.StdOut.Write "Install " & objInstaller.getBaseName(strFileName) & " ->>> "
    Select Case nResult
        Case 0
            WScript.StdOut.Write "SUCCEEDED"
        Case 1
            WScript.StdOut.Write "ALREADY INSTALLED"
        Case -1
            WScript.StdOut.Write "FAILED (Reason: Not a Font File)"
    End Select
    WScript.StdOut.Write vbCrLf
End Sub
 
Sub Pause(strPause)
     WScript.Echo (strPause)
     WScript.StdIn.Read(1)
End Sub
 
Function VBMain(colArguments)
    VBMain = 0
 
    ForceCScriptExecution()
 
    WSH.Echo "Easy Font Installer 1.0" & vbCrLf &_
              "Written By WangYe " & vbCrLf & vbCrLf
    Dim objInstaller, objFso, objDictFontFiles
    Set objInstaller = New FontInstaller
        objInstaller.CallBack = "DisplayMessage"
        If colArguments.Count > 0 Then
            objInstaller.setDragDrop colArguments
        Else
            Set objFso = objInstaller.FileSystemObject
            Set objDictFontFiles = CreateObject("Scripting.Dictionary")
            Dim objFolder, colFiles, objFile, strDirName, strExtension
            strDirName = objFso.GetParentFolderName(WScript.ScriptFullName)
            Set objFolder = objFso.GetFolder(strDirName)
            Set colFiles = objFolder.Files
            For Each objFile in colFiles
                If objFile.Size > 0 Then
                    strExtension = UCase(objFso.GetExtensionName(objFile.Name))
                    If strExtension = "TTF" Or strExtension = "TTC" Or strExtension = "OTF" Then
                        objDictFontFiles.Add objFile.Name, objInstaller.PathAddBackslash(strDirName) & objFile.Name
                    End If
                End If
            Next
 
            Set colFiles = Nothing
            Set objFolder = Nothing
            Set objFso = Nothing
 
            If objDictFontFiles.Count > 0 Then
                If MsgBox("Current Directory has " & objDictFontFiles.Count & " Font Files." & vbCrLf &_
                        vbCrLf & "Click OK to continue install or Cancel to Select Directory", 1) = 1 Then
                      Dim i, objItems
                      For i = 0 To  objDictFontFiles.Count-1
                        objItems = objDictFontFiles.Items
                        objInstaller.installFromFile objItems(i)
                      Next
                Else
                    strDirName = GetOpenDirectory("Select Fonts Directory:")
                    If strDirName<>"" Then
                        objInstaller.installFromDirectory strDirName
                    Else
                        WScript.Echo "----- Drag Font File To This Script -----"
                    End If
                End If
            End If
                objDictFontFiles.RemoveAll
            Set objDictFontFiles = Nothing
        End If
    Set objInstaller = Nothing
 
    Pause vbCrLf & vbCrLf & "Press Enter to continue"
End Function
 
WScript.Quit(VBMain(WScript.Arguments))

 

這個腳本的使用方法很簡單,將上述代碼保存為VBS文件,然后將要安裝的字體或者包含字體的文件夾拖放到這個腳本文件即可,還有個方法就是直接雙擊腳本,然后按照提示會自動安裝與腳本同路徑的字體文件或者提示選擇字體所在路徑以便于安裝。

還有一處值得注意的是:我對已經安裝的字體是采取建立字體列表,然后判斷當前安裝的字體是否存在于字體列表,字體列表的來源是已經安裝的字體在系統的注冊名(存在于注冊表中)和已經安裝的字體文件名。唯一遺憾的是我是通過比判斷安裝字體的文件名是否在字體列表中來判斷字體是否安裝,這里的問題主要是待安裝的字體文件名不一定與字體真實的名字一致,字體真實的名字是需要讀取二進制字體文件從中來獲取的,這樣腳本又復雜了,所以放棄了這種方式。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日本高清一区| 久久综合久久美利坚合众国| 日韩美女免费观看| 在线激情影院一区| 久久久999精品| 92裸体在线视频网站| 日韩在线视频导航| 成人久久一区二区三区| 国产精品福利久久久| 久久久久久久电影一区| 日韩av影视在线| 91最新在线免费观看| 亚洲爱爱爱爱爱| 久久久久久久一| 92国产精品久久久久首页| 久久精品国产清自在天天线| 日韩av中文字幕在线| 精品国产欧美一区二区五十路| 精品国产乱码久久久久久虫虫漫画| 亚洲精品乱码久久久久久按摩观| 国产一区二区三区视频在线观看| 亚洲国产精品高清久久久| 日韩欧美在线中文字幕| 欧美多人爱爱视频网站| 亚洲综合中文字幕在线观看| 久久99久国产精品黄毛片入口| 久久久国产精品一区| 久久久久久一区二区三区| 4444欧美成人kkkk| 国产精品亚洲片夜色在线| 国产一区二区三区欧美| 亚洲自拍小视频免费观看| 亚洲第一国产精品| 国产亚洲精品久久久久久| 亚洲国产精品电影在线观看| 色琪琪综合男人的天堂aⅴ视频| 国产精品亚洲欧美导航| 亚洲电影天堂av| 国产精品r级在线| 亚洲视频777| 中文字幕视频在线免费欧美日韩综合在线看| 国产亚洲视频在线观看| 亚洲网站视频福利| 国产精品jvid在线观看蜜臀| 亚洲二区在线播放视频| 亚洲第一综合天堂另类专| 国产精品一区电影| 97视频com| 欧美中文在线免费| 亚洲一区久久久| 91网站免费观看| 国产日韩在线一区| 少妇高潮久久久久久潘金莲| 精品久久在线播放| 亚洲经典中文字幕| 日韩欧美aⅴ综合网站发布| 国产精品久久久久久网站| 人妖精品videosex性欧美| 久久影视电视剧凤归四时歌| 欧美老肥婆性猛交视频| 亚洲第一色在线| 亚洲国产精品久久久久| 久久精品国产99国产精品澳门| 久久久精品亚洲| 亚洲一区二区三区视频播放| 亚洲欧美一区二区三区在线| 国产精品成人v| 亚洲精品福利视频| 亚洲精品av在线播放| 中文在线资源观看视频网站免费不卡| 欧美性xxxx在线播放| 国产精品极品美女粉嫩高清在线| 岛国视频午夜一区免费在线观看| 中文字幕亚洲无线码在线一区| 欧美性猛交xxxx富婆弯腰| 精品亚洲va在线va天堂资源站| 91免费视频网站| 日本19禁啪啪免费观看www| 欧美一区第一页| 欧美专区第一页| 欧美精品在线免费观看| 国产69精品久久久久9999| 亚洲国产精品va在线看黑人| 国产精品久久久久久久久久久新郎| 欧美成人免费全部| 亚洲精品久久久久久久久| 一区二区三区黄色| xxx欧美精品| 欧美视频在线观看免费网址| 亚洲色图美腿丝袜| 一色桃子一区二区| 青青草原成人在线视频| 中文字幕日韩av| www.日韩欧美| 国产精品99蜜臀久久不卡二区| 国产精自产拍久久久久久蜜| 国产精品久久视频| 欧美精品少妇videofree| 亚洲国产精久久久久久| 欧美日韩国产色视频| 国产精品福利网| 国产精品成人在线| 久久深夜福利免费观看| 国产精品成人国产乱一区| 亚洲一区二区三区视频| 久久精品国产69国产精品亚洲| 久久国产色av| 亚洲国产日韩欧美在线图片| 欧美在线视频一二三| 欧美激情一级二级| 欧美日韩亚洲一区二区三区| 国产精品综合不卡av| 日本国产精品视频| 亚洲人成网站777色婷婷| 91欧美精品午夜性色福利在线| 日韩电影中文字幕av| 亚洲精品动漫100p| 久久视频在线免费观看| 日韩高清免费观看| 国产日韩欧美中文在线播放| 国产免费一区二区三区在线能观看| 久久成人亚洲精品| 国产精品自产拍在线观看| 久久精品亚洲一区| 日韩av网址在线| 91探花福利精品国产自产在线| 一区二区三区视频免费在线观看| 在线中文字幕日韩| 日韩av毛片网| 精品视频www| 欧美裸体视频网站| 97久久精品人人澡人人爽缅北| 欧美自拍视频在线观看| 欧美精品手机在线| 亚洲第一区在线观看| 亚洲日韩中文字幕| 中文字幕精品一区久久久久| 2019国产精品自在线拍国产不卡| 亚洲欧美国产精品va在线观看| 欧美性猛交视频| 国内精品国产三级国产在线专| 国产精品久久久久久av下载红粉| 欧洲日本亚洲国产区| 亚洲国产精品va在线观看黑人| 神马久久久久久| 亚洲精品电影久久久| 91社影院在线观看| 日韩国产在线播放| 欧美视频二区36p| 欧美日韩国产精品一区| 38少妇精品导航| 国产精品中文字幕在线| 日韩国产激情在线| 国产精品老女人精品视频| 亚洲欧美日韩一区二区在线| 国产美女被下药99| 欧美日韩国产激情| 亚洲视频在线视频| 亚洲国产三级网| 北条麻妃久久精品| 中文字幕九色91在线| 亚洲综合一区二区不卡| 国产精选久久久久久| 成人国产精品一区二区|