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

首頁(yè) > 編程 > Delphi > 正文

利用Delphi編寫Windows外殼擴(kuò)展

2019-11-18 18:58:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

利用Delphi編寫Windows外殼擴(kuò)展
    對(duì)于操作系統(tǒng)原理比較了解的朋友都會(huì)知道,一個(gè)完備的操作系統(tǒng)都會(huì)提供了一個(gè)外殼(Shell),以方便普通的用戶
使用操作系統(tǒng)提供的各種功能。Windows(在這里指的是Windows 95Windows NT4.0以上版本的操作系統(tǒng))的外殼不但提供
了方便美觀的GUI圖形界面,而且還提供了強(qiáng)大的外殼擴(kuò)展功能,大家可能在很多軟件中看到這些外殼擴(kuò)展了。例如在你的
系統(tǒng)中安裝了Winzip的話,當(dāng)你在Windows Explore中鼠標(biāo)右鍵點(diǎn)擊文件夾或者文件后,在彈出菜單中就會(huì)出現(xiàn)Winzip的壓
縮菜單。又或者Bullet FTP中在Windows資源管理器中出現(xiàn)的FTP站點(diǎn)文件夾。
    Windows支持七種類型的外殼擴(kuò)展(稱為Handler),它們相應(yīng)的作用簡(jiǎn)述如下:

  (1)Context menu handlers:向特定類型的文件對(duì)象增添上下文相關(guān)菜單;

  (2)Drag-and-drop handlers用來(lái)支持當(dāng)用戶對(duì)某種類型的文件對(duì)象進(jìn)行拖放操作時(shí)的OLE數(shù)據(jù)傳輸;

  (3)Icon handlers用來(lái)向某個(gè)文件對(duì)象提供一個(gè)特有的圖標(biāo),也可以給某一類文件對(duì)象指定圖標(biāo);

  (4)PRoperty sheet handlers給文件對(duì)象增添屬性頁(yè)(就是右鍵點(diǎn)擊文件對(duì)象或文件夾對(duì)象后,在彈出菜單中選屬性
    項(xiàng)后出現(xiàn)的對(duì)話框),屬性頁(yè)可以為同一類文件對(duì)象所共有,也可以給一個(gè)文件對(duì)象指定特有的屬性頁(yè);

  (5)Copy-hook handlers在文件夾對(duì)象或者打印機(jī)對(duì)象被拷貝、移動(dòng)、刪除和重命名時(shí),就會(huì)被系統(tǒng)調(diào)用,通過(guò)為Windows
    增加Copy-hook handlers,可以允許或者禁止其中的某些操作;

  (6)Drop target handlers在一個(gè)對(duì)象被拖放到另一個(gè)對(duì)象上時(shí),就會(huì)被系統(tǒng)被調(diào)用;

  (7)Data object handlers在文件被拖放、拷貝或者粘貼時(shí),就會(huì)被系統(tǒng)被調(diào)用。

  Windows的所有外殼擴(kuò)展都是基于COM(Component Object Model) 組件模型的,外殼是通過(guò)接口(Interface)來(lái)訪問(wèn)對(duì)象的。
外殼擴(kuò)展被設(shè)計(jì)成32位的進(jìn)程中服務(wù)器程序,并且都是以動(dòng)態(tài)鏈接庫(kù)的形式為操作系統(tǒng)提供服務(wù)的。因此,如果要對(duì)Windows
的用戶界面進(jìn)行擴(kuò)充的話,則具備寫COM對(duì)象的一些知識(shí)是十分必要的。 由于篇幅所限,在這里就不介紹COM,讀者可以參考
微軟的MSDN庫(kù)或者相關(guān)的幫助文檔,一個(gè)接口可以看做是一個(gè)特殊的類,它包含一組函數(shù)合過(guò)程可以用來(lái)操作一個(gè)對(duì)象。
    寫好外殼擴(kuò)展程序后,必須將它們注冊(cè)才能生效。所有的外殼擴(kuò)展都必須在Windows注冊(cè)表的HKEY_CLASSES_ROOTCLSID鍵
