溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

打印機的管理

發布時間:2020-07-30 11:20:31 來源:網絡 閱讀:561 作者:Chinayu2014 欄目:編程語言
  1. 枚舉計算機的所有打印機

#include <winspool.h>
PRINTER_INFO_5* prninfo = NULL;
void CMFCApplication1Dlg::OnBnClickedButton8()
{
	DWORD dwNeeded=0, dwReturned=0;
	EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 5, NULL, 0, &dwNeeded, &dwReturned);
	prninfo = (PRINTER_INFO_5*)GlobalAlloc(GPTR, dwNeeded);

	if (EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 5, (LPBYTE)prninfo, dwNeeded,
	 &dwNeeded, &dwReturned)) 
	 {
		for (DWORD i = 0; i < dwReturned; i++, prninfo++) 
		{
			TRACE(_T("x = %s\n"), prninfo->pPrinterName);
			TRACE(_T("x = %s\n"), prninfo->pPortName);
		}
	}
}

2.設置默認打印機

TCHAR szPrinterName[1024] = { 0 };
GetDlgItemText(IDC_EDIT1, szPrinterName, 1024);
BOOL ret = FALSE;
ret = SetDefaultPrinter(szPrinterName);
if (ret == FALSE)
	AfxMessageBox(_T("設置默認打印機失敗"));
else
	AfxMessageBox(_T("設置默認打印機成功"));

3.啟動打印機服務

SHELLEXECUTEINFO ShExecInfo = { 0 };
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask  = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd   = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = _T("cmd");

ShExecInfo.lpParameters = _T("/C net start spooler");

ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow       = SW_HIDE;
ShExecInfo.hInstApp    = NULL;

ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess, INFINITE);

4.獲取指定打印機的所有紙張

TCHAR szPaperName[30000] = {0};
TCHAR str[650] = {0};
void CMFCApplication1Dlg::Printerdo1()
{
	BYTE* pBuffer = NULL;
	DWORD dwSize = 0;
	DWORD dwNum = 0;

	//獲得緩沖區大小
	::EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 5, pBuffer, dwSize, &dwSize, &dwNum);
	pBuffer = new BYTE[dwSize];

	//枚舉打印機
	::EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 5, pBuffer, dwSize, &dwSize, &dwNum);
	if (dwNum != 0)
	{
		//獲得打印機信息
		PRINTER_INFO_5* pPrinterInfo = (PRINTER_INFO_5*)pBuffer;

		LPHANDLE phandle;
		HANDLE handle;
		handle = malloc(sizeof(HANDLE));
		phandle = &handle;
		PRINTER_DEFAULTS *printer_defaults;
		printer_defaults = (PRINTER_DEFAULTS *)malloc(sizeof(PRINTER_DEFAULTS));
		LPWSTR str_printername, str_portname, papername2;

		//添加打印機名及端口
		str_printername = pPrinterInfo->pPrinterName;
		str_portname = pPrinterInfo->pPortName;
		int nNeeded = 0;
		nNeeded = DeviceCapabilities(str_printername, str_portname, DC_PAPERNAMES, 
		                             NULL, NULL);
		DeviceCapabilities(str_printername, str_portname, DC_PAPERNAMES, 
		                             szPaperName,NULL);

		for (int i = 0, j=0; i < nNeeded && szPaperName[j] != 0;)
		{
			
			wmemcpy_s(str, 64, (LPCWSTR)(&szPaperName)+j,64);
			m_ListPrinter.AddString(str);
			TRACE(_T("%s\n"), str);
               j += 64;
		}
	}
}

5.獲取所有紙張的尺寸

CPoint  pt[107];
DeviceCapabilities(str_printername, str_printername, DC_PAPERSIZE, (LPWSTR)&pt, NULL);

6.獲取默認打印機的默認紙型和大小

void CMFCApplication1Dlg::OnBnClickedButton13()
{
	// TODO: 在此添加控件通知處理程序代碼
	PRINTDLG FAR * pPrintDlg = new PRINTDLG;
	//獲取當前打印機的設置
	if (AfxGetApp()->GetPrinterDeviceDefaults(pPrintDlg))
	{
	      //獲取打印機的兩個設置信息結構
	      DEVNAMES FAR*lpDevNames=(DEVNAMES FAR *)::GlobalLock(pPrintDlg->hDevNames);
	      DEVMODE FAR*lpDevMode =(DEVMODE FAR *)::GlobalLock(pPrintDlg->hDevMode);

	      //獲取相關信息:驅動服務名,打印機名,端口號
	      CString szDriver((LPTSTR)lpDevNames +lpDevNames->wDriverOffset);
	      CString szDevice((LPTSTR)lpDevNames +lpDevNames->wDeviceOffset);
	      CString szOutput((LPTSTR)lpDevNames +lpDevNames->wOutputOffset);

	      HANDLE hPrinter;
	      ::OpenPrinter((LPWSTR)(LPCWSTR)szDevice, &hPrinter, NULL);
	      ::DocumentProperties(NULL,hPrinter,(LPWSTR)(LPCWSTR)szDevice,lpDevMode,
			lpDevMode, DM_IN_BUFFER | DM_OUT_BUFFER);

	      // 結構解鎖
	      ::GlobalUnlock(pPrintDlg->hDevNames);
	      ::GlobalUnlock(pPrintDlg->hDevMode);
	}
	delete pPrintDlg;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女