C#呼叫WIN32API系列二列舉局網內共享印表機 (轉)
系列二列舉局網內共享印表機
C#透過呼叫WIN32API可以實現非常強大的功能,本文將著重講述如何透過呼叫WIN32API實現列舉絡內所有共享的印表機。
首先我們看看EnumPrinters的定義
BOOL EnumPrinters(
D Flags, // printer types
LPTSTR Name, // name of printer object
DWORD Level, // information level
LPBYTE pPrinterEnum, // printer information buffer
DWORD cbBuf, // size of printer information buffer
LPDWORD pcbNeeded, // bytes received or required
LPDWORD pcReturned // number of printers enumerated
);
這個api有幾個返回引數, 其中最重要的是pPrinterEnum所指的緩衝區中,是一個
PRINTER_INFO_N的結構陣列, 這裡N根據Level引數而變化, 這裡我們用的是1, 所以用到的結構是
typedef struct _PRINTER_INFO_1 {
DWORD Flags;
LPTSTR pDescription;
LPTSTR pName;
LPTSTR pComment;
} PRINTER_INFO_1
C#要呼叫API首先要引入動態庫,EnumPrinters在winspool.drv這個動態庫中。引入語句如下
[DllImport("winspool.drv", CharSet=CharSet.Auto)]
然後是定義PRINTER_INFO_1結構
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
struct PRINTER_INFO_1
{
int flags;
[MarshalAs(UnmanagedType.LPTStr)]
public string pDescription;
[MarshalAs(UnmanagedType.LPTStr)]
public string pName;
[MarshalAs(UnmanagedType.LPTStr)]
public string pComment;
}
好了,全部的如下:
using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Drawing.Printing;
public class QuickTest {
[DllImport("winspool.drv", CharSet=CharSet.Auto)]
static extern bool EnumPrinters(int flags, string name, int level, IntPtr pPrinterEnum,
int cbBuf, out int pcbNeeded, out int pcReturned);
private const int PRINTER_ENUMWORK = 0x00000040;
private const int PRINTER_ENUM_LOCAL = 0x00000002;
private const int PRINTER_ENUM_REMOTE = 0x00000010;
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
struct PRINTER_INFO_1
{
int flags;
[MarshalAs(UnmanagedType.LPTStr)]
public string pDescription;
[MarshalAs(UnmanagedType.LPTStr)]
public string pName;
[MarshalAs(UnmanagedType.LPTStr)]
public string pComment;
}
public void EnumeratePrintersWin()
{
bool Success;
int cbRequired;
int nEntries;
IntPtr outb = IntPtr.Zero;
Success = EnumPrinters(PRINTER_ENUM_NETWORK | PRINTER_ENUM_LOCAL | PRINTER_ENUM_REMOTE, null , 1, outb, 0, out cbRequired, out nEntries);
outb = Marshal.AllocHGlobal(cbRequired);
Success = EnumPrinters(PRINTER_ENUM_NETWORK | PRINTER_ENUM_LOCAL | PRINTER_ENUM_REMOTE, null , 1, outb, cbRequired, out cbRequired, out nEntries);
PRINTER_INFO_1[] portsArray = new PRINTER_INFO_1[cbRequired];
IntPtr current = outb;
try {
for (int i=0; i
portsArray[i] = (PRINTER_INFO_1) Marshal.PtrToStructure(current,
typeof(PRINTER_INFO_1));
current=(IntPtr)((int)current+Marshal.SizeOf(typeof(PRINTER_INFO_1)));
Console.WriteLine(i+": n"+portsArray[i].pName+"n"+portsArray[i].pDescription+"n"+portsArray[i].pComment+"n");
}
}
catch (Exception) {
//Console.WriteLine(exp.StackTrace);
}
Marshal.FreeHGlobal(outb);
}
public QuickTest () {
}
public static void Main() {
QuickTest qt = new QuickTest();
qt.EnumeratePrintersWin();
}
}
聯絡作者to:zlyperson@163.net">zlyperson@163.net
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993107/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 共享印表機怎麼設定 如何新增網路共享印表機
- 多臺電腦如何共享一臺印表機?域網內多臺電腦共享一臺印表機設定方法教程
- w10怎麼共享印表機_w10網路共享印表機設定方法
- 如何設定跨網段共享印表機?
- java呼叫印表機Java
- win10區域網印表機共享設定方法_Win10區域網印表機共享怎麼設定Win10
- 如何設定印表機共享
- win10印表機共享設定方法 win10如何設定印表機共享Win10
- win10網路印表機無法列印 win10印表機無法共享列印Win10
- 如何共享印表機和檔案
- 共享印表機有密碼怎麼連線 win10共享印表機需要密碼密碼Win10
- 如何用ip地址連線共享印表機 用ip地址連線共享印表機的方法
- win10怎樣共享本地印表機 win10共享本地印表機的設定教程Win10
- 使用LPD協議來共享印表機協議
- Win7系統區域網共享印表機設定Win7
- Wiin10怎麼共享印表機?Win10系統共享印表機設定連線方法Win10
- Win7共享印表機怎麼設定?Windows7共享印表機的設定方法步驟Win7Windows
- Win10系統怎麼設定印表機共享?Win10系統印表機共享設定教程Win10
- Linux與Windows9x/2000的印表機共享(轉)LinuxWindows
- c#列舉轉換C#
- win10為什麼連不上共享印表機 wind10無法連線共享印表機的方法Win10
- C# 熱敏印表機 Socket 網路連結 列印 圖片C#
- ***網路印表機薦
- java呼叫DLL,呼叫北洋印表機列印二維碼標籤Java
- win10共享印表機無法列印怎麼辦_win10共享印表機列印沒反應解決方法Win10
- win10印表機共享設定密碼怎麼操作_win10設定共享印表機密碼步驟Win10密碼
- Windows8系統下設定印表機共享Windows
- win10系統沒有家庭組功能如何共享印表機_win10沒有家庭組功能共享印表機的方法Win10
- Win7系統下查詢共享印表機網路路徑的方法Win7
- SCO Unix系統下網路印表機的使用(轉)
- 防止快取擊穿之程式內共享呼叫快取
- 印表機拒絕訪問是什麼問題 win10共享印表機拒絕訪問Win10
- 醫院內網病毒屢殺不止 竟是膠片印表機傳播?內網
- win10 印表機offline怎麼辦 win10 共享印表機離線怎麼辦Win10
- c# 中呼叫COM元件 (轉)C#元件
- 雲盤一體機案例:天航局的資料共享轉型
- win10 1909搜不到共享印表機怎麼辦_win10 1909無法搜尋共享印表機如何設定Win10
- w10系統共享印表機怎麼開許可權_w10系統共享印表機訪問許可權如何獲取訪問許可權