列印技術之獲取及設定系統預設印表機

2021-06-29 08:14:53 字數 3215 閱讀 3084

本文主要介紹如何獲取以及設定系統的預設印表機。

1.獲取系統中的所有印表機

獲取系統中的所有印表機可以使用enumprinters()函式,該函式可以列舉全部的本地、網路印表機資訊。其函式原型為:

1

bool winapi enumprinters(

2dword flags,

3lpstr name,

4dword level,

5lpbyte pprinterenum,

6dword cbbuf,

7lpdword pcbneeded,

8lpdword pcreturned

9 );

其中,引數flags可以是以下標誌量的組合:

printer_enum_local:列舉本地印表機(包括window95中的網路印表機)

printer_enum_name:列舉由引數name指定的印表機,如果引數name為null,則列舉出所有可用的印表機

printer_enum_share:列舉出共享印表機(必須同其他標誌量組合使用)

printer_enum_connections:列舉網路列表中的印表機(僅適用於nt)

printer_enum_network:列舉通過網路連線的印表機(引數level必須為1,僅適用於nt)

引數name表示同本機連線的印表機。

引數level表示級別(取值為1、2、4、5,4僅適用於nt,5僅適用於win95和nt4.0)。

引數pprinterenum表示printer_enum_x結構的緩衝區,其中x代表級別。

引數cbbuf表示printer_enum_x結構的緩衝區位元組大小。

引數pcbneeded表示實際讀入的位元組數量。

引數pcreturned表示載入緩衝區的結構數量。

如下的**示例了如何通過使用enumprinters()函式來獲取系統中的所有印表機:

1/*2

* 函式功能 : 獲取系統中所有的印表機名稱

3* 備 注 :

4* 作 者 : 依舊淡然5*/

6cstring cprintdemodlg::getallprintername()731

}32delete pbuffer;

3334

return

strprintersname;

35 }

其中,enumprinters()函式被呼叫了兩次,第一次呼叫是為了得到結構體的大小dwsize,以便申請適當的記憶體空間大小,第二次呼叫是為了得到印表機列表。結構體printer_info_5中的pprintername欄位儲存了印表機的名稱。返回值strprintersname儲存了查詢到得系統中所有印表機名稱,如圖1所示。

圖1 當前系統中的所有印表機

這與控制面板->印表機與傳真中列出的當前系統中所有印表機是一致的,如圖2所示。

圖2 當前系統中的所有印表機

需要注意的一點是,使用enumprinters()函式時,需要包含標頭檔案winspool.h和庫檔案winspool.lib,具體方法如下:

1 #include 2

#pragma comment(lib, "winspool.lib")

2.獲取系統的預設印表機

由圖2可以看出,在系統預設印表機(adobe pdf)的圖示上會有乙個「√」符號,以示與其他非預設印表機的區別。那麼我們如何通過程式來獲取系統的預設印表機呢?

cprintdialog類封裝了windows通用列印對話方塊,其成員函式getdefaults()能夠在列印對話方塊不顯示的情況下獲取當前印表機的預設狀態,而不需要使用者的互動作用。

此外,該類還提供了一系列函式,用於獲取和設定列印引數,如:

getdevicename();     //獲取印表機名稱

getcopies();        //獲取列印份數

getfrompage();       //獲取列印起始頁碼

gettopage();       //獲取列印結束頁碼

等等,我們要獲取系統的預設印表機,可以使用getdevicename()函式來實現。如下的**示例了如何獲取印表機名稱、印表機驅動名和印表機埠:

1/*2

* 函式功能 : 獲取系統的預設印表機

3* 備 注 :

4* 作 者 : 依舊淡然5*/

6cstring cprintdemodlg::getsystemdefaultprinter()

7

其中,返回值strprinterinfo儲存了系統預設印表機的名稱、驅動名和埠。如圖3所示。

圖3 系統預設印表機

3.設定系統預設印表機

如果我們想要設定系統的預設印表機,又該怎麼做呢?其實,使用setdefaultprinter()函式就可以了。但是,在使用這個函式之前,需要確認在winspool.h檔案中是否對該函式進行了定義。如果沒有,我們就需要在winspool.h檔案中新增以下**段:

1

bool

2winapi setdefaultprintera(

3lpctstr pszprinter4);

5bool

6winapi setdefaultprinterw(

7lpctstr pszprinter8);

9#ifdef unicode

10#define setdefaultprinter setdefaultprinterw

11#else

12#define setdefaultprinter setdefaultprintera

13#endif

//!unicode

至此,我們就可以通過呼叫setdefaultprinter()函式,設定系統的預設印表機了。比如,我們想要將虛擬印表機tinypdf設定為系統預設印表機,可以通過以下**實現:

::setdefaultprinter("

tinypdf

");

Delphi獲取預設印表機名稱及埠

delphi獲取預設印表機名稱及埠 在前段時間寫的收銀系統中由於目前市場上很多電腦主機板上已經沒有並口,而pos機卻又需要並口,所以目前需要用pci轉接卡,這個就導致不同門店使用的埠就有可能不同,這就給我們程式中彈出錢箱的指令帶來一定的難度。所以就通過獲取window自帶的預設,得出印表機資訊。在w...

UG軟體使用技巧之系統預設設定

開啟ug軟體後,通過檔案 實用工具 使用者系統預設設定進入 如下圖 設定模板的單位,使用者可以根據需要使用英吋 公釐作為單位,預設為mm 如下圖 更改檔案的起始目錄,通過此選項,可以設定ug9.0軟體預設的資料夾 如下圖 更改建模 鈑金等零件的原始名稱,此處更改後,再建立新的模板零件時,其為你更改後...

列印設定IE打,瀏覽器預設是啟用縮小字型填充

ie瀏覽器預設是打勾 選中 所以每次頁面列印的時候都會縮小字型。每次列印要手動去修改,這樣比較麻煩,使用者使用不方便。搜搜尋資料,最後查詢到需要新增document.execcommand print false,null 如下 document.execcommand print false,nu...