GETPDRIV.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /******************************************************************************
  2. *       This is a part of the Microsoft Source Code Samples. 
  3. *       Copyright (C) 1993-1997 Microsoft Corporation.
  4. *       All rights reserved. 
  5. *       This source code is only intended as a supplement to 
  6. *       Microsoft Development Tools and/or WinHelp documentation.
  7. *       See these sources for detailed information regarding the 
  8. *       Microsoft samples programs.
  9. ******************************************************************************/
  10. /******************************************************************************
  11. *
  12. *  PROGRAM:     GETPDRIV.C
  13. *
  14. *  PURPOSE:     Handles display of information returned by call to
  15. *               GetPrinterDriver. GetPrinterDriver is called for the
  16. *               currently selected printer (in the tool bar comobobox),
  17. *               and the results are formatted and displayed in a dialog
  18. *               box.
  19. *
  20. *  FUNTIONS:    GetPrinterDriverDlgProc - handles messages for dialog
  21. *               DisplayPrinterDriverInfo- retrieves & displays printer
  22. *                                           driver info
  23. *
  24. ******************************************************************************/
  25. #include <windows.h>
  26. #include <winspool.h>
  27. #include <string.h>
  28. #include <stdio.h>
  29. #include <winspool.h>
  30. #include "common.h"
  31. #include "getpdriv.h"
  32. /******************************************************************************
  33. *
  34. *  FUNCTION:    GetPrinterDriverDlgProc (standard dlg proc INPUTS/RETURNS)
  35. *
  36. *  COMMENTS:    Processes messages for getPrinterDriver dialog box
  37. *
  38. ******************************************************************************/
  39. LRESULT CALLBACK GetPrinterDriverDlgProc (HWND   hwnd,   UINT msg,
  40.                                           WPARAM wParam, LPARAM lParam)
  41. {
  42.   switch (msg)
  43.   {
  44.     case WM_INITDIALOG:
  45.     {
  46.       BOOL bReturn;
  47.       char buf[BUFSIZE];
  48.       //
  49.       // shove all the printer driver info in the list box
  50.       //
  51.       SetCursor (LoadCursor (NULL, IDC_WAIT));
  52.       bReturn = DisplayPrinterDriverInfo (hwnd);
  53.       SetCursor (LoadCursor (NULL, IDC_ARROW));
  54.       if (!bReturn)
  55.       {
  56.         EndDialog (hwnd, TRUE);
  57.       }
  58.       //
  59.       // set window title to reflect current device
  60.       //
  61.       else
  62.       {
  63.         sprintf (buf, "GetPrinterDriver: %s;%s;%s", gszDeviceName, gszPort,
  64.                  gszDriverName);
  65.         SetWindowText (hwnd, (LPCSTR) buf);
  66.       }
  67.       break;
  68.     }
  69.     case WM_COMMAND:
  70.       switch (LOWORD (wParam))
  71.       {
  72.         case DID_OK:
  73.           EndDialog (hwnd, TRUE);
  74.           return 1;
  75.       }
  76.       break;
  77.   }
  78.   return 0;
  79. }
  80. /******************************************************************************
  81. *
  82. *  FUNCTION:    DisplayPrinterDriverInfo
  83. *
  84. *  INPUTS:      hwnd - handle of GetPrinterDriver dialog box
  85. *
  86. *  RETURNS:     TRUE if successful,
  87. *               FALSE otherwise
  88. *
  89. ******************************************************************************/
  90. BOOL DisplayPrinterDriverInfo (HWND hwnd)
  91. {
  92.   HANDLE        hPrinter;
  93.   DWORD         dwBytesNeeded;
  94.   DRIVER_INFO_1 *pDriverInfo1;
  95.   DRIVER_INFO_2 *pDriverInfo2;
  96.   char          buf[BUFSIZE];
  97.   char          pEnvironment[BUFSIZE] = "";
  98.   BOOL          bReturn = TRUE;
  99.   //
  100.   // open selected printer & alloc buffers & get sundry info, close printer
  101.   //
  102.   OpenPrinter (gszDeviceName, &hPrinter, NULL);
  103.   if (!hPrinter)
  104.   {
  105.     char buf[BUFSIZE];
  106.     sprintf (buf, GetStringRes(IDS_FMT_OPNPRTFAIL), gszDeviceName);
  107.     ErrMsgBox ((LPCSTR) buf, ERR_MOD_NAME);
  108.     bReturn  = FALSE;
  109.     goto display_prt_drv_info_done1;
  110.   }
  111.   GetPrinterDriver (hPrinter, pEnvironment, 1, NULL, 0, &dwBytesNeeded);
  112.   //
  113.   // simple error checking, if these work assume rest will too
  114.   //
  115.   if (!(pDriverInfo1 = (DRIVER_INFO_1 *) LocalAlloc (LPTR, dwBytesNeeded)))
  116.   {
  117.     ErrMsgBox (GetStringRes(IDS_LALLOCFAIL), ERR_MOD_NAME);
  118.     bReturn = FALSE;
  119.     goto display_prt_drv_info_done1;
  120.   }
  121.   if (!GetPrinterDriver (hPrinter, pEnvironment, 1, (LPBYTE) pDriverInfo1,
  122.                          dwBytesNeeded, &dwBytesNeeded))
  123.   {
  124.     ErrMsgBox (GetStringRes(IDS_GETPRTDRVFAIL), ERR_MOD_NAME);
  125.     bReturn = FALSE;
  126.     goto display_prt_drv_info_done2;
  127.   }
  128.   GetPrinterDriver (hPrinter, pEnvironment, 2, NULL, 0, &dwBytesNeeded);
  129.   pDriverInfo2 = (DRIVER_INFO_2 *) LocalAlloc (LPTR, dwBytesNeeded);
  130.   GetPrinterDriver (hPrinter, pEnvironment, 2, (LPBYTE) pDriverInfo2,
  131.                     dwBytesNeeded, &dwBytesNeeded);
  132.   ClosePrinter (hPrinter);
  133.   //
  134.   // shove info in listbox
  135.   //
  136.   sprintf (buf, gaDrvInfo[0]);
  137.   outstr();
  138.   sprintf (buf, gaDrvInfo[1], pDriverInfo1->pName);
  139.   outstr();
  140.   sprintf (buf, gaDrvInfo[2]);
  141.   outstr();
  142.   sprintf (buf, gaDrvInfo[3], pDriverInfo2->cVersion);
  143.   outstr();
  144.   sprintf (buf, gaDrvInfo[4], pDriverInfo2->pName);
  145.   outstr();
  146.   sprintf (buf, gaDrvInfo[5], pDriverInfo2->pEnvironment);
  147.   outstr();
  148.   sprintf (buf, gaDrvInfo[6], pDriverInfo2->pDriverPath);
  149.   outstr();
  150.   sprintf (buf, gaDrvInfo[7], pDriverInfo2->pDataFile);
  151.   outstr();
  152.   sprintf (buf, gaDrvInfo[8], pDriverInfo2->pConfigFile);
  153.   outstr();
  154.   LocalFree (LocalHandle (pDriverInfo2));
  155. display_prt_drv_info_done2:
  156.   LocalFree (LocalHandle (pDriverInfo1));
  157. display_prt_drv_info_done1:
  158.   return bReturn;
  159. }