根据打印机名称返回打印机任务方法

///返回 JOB_INFO_1 指针,和任务记录数 pLength 
JOB_INFO_1* CControlPrinterDlg::ListJobsArray(LPTSTR szPrinterName,LPDWORD pLength) //CControlPrinterDlg::你的类名
{
        HANDLE hPrinter;
	DWORD  dwNeeded,dwReturned,i;
	JOB_INFO_1* pJobInfo;
	if(!OpenPrinter(szPrinterName,&hPrinter,NULL)) //打开打印机
	{
		return NULL;
	}
	//
	if(!EnumJobs(hPrinter,0,0xFFFFFFFF,1,NULL,0,&dwNeeded,&dwReturned))
	{
		if(GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
		{
                     ClosePrinter(hPrinter);
	             return NULL;
		}
	}

	if((pJobInfo=(JOB_INFO_1*)malloc(dwNeeded))==NULL)
	{
		 ClosePrinter(hPrinter);
		 return NULL;
	}
	if(!EnumJobs(hPrinter,0,0xFFFFFFFF,1,(LPBYTE)pJobInfo,dwNeeded,&dwNeeded,&dwReturned))
	{
		ClosePrinter(hPrinter);
		free(pJobInfo);
		return NULL;
	}
	ClosePrinter(hPrinter);
	*pLength=dwReturned;
	return pJobInfo;
}

  

调用:

void CControlPrinterDlg::OnSelchangePrinters() 
{
	// TODO: Add your control notification handler code here
	int nIndex=m_listbox.GetCurSel();
	CString strPrinterName;
	m_listBox_job.ResetContent();
	if(nIndex!=CB_ERR)
	{
		m_listbox.GetText(nIndex,strPrinterName);
		if(!strPrinterName.IsEmpty())
		{
			DWORD length;
			JOB_INFO_1* jobs=ListJobsArray((LPTSTR)(LPCSTR)strPrinterName,&length);  //这里调用
			if(jobs!=NULL)
			{
				for(int i=0;i<length;i++)
				{		
					m_listBox_job.AddString(jobs[i].pDocument);
				}
			}
			free(jobs); //释放
		}

	}
}

  

posted @ 2015-04-08 14:40  人来人往  阅读(666)  评论(0编辑  收藏  举报