之下進(jìn)行注冊(cè)。在該鍵下面可以找到許多名字像{0000002F-0000-0000-C000-000000000046}的鍵,這類鍵就是全局唯一類標(biāo)識(shí)
符(Guid)。每一個(gè)外殼擴(kuò)展都必須有一個(gè)全局唯一類標(biāo)識(shí)符,Windows正是通過(guò)此唯一類標(biāo)識(shí)符來(lái)找到外殼擴(kuò)展處理程序的。
在類標(biāo)識(shí)符之下的InProcServer32子鍵下記錄著外殼擴(kuò)展動(dòng)態(tài)鏈接庫(kù)在系統(tǒng)中的位置。與某種文件類型關(guān)聯(lián)的外殼擴(kuò)展注冊(cè)在
相應(yīng)類型的shellex主鍵下。如果所處的Windows操作系統(tǒng)為Windows NT,則外殼擴(kuò)展還必須在注冊(cè)表中的
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionShellExtensionsApproved主鍵下登記。
    編譯完外殼擴(kuò)展的DLL程序后就可以用Windows本身提供的regsvr32.exe來(lái)注冊(cè)該DLL服務(wù)器程序了。如果使用Delphi,也可
以在Run菜單中選擇Register ActiveX Server來(lái)注冊(cè)。

    下面首先介紹一個(gè)比較常用的外殼擴(kuò)展應(yīng)用:上下文相關(guān)菜單,在Windows中,用鼠標(biāo)右鍵單擊文件或者文件夾時(shí)彈出的那
個(gè)菜單便稱為上下文相關(guān)菜單。要?jiǎng)討B(tài)地在上下文相關(guān)菜單中增添菜單項(xiàng),可以通過(guò)寫Context Menu Handler來(lái)實(shí)現(xiàn)。比如大家
所熟悉的WinZip和UltraEdit等軟件都是通過(guò)編寫Context Menu Handler來(lái)動(dòng)態(tài)地向菜單中增添菜單項(xiàng)的。如果系統(tǒng)中安裝了
WinZip,那么當(dāng)用右鍵單擊一個(gè)名為Windows的文件(夾)時(shí),其上下文相關(guān)菜單就會(huì)有一個(gè)名為Add to Windows.zip的菜單項(xiàng)。
本文要實(shí)現(xiàn)的Context Menu Handler與WinZip提供的上下文菜單相似。它將在任意類型的文件對(duì)象的上下文相關(guān)菜單中添加一個(gè)
文件操作菜單項(xiàng),當(dāng)點(diǎn)擊該項(xiàng)后,接口程序就會(huì)彈出一個(gè)文件操作窗口,執(zhí)行文件拷貝、移動(dòng)等操作。
     編寫Context Menu Handler必須實(shí)現(xiàn)IShellExtInit、IContextMenu和TComObjectFactory三個(gè)接口。IShellExtInit實(shí)現(xiàn)
接口的初始化,IContextMenu接口對(duì)象實(shí)現(xiàn)上下文相關(guān)菜單,IComObjectFactory接口實(shí)現(xiàn)對(duì)象的創(chuàng)建。
    下面來(lái)介紹具體的程序?qū)崿F(xiàn)。首先在Delphi中點(diǎn)擊菜單的 File|New 項(xiàng),在New Item窗口中選擇DLL建立一個(gè)DLL工程文件。
然后點(diǎn)擊菜單的 File|New 項(xiàng),在New Item窗口中選擇Unit建立一個(gè)Unit文件,點(diǎn)擊點(diǎn)擊菜單的 File|New 項(xiàng),在New Item窗口
中選擇Form建立一個(gè)新的窗口。將將工程文件保存為Contextmenu.dpr ,將Unit1保存為Contextmenuhandle.pas,將Form保存為
OpWindow.pas。
Contextmenu.dpr的程序清單如下:
library contextmenu;
    uses
  ComServ,
  contextmenuhandle in 'contextmenuhandle.pas',
  opwindow in 'opwindow.pas' {Form2};

exports
   DllGetClassObject,
   DllCanUnloadNow,
   DllRegisterServer,
   DllUnregisterServer;

