1. 程式人生 > >呼叫Nero SDK 燒錄光碟(含程式碼)

呼叫Nero SDK 燒錄光碟(含程式碼)

專案中有多光碟機刻錄的需求,但在一個程序裡同時啟動多個燒錄任務,程序經常報異常,於是把燒錄部分單獨做了個控制檯程式,每個光碟機燒錄就啟動一個程序去執行燒錄任務,這樣就算燒錄程序出錯也不會影響到父程序。

        以下是Nero 刻碟的類,SDK採用NeroSDK-1.08版本,呼叫NeroCOM元件。呼叫時必須引用Interop.NEROLib.dll 和 Interop.NeroVisionAPI.dll 兩個dll。

  1. publicclass NeroBurn  
  2.     {  
  3.         #region 屬性
  4.         private  NeroDrive m_neroDerive;  
  5.         private  Nero m_nero;  
  6.         privatebool m_aborted;  
  7.         privatestring m_burnPath;  
  8.         privatebool m_isDoneBurn;  
  9.         privateint m_returnCode;//0:失敗;1:成功;-1:未知
  10.         privatestring m_discvol;  
  11.         //nero 委託
  12.         private _INeroDriveEvents_OnDoneBurnEventHandler m_evOnDoneBurn;  
  13.         private  _INeroDriveEvents_OnAddLogLineEventHandler m_evOnAddLogLine;  
  14.         private _INeroEvents_OnWaitCDEventHandler m_evOnWaitCD;  
  15.         private _INeroDriveEvents_OnAbortedEventHandler m_evOnAborted;  
  16.         private _INeroDriveEvents_OnProgressEventHandler m_evOnProgress;  
  17.         private
     _INeroEvents_OnWaitCDDoneEventHandler m_evOnWaitCDDone;  
  18.         #endregion 
  19.         #region 建構函式
  20.         /// <summary></summary>
  21.         /// 建構函式
  22.         /// 
  23.         /// <param name="driverletter">碟符
  24.         /// <param name="burnpath">待刻錄的檔案路徑
  25.         /// <param name="discvol">盤的卷標
  26.         public NeroBurn(string driverletter,string burnpath,string discvol)  
  27.         {  
  28.             m_burnPath = burnpath;  
  29.             m_nero = new NeroClass();  
  30.             m_neroDerive = allocDevice(driverletter);  
  31.             m_aborted = false;  
  32.             m_isDoneBurn = false;  
  33.             m_discvol = discvol;  
  34.         }  
  35.         #endregion 
  36.         #region Nero事件處理
  37.         /// <summary></summary>
  38.         /// 發起刻錄事件
  39.         /// 
  40.         /// <param name="bSubscribe">
  41.         privatevoid SubscribeToEvents(bool bSubscribe)  
  42.         {  
  43.             if (bSubscribe)  
  44.             {  
  45.                 m_evOnAddLogLine = new _INeroDriveEvents_OnAddLogLineEventHandler(m_drive_OnAddLogLine);  
  46.                 m_neroDerive.OnAddLogLine += m_evOnAddLogLine;  
  47.                 m_evOnWaitCD = new _INeroEvents_OnWaitCDEventHandler(m_nero_OnWaitCD);  
  48.                 m_nero.OnWaitCD += m_evOnWaitCD;  
  49.                 m_evOnDoneBurn = new _INeroDriveEvents_OnDoneBurnEventHandler(m_drive_OnDoneBurn);  
  50.                 m_neroDerive.OnDoneBurn += m_evOnDoneBurn;  
  51.                 m_evOnWaitCDDone = new _INeroEvents_OnWaitCDDoneEventHandler(m_nero_OnWaitCDDone);  
  52.                 m_nero.OnWaitCDDone += m_evOnWaitCDDone;  
  53.                 m_evOnProgress = new _INeroDriveEvents_OnProgressEventHandler(m_drive_OnProgress);  
  54.                 m_neroDerive.OnProgress += m_evOnProgress;  
  55.             }  
  56.             else
  57.             {                 
  58.                 m_neroDerive.OnAddLogLine -= m_evOnAddLogLine;  
  59.                 m_nero.OnWaitCD -= m_evOnWaitCD;  
  60.                 m_nero.OnWaitCDDone -= m_evOnWaitCDDone;  
  61.                 m_neroDerive.OnDoneBurn -= m_evOnDoneBurn;  
  62.                 m_neroDerive.OnProgress -= m_evOnProgress;  
  63.             }  
  64.         }  
  65.         privatevoid m_drive_OnProgress(refint ProgressInPercent, refbool Abort)  
  66.         {  
  67.             // This events gives us an opportunity to show progress
  68.             // as well as abort if needed.
  69.             // 
  70.             Abort = m_aborted;              
  71.             Console.WriteLine("光碟" + m_discvol + " " + ProgressInPercent.ToString() + "% had Burned!!");  
  72.             //c_TaskPercent.Text = ProgressInPercent.ToString() + "%";
  73.         }  
  74.         privatevoid m_nero_OnWaitCDDone()  
  75.         {  
  76.             // When waiting on a disc is done, make sure to
  77.             // enable us and hide the WaitCD form.
  78.             // 
  79.             Console.WriteLine("a Disc has inserted!");  
  80.         }  
  81.         /// <summary></summary>
  82.         ///燒錄完成,不管失敗成功! 
  83.         /// 
  84.         /// <param name="StatusCode">
  85.         privatevoid m_drive_OnDoneBurn(ref NERO_BURN_ERROR StatusCode)  
  86.         {  
  87.             // When burning is over, make sure to unsubscribe from all
  88.             // events.
  89.             // 
  90.             SubscribeToEvents(false);  
  91.             if (StatusCode == NERO_BURN_ERROR.NERO_BURN_OK)  
  92.             {  
  93.                 m_returnCode = 1;  
  94.                 Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 刻錄成功!!");  
  95.             }  
  96.             else
  97.             {  
  98.                 m_returnCode = 0;  
  99.                 Console.WriteLine(m_neroDerive.DriveLetter + "盤卷標為 " + m_discvol + " 燒錄失敗!!");  
  100.             }  
  101.             m_isDoneBurn = true;  
  102.             Console.WriteLine("Burn Finish!!");  
  103.         }  
  104.         /// <summary></summary>
  105.         /// 如果光碟機為空,等待光碟機
  106.         /// 
  107.         /// <param name="WaitCD">
  108.         /// <param name="WaitCDLocalizedText">
  109.         privatevoid m_nero_OnWaitCD(ref NERO_WAITCD_TYPE WaitCD, refstring WaitCDLocalizedText)  
  110.         {  
  111.             Console.WriteLine("Wait CD...");  
  112.         }  
  113. 相關推薦

    呼叫Nero SDK 光碟程式碼

    專案中有多光碟機刻錄的需求,但在一個程序裡同時啟動多個燒錄任務,程序經常報異常,於是把燒錄部分單獨做了個控制檯程式,每個光碟機燒錄就啟動一個程序去執行燒錄任務,這樣就算燒錄程序出錯也不會影響到父程序。         以下是Nero 刻碟的類,SDK採用Ne

    Java併發程式設計2:執行緒中斷程式碼

    使用interrupt()中斷執行緒當一個執行緒執行時,另一個執行緒可以呼叫對應的Thread物件的interrupt()方法來中斷它,該方法只是在目標執行緒中設定一個標誌,表示它已經被中斷,並立即返回。這裡需要注意的是,如果只是單純的呼叫interrupt()方法,執行緒並沒有實際被中斷,會繼續往下執行。

    Java併發程式設計3:執行緒掛起、恢復與終止的正確方法程式碼

    JAVA大資料中高階架構 2018-11-06 14:24:56掛起和恢復執行緒Thread 的API中包含兩個被淘汰的方法,它們用於臨時掛起和重啟某個執行緒,這些方法已經被淘汰,因為它們是不安全的,不穩定的。如果在不合適的時候掛起執行緒(比如,鎖定共享資源時),此時便可能會發生死鎖條件——其他執行緒在等待該

    Java併發程式設計(5):volatile變數修飾符-意料之外的問題程式碼

    volatile用處說明在JDK1.2之前,Java的記憶體模型實現總是從主存(即共享記憶體)讀取變數,是不需要進行特別的注意的。而隨著JVM的成熟和優化,現在在多執行緒環境下volatile關鍵字的使用變得非常重要。 在當前的Java記憶體模型下,執行緒可以把變數儲存在本地記憶體(比如機器的暫存器)中,而

    Java併發程式設計8:多執行緒環境中安全使用集合API程式碼

    Java併發程式設計(8):多執行緒環境中安全使用集合API(含程式碼)JAVA大資料中高階架構 2018-11-09 14:44:47在集合API中,最初設計的Vector和Hashtable是多執行緒安全的。例如:對於Vector來說,用來新增和刪除元素的方法是同步的。如果只有一個執行緒與Vector的例

    Java併發程式設計9:死鎖程式碼

    JAVA大資料中高階架構 2018-11-10 14:04:32當執行緒需要同時持有多個鎖時,有可能產生死鎖。考慮如下情形: 執行緒A當前持有互斥所鎖lock1,執行緒B當前持有互斥鎖lock2。接下來,當執行緒A仍然持有lock1時,它試圖獲取lock2,因為執行緒B正持有lock2,因此執行緒A會阻塞等

    用TensorFlow基於神經網路實現井字棋程式碼

    為了展示如何應用神經網路演算法模型,我們將使用神經網路來學習優化井字棋(Tic Tac Toe)。明確井字棋是一種決策性遊戲,並且走棋步驟優化是確定的。 開始 為了訓練神經網路模型,我們有一系列優化的不同的走棋棋譜,棋譜基於棋盤位置列表和對應的最佳落子點。考慮到棋盤的對稱性,通

    Android APP架構淺談程式碼

    寫在開頭 不多說,本文圍繞一張圖展開,請查閱,歡迎共同討論,叨擾了。如果你還有什麼需求或者什麼想法,可一起完善此demo一起進步哦!!! 讓我們從library到mouble,讓我們談談我理解的專案的Project架構。 lib-netwo

    基於VC++的人臉美化的實現實踐篇程式碼

    作者:張皓霖 上海電力學院 課程老師:秦倫明 上篇我將人臉美化的過程列出來了,這篇我是用VS2012(VC++)+MFC+OpenCv 將這些功能實現。 實驗目的 利用VC++實現人臉美化軟體,要求: 1、具有人臉美化介面; 2、具有磨皮功能,引數可調; 3、具有

    【Java併發程式設計】之二十:併發新特性—Lock鎖和條件變數程式碼

    簡單使用Lock鎖     Java 5中引入了新的鎖機制——java.util.concurrent.locks中的顯式的互斥鎖:Lock介面,它提供了比synchronized更加廣泛的鎖定操作。Lock介面有3個實現它的類:ReentrantLock、Reetrant

    【Java併發程式設計】之二十二:併發新特性—障礙器CyclicBarrier程式碼

    CyclicBarrier(又叫障礙器)同樣是Java 5中加入的新特性,使用時需要匯入java.util.concurrent.CylicBarrier。它適用於這樣一種情況:你希望建立一組任

    【Java併發程式設計】之六:Runnable和Thread實現多執行緒的區別程式碼

        Java中實現多執行緒有兩種方法:繼承Thread類、實現Runnable介面,在程式開發中只要是多執行緒,肯定永遠以實現Runnable介面為主,因為實現Runnable介面相比繼承Th

    linux_ok6410 ttyUSB0 GPSUSB轉串列埠匯流排除錯程式碼

    ttyUSB0除錯已經成功好久了,移植沒來的及總結實在抱歉。 編譯環境:LINUX -3.0.1、 ok6410、RedHat6.0 目的:除錯ttyUSB0_GPS除錯: 1、首先,需要在核心選項中

    【Java TCP/IP Socket】基於NIO的TCP通訊程式碼

       NIO主要原理及使用 NIO採取通道(Channel)和緩衝區(Buffer)來傳輸和儲存資料,它是非阻塞式的I/O,即在等待連線、讀寫資料(這些都是在一執行緒以客戶端的程式中會阻塞執行緒的操作)的時候,程式也可以做其他事情,以實現執行緒的非同步操作。    考

    [乾貨]一張地鐵圖看懂人工智慧演算法發展程式碼---轉自AlphaTree

    “ 或許你曾經困擾過:明明自家產品有自己的資料,明明演算法模型很多開源,可為什麼開發起來卻問題多多? 要麼拿到問題無從下手?”每一個大廚,心中都有自己的菜譜。要烹製一桌山珍海味,美味佳餚,自然要熟知三件事,原料(模型),調料(優化演算法)和祕籍菜譜(這裡常常只paper:pa

    【Java併發程式設計】之二十三:併發新特性—訊號量Semaphore程式碼

        在作業系統中,訊號量是個很重要的概念,它在控制程序間的協作方面有著非常重要的作用,通過對訊號量的不同操作,可以分別實現程序間的互斥與同步。當然它也可以用於多執行緒的控制,我們完全可以通過

    DLL的建立和使用程式碼

    初次接觸DLL檔案的使用,在網上找了許多教程自己學習,多謝網上的許多大神的帖子。現在將這些總結一下寫出來也是對自己的一個提高1.DLL建立方法1.        開啟VS2010,點選檔案->新建->專案2.        點選已安裝模版->Visual C

    [Java併發程式設計實戰] 柵欄 CyclicBarrier 實現程式碼

    溫故而知新,可以為師矣。—《論語》 它的意思是:“溫習舊知識從而得知新的理解與體會,憑藉這一點就可以成為老師了 PS: 如果覺得本文有用的話,請幫忙點贊,留言評論支援一下哦,您的支援是我最大的動力!謝謝啦~ 柵欄(Barrier)類似於閉鎖,

    javaNIO原理程式碼及與 同步阻塞IO 、偽非同步IO比較

    一.同步阻塞IO         BIO就是阻塞式的IO,網路通訊中對於多客戶端的連入,伺服器端總是與客戶端數量一致的執行緒去處理每個客戶端任務,即,客戶端與執行緒數1:1,並且進行讀寫操作室阻塞的,當有你成千上完的客戶端進行連線,就導致伺服器不斷的建立新的執行緒,最後導

    【Java併發程式設計】之十六:深入Java記憶體模型——happen-before規則及其對DCL的分析程式碼

    happen—before規則介紹     Java語言中有一個“先行發生”(happen—before)的規則,它是Java記憶體模型中定義的兩項操作之間的偏序關係,如果操作A先行發生於操作B,其意思就是說,在發生操作B之前,操作A產生的影響都能被操作B觀察到,“影響