?
Solved

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

Posted on 1999-01-24
8
Medium Priority
?
338 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

 

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
 
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 400 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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

This article shows how to make a Windows 7 gadget that accepts files dropped from the Windows Explorer.  It also illustrates how to give your gadget a non-rectangular shape and how to add some nifty visual effects to text displayed in a your gadget.…
zlib is a free compression library (a DLL) on which the popular gzip utility is built.  In this article, we'll see how to use the zlib functions to compress and decompress data in memory; that is, without needing to use a temporary file.  We'll be c…
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…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…

770 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