注:网络打印void hEnumPrinter(void)
{
    int i,j;
HANDLE lpHandle;
char strStr[255];
    DWORD dwWritten; memset(strStr,0,255);
memset(strStr,100,20);       
    PRINTDLG   pd;    pd.lStructSize = (DWORD) sizeof(PRINTDLG);
    //获得设备缺省信息
    if (AfxGetApp()->GetPrinterDeviceDefaults(&pd))
       {
             // 锁定内存
        LPDEVNAMES lpDevNames;
        LPTSTR lpszDriverName, lpszDeviceName, lpszPortName;
               // Unlock memory handle.
              lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames);
              lpszDriverName = (LPTSTR )lpDevNames + lpDevNames->wDriverOffset;
              lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset;
              lpszPortName   = (LPTSTR )lpDevNames + lpDevNames->wOutputOffset;
       if(OpenPrinter(lpszDeviceName,&lpHandle,NULL)!=0)
  {
               DOC_INFO_1 Info;//文档信息
               memset(&Info, 0, sizeof(Info));
               Info.pDocName = "My PrintJob";//文档名(which is shown in the PrintManager)
               Info.pOutputFile = NULL;//不须要向一个文件写,设为NULL
               Info.pDatatype = "RAW";//数据以RAW格式发送(Win9x和WinNT都支持RAW和EMF格式,WinNT还支持TEXT格式               if(!StartDocPrinter(lpHandle, 1, (LPBYTE)&Info))//文档开始
                    goto ll;               // 告诉打印机开始新页
               StartPagePrinter(lpHandle);               // 向打印机写数据
               if(!WritePrinter(lpHandle, strStr, 255, &dwWritten))
   {
                       //当发送数据时出现错误
                       //用最后的错误指出发生了什么错误
      goto ll;
   }
               EndPagePrinter(lpHandle);//告诉打印机已经完成当前页
               if(!EndDocPrinter(lpHandle))//文档结束
                  goto ll;
  
  }ll:
ClosePrinter(lpHandle);
    GlobalUnlock(lpDevNames); }
       }

解决方案 »

  1.   

    这里有一个好一点的
       BOOL RawDataToPrinter(LPSTR szPrinterName, LPBYTE lpData, DWORD dwCount)
       {
         HANDLE     hPrinter;
         DOC_INFO_1 DocInfo;
         DWORD      dwJob;
         DWORD      dwBytesWritten;     // Need a handle to the printer.
         if( ! OpenPrinter( szPrinterName, &hPrinter, NULL ) )
           return FALSE;     // Fill in the structure with info about this "document."
         DocInfo.pDocName = "My Document";
         DocInfo.pOutputFile = NULL;
         DocInfo.pDatatype = "RAW";
         // Inform the spooler the document is beginning.
         if( (dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo )) == 0 )
         {
           ClosePrinter( hPrinter );
           return FALSE;
         }
         // Start a page.
         if( ! StartPagePrinter( hPrinter ) )
         {
           EndDocPrinter( hPrinter );
           ClosePrinter( hPrinter );
           return FALSE;
         }
         // Send the data to the printer.
         if( ! WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten ) )
         {
           EndPagePrinter( hPrinter );
           EndDocPrinter( hPrinter );
           ClosePrinter( hPrinter );
           return FALSE;
         }
         // End the page.
         if( ! EndPagePrinter( hPrinter ) )
         {
           EndDocPrinter( hPrinter );
           ClosePrinter( hPrinter );
           return FALSE;
         }
         // Inform the spooler that the document is ending.
         if( ! EndDocPrinter( hPrinter ) )
         {
           ClosePrinter( hPrinter );
           return FALSE;
         }
         // Tidy up the printer handle.
         ClosePrinter( hPrinter );
         // Check to see if correct number of bytes were written.
         if( dwBytesWritten != dwCount )
           return FALSE;
         return TRUE;
       }void PrintAA(void)
    {
        PRINTDLG   pd;    pd.lStructSize = (DWORD) sizeof(PRINTDLG);
        char str[255];
    memset(str,0,255);
    strcpy(str,"evnt 1111111111111,1111111111,11111111111,111111111\n");   if (AfxGetApp()->GetPrinterDeviceDefaults(&pd))
       {
           LPDEVNAMES lpDevNames;
          LPTSTR lpszDriverName, lpszDeviceName, lpszPortName;
      lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames);
          lpszDriverName = (LPTSTR )lpDevNames + lpDevNames->wDriverOffset;
          lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset;
          lpszPortName   = (LPTSTR )lpDevNames + lpDevNames->wOutputOffset;
          
      RawDataToPrinter(lpszDeviceName,(unsigned char*)str,sizeof(str));
          GlobalUnlock(lpDevNames);
       }}问题是,打印机中有文档,但不打印,打印机是HP LASERJET 1000,是不是字符串太短