1. 程式人生 > >呼叫API彈出印表機屬性對話方塊

呼叫API彈出印表機屬性對話方塊

呼叫api彈出印表機屬性對話方塊 
Author:vitoriatang
From:Internet
.NET Framework封裝了很多關於列印的對話方塊,比如說PrintDialog, PageSetupDialog. 
但是有的時候我們還需要關心印表機屬性對話方塊,那麼就可以呼叫API來解決這個問題。有幾個API函式與之相關
PrinterProperties
DocumentProperties
OpenPrinter
ClosePrinter
逐一介紹

printerproperties
顯示印表機屬性對話方塊。

documentproperties
顯示印表機配置對話方塊。

openprinter
開啟印表機

closeprinter
關閉印表機

在呼叫printerproperties或者documentproperties的時候,都需要先呼叫openprinter,並在結束後呼叫closeprinter。

至於印表機屬性和印表機配置有什麼不同,就自己領會了。更為詳盡的資訊可以查閱msdn

sample codes:
1. 宣告API函式
       [System.Runtime.InteropServices.DllImportAttribute("winspool.drv", SetLastError = true)]
       public extern static int DocumentProperties(
            IntPtr hWnd,              // handle to parent window 
            IntPtr hPrinter,           // handle to printer object
            string pDeviceName,   // device name
            ref IntPtr pDevModeOutput, // modified device mode
            ref IntPtr pDevModeInput,   // original device mode
            int fMode);                 // mode options 

        [System.Runtime.InteropServices.DllImportAttribute("winspool.drv")]
        public static extern int PrinterProperties(
            IntPtr hwnd,  // handle to parent window
            IntPtr hPrinter); // handle to printer object

         [System.Runtime.InteropServices.DllImportAttribute("winspool.drv", SetLastError = true)]
        public extern static int OpenPrinter(
            string pPrinterName,   // printer name
            ref IntPtr hPrinter,      // handle to printer object
            ref IntPtr pDefault);    // handle to default printer object. 

        [System.Runtime.InteropServices.DllImportAttribute("winspool.drv", SetLastError = true)]
        public static extern int ClosePrinter(
            IntPtr phPrinter); // handle to printer object


2.呼叫DocumentProperties
private void documentPropButton_Click(object sender, EventArgs e)
        {
            string printerName = _document.PrinterSettings.PrinterName; 

            if (printerName != null && printerName.Length > 0)
            {
                IntPtr pPrinter = IntPtr.Zero;
                IntPtr pDevModeOutput = IntPtr.Zero;
                IntPtr pDevModeInput = IntPtr.Zero;
                IntPtr nullPointer = IntPtr.Zero;

                 OpenPrinter(printerName, ref pPrinter, ref nullPointer); 

                int iNeeded = DocumentProperties(this.Handle, pPrinter, printerName, ref pDevModeOutput, ref pDevModeInput, 0);
                pDevModeOutput = System.Runtime.InteropServices.Marshal.AllocHGlobal(iNeeded);
                DocumentProperties(this.Handle, pPrinter, printerName, ref pDevModeOutput, ref pDevModeInput, DM_PROMPT);
                ClosePrinter(pPrinter);
            }
        }

