Solved

Setting printer paper trays to a network printer  for a print job

Posted on 1999-01-24
8
328 Views
Last Modified: 2013-12-03
How does one set the printer tray for a particular print job in Windows SDK programming ? I have tried CreateDC, ResetDC Setprinter? In dire need of this please help. This is VC++.
0
Comment
Question by:arjunram
  • 4
  • 3
8 Comments
 

Author Comment

by:arjunram
ID: 1419200
Adjusted points to 200
0
 
LVL 1

Expert Comment

by:arbitrary
ID: 1419201
what do u mean by tray -  paper size?

0
 
LVL 15

Expert Comment

by:NickRepin
ID: 1419202
Here is the working sample (console app)
1) run it a.exe - it'll print all trays & ids
2) run a.exe tray_id - it'll print test page

#include <windows.h>
#include <iostream.h>
#include <stdio.h>

// Usage: a.exe [tray_#]

PRINTDLG pdSetup;

void GetDefPrinter() {
  memset(&pdSetup,0,sizeof(PRINTDLG));
  pdSetup.lStructSize=sizeof(PRINTDLG);
  pdSetup.Flags=PD_RETURNDEFAULT;
  PrintDlg(&pdSetup);
}

void main(int argc,char* argv[])
{
   // Fill PRINTDLG struct
   GetDefPrinter();

   // Obtain printer info
   LPDEVMODE dm=LPDEVMODE(GlobalLock(pdSetup.hDevMode));
   LPDEVNAMES dn=LPDEVNAMES(GlobalLock(pdSetup.hDevNames));

   if(argc<2) { // Print trays info
      // Check trays
      DWORD nTrays=DeviceCapabilities(LPTSTR(dn)+dn->wDeviceOffset,
         LPTSTR(dn)+dn->wOutputOffset,DC_BINNAMES,0,0);
      if(nTrays==DWORD(-1) || nTrays==0) {
         cout<<"Cannot get trays count!"<<endl;
         exit(1);
      }
   
      typedef char trayNameT[24];
      trayNameT* trayName=new char[nTrays][24];
      DeviceCapabilities(LPTSTR(dn)+dn->wDeviceOffset,
         LPTSTR(dn)+dn->wOutputOffset,DC_BINNAMES,LPTSTR(trayName),0);
      LPWORD trayID=new WORD[nTrays];
      DeviceCapabilities(LPTSTR(dn)+dn->wDeviceOffset,
         LPTSTR(dn)+dn->wOutputOffset,DC_BINS,LPTSTR(trayID),0);

      for(DWORD i=0;i<nTrays;i++) {
         cout<<trayID[i]<<' '<<trayName[i]<<endl;
      }
   }
   else {
      // Get tray ID
      DWORD id=strtoul(argv[1],0,0);  
      dm->dmDefaultSource=id;

      HDC hdcPrinter=CreateDC(LPTSTR(dn)+dn->wDriverOffset,
         LPTSTR(dn)+dn->wDeviceOffset,0,dm);

      // Test printing
      TEXTMETRIC tmPrinter; // Printer metricies
      int cxPage, cyPage; // Width and Height of page
      char szText[120]; // Buffer for output
      cxPage=GetDeviceCaps(hdcPrinter, HORZRES);
      SelectObject(hdcPrinter, CreatePen(PS_SOLID, 1, 0));
      DOCINFO di={sizeof(DOCINFO),"Test",NULL};
      int jobId=StartDoc(hdcPrinter,&di);
      StartPage(hdcPrinter);
      Rectangle(hdcPrinter, 0, 0, cxPage, 500);
      SelectObject(hdcPrinter, CreatePen(PS_SOLID, 10, 0));
      Rectangle(hdcPrinter, 2000, 2000, 2600, 2600);
      SelectObject(hdcPrinter, CreatePen(PS_SOLID, 50, 0));
      Rectangle(hdcPrinter, 200, 1000, 300, 1300);
      wsprintf(szText, "Printer Test");
      TextOut(hdcPrinter, 50, (20 * 5), szText, strlen(szText));
      if (EndPage(hdcPrinter) > 0) {
         EndDoc(hdcPrinter);
      }
      DeleteObject(SelectObject(hdcPrinter, GetStockObject(BLACK_PEN)));
      DeleteDC(hdcPrinter);
   }
   GlobalUnlock(pdSetup.hDevNames);
   GlobalUnlock(pdSetup.hDevMode);
}

0
 

Author Comment

by:arjunram
ID: 1419203
Crash occurs when doing a createDC. Please let me knwo on any further advances on this issue. I dire need. If you are close to the fix please let me know.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 15

Expert Comment

by:NickRepin
ID: 1419204
This code works fine.
At least, I've told you what to do.
Thank you for polite answer.

0
 
LVL 15

Accepted Solution

by:
NickRepin earned 200 total points
ID: 1419205
arjunram, you've asked also the Q about crash while using StretchDIBits. It seems that all crashes in your PC.
May be, the problem is in your code?

Anyway, I try to post the answer again. I hope you will be more kind to me. I've wasted a half of hour to write this example to you. Did you try it alone, I mean, without pasting to your app?
0
 

Author Comment

by:arjunram
ID: 1419206
Hi,
     None of the windows applications work(print to a different tray) if the printer is a network printer. Looks like there is a problem in the setting. ThanX a lot for the sample code.
0
 
LVL 15

Expert Comment

by:NickRepin
ID: 1419207
I've checked this code at network printer before post it here.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes how to programmatically preset the "Pages per Sheet" option that's available with most printer drivers.   This setting lets you do "n-Up" printing, where two, four, or more pages are printed on each sheet of paper. If your …
This article describes how to add a user-defined command button to the Windows 7 Explorer toolbar.  In the previous article (http://www.experts-exchange.com/A_2172.html), we saw how to put the Delete button back there where it belongs.  "Delete" is …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
A short film showing how OnPage and Connectwise integration works.

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now