{$R *.TLB}

{$R *.RES}

begin

end.

    Contextmenuhandle的程序清單如下:
unit ContextMenuHandle;

interface
   uses Windows,ActiveX,ComObj,ShlObj,Classes;

type
   TContextMenu = class(TComObject,IShellExtInit,IContextMenu)
   private
      FFileName: array[0..MAX_PATH] of Char;
   protected
      function IShellExtInit.Initialize = SEIInitialize; // Avoid compiler warning
      function SEIInitialize(pidlFolder: PItemIDList; lpdobj: IDataObject;
               hKeyProgID: HKEY): HResult; stdcall;
      function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast,
               uFlags: UINT): HResult; stdcall;
      function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
      function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
               pszName: LPSTR; cchMax: UINT): HResult; stdcall;
end;

const

   Class_ContextMenu: TGUID = '{19741013-C829-11D1-8233-0020AF3E97A0}';

{全局唯一標(biāo)識(shí)符(GUID)是一個(gè)16字節(jié)(128為)的值,它唯一地標(biāo)識(shí)一個(gè)接口(interface)}
var
   FileList:TStringList;


implementation

uses ComServ, SysUtils, ShellApi, Registry,UnitForm;

function TContextMenu.SEIInitialize(pidlFolder: PItemIDList; lpdobj: IDataObject;
   hKeyProgID: HKEY): HResult;
var
   StgMedium: TStgMedium;
   FormatEtc: TFormatEtc;
   FileNumber,i:Integer;
begin
   file://如果lpdobj等于Nil,則本調(diào)用失敗
   if (lpdobj = nil) then begin
      Result := E_INVALIDARG;
      Exit;
   end;

   file://首先初始化并清空FileList以添加文件
   FileList:=TStringList.Create;
   FileList.Clear;
   file://初始化剪貼版格式文件
   with FormatEtc do begin
      cfFormat := CF_HDROP;
      ptd := nil;
      dwaspect := DVASPECT_CONTENT;
      lindex := -1;
      tymed := TYMED_HGLOBAL;
   end;
   Result := lpdobj.GetData(FormatEtc, StgMedium);

   if Failed(Result) then Exit;

   file://首先查詢用戶選中的文件的個(gè)數(shù)
   FileNumber := DragQueryFile(StgMedium.hGlobal,$FFFFFFFF,nil,0);
   file://循環(huán)讀取,將所有用戶選中的文件保存到FileList中
   for i:=0 to FileNumber-1 do begin
      DragQueryFile(StgMedium.hGlobal, i, FFileName, SizeOf(FFileName));
      FileList.Add(FFileName);
      Result := NOERROR;
   end;

   ReleaseStgMedium(StgMedium);
end;

function TContextMenu.QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst,
   idCmdLast, uFlags: UINT): HResult;
begin
  Result := 0;
  if ((uFlags and $0000000F) = CMF_NORMAL) or
     ((uFlags and CMF_EXPLORE) <> 0) then begin
    // 往Context Menu中加入一個(gè)菜單項(xiàng) ,菜單項(xiàng)的標(biāo)題為察看位圖文件
    InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION, idCmdFirst,
        PChar('文件操作'));
    // 返回增加菜單項(xiàng)的個(gè)數(shù)
    Result := 1;
  end;
end;

function TContextMenu.InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult;
var
  frmOP:TForm1;
begin
  // 首先確定該過(guò)程是被系統(tǒng)而不是被一個(gè)程序所調(diào)用
  if (HiWord(Integer(lpici.lpVerb)) <> 0) then
  begin
     Result := E_FAIL;
     Exit;
  end;
  // 確定傳遞的參數(shù)的有效性
  if (LoWord(lpici.lpVerb) <> 0) then begin
     Result := E_INVALIDARG;
     Exit;
  end;

   file://建立文件操作窗口
  frmOP:=TForm1.Create(nil);
  file://將所有的文件列表添加到文件操作窗口的列表中
  frmOP.ListBox1.Items := FileList;
  Result := NOERROR;
end;