3. 呼叫PrinterProperties
private void printPropButton_Click(object sender, EventArgs e)
        {
            string printerName = _document.PrinterSettings.PrinterName; 

            if (printerName != null && printerName.Length > 0)
            {
                IntPtr pPrinter = IntPtr.Zero;
                IntPtr pDevModeOutput = IntPtr.Zero;
                IntPtr pDevModeInput = IntPtr.Zero;
                IntPtr nullPointer = IntPtr.Zero;

                 OpenPrinter(printerName, ref pPrinter, ref nullPointer); 

                int iNeeded = PrinterProperties(this.Handle, pPrinter);
                ClosePrinter(pPrinter);
            }

相關推薦

呼叫API印表機屬性對話方塊

呼叫api彈出印表機屬性對話方塊 Author:vitoriatangFrom:Internet.NET Framework封裝了很多關於列印的對話方塊,比如說PrintDialog, PageSetupDialog. 但是有的時候我們還需要關心印表機屬性對話方塊,那麼就可以呼叫API來解決這個問題。有幾個

點選聯絡我們臨時QQ對話方塊

一般企業網站或電商網站都有聯絡我們的功能。 為了能方便快速聯絡,提高使用者體驗,需要點選聯絡我們按鈕就能讓使用者與商家直接溝通。 這樣就需要用到以下程式碼: <a href="http://wpa.qq.com/msgrd?v=3&uin=商家QQ號(220xxxxxx

android 實現點選輸入框日期選擇對話方塊(DatePickerDialog)

前言 這裡我們實現一個功能,點選日期輸入框(EditText),即可彈出日期選擇對話方塊(DatePickerDialog),等使用者選擇日期後,將使用者選擇的日期顯示在日期輸入框。 1.activity_main.xml 這裡只有一個TextView和EditText。

VC自動關閉的MessageBox對話方塊的總結

下面的程式從5種方法,關閉彈出的MessageBox對話方塊: 首先,建立定時器和彈出MessageBox: void CTestDlg::OnBnClickedButton1() { //啟動一個定時器,用於自動觸發關閉MessageBox對話方塊 SetTimer(

js 確認 取消對話方塊

一種: <a href="javascript:if(confirm('確實要刪除該內容嗎?'))location='http://www.google.com'">彈出視窗</a> 二種: <script language="JavaScript">          

JS框、對話方塊、提示框,JS關閉視窗、關閉頁面和JS控制頁面跳轉

1. RequestDispatcher.forward() 在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet或者是JSP到另外的一個Servlet、JSP 或普通HTML檔案,也即你的form提交至a.jsp,在a.jsp用到了forw

原生Js窗外掛|web層元件|對話方塊

wcPop.js 是一款基於原生javascript開發的前端 web版 彈窗元件,遵循原生 H5/css3/JS 的書寫規範,簡單實用、拿來即用(壓縮後僅10KB)。已經相容各大主流瀏覽器。內含多種彈窗型別(普通型彈窗、仿微信|android|ios彈窗、定位彈窗、全屏彈窗),多種動畫展示效果,可以讓您的網

Android 如何監聽返回鍵,一個退出對話方塊

Android 如何監聽返回鍵點選事件,並建立一個退出對話方塊, 防止自己寫的應用程式不小心點選退出鍵而直接退出。自己記錄下這個簡單的demo,備用。 注:如下程式碼當時是從網上copy過來的,現在忘了它出自哪個原作者了,在此說聲抱歉。 原始碼如下: public cla

js框、對話方塊、提示框、窗總結

一、JS的三種最常見的對話方塊 //====================== JS最常用三種彈出對話方塊 ======================== //彈出對話方塊並輸出一段提示資訊 function ale() { //彈出一

JQuery的Boxy模態對話方塊,如何獲得頁面的返回值returnValue

JQuery很好用,現在想做個原來window.ShowModelDialog()的模態對話方塊,但是不知道如何像以前一樣獲得returnValue,請知道的給指點一二。 用jq不可能實現~~ lz想要的是同步的返回結果,但是自己實現的對話方塊始終不是"模態對話方塊",

Android開發 之 監聽返回鍵,一個退出對話方塊

Android 如何監聽返回鍵點選事件,並建立一個退出對話方塊,防止自己寫的應用程式不小心點選退出鍵而直接退出。 自己記錄下這個簡單的demo,備用。 注:如下程式碼當時是從網上copy過來的,現在忘了它出自哪個原作者了,在此說聲抱歉。 原始碼如下: public

點選按鈕表單對話方塊帶透明遮罩

使用模態對話方塊來請求使用者在一個多步驟過程中輸入資料。在內容區域嵌入 form 標記,設定 modal 選項為 true,並通過 buttons 選項來指定主要的和次要的使用者動作 1. 按鈕 <input class="primary-btn" type="b

怎樣在關閉窗體時一個確認對話方塊,確定再退出?

         private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)           {       

HOOK。另一個程式單擊某個按鈕時,自己的對話方塊

半年沒來。瑣事太多是藉口。其實是半年來一直用VC做東西,而且只用VC6。因為與.Net沒什麼關係,所以不好意思到這裡灌了。。近兩天在做個東西,主要目的是為方便一個MIS錄入人員照片。通過Camera SDK,實時採集。今天先談談對另一個程式單擊某個按鈕時,彈出自己的對話方塊。

VBScript - “檔案選擇對話方塊”方法大全!

本文記錄,VBScript 中,各種開啟 “檔案選擇對話方塊” 的方法。 實現方法-1 (mshta.exe): 首先,我們要實現的就是,彈出上面的這個“檔案選擇對話方塊”。 這種方法是通過,Shell 物件,開啟 mshta.exe 程式,執行一個 .hta 檔案,從而開啟視窗, 這種方法,其實是

js框、對話框、提示框、窗總結

js彈出框、對話框、提示框、彈窗總結一、JS的三種最常見的對話框//====================== JS最常用三種彈出對話框 ======================== //彈出對話框並輸出一段提示信息 function ale() { /

如何QQ臨時對話框實現不添加好友在線交談效果

*** brush ref nbsp alt lan 驗證 組件 真的 如何不添加好友彈出QQ臨時對話框實現在線交談效果,這樣的一個需求,我們真的是太需要了,實現起來也很簡單,一行代碼即可搞定,需要的朋友可以參考下 其實這個很簡單,在img我們加入一個a標簽,然後

解決win10打開組策略管理模板對話框問題

windows htm 解決 take .html 全選 In 描述 idt 今天win10企業版更新完系統,打開組策略編輯器時彈出管理模板對話框問題 1、問題描述 打開組策略編輯器時彈出管理模板對話框問題 2、解決方法 1)window+x 打開命令提示符(管理員

程式碼從Polyline讀取到的座標和屬性對話方塊顯示的不一樣?

屬性視窗中查詢的第一個點座標: 程式輸出的各個點座標: 差這麼多? 原來是座標系的問題,程式查詢到的是世界座標,屬性視窗中是當前ucs座標   Document doc = Application.DocumentManager.MdiActiveDocument;doc.Edit

解決開機系統屬性框:由於啟動計算機時出現了頁面配置問題

最近重新裝了一個Win8。1的系統,不知怎麼的,一開機就彈出由於啟動計算機時出現了頁面檔案配置問題...這樣的問題 ,雖然目前沒有發現這個問題帶來的其他問題,但是每次開機都彈這個,實在讓人 有點煩。於是就百度了一下,發現這個問題是由於虛擬記憶體引起的。 設定的方法有 兩種。