我用openprinter函数,第一个参数为printer or server name
如何得到?

解决方案 »

  1.   

    我用GetDefaultPrinter,编译不通过,晕,有人知道吗
      

  2.   

    GetDefaultPrinter只能用在winnt/win2000上
    BOOL DPGetDefaultPrinter(LPTSTR pPrinterName, LPDWORD pdwBufferSize)
    {
      BOOL bFlag;
      OSVERSIONINFO osv;
      TCHAR cBuffer[MAXBUFFERSIZE];
      PRINTER_INFO_2 *ppi2 = NULL;
      DWORD dwNeeded = 0;
      DWORD dwReturned = 0;
      
      // What version of Windows are you running?
      osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
      GetVersionEx(&osv);
      
      // If Windows 95 or 98, use EnumPrinters...
      if (osv.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
      {
        // The first EnumPrinters() tells you how big our buffer should
        // be in order to hold ALL of PRINTER_INFO_2. Note that this will
        // usually return FALSE. This only means that the buffer (the 4th
        // parameter) was not filled in. You don't want it filled in here...
        EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 2, NULL, 0, &dwNeeded, &dwReturned);
        if (dwNeeded == 0) 
          return FALSE;
        
        // Allocate enough space for PRINTER_INFO_2...
        ppi2 = (PRINTER_INFO_2 *)GlobalAlloc(GPTR, dwNeeded);
        if (!ppi2)
          return FALSE;
        
        // The second EnumPrinters() will fill in all the current information...
        bFlag = EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 2, (LPBYTE)ppi2, dwNeeded, &dwNeeded, &dwReturned);
        if (!bFlag)
        {
          GlobalFree(ppi2);
          return FALSE;
        }
        
        // If given buffer too small, set required size and fail...
        if ((DWORD)lstrlen(ppi2->pPrinterName) >= *pdwBufferSize)
        {
          *pdwBufferSize = (DWORD)lstrlen(ppi2->pPrinterName) + 1;
          GlobalFree(ppi2);
          return FALSE;
        }
        
        // Copy printer name into passed-in buffer...
        lstrcpy(pPrinterName, ppi2->pPrinterName);
        
        // Set buffer size parameter to min required buffer size...
        *pdwBufferSize = (DWORD)lstrlen(ppi2->pPrinterName) + 1;
      }
      
      // If Windows NT, use the GetDefaultPrinter API for Windows 2000,
      // or GetProfileString for version 4.0 and earlier...
      else if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT)
      {
    #if(WINVER >= 0x0500)
        if (osv.dwMajorVersion >= 5) // Windows 2000 or later
        {
          bFlag = GetDefaultPrinter(pPrinterName, pdwBufferSize);
          if (!bFlag)
            return FALSE;
        }
        
        else // NT4.0 or earlier
    #endif
        {
          // Retrieve the default string from Win.ini (the registry).
          // String will be in form "printername,drivername,portname".
          if (GetProfileString("windows", "device", ",,,", cBuffer, MAXBUFFERSIZE) <= 0)
            return FALSE;
          
          // Printer name precedes first "," character...
          strtok(cBuffer, ",");
          
          // If given buffer too small, set required size and fail...
          if ((DWORD)lstrlen(cBuffer) >= *pdwBufferSize)
          {
            *pdwBufferSize = (DWORD)lstrlen(cBuffer) + 1;
            return FALSE;
          }
          
          // Copy printer name into passed-in buffer...
          lstrcpy(pPrinterName, cBuffer);
          
          // Set buffer size parameter to min required buffer size...
          *pdwBufferSize = (DWORD)lstrlen(cBuffer) + 1;
        }  // Cleanup...
      if (ppi2)
        GlobalFree(ppi2);
      
      return TRUE;
    }
    你看这个行吗?我没试:).(贴自MSDN)
      

  3.   

    http://expert.csdn.net/Expert/topic/1609/1609588.xml?temp=.4697534