function TContextMenu.GetCommandString(idCmd, uType: UINT; pwReserved: PUINT;
         pszName: LPSTR; cchMax: UINT): HRESULT;
begin
   if (idCmd = 0) then begin
   if (uType = GCS_HELPTEXT) then
      {返回該菜單項(xiàng)的幫助信息,此幫助信息將在用戶把鼠標(biāo)
      移動(dòng)到該菜單項(xiàng)時(shí)出現(xiàn)在狀態(tài)條上。}
      StrCopy(pszName, PChar('點(diǎn)擊該菜單項(xiàng)將執(zhí)行文件操作'));
      Result := NOERROR;
   end
   else
      Result := E_INVALIDARG;
end;

type
   TContextMenuFactory = class(TComObjectFactory)
   public
   procedure UpdateRegistry(Register: Boolean); override;
end;

procedure TContextMenuFactory.UpdateRegistry(Register: Boolean);
var
   ClassID: string;
begin
   if Register then begin
      inherited UpdateRegistry(Register);
      ClassID := GUIDToString(Class_ContextMenu);
      file://當(dāng)注冊(cè)擴(kuò)展庫(kù)文件時(shí),添加庫(kù)到注冊(cè)表中
      CreateRegKey('*shellex', ', ');
      CreateRegKey('*shellexContextMenuHandlers', ', ');
      CreateRegKey('*shellexContextMenuHandlersFileOpreation', ', ClassID);

    file://如果操作系統(tǒng)為Windows NT的話
      if (Win32Platform = VER_PLATFORM_WIN32_NT) then
      with TRegistry.Create do
      try
         RootKey := HKEY_LOCAL_MACHINE;
         OpenKey('SOFTWAREMicrosoftWindowsCurrentVersionShell Extensions', True);
         OpenKey('Approved', True);
         WriteString(ClassID, 'Context Menu Shell Extension');
      finally
         Free;
      end;
   end
   else begin
      DeleteRegKey('*shellexContextMenuHandlersFileOpreation');
      inherited UpdateRegistry(Register);
   end;
end;

 

initialization
 TContextMenuFactory.Create(ComServer, TContextMenu, Class_ContextMenu,
   ', 'Context Menu Shell Extension', ciMultiInstance,tmApartment);

end.


    在OpWindow窗口中加入一個(gè)TListBox控件和兩個(gè)TButton控件,OpWindows.pas的程序清單如下:
unit opwindow;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls,shlobj,shellapi,ActiveX;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    FileList:TStringList;
    { Public declarations }
  end;

var
   Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FileList:=TStringList.Create;
  Button1.Caption :='復(fù)制文件';
  Button2.Caption :='移動(dòng)文件';
  Self.Show;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FileList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  sPath:string;
  fsTemp:SHFILEOPSTRUCT;
  i:integer;
begin
  sPath:=InputBox('文件操作','輸入復(fù)制路徑','c:windows');
  if sPath<>'then begin
    fsTemp.Wnd := Self.Handle;
    file://設(shè)置文件操作類型
    fsTemp.wFunc :=FO_COPY;
    file://允許執(zhí)行撤消操作
    fsTemp.fFlags :=FOF_ALLOWUNDO;
    for i:=0 to ListBox1.Items.Count-1 do begin
      file://源文件全路徑名
      fsTemp.pFrom := PChar(ListBox1.Items.Strings[i]);
      file://要復(fù)制到的路徑
      fsTemp.pTo := PChar(sPath);
      fsTemp.lpszProgressTitle:='拷貝文件';
      if SHFileOperation(fsTemp)<>0 then
        ShowMessage('文件復(fù)制失敗');
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  sPath:string;
  fsTemp:SHFILEOPSTRUCT;
  i:integer;
begin
  sPath:=InputBox('文件操作','輸入移動(dòng)路徑','c:windows');
  if sPath<>'then begin
    fsTemp.Wnd := Self.Handle;
    fsTemp.wFunc :=FO_MOVE;
    fsTemp.fFlags :=FOF_ALLOWUNDO;
    for i:=0 to ListBox1.Items.Count-1 do begin
      fsTemp.pFrom := PChar(ListBox1.Items.Strings[i]);
      fsTemp.pTo := PChar(sPath);
      fsTemp.lpszProgressTitle:='移動(dòng)文件';
      if SHFileOperation(fsTemp)<>0 then
        ShowMessage('文件復(fù)制失敗');
    end;
  end;
end;

end.

    點(diǎn)擊菜單的 Project | Build ContextMenu 項(xiàng),Delphi就會(huì)建立Contextmenu.dll文件,這個(gè)就是上下文相關(guān)菜單程序了。
使用,Regsvr32.exe 注冊(cè)程序,然后在Windows的Explore 中在任意的一個(gè)或者幾個(gè)文件中點(diǎn)擊鼠標(biāo)右鍵,在上下文菜單中就會(huì)
多一個(gè)文件操作的菜單項(xiàng),點(diǎn)擊該項(xiàng),在彈出窗口的列表中會(huì)列出你所選擇的所有文件的文件名,你可以選擇拷貝文件按鈕或者
移動(dòng)文件按鈕執(zhí)行文件操作。


上一篇:在Delphi中如何控制其它應(yīng)用程序窗口

下一篇:利用Delphi消息處理建立類似Windows開(kāi)始菜單

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

亚洲国产精品国自产拍av| 玖玖在线播放| 极度色播免费播放视频| 日本免费色视频| 国产一区二区区别| 91caoporm在线视频| 91av在线免费观看| 国产成人综合亚洲| 免费高清在线观看| 91精品国产福利尤物| 亚洲成a人片综合在线| 最近中文在线观看| 古装做爰无遮挡三级聊斋艳谭| 国产视频一区二区在线播放| 韩国一区二区在线播放| 337p亚洲精品色噜噜狠狠| 亚洲欧洲www| 日韩中文视频免费在线观看| 久久久久久亚洲精品美女| 激情小说网站亚洲综合网| 国内精品久久久久伊人av| 日韩一区二区三区视频在线观看| 暖暖视频日本免费| 日韩一区二区三区视频在线观看| 国产精品jvid在线观看蜜臀| 白丝美女让我捅| 亚洲女同志亚洲女同女播放| 91久久久久久久久久久久久| 九色丨porny丨| 成人黄色影片在线| 久热国产精品视频一区二区三区| 国产女同互慰高潮91漫画| 中文在线视频| 日韩欧美一级片| 在线观看色网站| 黄色在线观看www| 欧美丝袜美女中出在线| 狠狠搞狠狠干| 日韩1区2区3区| 欧美激情精品久久久久久蜜臀| 日韩精品视频一区二区| 美女av在线免费观看| 亚洲精选一区| chinese全程对白| 久久精品噜噜噜成人av农村| 青青草手机在线观看| 欧美人成在线观看网站高清| 台湾佬成人中文网222vvv| 久久精品夜色噜噜亚洲aⅴ| 免费在线观看污网站| 亚洲av电影一区| 91涩漫在线观看| 亚洲欧洲成人精品av97| 免费无码av片在线观看| 一区二区乱码| 中文在线资源观看网站视频免费不卡| 精品国产一区二区三区在线| 亚洲人妖在线| 亚洲精品中文在线观看| 国产日韩欧美电影在线观看| 成人黄色在线观看视频| 91精品国模一区二区三区| 韩日精品视频| 精品国产一区二区三区香蕉沈先生| 国产精彩视频一区二区| 精品欧美黑人一区二区三区| 黄色在线观看免费| 久久久精品蜜桃| 在线观看日韩国产| 色婷婷综合视频在线观看| 超碰国产一区| 国产精品久久久久久久久久齐齐| 欧美狂野另类xxxxoooo| 久热re国产手机在线观看| 另类图片亚洲另类| 荫蒂被男人添免费视频| 91精品国产高清久久久久久91| 国模私拍一区二区三区| 欧洲一区在线观看| 鲁片一区二区三区| 欧美一区二区激情视频| 狠狠色狠狠色综合系列| 黄色小说在线观看视频| 波多野结衣综合网| 国产wwwxx| 久久99影视| 国产成人在线色| 一级特黄aaa大片| 日本久久久久久久久久久| 欧美性受xxxx黑人猛交| 国产精品美女久久久久av福利| 亚洲视频视频在线| 成人精品在线视频| 国产精品第一页在线观看| 日韩精品电影网站| 日韩福利一区| 日韩亚洲精品电影| aaaaa黄色片| 人妻在线日韩免费视频| 国产女优在线播放| 成人性生交大免费看| 午夜裸体女人视频网站在线观看| 国产亚洲精品久久久久久久| 91精品国产色综合久久ai换脸| 欧美黑人性猛交xxx| 国产偷亚洲偷欧美偷精品| 99久久婷婷国产综合精品首页| 一级毛片精品毛片| 欧美高清一区二区| 亚洲国产成人二区| 女同互添互慰av毛片观看| 国产精品免费电影| 久久精品人人做人人爽人人| 国产午夜性春猛交ⅹxxx| 欧美xxxx黑人又粗又长精品| 成人黄页毛片网站| 粉嫩喷白浆久久| 天天好比中文综合网| 欧美一区二区三区婷婷| 日本高清视频一区二区三区| 成人免费在线观看网站| 欧美精品黑人猛交高潮| 亚洲情综合五月天| 久久久亚洲国产天美传媒修理工| 日韩av在线免费观看一区| 亚洲伊人精品酒店| 日韩午夜激情| 婷婷综合一区| 亚洲国产999| 九色porny丨首页入口在线| 九九视频免费观看| www.xxxx精品| 亚洲第一成年网| 日韩动漫在线观看| 涩涩视频在线观看免费| 精品a在线观看| 久久精品久久久久久国产 免费| 成人精品视频一区二区三区| 中文字幕一区二区三区四区在线视频| 青青草原综合久久大伊人精品优势| 人人狠狠综合久久亚洲婷婷| 日韩乱码在线观看| 欧美激情亚洲综合| 欧美最猛黑人xxxx黑人猛交黄| 精品一区二区三区蜜桃在线| 欧美一进一出视频| 中出在线观看| 国产精品欧美久久久久无广告| 国产激情自拍| 中文字幕无码人妻少妇免费| 亚洲精品在线国产| 成人情趣片在线观看免费| 日本中文字幕网| 祥仔av免费一区二区三区四区| 欧美一区激情视频在线观看| 日韩女优人人人人射在线视频| 四虎影院观看视频在线观看| 天堂va欧美ⅴa亚洲va一国产| 亚洲欧美日韩一区二区三区在线观看| 亚洲欧美一区二区三区在线| 粉嫩小泬无遮挡久久久久久| 午夜在线视频免费| 久草在线资源网站| 永久555www成人免费| 欧美激情videoshd| 色偷偷网友自拍| 91热精品视频| 93久久精品日日躁夜夜躁欧美| 97超级碰碰人国产在线观看| 色偷偷久久一区二区三区| 男人艹女人在线观看| 极品少妇xxxx精品少妇| 邻家有女韩剧在线观看国语| 久久免费精品国产久精品久久久久| 久草在线新资源| 欧洲精品码一区二区三区免费看| 无码人妻精品一区二区蜜桃网站| 91tv精品福利国产在线观看| 欧美一区精品| 一本色道久久综合狠狠躁的推荐| 91p在线观看| 国产日本欧美一区二区三区| 亚洲国产精品无码久久久| 高h震动喷水双性1v1| 亚洲理论电影网| 成人激情综合网| 亚州av电影免费在线观看| 免费高清完整在线观看| 91在线观看欧美日韩| 嫩草在线播放| 隔壁人妻偷人bd中字| 手机av在线免费观看| 欧美少妇在线观看| 欧美精品久久99久久在免费线| 天堂аⅴ在线最新版在线| 亚洲三级 欧美三级| 草美女在线观看| 免费涩涩18网站入口| 久久九九99视频| 国产欧美一区二区三区视频| 欧美午夜片在线观看| 精品入口麻豆88视频| 在线 丝袜 欧美 日韩 制服| 久久尤物视频| 一区二区三区欧美在线观看| 中文字幕第四页| 国产偷人视频免费| 亚洲欧美精选| 天堂在线中文资源| 午夜电影一区| 免费97视频在线精品国自产拍| 美国十次了思思久久精品导航| 怡红院视频网站| xfplay先锋影音夜色资源站| 午夜亚洲国产au精品一区二区| 久久精品电影| 免费男女羞羞的视频网站中文字幕| 黄色毛片网站| 亚洲GV成人无码久久精品| 日韩精品在线看| 青青草综合在线| 成人激情免费视频| 噜噜噜久久亚洲精品国产品麻豆| 美女久久一区| 日韩黄色av| 精品一区免费观看| 亚洲一级二级三级在线免费观看| 最新国产在线| 日韩精品视频在线观看网址| 91天堂在线视频| 国产三级按摩推拿按摩| 亚洲精选视频免费看| 国产999精品久久久影片官网| 亚洲欧美日韩国产一区二区| 亚洲熟女毛茸茸| 男人和女人啪啪网站| 精品国产免费人成电影在线观看四季| 高清视频在线观看一区| 中文字幕一区二区三区四| 日本精品二区| 亚洲精品亚洲人成在线观看| 国产成人a亚洲精v品无码| 在线看不卡av| 精品国产第一福利网站| 欧美国产日产图区| 国产精品青青在线观看爽香蕉| 精品久久久久香蕉网| 日韩欧美一区二区在线视频| 精品久久久av| 久久av一区二区三区| 中文字幕第三区| 99国产精品久久久久久久久久久| 久草免费资源站| 日韩av电影免费观看高清| 五月婷婷丁香激情| 91日本在线观看| 欧美一区二区少妇| 国产精品999视频| 一区二区三区免费在线看| 日韩午夜免费视频| 精品亚洲一区二区三区四区| 日韩不卡一二区| 91高清一区| 成人性生交大片免费看中文视频| 特黄aaaaaaaaa真人毛片| 乡村艳史在线观看| 在线免费av播放| 久久免费视频在线观看| 岛国av中文字幕| 99久久这里只有精品| 国产精品成人a在线观看| 久久精品视频在线看| 精品一卡二卡三卡| 被陌生人带去卫生间啪到腿软| 制服丝袜av在线| 久久精品一区二区不卡| 中文字幕精品一区二区精| 天天躁日日躁aaaxxⅹ| 各处沟厕大尺度偷拍女厕嘘嘘| 国产在线观看免费| 久久99精品久久久久久琪琪| 成人久久18免费网站麻豆| 中文字幕日产av一二三区| 欧美18—19性高清hd4k| 色琪琪丁香婷婷综合久久| 日韩欧美一区二区在线| 久久久999| 伊人久久大香线蕉综合四虎小说| 欧美视频亚洲视频| 精品久久久久成人码免费动漫| 午夜精品久久久久久不卡8050| 欧美日韩123| 色资源网在线观看| 激情久久综合| 手机免费看av| 成人av影院在线| 欧美承认网站| 中国黄色片免费看| 成人精品一区二区三区免费| 亚洲理论中文字幕| 国产亚洲人成a一在线v站| 97伦伦午夜电影理伦片| 亚洲三级理论片| 亚洲第一二区| 久久久久性色av无码一区二区| 久久综合影视| 午夜免费视频在线国产| 国产传媒国产传媒| 久久精品成人欧美大片古装| 麻豆视频免费看| 9797在线看片亚洲精品| 天天综合成人网| 亚洲精品日韩一| 成年视频在线观看| 激情福利在线| 亚洲一级Av无码毛片久久精品| 第一会所sis001亚洲| 国产精品欧美久久| 欧美孕妇与黑人孕交| 91免费观看视频| 国产男女无遮挡猛进猛出| 香港三级经典全部种子下载| 影音先锋一区二区资源站| 亚洲影院中文字幕| 最新欧美精品一区二区三区| 麻豆亚洲av成人无码久久精品| 欧美一级淫片videoshd| 国产中文一区二区三区|