日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C# 实现刻录光盘功能

發布時間:2023/12/13 综合教程 60 生活家
生活随笔 收集整理的這篇文章主要介紹了 C# 实现刻录光盘功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近公司提出一個需求,要把公司系統的圖像刻錄成光盤(公司系統是醫院放射科系統,很多放射科的圖像)

查看了很多資料發現有兩個比較可靠

1:使用IMAPI2,進行文件的光盤刻錄,具體實例可以參照以下鏈接:

C#實現方式:

Burning and Erasing CD/DVD Media with C# and IMAPI2

地址:http://www.codeproject.com/Articles/24544/Burning-and-Erasing-CD-DVD-Blu-ray-Media-with-C-an

C++實現方式:

Burning CD/DVD Media with the Image Mastering API Version 2.0 (IMAPI2)

地址:http://www.codeproject.com/Articles/22538/Burning-CD-DVD-Media-with-the-Image-Mastering-API

我用的C#的版本,經過測試 在WIN7下好用,xp 下不好用, 雖然很多人說xp sp3補丁可以,但是我還是失敗了,公司的系統要求Xp可以使用

而且有個奇怪的問題,我自定義的項目就沒有進度條的事件,下載老外的源碼就有,好奇怪

郁悶呀..

2:C#調用NeroSDK進行

參考資料:1.http://blog.sina.com.cn/s/blog_962aaf5d01012vow.html

     2.http://blog.csdn.net/laibeikele/article/details/2500185

這兩位寫的都很完全,我只是把它收集補充了一下

首先是

SDK的版本: 采用NeroSDK-1.08版本,

Nero版本: 你的電腦需要安裝Nero,應該是必須要Nero7, 我安裝了8不好用,只有安裝7才好用

開發注意:.net版本應該是1.0到3.5之間.4.0,4.5編譯不了,而且項目的目標平臺必須是x86 其他的會報錯

基于Nero SDK有我自己的一個簡單的封裝,帖出來給大家分享一下

項目結構

系統定義部分委托:

    /// <summary>
    /// 顯示時間進度
    /// </summary>
    /// <param name="time"></param>
    public delegate void ShowTimeProcessDelegate(string time);

    /// <summary>
    /// 顯示進度
    /// </summary>
    /// <param name="percentProgress"></param>
    public delegate void ShowBrushLogLineDelegate(string value);
  

    /// <summary>
    /// 顯示進度
    /// </summary>
    /// <param name="percentProgress"></param>
    public delegate void ShowBrushProcessDelegate(ProcessEntity percentEvent);

    /// <summary>
    /// 刻錄錯誤
    /// </summary>
    /// <param name="error"></param>
    public delegate void BurshErrorDelegate(Exception ex);


    /// <summary>
    /// 刻錄成功
    /// </summary>
    /// <param name="value"></param>
    public delegate void BrushSuccessDelegate(string value);

    /// <summary>
    /// 顯示光盤信息
    /// </summary>
    /// <returns></returns>
    public delegate  void  ShowDiscInfoDelegate(DiscInfoEntity disc);

    /// <summary>
    /// 獲取所以刻錄信息
    /// </summary>
    /// <param name="collection"></param>
    public delegate void GetSpeedEntityCollectionDelegate(SpeedEntityCollection collection);

獲取光盤信息方法

 /// <summary>
    /// 光盤信息幫助類
    /// </summary>
    class DiscHelper
    {

        private Nero m_nero;
        private NeroDrive m_drive;
        internal event ShowDiscInfoDelegate ShowDisc;


        public DiscHelper(Nero nero, NeroDrive drive)
        {
            this.m_nero = nero;
            this.m_drive = drive;
        }

        /// <summary>
        /// 獲取光盤容量
        /// </summary>
        /// <param name="driveInfo">驅動器信息</param>
        /// <returns></returns>
        public void GetDriveInfoSize()
        {
            if (m_drive != null)
            {
                m_drive.OnDoneCDInfo += drive_OnDoneCDInfo;
            }
            RefreshDiscInfo();
        }

        private void RefreshDiscInfo()
        {
            if (m_drive != null)
            {
                m_drive.CDInfo(NERO_CDINFO_FLAGS.NERO_READ_CD_TEXT);
            }
        }

        /// <summary>
        /// 異步觸發信息類
        /// </summary>
        /// <param name="pCDInfo"></param>
        private void drive_OnDoneCDInfo(INeroCDInfo pCDInfo)
        {
            
            m_drive.OnDoneCDInfo -= drive_OnDoneCDInfo;
            DisplayDiscInfo((NeroCDInfo)pCDInfo);
        }


        /// <summary>
        /// 格式化光盤信息實體類
        /// </summary>
        /// <param name="cdinfo"></param>
        private void DisplayDiscInfo(NeroCDInfo cdinfo)
        {
            DiscInfoEntity info = null;
            if (cdinfo != null)
            {

                info = new DiscInfoEntity();
                long l2048 = 2048;//2048轉換成long類型
                info.MediaType = m_nero.get_TypeNameOfMedia(cdinfo.MediaType);
                info.StrFreeCapacity = BlockToByte(cdinfo.FreeCapacityInBlocks);
                info.StrUnused = BlockToByte((uint)cdinfo.UnusedBlocks);
                info.StrTotalCapacity = BlockToByte(cdinfo.TotalCapacity);
                info.TotalCapacity = cdinfo.FreeCapacityInBlocks * l2048;
                info.Unused = ((uint)cdinfo.UnusedBlocks) * l2048;
                info.TotalCapacity = cdinfo.TotalCapacity * l2048;
                info.Cdinfo = cdinfo;

            }
            //委托返回信息
            if (ShowDisc != null)
            {
                ShowDisc(info);
            }
        }

        #region 格式化函數
        
      
        private string BlockToByte(int block)
        {
            string Value = string.Empty;
            int temp = FromByteM(block);
            if (temp < 1024)
            {
                Value = string.Format("{0}MB", temp);
            }
            else
            {
                Value = string.Format("{0:N}GB", FromByteG(block));
            }
            return Value;
        }

        private string BlockToByte(uint block)
        {
            string Value = string.Empty;
            int temp = FromByteM(block);
            if (temp < 1024)
            {
                Value = string.Format("{0}MB", temp);
            }
            else
            {
                Value = string.Format("{0:N}GB", FromByteG(block));
            }
            return Value;
        }

        /// <summary>
        /// Block轉換MB
        /// </summary>
        /// <param name="block"></param>
        /// <returns></returns>
        private int FromByteM(int block)
        {

            int temp = block * 2 / 1024;
            return temp;
        }

        /// <summary>
        /// Block轉換MB
        /// </summary>
        /// <param name="block"></param>
        /// <returns></returns>
        private int FromByteM(uint block)
        {
            uint ut1 = 2;
            uint ut2 = 1024;
            int temp = (int)(block * ut1 / ut2);
            return temp;
        }



        /// <summary>
        /// Block轉換GB
        /// </summary>
        /// <param name="block"></param>
        /// <returns></returns>
        private double FromByteG(int block)
        {
            double d1 = (double)block;
            double temp = d1 * 2 / 1024 / 1024;
            return temp;
        }

        /// <summary>
        /// Block轉換GB
        /// </summary>
        /// <param name="block"></param>
        /// <returns></returns>
        private double FromByteG(uint block)
        {
            uint ut1 = 2;
            uint ut2 = 1024;
            double d1 = (double)block;
            double temp = (double)(d1 * ut1 / ut2 / ut2);
            return temp;
        }

        #endregion

    }

有一部分是block轉換使用的.SDK獲取到的并不在我們常用的單位

光盤信息定義的實體類

/// <summary>
    /// 光盤信息實體類
    /// </summary>
    public class DiscInfoEntity
    {
        /// <summary>
        /// 剩余容量(帶單位)
        /// </summary>
        public string StrFreeCapacity { get; set; }

        /// <summary>
        /// 不可用容量(帶單位)
        /// </summary>
        public string StrUnused { get; set; }

        /// <summary>
        /// 全部容量(帶單位)
        /// </summary>
        public string StrTotalCapacity { get; set; }


        /// <summary>
        /// 剩余容量Byte
        /// </summary>
        public long FreeCapacity { get; set; }

        /// <summary>
        /// 已用容量Byte
        /// </summary>
        public long Unused { get; set; }

        /// <summary>
        /// 全部容量
        /// </summary>
        public long TotalCapacity { get; set; }

        /// <summary>
        /// 光盤類型
        /// </summary>
        public string MediaType { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public NeroCDInfo Cdinfo { get; set; }
    }

2:獲取刻錄機的讀寫速度

/// <summary>
    /// 刻錄速度幫助類
    /// </summary>
    class SpeedHelper
    {
        
        public NeroDrive m_drive;
        private bool m_bWriteSpeeds;
        private _INeroDriveEvents_OnDoneCDInfoEventHandler m_evOnDoneCDInfo;
        internal event GetSpeedEntityCollectionDelegate GetSpeedCollect;

        public SpeedHelper(NeroDrive drive, bool writeSpeed)
        {
            m_drive = drive;
            m_bWriteSpeeds = writeSpeed;
            m_evOnDoneCDInfo = new _INeroDriveEvents_OnDoneCDInfoEventHandler(m_drive_OnDoneCDInfo);
            m_drive.OnDoneCDInfo += m_evOnDoneCDInfo;

        }

        /// <summary>
        ///異步獲取速度
        /// </summary>
        public void GetSpeed()
        {
            m_drive.CDInfo(0);
        }


        /// <summary>
        /// 觸發異步事件
        /// </summary>
        /// <param name="pCDInfo"></param>
        private void m_drive_OnDoneCDInfo(INeroCDInfo pCDInfo)
        {
            // Unsubscribe from event, get the speeds and populate the
            // speeds combobox with it 
            m_drive.OnDoneCDInfo -= m_evOnDoneCDInfo;              
            SpeedEntityCollection collection = GetSpeedCollection(pCDInfo, m_bWriteSpeeds);
            if (GetSpeedCollect != null)
            {
                GetSpeedCollect(collection);
            }

        }

       

        /// <summary>
        /// 獲取讀取速度
        /// </summary>
        /// <param name="pCDInfo">光盤信息</param>
        /// <returns></returns>
        public SpeedEntityCollection GetReadSpeedCollection(INeroCDInfo pCDInfo)
        {
            SpeedEntityCollection collection = GetSpeedCollection(pCDInfo, false);
            return collection;
        }
                
        
        /// <summary>
        /// 獲取寫入速度
        /// </summary>
        /// <param name="pCDInfo">光盤信息</param>
        /// <returns></returns>
        public SpeedEntityCollection GetWriteSpeedCollection(INeroCDInfo pCDInfo)
        {
            SpeedEntityCollection collection = GetSpeedCollection(pCDInfo, true);
            return collection;
        }



        /// <summary>
        /// 獲取讀寫速度
        /// </summary>
        /// <param name="pCDInfo">光盤信息</param>
        /// <param name="WriteSpeeds">是否讀寫</param>
        /// <returns></returns>
        private SpeedEntityCollection GetSpeedCollection(INeroCDInfo pCDInfo, bool WriteSpeeds)
        {
            NERO_MEDIA_TYPE nmt = (pCDInfo != null ?
              pCDInfo.MediaType : NERO_MEDIA_TYPE.NERO_MEDIA_NONE);
            NeroSpeeds speeds = m_drive.get_AvailableSpeeds(WriteSpeeds ? NERO_ACCESSTYPE.NERO_ACCESSTYPE_WRITE : NERO_ACCESSTYPE.NERO_ACCESSTYPE_READ, nmt);
            SpeedEntityCollection collection = GetSpeedEntityCollection(speeds, WriteSpeeds);
            return collection;
        }


        /// <summary>
        /// 生成速度集合
        /// </summary>
        /// <param name="speeds"></param>
        /// <param name="WriteSpeeds"></param>
        /// <returns></returns>
        private SpeedEntityCollection GetSpeedEntityCollection(NeroSpeeds speeds, bool WriteSpeeds)
        {
            SpeedEntityCollection collection = new SpeedEntityCollection();
            // If we should add "Maximum", do it here and now.
            // 
            if (WriteSpeeds)
            {
                collection.SpeedEntity.Add(new SpeedEntity("Maximum", 0));
            }
            else
            {
                // If we should not add "Maximum", see if there is at
                // least one speed. If not, add "<none>".
                // 
                if (speeds.Count == 0)
                {
                    collection.SpeedEntity.Add(new SpeedEntity("<none>", 0));
                }
            }

            // Now, add each speed from the NeroSpeeds collection.
            // 
            foreach (int iSpeed in speeds)
            {
                float fSpeed = iSpeed / (float)speeds.BaseSpeedKBs;
                collection.SpeedEntity.Add(new SpeedEntity(fSpeed.ToString() + "x (" + iSpeed.ToString() + " kb/s)", iSpeed));
            }

            return collection;
        }

讀寫速度的實體類

    /// <summary>
    /// 速度集合類
    /// </summary>
    public class SpeedEntityCollection
    {
        public IList<SpeedEntity> SpeedEntity { get; set; }

        public SpeedEntityCollection()
        {
            this.SpeedEntity = new List<SpeedEntity>();
        }
    }

    /// <summary>
    /// 速度實體類
    /// </summary>
    public class SpeedEntity
    {
        public string m_sItem;
        public int m_iSpeed;

        public SpeedEntity(string sItem, int iSpeed)
        {
            m_sItem = sItem;
            m_iSpeed = iSpeed;
        }

        public override string ToString()
        {
            return m_sItem;
        }
    }

刻錄類

    class BrushHelper
    {

        private NeroDrive m_drive;
        private Nero m_nero;
        private _INeroDriveEvents_OnDoneBurnEventHandler m_evOnDoneBurn;
        private _INeroDriveEvents_OnProgressEventHandler m_evOnProgress;
        private _INeroDriveEvents_OnSubTaskProgressEventHandler m_evOnSubTaskProgress;
        private _INeroDriveEvents_OnAbortedEventHandler m_evOnAborted;
        private _INeroDriveEvents_OnAddLogLineEventHandler m_evOnAddLogLine;
        private _INeroDriveEvents_OnSetPhaseEventHandler m_evOnSetPhase;
        private _INeroDriveEvents_OnDisableAbortEventHandler m_evOnDisableAbort;
        private _INeroEvents_OnFileSelImageEventHandler m_evOnFileSelImage;
        private _INeroEvents_OnWaitCDEventHandler m_evOnWaitCD;
        private _INeroEvents_OnWaitCDDoneEventHandler m_evOnWaitCDDone;
        private _INeroEvents_OnWaitCDMediaInfoEventHandler m_evOnWaitCDMediaInfo;
        private _INeroEvents_OnNonEmptyCDRWEventHandler m_evOnNonEmptyCDRW;
        private bool m_bAborted;
        private DateTime m_timeStart;
        private System.Timers.Timer m_timer;
        private WaitCD m_frmWaitCD = null;
        public bool IsCancle { get; set; }

        /// <summary>
        /// 使用時間
        /// </summary>
        internal event ShowTimeProcessDelegate ShowTimeProcess;
        /// <summary>
        /// 顯示進度
        /// </summary>
        internal event ShowBrushProcessDelegate ShowBurshProcess;
        /// <summary>
        /// 顯示子進度
        /// </summary>
        internal event ShowBrushProcessDelegate SubShowBurshProcess;
        /// <summary>
        /// 顯示進度
        /// </summary>
        internal event ShowBrushLogLineDelegate ShowLogLine;
        /// <summary>
        /// 刻錄成功委托
        /// </summary>
        internal event BrushSuccessDelegate BrushSuccess;
        /// <summary>
        /// 刻錄失敗委托
        /// </summary>
        internal event BurshErrorDelegate BrushError;


        public BrushHelper(Nero nero, NeroDrive drive)
        {
            IsCancle = true;
            this.m_nero = nero;
            this.m_drive = drive;
            this.m_frmWaitCD = new WaitCD();
            this.m_frmWaitCD.OnCancel += m_frmWaitCD_OnCancel;
        }

        void m_frmWaitCD_OnCancel(object sender, EventArgs e)
        {
            this.Cancle();
        }

        /// <summary>
        /// 刻錄光盤
        /// </summary>
        /// <param name="isoTrack"></param>
        /// <param name="audioTracks"></param>
        /// <param name="cdStamp"></param>
        /// <param name="BurnFlags"></param>
        /// <param name="m_iSpeed"></param>
        /// <param name="MediaType"></param>
        public void Brush(NeroISOTrack isoTrack,
                          NeroAudioTracks audioTracks,
                          NeroCDStamp cdStamp,
                          NERO_BURN_FLAGS BurnFlags,
                          int m_iSpeed,
                          NERO_MEDIA_TYPE MediaType
            )
        {
            BurnIsoAudio(string.Empty, string.Empty, isoTrack, audioTracks, cdStamp, BurnFlags, m_iSpeed, MediaType);
        }

        /// <summary>
        /// 刻錄光盤
        /// </summary>
        /// <param name="sArtist"></param>
        /// <param name="sTitle"></param>
        /// <param name="isoTrack">光盤類</param>
        /// <param name="audioTracks">音頻類</param>
        /// <param name="cdStamp"></param>
        /// <param name="BurnFlags">刻錄標記</param>
        /// <param name="m_iSpeed">速度</param>
        /// <param name="MediaType">光盤類型</param>
        public void Brush(string sArtist, 
                         string sTitle,
                         NeroISOTrack isoTrack,
                         NeroAudioTracks audioTracks,
                         NeroCDStamp cdStamp,
                         NERO_BURN_FLAGS BurnFlags,
                         int m_iSpeed,
                         NERO_MEDIA_TYPE MediaType
          )
        {
            BurnIsoAudio(sArtist, sTitle, isoTrack, audioTracks, cdStamp, BurnFlags, m_iSpeed, MediaType);
        }


        /// <summary>
        /// 停止刻錄
        /// </summary>
        public void Cancle()
        {
            if (!IsCancle)
            {
                return;
            }
            m_bAborted = true;
            m_nero.Abort();
        }


        private void BurnIsoAudio(string sArtist, string sTitle, NeroISOTrack isoTrack, NeroAudioTracks audioTracks, NeroCDStamp cdStamp, NERO_BURN_FLAGS nbf, int iSpeedInKBS, NERO_MEDIA_TYPE mediaType)
        {
            try
            {
                // First subscribe to all events of interest.
                // 
                SubscribeToEvents(true);

                // If the iso track passed in has neither files nor folders,
                // don't use it.
                // 
                if (isoTrack.RootFolder.Files.Count == 0 &&
                    isoTrack.RootFolder.Folders.Count == 0)
                {
                    isoTrack = null;
                }

                // Just pass on all the gathered parameters.
                //                 
                m_drive.BurnIsoAudioCD(sArtist,
                    sTitle,
                    false,
                    isoTrack,
                    audioTracks,
                    cdStamp,
                    (NERO_BURN_FLAGS)((uint)nbf | (uint)NERO_BURN_FLAGS.NERO_BURN_FLAG_SPEED_IN_KBS),
                    iSpeedInKBS,
                    mediaType);
            }
            catch (COMException ex)
            {
                SubscribeToEvents(false);
                XLogManager.LogError(ex);
                //MessageBox.Show(this, ex.Message);
            }
            catch (Exception exx)
            {
                XLogManager.LogError(exx);
                // MessageBox.Show(this, exx.Message);
            }
        }


        private void SubscribeToEvents(bool bSubscribe)
        {
            if (bSubscribe)
            {
                // Subscribe to NeroDrive events.
                // 
                m_evOnDoneBurn = new _INeroDriveEvents_OnDoneBurnEventHandler(m_drive_OnDoneBurn);
                m_drive.OnDoneBurn += m_evOnDoneBurn;
                m_evOnProgress = new _INeroDriveEvents_OnProgressEventHandler(m_drive_OnProgress);
                m_drive.OnProgress += m_evOnProgress;
                m_evOnSubTaskProgress = new _INeroDriveEvents_OnSubTaskProgressEventHandler(m_drive_OnSubTaskProgress);
                m_drive.OnSubTaskProgress += m_evOnSubTaskProgress;
                m_evOnAborted = new _INeroDriveEvents_OnAbortedEventHandler(m_drive_OnAborted);
                m_drive.OnAborted += m_evOnAborted;
                m_evOnAddLogLine = new _INeroDriveEvents_OnAddLogLineEventHandler(m_drive_OnAddLogLine);
                m_drive.OnAddLogLine += m_evOnAddLogLine;
                m_evOnSetPhase = new _INeroDriveEvents_OnSetPhaseEventHandler(m_drive_OnSetPhase);
                m_drive.OnSetPhase += m_evOnSetPhase;
                m_evOnDisableAbort = new _INeroDriveEvents_OnDisableAbortEventHandler(m_drive_OnDisableAbort);
                m_drive.OnDisableAbort += m_evOnDisableAbort;

                // Subscribe to Nero events.
                // 
                m_evOnFileSelImage = new _INeroEvents_OnFileSelImageEventHandler(m_nero_OnFileSelImage);
                m_nero.OnFileSelImage += m_evOnFileSelImage;
                m_evOnWaitCD = new _INeroEvents_OnWaitCDEventHandler(m_nero_OnWaitCD);
                m_nero.OnWaitCD += m_evOnWaitCD;
                m_evOnWaitCDDone = new _INeroEvents_OnWaitCDDoneEventHandler(m_nero_OnWaitCDDone);
                m_nero.OnWaitCDDone += m_evOnWaitCDDone;
                m_evOnWaitCDMediaInfo = new _INeroEvents_OnWaitCDMediaInfoEventHandler(m_nero_OnWaitCDMediaInfo);
                m_nero.OnWaitCDMediaInfo += m_evOnWaitCDMediaInfo;
                m_evOnNonEmptyCDRW = new _INeroEvents_OnNonEmptyCDRWEventHandler(m_nero_OnNonEmptyCDRW);
                m_nero.OnNonEmptyCDRW += m_evOnNonEmptyCDRW;

                //// Start the timer that is responsible for displaying
                //// the elapsed time during burning.
                //// 
                m_timeStart = DateTime.Now;
                m_timer = new System.Timers.Timer(500);
                m_timer.Elapsed += new System.Timers.ElapsedEventHandler(m_timer_Elapsed);
                m_timer.Start();
            }
            else
            {
                //// Stop the elapsed time timer.
                //// 
                m_timer.Stop();

                // Unsubscribe from NeroDrive events.
                // 
                m_drive.OnDoneBurn -= m_evOnDoneBurn;
                m_drive.OnProgress -= m_evOnProgress;
                m_drive.OnSubTaskProgress -= m_evOnSubTaskProgress;
                m_drive.OnAborted -= m_evOnAborted;
                m_drive.OnAddLogLine -= m_evOnAddLogLine;
                m_drive.OnSetPhase -= m_evOnSetPhase;
                m_drive.OnDisableAbort -= m_evOnDisableAbort;

                // Unsubscribe from Nero events.
                // 
                m_nero.OnFileSelImage -= m_evOnFileSelImage;
                m_nero.OnWaitCD -= m_evOnWaitCD;
                m_nero.OnWaitCDDone -= m_evOnWaitCDDone;
                m_nero.OnWaitCDMediaInfo -= m_evOnWaitCDMediaInfo;
                m_nero.OnNonEmptyCDRW -= m_evOnNonEmptyCDRW;
            }
        }

        /// <summary>
        /// 光盤信息
        /// </summary>
        /// <param name="LastDetectedMedia"></param>
        /// <param name="LastDetectedMediaName"></param>
        /// <param name="RequestedMedia"></param>
        /// <param name="RequestedMediaName"></param>
        private void m_nero_OnWaitCDMediaInfo(ref NERO_MEDIA_TYPE LastDetectedMedia, ref string LastDetectedMediaName, ref NERO_MEDIA_TYPE RequestedMedia, ref string RequestedMediaName)
        {
            // When this event is fired, we need to update the
            // information on the WaitCD form. Also, sometimes
            // this event can come before the actual OnWaitCD so
            // make sure that either of them is prepared to
            // show the WaitCD form.
            // 
            m_frmWaitCD.c_LastDetectedMedia.Text = LastDetectedMediaName;
            m_frmWaitCD.c_RequestedMedia.Text = RequestedMediaName;
            m_frmWaitCD.Show();
        }

        /// <summary>
        /// 光盤不為空時,是否格式化
        /// </summary>
        /// <param name="Response"></param>
        private void m_nero_OnNonEmptyCDRW(ref NERO_RESPONSE Response)
        {
            //// This event will be fired only if the proper conditions
            //// are met AND if NERO_BURN_FLAGS.NERO_BURN_FLAG_DETECT_NON_EMPTY_CDRW
            //// was specified to the burn fucntion. Ask if we should erase
            //// the rewritable.
            //// 
            if (DialogResult.Yes != MessageBox.Show("當前光盤不是空的.需要被刪除才能繼續,你想刪除光盤嗎?", "擦除?", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
            {
                // If the answer was NO, ask for a new disc.
                // 
                Response = NERO_RESPONSE.NERO_RETURN_RESTART;
            }
            else
            {
                // If YES, then do erase the disc and continue burning
                // afterwards.
                // 
                EraseProgressForm frm = new EraseProgressForm(m_drive, true, false);
                frm.ShowDialog();

                Response = NERO_RESPONSE.NERO_RETURN_CONTINUE;
            }
        }

        /// <summary>
        /// 光盤完成
        /// </summary>
        private void m_nero_OnWaitCDDone()
        {
            // When waiting on a disc is done, make sure to
            // enable us and hide the WaitCD form.
            //  
            m_frmWaitCD.Hide();
        }

        /// <summary>
        /// 等待光盤
        /// </summary>
        /// <param name="WaitCD"></param>
        /// <param name="WaitCDLocalizedText"></param>
        private void m_nero_OnWaitCD(ref NERO_WAITCD_TYPE WaitCD, ref string WaitCDLocalizedText)
        {
            // Ok, so now we need to wait on a disc. Let's pass
            // the WaitCD form the text and show it (if not already
            // shown). Make sure to disable the parent (this window)
            // so that a modal behavior is simulated.
            // 
            string value = WaitCDLocalizedText;
            if (WaitCDLocalizedText.Contains("Please insert the disc to write to..."))
            {
                value = "請插入可寫光盤...";
            }
            m_frmWaitCD.c_WaitCDText.Text = value;
            m_frmWaitCD.Show();
        }

        /// <summary>
        /// 設置文件信息時
        /// </summary>
        /// <param name="Filename"></param>
        private void m_nero_OnFileSelImage(ref string Filename)
        {
            //// This events asks us to supply the image filename to
            //// save to if the chose recorder is "Image Recorder".
            //// 
            //SaveFileDialog dlg = new SaveFileDialog();
            //dlg.DefaultExt = ".nrg";
            //dlg.Filter = "NRG files (*.nrg)|*.nrg|All files (*.*)|*.*";

            //// To cancel, assign empty string.
            //// 
            //if (DialogResult.OK == dlg.ShowDialog(this))
            //{
            //    Filename = dlg.FileName;
            //}
            //else
            //{
            //    Filename = "";
            //}
        }

        /// <summary>
        /// 禁用中止
        /// </summary>
        /// <param name="EnableAbort"></param>
        private void m_drive_OnDisableAbort(ref bool EnableAbort)
        {
            // This event will be fired at appropriate moments
            // only if NERO_BURN_FLAGS.NERO_BURN_FLAG_DISABLE_ABORT
            // was specified to the burning function. Make sure to
            // update the state of the Cancel button accordingly.
            // 
            //c_Cancel.Enabled = EnableAbort;
            IsCancle = EnableAbort;
        }

        /// <summary>
        /// 添加進度說明
        /// </summary>
        /// <param name="TextType"></param>
        /// <param name="Text"></param>
        private void m_drive_OnAddLogLine(ref NERO_TEXT_TYPE TextType, ref string Text)
        {
            // This one informs us of the important events during
            // the burn process. We simply add a line to the list
            // view with the current time beside it.
            // 
            DateTime time = DateTime.Now;

            //ListViewItem lvi = c_Events.Items.Add(time.ToLongTimeString());
            //lvi.SubItems.Add(Text);
            if (ShowLogLine != null)
            {
                ShowLogLine(Text);
            }
        }

        private void m_timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            // When the timer ticks, we should update the elapsed
            // time.
            // 

            try
            {
                TimeSpan ts = System.DateTime.Now - m_timeStart;

                if (ShowTimeProcess != null)
                {
                    this.ShowTimeProcess(ts.Hours.ToString("00") + ":" + ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00"));
                }
            }
            catch (Exception ex)
            {
                XLogManager.LogError(ex);
                Console.WriteLine(ex.Message);
            }

        }

        /// <summary>
        /// 設置階段
        /// </summary>
        /// <param name="Text"></param>
        private void m_drive_OnSetPhase(ref string Text)
        {
            // When a new phase comes in, display it.
            // 
            //c_Phase.Text = Text;
            if (this.ShowBurshProcess != null)
            {
                ShowLogLine(Text);
            }
        }

        /// <summary>
        /// 終止刻錄
        /// </summary>
        /// <param name="Abort"></param>
        private void m_drive_OnAborted(ref bool Abort)
        {
            // This is a general aborted event that is called
            // more frequently than other events that might
            // also give us a chance to abort.
            // 
            Abort = m_bAborted;
        }

        /// <summary>
        /// 刻錄結束
        /// </summary>
        /// <param name="StatusCode"></param>
        private void m_drive_OnDoneBurn(ref NERO_BURN_ERROR StatusCode)
        {
            // When burning is over, make sure to unsubscribe from all
            // events.
            // 
            SubscribeToEvents(false);

            // Show the appropriate message for success and failure.
            // 
            if (StatusCode == NERO_BURN_ERROR.NERO_BURN_OK)
            {
                //MessageBox.Show(this, "Burn process completed successfully!");
                BrushSuccess("刻錄完成");
            }
            else
            {
                //MessageBox.Show(this, "Burn process failed!
" + StatusCode.ToString());
                XLogManager.LogError(StatusCode.ToString());
                BrushError(new Exception("刻錄失敗!
" + StatusCode.ToString()));
            }

            this.IsCancle = false;
        }


        /// <summary>
        /// 任務進度
        /// </summary>
        /// <param name="ProgressInPercent"></param>
        /// <param name="Abort"></param>
        private void m_drive_OnProgress(ref int ProgressInPercent, ref bool Abort)
        {
            // This events gives us an opportunity to show progress
            // as well as abort if needed.
            // 
            Abort = m_bAborted;
            if (ProgressInPercent <= 0)
                return;

            if (this.ShowBurshProcess != null)
            {
                ShowBurshProcess(new  ProcessEntity(ProgressInPercent, string.Empty));
            }
            //c_Task.Value = ProgressInPercent;
            //c_TaskPercent.Text = ProgressInPercent.ToString() + "%";
        }


        /// <summary>
        /// 子任務進度
        /// </summary>
        /// <param name="ProgressInPercent"></param>
        /// <param name="Abort"></param>
        private void m_drive_OnSubTaskProgress(ref int ProgressInPercent, ref bool Abort)
        {
            // This event gives us the other task's progress.
            // 
            Abort = m_bAborted;
            if (this.SubShowBurshProcess != null)
            {

                SubShowBurshProcess(new  ProcessEntity(ProgressInPercent, string.Empty));
            }
            //c_SubTask.Value = ProgressInPercent;
            //c_SubTaskPercent.Text = ProgressInPercent.ToString() + "%";
        }


    }

刻錄管理類

    /// <summary>
    /// 刻錄管理類
    /// </summary>
    public class BrushManagerHelper
    {
        private Nero m_nero;
        private NeroDrives m_devices;  

        /// <summary>
        /// 刻錄進程
        /// </summary>
        private Thread BrushThread;

        /// <summary>
        /// 調用窗口
        /// </summary>
        private Form ParentFrm;

        /// <summary>
        /// 文件列表
        /// </summary>
        private IList<FileFolers> fileFolersList = null;
        /// <summary>
        /// 文件大小
        /// </summary>
        private long FileSize = 0;
        /// <summary>
        /// 刻錄成功委托
        /// </summary>
        public event BrushSuccessDelegate BrushSuccess;
        /// <summary>
        /// 刻錄失敗委托
        /// </summary>
        public event BurshErrorDelegate BrushError;
        /// <summary>
        /// 顯示進度委托
        /// </summary>
        public event ShowBrushProcessDelegate ShowBurshProcess;
        /// <summary>
        /// 委托返回光盤信息
        /// </summary>
        public event ShowDiscInfoDelegate ShowDisc;
        /// <summary>
        /// 顯示進度
        /// </summary>
        public event ShowBrushLogLineDelegate ShowLogLine;
        /// <summary>
        /// 顯示子進度
        /// </summary>
        public event ShowBrushProcessDelegate SubShowBurshProcess;
        /// <summary>
        /// 使用時間
        /// </summary>
        public event ShowTimeProcessDelegate ShowTimeProcess;
        /// <summary>
        /// 獲取刻錄速度
        /// </summary>
        public event GetSpeedEntityCollectionDelegate ShowSpeedCollect;

        public BrushManagerHelper(Form frm)
        {
            m_nero = new NeroClass();
            ParentFrm = frm;
            fileFolersList = new List<FileFolers>();
        }

        /// <summary>
        /// 獲取所有刻錄機信息
/// </summary> /// <returns></returns> public IList<CDDriveInfo> GetAllDriveInfo() { m_devices = m_nero.GetDrives(NERO_MEDIA_TYPE.NERO_MEDIA_CD); IList<CDDriveInfo> list = new List<CDDriveInfo>(); for (int i = 0; i < m_devices.Count; i++) { NeroDrive drive = (NeroDrive)m_devices.Item(i); string sDriveLetter = (drive.DriveLetter == "") ? "?" : drive.DriveLetter.ToUpper(); list.Add(new CDDriveInfo() { VolumeName = sDriveLetter + ": " + drive.DeviceName, NeroDrive = drive }); } return list; } /// <summary> /// 獲取光盤信息 /// </summary> /// <param name="driverInfo"></param> public void GetDriveInfoSize(CDDriveInfo driverInfo) { if (driverInfo == null) { return; } DiscHelper disHelper = new DiscHelper(this.m_nero, driverInfo.NeroDrive); disHelper.ShowDisc += disHelper_ShowDisc; disHelper.GetDriveInfoSize(); } #region 讀寫速度 /// <summary> /// 獲取光盤信息 /// </summary> /// <param name="driverInfo"></param> /// <param name="writed"></param> public void GetSpeedCollect(CDDriveInfo driverInfo, bool writed) { if (driverInfo == null) return; SpeedHelper speedHelper = new SpeedHelper(driverInfo.NeroDrive, writed); speedHelper.GetSpeedCollect += speedHelper_GetSpeedCollect; speedHelper.GetSpeed(); } /// <summary> /// 獲取讀取速度 /// </summary> /// <param name="driverInfo"></param> /// <param name="pCDInfo"></param> /// <returns></returns> public SpeedEntityCollection GetReadSpeedCollection(CDDriveInfo driverInfo, INeroCDInfo pCDInfo) { if (driverInfo == null) return null; SpeedHelper speedHelper = new SpeedHelper(driverInfo.NeroDrive, true); return speedHelper.GetReadSpeedCollection(pCDInfo); } /// <summary> /// 獲取寫入速度 /// </summary> /// <returns></returns> public SpeedEntityCollection GetWriteSpeedCollection(CDDriveInfo driverInfo, INeroCDInfo pCDInfo) { if (driverInfo == null) return null; SpeedHelper speedHelper = new SpeedHelper(driverInfo.NeroDrive, true); return speedHelper.GetWriteSpeedCollection(pCDInfo); } #endregion /// <summary> /// 刻錄 /// </summary> public void Brush(CDDriveInfo driverInfo, DiscInfoEntity DiscInfo) { StopThread(); BrushThread = new Thread(new ParameterizedThreadStart(BurshStart)); BrushThread.Start(new object[] { driverInfo, DiscInfo }); } /// <summary> /// 獲取文件夾大小 /// </summary> /// <param name="folderPath"></param> /// <param name="size"></param> private void GetFiloderSize(string folderPath, ref long size) { if (Directory.Exists(folderPath)) { DirectoryInfo info = new DirectoryInfo(folderPath); DirectoryInfo[] direArray = info.GetDirectories(); if (direArray != null) { foreach (DirectoryInfo item in direArray) { GetFiloderSize(item.FullName, ref size); } } FileInfo[] fileArray = info.GetFiles(); if (fileArray != null) { foreach (FileInfo item in fileArray) { size += item.Length; } } } } /// <summary> /// 多線程刻錄 /// </summary> /// <param name="Array"></param> private void BurshStart(object Array) { try { if (Array.GetType().Name == "Object[]") { object[] obj = Array as object[]; CDDriveInfo CDDriveInfo = obj[0] as CDDriveInfo; DiscInfoEntity DiscInfo = obj[1] as DiscInfoEntity; if (CDDriveInfo == null) { throw new Exception("請選擇刻錄機"); } if (DiscInfo == null) { throw new Exception("沒有找到光盤信息"); } NeroISOTrack isoTrack = CreateISOTrack(); isoTrack.BurnOptions = GetNeroBurnOptions(); AddFileFolerToISO(ref isoTrack); if (isoTrack.RootFolder.Files.Count == 0 && isoTrack.RootFolder.Folders.Count == 0) { isoTrack = null; return; } BrushHelper helper = new BrushHelper(this.m_nero, CDDriveInfo.NeroDrive); helper.ShowTimeProcess += helper_ShowTimeProcess; helper.ShowBurshProcess += helper_ShowBurshProcess; helper.ShowLogLine += helper_ShowLogLine; helper.SubShowBurshProcess += helper_SubShowBurshProcess; helper.BrushSuccess += helper_BrushSuccess; helper.BrushError += helper_BrushError; helper.Brush(isoTrack, null, null , GetNeroFlages() , GetWriteSpeedCollection(CDDriveInfo, DiscInfo.Cdinfo).SpeedEntity[0].m_iSpeed , DiscInfo.Cdinfo.MediaType); } } catch (Exception ex) { XInvoke(BrushError, ex); StopThread(); } } /// <summary> /// 停止線程 /// </summary> private void StopThread() { if (BrushThread != null && (BrushThread.ThreadState == ThreadState.Running || BrushThread.ThreadState == ThreadState.WaitSleepJoin)) { try { BrushThread.Abort(); } catch (Exception ex) { XLogManager.LogError(ex); } } } /// <summary> /// 獲取文件大小 /// </summary> /// <returns></returns> public long GetFileSize() { FileSize = 0; if (this.fileFolersList != null) { foreach (FileFolers item in this.fileFolersList) { if (item.FileType == FileType.Folder) { long temp = 0; GetFiloderSize(item.FullPath, ref temp); FileSize += temp; } if (item.FileType == FileType.File) { FileInfo fileInfo = new FileInfo(item.FullPath); FileSize += fileInfo.Length; } } } return FileSize; } /// <summary> /// 獲取刻錄 /// </summary> /// <returns></returns> private NERO_BURN_OPTIONS GetNeroBurnOptions() { NERO_BURN_OPTIONS options = (NERO_BURN_OPTIONS)((uint)NERO_BURN_OPTIONS.NERO_BURN_OPTION_CREATE_ISO_FS + (uint)NERO_BURN_OPTIONS.NERO_BURN_OPTION_USE_JOLIET); return options; } /// <summary> /// 刻錄形式 /// </summary> /// <returns></returns> private NERO_BURN_FLAGS GetNeroFlages() { NERO_BURN_FLAGS flags = new NERO_BURN_FLAGS(); flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_WRITE; flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_CLOSE_SESSION; flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_BUF_UNDERRUN_PROT; flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DISABLE_ABORT; flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DAO; flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_CD_TEXT; flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_DETECT_NON_EMPTY_CDRW; flags = flags | NERO_BURN_FLAGS.NERO_BURN_FLAG_SPEED_IN_KBS; return flags; } #region ISO部分 /// <summary> /// 添加文件到光盤 /// </summary> /// <param name="sFile"></param> /// <param name="isoTrack"></param> private void AddFileToISO(string sFile, ref NeroISOTrack isoTrack) { // This is a file. Create a new NeroFile // change its properties. // NeroFile file = new NeroFileClass(); file.SourceFilePath = sFile; file.Name = Path.GetFileName(sFile); file.EntryTime = Directory.GetLastWriteTime(sFile); // In this implementation, specified files are added // to the root of the disc only. // XInvoke(ShowBurshProcess, new ProcessEntity(0, string.Format("添加文件{0}到關盤", sFile))); isoTrack.RootFolder.Files.Add(file); } /// <summary> /// 添加文件到目錄 /// </summary> private void AddFileFolerToISO(ref NeroISOTrack isoTrack) { if (this.fileFolersList != null) { foreach (FileFolers item in this.fileFolersList) { if (item.FileType == FileType.Folder) { NeroFolder folder = isoTrack.RootFolder; AddFolderRecursively(ref folder, item.FullPath); } if (item.FileType == FileType.File) { AddFileToISO(item.FullPath, ref isoTrack); } } } } /// <summary> /// 創建一個光盤 /// </summary> /// <returns></returns> private NeroISOTrack CreateISOTrack() { NeroISOTrack isoTrack = new NeroISOTrackClass(); return isoTrack; } #endregion #region 文件文件夾 /// <summary> /// 添加目錄 /// </summary> /// <param name="directioryPath"></param> public void AddDirectory(string directioryPath) { if (!Directory.Exists(directioryPath)) { return; } fileFolersList.Add(new FileFolers() { FileType = FileType.Folder, FullPath = directioryPath }); } /// <summary> /// 添加一個目錄 /// </summary> /// <param name="filePath"></param> public void AddFile(string filePath) { if (!File.Exists(filePath)) { return; } fileFolersList.Add(new FileFolers() { FullPath = filePath, FileType = FileType.File }); } /// <summary> /// 這個函數是用于遞歸路徑添加到提供的父NeroFolder /// </summary> /// <param name="folderParent"></param> /// <param name="sPath"></param> private void AddFolderRecursively(ref NeroFolder folderParent, string sPath) { NeroFolder folder = new NeroFolderClass(); folderParent.Folders.Add(folder); string[] sSplits = sPath.Split(new char[] { '\' }, sPath.Length); if (sSplits.GetLength(0) >= 2) { string sFolderName = sSplits[sSplits.GetLength(0) - 2]; folder.Name = sFolderName; string[] sDirectories = Directory.GetDirectories(sPath); foreach (string sSubDirPath in sDirectories) { AddFolderToFolder(sSubDirPath + "\", ref folder); } } string[] sFiles = Directory.GetFiles(sPath); foreach (string sFile in sFiles) { AddFileToFolder(sFile, ref folder); } } /// <summary> /// 添加文件夾到關盤 /// </summary> private void AddFolderToFolder(string sPath, ref NeroFolder folderParent) { XInvoke(ShowBurshProcess, new ProcessEntity(0, string.Format("添加文件假{0}到關盤", sPath))); AddFolderRecursively(ref folderParent, sPath); } /// <summary> /// 添加文件到目錄 /// </summary> /// <param name="sFile"></param> /// <param name="folder"></param> private void AddFileToFolder(string sFile, ref NeroFolder folder) { NeroFile file = new NeroFileClass(); file.SourceFilePath = sFile; file.Name = Path.GetFileName(sFile); file.EntryTime = Directory.GetLastWriteTime(sFile); XInvoke(ShowBurshProcess, new ProcessEntity(0, string.Format("添加文件{0}到關盤", sFile))); folder.Files.Add(file); } #endregion #region 事件 /// <summary> /// 刻錄出錯 /// </summary> /// <param name="ex"></param> void helper_BrushError(Exception ex) { XInvoke(BrushError, ex); } /// <summary> /// 刻錄成功后 /// </summary> /// <param name="value"></param> void helper_BrushSuccess(string value) { XInvoke(BrushSuccess, value); } /// <summary> /// 子進度 /// </summary> /// <param name="percentEvent"></param> void helper_SubShowBurshProcess(ProcessEntity percentEvent) { XInvoke(SubShowBurshProcess, percentEvent); } /// <summary> /// 顯示日志記錄 /// </summary> /// <param name="value"></param> void helper_ShowLogLine(string value) { XInvoke(ShowLogLine, value); } /// <summary> /// 顯示百分比進度 /// </summary> /// <param name="percentEvent"></param> void helper_ShowBurshProcess(ProcessEntity percentEvent) { XInvoke(ShowBurshProcess, percentEvent); } /// <summary> /// 顯示時間進度 /// </summary> /// <param name="time"></param> void helper_ShowTimeProcess(string time) { XInvoke(ShowTimeProcess, time); } /// <summary> /// 顯示可以刻錄的速度 /// </summary> /// <param name="collection"></param> void speedHelper_GetSpeedCollect(SpeedEntityCollection collection) { XInvoke(this.ShowSpeedCollect, collection); } /// <summary> /// 顯示光盤信息 /// </summary> /// <param name="disc"></param> void disHelper_ShowDisc(DiscInfoEntity disc) { XInvoke(this.ShowDisc, disc); } /// <summary> /// 調用事件 /// </summary> /// <param name="delegateValue"></param> /// <param name="args"></param> private void XInvoke(Delegate delegateValue, params object[] args) { if (this.ParentFrm == null) { StopThread(); return; } if (this.ParentFrm != null && this.ParentFrm.IsDisposed) { StopThread(); return; } if (delegateValue != null) { this.ParentFrm.BeginInvoke(delegateValue, args); Thread.Sleep(10); } } #endregion }

本機刻錄前需要獲取光盤信息,系統刻錄是需要光盤的容量,大小類型等信息,采用多線程刻錄,防止因為刻錄卡死界面線程

下面的測試功能:

最后把我的代碼分享出來:http://yunpan.cn/QTeiwZifcurhr(提取碼:a7d8)

沒有找到博客園上傳文件地方,就用網盤了.

總結

以上是生活随笔為你收集整理的C# 实现刻录光盘功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

友田真希x88av| www日日夜夜 | 成人小视频在线播放 | 在线观看香蕉视频 | 激情丁香久久 | 久久久久久国产精品久久 | 久久精品香蕉视频 | av成人在线网站 | 久久久久久久99 | 欧美日韩国产精品一区二区 | 天天骚夜夜操 | 狠狠躁夜夜躁人人爽超碰91 | 日韩高清国产精品 | 亚洲 欧美 变态 国产 另类 | 97精品在线观看 | 精品国产视频一区 | 国产成人精品午夜在线播放 | 免费观看www7722午夜电影 | 欧美乱码精品一区二区 | 五月天综合在线 | 日韩av成人在线 | 国产一区观看 | 色爱区综合激月婷婷 | 精品国产乱码 | 日韩一区二区三区在线观看 | 免费视频久久久久 | 日韩久久久久久久久久 | 久久99久久99精品免观看软件 | 91亚洲永久精品 | av网站播放 | 婷婷精品国产一区二区三区日韩 | 国产精品国产三级国产 | 香蕉影院在线 | 美女视频黄是免费的 | 久久综合久久综合九色 | 日韩视频在线观看视频 | 亚洲最新视频在线播放 | 精品国产乱子伦一区二区 | 久久精品成人热国产成 | 狠狠躁夜夜躁人人爽超碰91 | 国内精品久久久久影院优 | 最近免费在线观看 | 国产不卡网站 | 久久99免费视频 | 久久不卡av | 久久一区国产 | 激情丁香久久 | 中文字幕国产 | 射久久| 国产精品毛片久久 | 欧美久久久久久久久 | 伊人国产在线播放 | 亚洲精品国久久99热 | 18国产精品福利片久久婷 | 国产高清久久 | 91精品国产乱码久久 | 99热这里只有精品免费 | 亚洲欧美日韩一二三区 | 国内精品久久久久久中文字幕 | 日狠狠 | 91在线国产观看 | 久久久久久久国产精品视频 | 欧美精品久久久久 | 国产二区精品 | 一区二区三区日韩视频在线观看 | 久久精品视频播放 | 六月婷婷久香在线视频 | 黄色午夜网站 | 国产韩国日本高清视频 | 国产美女在线观看 | 欧美日韩在线播放一区 | 国产精品96久久久久久吹潮 | 永久免费精品视频网站 | 免费a v在线 | 欧美亚洲精品在线观看 | 九九免费观看视频 | 黄色在线免费观看网址 | 在线免费观看视频你懂的 | 亚洲精品字幕 | www.超碰97.com | 成人午夜av电影 | 99精品黄色 | 精品一二三四视频 | 中文资源在线播放 | 91精品国产欧美一区二区 | 人人草天天草 | 天堂av在线| 中文字幕高清有码 | 国产婷婷一区二区 | 999久久久久久 | 波多野结衣电影一区 | 色www精品视频在线观看 | 亚洲黄色av网址 | 天天操天天色综合 | 麻豆一精品传二传媒短视频 | 中文字幕在线观看免费高清完整版 | 在线精品视频免费播放 | 亚洲一级电影视频 | 99c视频在线 | 视频一区二区三区视频 | 国产精品成人aaaaa网站 | 欧美美女视频在线观看 | 丁香伊人网| 2024国产精品视频 | 日日添夜夜添 | 中文有码在线 | av片免费播放| 欧美爽爽爽| 99热国产在线中文 | 亚洲最大成人免费网站 | 国产精品ssss在线亚洲 | 久久成人国产精品 | 韩国视频一区二区三区 | 808电影免费观看三年 | 在线看成人 | 欧美一级大片在线观看 | 91精品视频一区 | 国产色拍拍拍拍在线精品 | 婷婷精品 | 91麻豆文化传媒在线观看 | 三级黄色在线观看 | 国产专区精品视频 | 国产亚洲综合性久久久影院 | 国产精品专区h在线观看 | 国产成人精品三级 | 天天曰夜夜爽 | 一区二区三区高清 | 亚洲 av网站| 久草免费在线观看视频 | 色综合网在线 | 久久久久 免费视频 | 热久久99这里有精品 | 欧美福利在线播放 | 9999在线 | 91精品一区国产高清在线gif | 国产在线小视频 | 婷婷av在线 | 天天操天天操天天操天天操 | 狠狠色丁香久久婷婷综 | 国产精品美女久久久久久网站 | 99热精品久久 | 日韩视频欧美视频 | 丁香在线观看完整电影视频 | 色哟哟国产精品 | 一区二区三区四区精品 | 国产亚洲精品综合一区91 | 色综合久久精品 | 高清一区二区三区av | 在线欧美日韩 | 五月开心激情 | 亚洲91中文字幕无线码三区 | 精品国产一区二区三区av性色 | 日韩av一区二区三区 | 国产区 在线 | 成人中心免费视频 | 在线91av| 97精品国产一二三产区 | 久久免费精彩视频 | 性色av一区二区 | 99久久精品国产毛片 | zzijzzij亚洲日本少妇熟睡 | 国产精品欧美在线 | 婷婷激情网站 | 国内久久精品 | 国产麻豆成人传媒免费观看 | 国产精品va在线 | 久久亚洲综合色 | 日韩欧美亚州 | 亚洲最大激情中文字幕 | 亚洲一一在线 | av在线专区| av高清在线观看 | 在线观看av不卡 | 国产免费视频在线 | 国产在线毛片 | 久久热首页 | 成年人免费在线观看网站 | 毛片a级片| 成人污视频在线观看 | 国产精品丝袜久久久久久久不卡 | 国产精品成人久久久 | 日韩黄色在线电影 | 天天色天天草天天射 | 一级欧美日韩 | 2019久久精品 | 丁香五月亚洲综合在线 | 在线91精品 | 热热热热热色 | 久久精品日产第一区二区三区乱码 | 亚洲天堂色婷婷 | 成人av在线影视 | 日韩区欠美精品av视频 | 免费v片| 欧美日韩国产一区二区在线观看 | a在线免费 | 欧美xxxxx在线视频 | 亚洲视屏在线播放 | 亚洲视频一 | 伊人精品在线 | 国产日韩欧美在线观看 | 国产免费激情久久 | 中文字幕欧美三区 | 伊人色综合久久天天 | 91麻豆网站| 最新中文字幕视频 | 黄色免费大片 | 免费在线观看污网站 | 天天夜操 | 国产成人av电影在线观看 | 在线看日韩 | 国产精品18久久久久久久 | 国产精品永久免费在线 | 天天干国产| 日韩在线观看第一页 | 天天曰视频 | 中文字幕中文字幕在线一区 | 国产无遮挡又黄又爽在线观看 | 五月婷婷六月丁香激情 | 久久不卡电影 | 人人舔人人射 | 精品av在线播放 | 伊甸园av在线 | 天天操狠狠操 | 国产探花视频在线播放 | 毛片a级片 | 中文字幕在线观看视频一区 | 亚洲涩涩色 | 国产一级a毛片视频爆浆 | 久草在线视频在线观看 | 91在线免费播放 | 激情综合中文娱乐网 | 国产999精品 | 国产精品剧情 | 精品国产欧美 | 久久99国产精品免费网站 | 在线观看久草 | 成人宗合网 | 狠狠狠狠狠狠狠干 | 日本中文字幕在线观看 | 欧美精品v国产精品 | 久久人人精品 | 成 人 黄 色 片 在线播放 | 黄色高清视频在线观看 | 一区二区视频播放 | 日日干天天 | 久草在线免费色站 | 西西444www大胆高清图片 | 在线观看中文字幕亚洲 | www.天天射.com| 一级性视频 | 狠狠成人| 久草在线视频新 | 992tv又爽又黄的免费视频 | 成人黄色片免费 | 一区二区不卡在线观看 | 久久伊人八月婷婷综合激情 | 久久超碰免费 | 国产五月天婷婷 | 黄色av免费看 | 狠色狠色综合久久 | 亚洲天堂va | 最近免费中文视频 | 免费成人在线观看视频 | 毛片一区二区 | 人人看看人人 | 天天综合网久久综合网 | 欧美日韩久久久 | 四川妇女搡bbbb搡bbbb搡 | 精品亚洲午夜久久久久91 | 成人黄色在线播放 | 97品白浆高清久久久久久 | 精品国产伦一区二区三区观看说明 | 中日韩免费视频 | 国产精品永久 | 在线观看视频h | 日韩美女av在线 | 成人在线你懂得 | 免费在线观看黄色网 | 精品一区二区电影 | 亚洲精品乱码久久久久久蜜桃欧美 | 日本三级国产 | 国产偷在线 | 正在播放亚洲精品 | 看v片| 亚洲精品日韩在线观看 | 日韩av女优视频 | 97在线影院 | 4hu视频| 日日色综合 | 国产小视频精品 | 国产成人三级三级三级97 | 精品亚洲免费 | 日韩高清一二三区 | 国产高清视频色在线www | 一级片免费视频 | 久草在线免费播放 | 99精品在线观看视频 | 伊人五月综合 | 亚洲精品日韩av | 狠狠色噜噜狠狠狠合久 | 超碰在线观看av.com | 成人性生爱a∨ | 午夜精品久久久久久久99 | 97天堂| 国产精品不卡在线 | 美女视频永久黄网站免费观看国产 | 91成人蝌蚪 | zzijzzij亚洲日本少妇熟睡 | 免费视频久久久久久久 | av在线不卡观看 | 在线观看一二三区 | 久久久穴 | 97电影手机版 | 久久久免费播放 | 国产亚洲人成网站在线观看 | 久久精品视频日本 | 久久手机免费观看 | 激情开心| 国产在线视频一区二区 | 久久综合狠狠综合 | 一区二区三区四区在线免费观看 | 日韩在线中文字幕视频 | 久久毛片高清国产 | 久操操| 天天色天天爱天天射综合 | 久久久www成人免费精品张筱雨 | 成人毛片在线观看 | 亚洲黄色免费电影 | 精品亚洲va在线va天堂资源站 | 成在人线av | 婷婷在线色 | 国产精品高清一区二区三区 | 五月激情视频 | 大胆欧美gogo免费视频一二区 | 日韩中文在线观看 | 午夜精品久久久久久久久久久 | 久久精品麻豆 | 婷婷六月综合网 | 香蕉影院在线观看 | 日韩资源在线观看 | 91av视频网站| 人人爽人人爱 | 天天爱天天射 | 中文字幕第一页av | 国产精品毛片一区二区在线看 | 久久国产欧美日韩精品 | 91片在线观看 | 欧美日韩在线观看一区 | 国产精品大片免费观看 | 亚洲一区 影院 | 丁香六月婷婷激情 | 午夜天使 | 国产极品尤物在线 | 亚洲va欧美va国产va黑人 | 在线观看视频免费播放 | 九九热在线精品视频 | 久久亚洲综合色 | 国产福利电影网址 | 麻豆一精品传二传媒短视频 | 在线国产视频一区 | www黄在线 | 亚洲成aⅴ人片久久青草影院 | 成人97视频一区二区 | 国产精品成人免费精品自在线观看 | 97超视频免费观看 | 亚洲免费观看视频 | 日韩精品视频免费在线观看 | 99精品视频免费观看 | 黄色在线观看网站 | 毛片1000部免费看 | 91视频成人免费 | 欧美视频一区二 | 国产精品美女久久久 | 欧美精品久久久久久久 | 国产麻豆精品传媒av国产下载 | 国产一区二区电影在线观看 | 国产精品一区二区三区免费视频 | 成人免费影院 | 久草国产在线观看 | 国产精品免费av | 久久综合99| 久久久久女人精品毛片九一 | 国产精品久久久久久久久久久久午 | 精品久久久久久久久久久久久久久久久久 | 免费av看片| 久久99久久99久久 | 久久久久日本精品一区二区三区 | 国产中文在线观看 | 波多野结衣在线视频免费观看 | 成人手机在线视频 | 久久精品国产久精国产 | 久久国产精品99久久人人澡 | 日韩理论片 | 91精品免费 | 色99色| av电影免费在线 | 六月丁香伊人 | 精品久久久国产 | 国产 日韩 在线 亚洲 字幕 中文 | 成人免费网站视频 | 日韩网站在线免费观看 | 黄色小说视频在线 | 久久久久久久久久久成人 | 最近最新最好看中文视频 | 黄色在线成人 | www.香蕉视频| 人人看人人做人人澡 | 久久久影院官网 | 99视频在线精品国自产拍免费观看 | 91高清免费观看 | 在线看国产一区 | 91精品国自产在线观看欧美 | 综合在线观看色 | 玖玖综合网 | 91中文字幕网 | 99在线观看| 伊人久在线| 一区在线观看视频 | 久久黄页| 国产亚洲观看 | 日本激情视频中文字幕 | 日韩精品一区二区三区不卡 | 99精品视频一区 | av成人亚洲 | 91精品色| 国产不卡精品 | 97色国产 | 中文字幕在线电影 | 久久激情婷婷 | 中文在线8新资源库 | 午夜久久久久 | 午夜 久久 tv | 九九三级毛片 | 综合国产视频 | 亚洲高清视频在线观看免费 | 国产精品福利午夜在线观看 | av免费看网站 | 手机成人av | 国产精品中文字幕在线播放 | 欧美激情精品久久久久久免费印度 | 丝袜美女视频网站 | 亚洲成人精品久久 | 视频在线观看亚洲 | 日本在线观看视频一区 | 91色蜜桃 | 天天综合操 | aa级黄色大片 | 在线视频中文字幕一区 | 免费久久久久久久 | 高清色免费 | 亚洲美女精品 | 国产伦理久久精品久久久久_ | 狠狠色丁香久久婷婷综合丁香 | 国产精品video爽爽爽爽 | 午夜骚影| 在线观看理论 | 9久久精品 | 在线免费视频你懂的 | 久久久久久国产精品久久 | 亚洲va欧美va人人爽 | 国产精选在线 | 黄网站免费大全入口 | 欧美日韩色婷婷 | 欧美午夜视频在线 | 深爱婷婷 | 久精品在线| 91黄色在线观看 | 婷婷av网站| 911久久| 91激情在线视频 | 久久影视网 | 四虎视频 | 九九亚洲精品 | 国产视频资源在线观看 | 手机在线黄色网址 | 天天看天天干天天操 | 99在线免费视频 | 久久久久国产成人免费精品免费 | 五月亚洲婷婷 | 在线观看av小说 | 亚洲最大的av网站 | 色在线视频 | 欧美精品一区在线 | 久久久久婷 | 欧美永久视频 | 永久免费观看视频 | 日本久久成人 | 一级黄色片网站 | 五月激情视频 | 欧美午夜久久久 | 九9热这里真品2 | 日韩一二三在线 | 久久久久国产精品免费网站 | 婷婷激情5月天 | 亚洲资源视频 | 涩涩网站在线看 | 欧美日韩超碰 | 麻豆精品视频在线观看免费 | 久草手机视频 | 亚洲成av人片在线观看无 | 午夜色大片在线观看 | 激情av网| 天堂资源在线观看视频 | 欧美有色 | 日韩久久久久 | 四虎影视成人永久免费观看亚洲欧美 | 日韩免费在线观看网站 | 中文字幕美女免费在线 | 日韩理论片在线观看 | 久久久久麻豆v国产 | 成年人黄色免费看 | 午夜电影久久久 | 国产精品一级在线 | 免费麻豆 | 成人午夜电影免费在线观看 | 午夜久久久久久久 | www中文在线 | 精品久久久久免费极品大片 | 免费观看成年人视频 | 黄色片网站av | 国产视频一区二区三区在线 | 九九热久久免费视频 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 国产精品网站一区二区三区 | 91精品视频导航 | 欧美性生爱 | 日韩精品一区二区三区电影 | 在线小视频你懂的 | 国产精品视频资源 | 99精品影视 | 91成人天堂久久成人 | 色在线亚洲| 久久综合在线 | 精品久久久久久久久久久久久久久久久久 | 伊人五月天av | 亚洲麻豆精品 | 久久国产一区二区三区 | 国产高清不卡一区二区三区 | 久久精美视频 | 国产成人不卡 | 毛片无卡免费无播放器 | 亚洲精品久久久久久久蜜桃 | 欧美午夜激情网 | 最新午夜电影 | 亚洲视频高清 | 亚洲片在线观看 | 中日韩在线 | 久久国产精品一区二区三区 | 欧美成年黄网站色视频 | 亚洲人在线视频 | 久久精品精品电影网 | 日本精品在线看 | 狠狠躁日日躁夜夜躁av | 免费观看91 | 久久久精品小视频 | 激情五月网站 | 久久精品人 | 91资源在线观看 | 色婷婷综合久久久中文字幕 | 一区二区中文字幕在线播放 | 午夜精品久久久久久久99水蜜桃 | av成人免费在线 | 国产精品区在线观看 | 国产色道 | 一区二区视频免费在线观看 | 国产国语在线 | 字幕网在线观看 | 国产精品va在线播放 | 最近中文字幕在线 | 成人久久电影 | 日韩精品久久久久久 | 午夜狠狠干 | 一级免费黄色 | 91丨九色丨91啦蝌蚪老版 | 99在线视频免费观看 | 亚洲理论片| 91视频中文字幕 | 日韩中文字幕a | 日韩色一区二区三区 | 精品国产精品久久 | 四虎在线视频 | a午夜在线 | 视频在线日韩 | 日本性高潮视频 | 免费看三级| 久久99精品久久久久久久久久久久 | 97在线视频免费播放 | 国产无套一区二区三区久久 | 91av色 | 久久精品—区二区三区 | 在线观看av免费 | 日韩欧美综合视频 | 日韩深夜在线观看 | 激情综合网在线观看 | 最新日韩电影 | 免费看一级黄色大全 | 国产成人一区二 | 亚洲国产精品免费 | 天天天干天天射天天天操 | 国产精品99精品久久免费 | 国产在线观| 久久久精品国产一区二区电影四季 | 免费色黄| 国产在线播放一区二区三区 | 欧美日韩有码 | 欧美成人精品三级在线观看播放 | 日本韩国欧美在线观看 | 国产高清视频在线播放 | 99 久久久久 | 久久久精品一区二区三区 | 99在线观看视频网站 | 久久激情五月婷婷 | 国产午夜精品一区二区三区四区 | av在线亚洲天堂 | 亚洲国产999 | 久久综合加勒比 | 亚洲成人黄色在线 | 午夜视频日本 | 久久人人爽人人人人片 | 久草精品视频 | 色婷av| www.97色.com| 天堂网在线视频 | 亚洲精品视频在线观看网站 | 国产精品成人久久久 | 欧美aa一级片 | 少妇性xxx | 欧美精品中文在线免费观看 | 99超碰在线播放 | 狠狠搞,com| 玖玖爱国产在线 | 91视视频在线直接观看在线看网页在线看 | 手机在线永久免费观看av片 | 国产亚洲精品xxoo | 丁香六月网| 国产精品久久久久久妇 | 黄a在线观看 | 五月天综合激情 | 午夜视频久久久 | a在线免费观看视频 | 欧美午夜理伦三级在线观看 | 丁香婷婷久久久综合精品国产 | 国内99视频 | 久久久久一区二区三区四区 | 国色天香av| 亚洲国产精品电影 | 人人爽人人搞 | 中文字幕在线观看亚洲 | 天天看天天干天天操 | 色婷婷亚洲婷婷 | 中文字幕在线高清 | 久久精品视频在线观看免费 | 超碰在线人 | 999久久精品 | 99精品久久久久 | 国产色a在线观看 | 精品一区二区在线观看 | 99久久精品无码一区二区毛片 | 91污在线观看| 久久久久女教师免费一区 | 香蕉在线影院 | 日韩视频免费看 | 四虎成人精品在永久免费 | 久久久久久久影院 | 久草精品视频在线播放 | 最新国产精品拍自在线播放 | 久久精品亚洲精品国产欧美 | 欧美久久久影院 | 狠狠干.com | 国产精品一区久久久久 | 国产一区二区影院 | 国外成人在线视频网站 | 四虎永久免费在线观看 | 国产乱对白刺激视频在线观看女王 | 在线99视频 | 一区二区精 | 欧美精品一区二区三区四区在线 | 欧美日韩在线观看不卡 | 色亚洲激情 | 三级av在线免费观看 | 中文字幕av专区 | 欧美有色 | 在线观看国产 | 久久在线一区 | 久久99精品视频 | 亚洲精品自在在线观看 | 亚洲国产一二三 | 国产无吗一区二区三区在线欢 | 精品一区免费 | 久久8精品| 日韩综合精品 | 国产在线资源 | 久久久久久久久黄色 | 91精品人成在线观看 | 天天干天天射天天插 | 成年人在线观看 | 久久综合久久88 | 制服丝袜亚洲 | 亚洲三区在线 | 欧美一级电影免费观看 | 免费久久99精品国产婷婷六月 | 久久xx视频| 成人在线免费观看视视频 | 欧美少妇xx | 在线国产一区二区三区 | 久久精品久久综合 | 免费日韩一区二区三区 | 在线观看免费av片 | 欧美激情综合五月色丁香 | 国产一区二区在线播放 | 免费成人在线观看 | www.午夜| av久久在线 | 久草91视频 | 在线韩国电影免费观影完整版 | 亚洲欧美日韩国产一区二区 | 国产精品视频区 | 中文字幕免费观看全部电影 | 中文字幕在线一区观看 | 久久天天躁 | 国产私拍在线 | 日本二区三区在线 | 韩国在线一区 | 精品国产aⅴ麻豆 | 性日韩欧美在线视频 | 色婷婷伊人| 在线观看日本高清mv视频 | 91成人免费在线视频 | 久久精品国产一区二区三 | 精品一区二三区 | 蜜臀av性久久久久av蜜臀三区 | 国产成人性色生活片 | 91免费观看网站 | 日韩va在线观看 | 在线国产精品视频 | 在线免费观看国产视频 | 日韩在线观看视频网站 | 欧美另类交人妖 | 色偷偷88欧美精品久久久 | 国产九九九精品视频 | 69精品在线 | 成人观看| 国产美女精品视频 | 成人一区电影 | 二区精品视频 | 亚洲va在线va天堂 | 狠狠干婷婷 | 日本女人的性生活视频 | 亚洲精品视频在线观看免费视频 | 午夜婷婷在线观看 | 国产电影黄色av | 午夜av激情 | 亚洲综合色婷婷 | 国产成人精品av在线 | 九九免费观看全部免费视频 | 亚洲精品一区二区在线观看 | 国产精品一区二区三区久久 | 在线观看香蕉视频 | 日韩69av| 精品国产1区二区 | 六月丁香婷婷久久 | www天天干 | 日韩影视在线观看 | 国产在线精品国自产拍影院 | 国产亚洲va综合人人澡精品 | 精品国产美女在线 | 日韩中文字幕电影 | 超碰免费观看 | 337p西西人体大胆瓣开下部 | 国产五月天婷婷 | 亚洲伊人网在线观看 | 亚洲欧美日韩中文在线 | 国产美女被啪进深处喷白浆视频 | 国内精品视频一区二区三区八戒 | 777奇米四色| 亚洲精品婷婷 | 九九热久久免费视频 | 亚洲精品久久久久久中文传媒 | 午夜精品av| 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 日本aaa在线观看 | 麻豆系列在线观看 | 中文字幕一区二区三区久久 | 97av影院 | 中文字幕资源网在线观看 | 91看片淫黄大片一级在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 国产精品久久久久久吹潮天美传媒 | 国语对白少妇爽91 | 人成免费网站 | 看v片| 超碰在线人 | 亚洲综合视频在线播放 | www.在线观看视频 | 色99久久 | 亚洲黄色app | 天天操夜夜拍 | 久久免费精品国产 | 日韩a级免费视频 | 天天插天天 | 亚洲第一成网站 | 日本不卡123区 | 九月婷婷色 | 91香蕉国产 | 久久久高清视频 | www黄免费| 久久久久久电影 | 午夜国产一区 | 久久人人做| 国产黄免费 | 日日狠狠 | 91成人亚洲 | 91专区在线观看 | 亚洲成年人av | 激情av网址 | 久久久久黄色 | av在线播放快速免费阴 | 91精品久久久久久粉嫩 | 免费在线观看日韩视频 | 国产黄色免费观看 | 成人宗合网 | 国产精品久久久久免费观看 | 亚洲高清免费在线 | 亚洲干 | 国产成人l区 | 久久久久久美女 | 久久免费激情视频 | 国产区精品视频 | 日韩精品一区二区三区在线视频 | 亚一亚二国产专区 | 亚洲国产成人精品久久 | 国产夫妻性生活自拍 | 久久精品男人的天堂 | 欧美日韩国语 | 欧美中文字幕第一页 | 99麻豆久久久国产精品免费 | 国产福利专区 | 国产精品亚洲精品 | 久久久久久久久久免费 | 少妇bbb搡bbbb搡bbbb | 香蕉国产91| 97操碰| 色婷婷狠| 国产专区欧美专区 | 久久国产精品99久久久久久丝袜 | 91看成人| 久久99久久精品 | 国产 欧美 在线 | 国产97色 | 国产精品视频不卡 | 欧美乱大交 | 久草97| 久久久影院官网 | 欧美久久久久久久久久久久久 | 成人91在线 | 日本久久成人中文字幕电影 | 日韩有码中文字幕在线 | 亚洲精品97 | 婷婷久久国产 | 成 人 黄 色 视频免费播放 | 日韩av网址在线 | 亚洲综合视频在线 | 99久久久国产精品免费观看 | 激情综合网五月婷婷 | 色视频网页 | 久久理论片 | 黄网站色视频免费观看 | 国产一区高清在线观看 | 久草视频视频在线播放 | 亚洲国产婷婷 | 999超碰| 国产精品孕妇 | 在线视频麻豆 | 国产99久久久国产 | 天天色综合1 | 欧美在线久久 | 免费在线观看91 | 亚洲国产中文字幕在线视频综合 | 欧美极品一区二区三区 | 国产视频亚洲精品 | 国产夫妻自拍av | 亚洲 欧美 变态 国产 另类 | 三级在线播放视频 | 亚洲综合精品在线 | 99精品国产在热久久下载 | 香蕉视频国产在线 | 精品福利片 | av一区二区三区在线播放 | 国产精品久久久久久久久久免费看 | 天天操天天射天天爱 | 精品婷婷 | 中文字幕一区二区三区四区 | 日韩欧美高清视频在线观看 | 天天射天天操天天 | 色综合亚洲精品激情狠狠 | 波多野结衣综合网 | 国产女人18毛片水真多18精品 | av电影免费观看 | 国产精品a久久 | 狠狠色丁香久久婷婷综 | 欧美日韩精品免费观看视频 | 久久久免费看 | 色视频在线免费 | 中文一区二区三区在线观看 | 国产精品白浆 | 国产中出在线观看 | 黄色网址a | 成人a视频在线观看 | 国产一级黄色片免费看 | 亚洲日本黄色 | 久久久久国产精品免费免费搜索 | 亚洲涩涩涩 | 日韩欧美视频在线免费观看 | 狠狠操综合网 | 黄色小说免费在线观看 | 欧美一级黄色视屏 | 日韩一级成人av | 国产精品一区二区三区久久久 | 国产 日韩 在线 亚洲 字幕 中文 | 久久狠狠一本精品综合网 | 偷拍精品一区二区三区 | 国产伦精品一区二区三区… | 国产精品999久久久 久产久精国产品 | 五月婷婷激情五月 | 在线观看一区 | 99国产精品久久久久老师 | 午夜婷婷网 | 美女网站视频免费都是黄 | 在线观看中文字幕网站 | 久久不色| 人人搞人人爽 | 亚洲一级国产 | 99色| 免费下载高清毛片 | 中文字幕国语官网在线视频 | 国产精品久久久久久吹潮天美传媒 | 欧美伦理一区二区三区 | 亚洲永久精品在线 | 激情综合六月 | 亚洲免费不卡 | 天天艹天天| 激情欧美一区二区免费视频 | 在线播放视频一区 | 成人h视频在线 | 欧美极品少妇xbxb性爽爽视频 | 亚洲免费av片 | a'aaa级片在线观看 | 一区二区三区在线观看 | 美女免费视频观看网站 | 中文字幕精品三级久久久 | av中文天堂在线 | av一级在线| 三级av免费看 | 黄色片亚洲 | 国产精品网红福利 | 久久精品波多野结衣 | 在线观看久草 | 中文字幕成人在线 | 久久成人欧美 | 日本三级不卡视频 | 中文字幕人成乱码在线观看 | 国产黄色片免费看 | 国产剧情在线一区 | 日韩xxxbbb | 久草在线视频首页 | 久热av在线| 久久精品视频网址 | 欧美 亚洲 另类 激情 另类 | 久香蕉| 中文字幕亚洲字幕 | 欧美精品久久久久久久久免 | 国产精品中文字幕在线 | 成人黄色毛片视频 | 美女视频是黄的免费观看 | 亚洲成色777777在线观看影院 | 极品嫩模被强到高潮呻吟91 | av在线小说| 在线有码中文 | ,久久福利影视 | 日韩精品免费一区二区三区 | 99中文视频在线 | 精品免费久久久久久 | 精品免费99久久 | 青草视频在线播放 | 麻豆免费精品视频 | 97福利在线 | 久久久久免费精品国产小说色大师 | 国产精品久久久久久麻豆一区 | 91最新中文字幕 | 久草网站在线 | 人人看97 | 久久人人添人人爽添人人88v | 久久久在线免费观看 | 麻豆影视在线播放 | 天天综合网在线 | 日韩免费成人 | 国产成人精品一区二区三区 | 久久成年人网站 |