Anzahl Druckjobs in Warteschlange



  • Hallo zusammen

    Ich versuche gerade die Anzahl der Druckjobs in der Druckerwarteschlange auszulesen.
    Der untere Code funktioniert unter W2k, allerdings unter XP kommt immer 0 als Jobcount zurück.
    Als Compiler verwende ich den BCB 6.0.

    Sieht hier irgendjemand einen Fehler?

    AnsiString sPrinterName = "\\\\fe16712\\AtePdf";
        int *iJobs;
        int Jobs;
        iJobs = &Jobs;
        DWORD cByteNeeded, cByteUsed;
        PRINTER_INFO_2 *pPrinterInfo;
        HANDLE hPrinter;
        DWORD dwError;
    
        //open printer
        if(!OpenPrinter(sPrinterName.c_str(), &hPrinter, NULL))
        {
    //        Log(sPrinterName, "Error OpenPrinter():");
    //        return false;
        }
    
        /* Get the buffer size needed. */
        if(!GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded))
        {
            dwError = GetLastError();
    //        DbgLog(int(cByteNeeded), "Error GetPrinter() Size:");
            if(dwError != ERROR_INSUFFICIENT_BUFFER)
            {
    //            Log(GetSystemErrorMessage(dwError), "Error GetPrinter():");
                ClosePrinter(hPrinter);
    //            return false;
            }
        }
    
        //allocate memory for the PRINTER_INFO_" struct
        pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);
        ZeroMemory(pPrinterInfo, cByteNeeded);
        if(!(pPrinterInfo))
        {
            /* Failure to allocate memory. */
    //        Log(ERROR_AT + " can not allocate memory:");
            ClosePrinter(hPrinter);
    //        return false;
        }
    
        /* Get the printer information. */
        if(!GetPrinter(hPrinter, 2, (LPSTR)pPrinterInfo, cByteNeeded, &cByteUsed))
        {
    //        Log(int(hPrinter), "Error GetPrinter() Info:");
            /* Failure to access the printer. */
            free(pPrinterInfo);
    //       pPrinterInfo = NULL;
            ClosePrinter(hPrinter);
    //        return false;
        }
    
        *iJobs = pPrinterInfo->cJobs;
    
        ClosePrinter(hPrinter);
        free(pPrinterInfo);
    //    return true;
    
        Button1->Caption = *iJobs;
    

    Vielen Dank im voraus.



  • Hallo zusammen

    Ich muß das oben stehende Thema nochmals aufbringen, sorry.
    Leide rbin ich hier nicht wirklich erfolgreich gewesen. Was ich noch festgestellt habe ist, daß auf unterschiedlichen XP Rechnern der Jobcount verschiede sein kann, sich jedoch nie ändert.
    Irgenwelche Ideen?

    MfG Stephan



  • Hallo zusammen

    Sorry für das Doppelpost, jedoch irgendwie hing mein Browser.

    MfG Stephan



  • Button1->Caption = *iJobs;
    

    ...musst Du den int nicht erst in nen String umwandeln?



  • Halo zusammen

    @geeky

    Jein, um es ganz sauber zu machen wäre ein Cast sinnvoll. Allerdings gibt es hier keine Probleme.
    Außerdem ist dies nur mein "Testcode".

    MfG Stephan


Anmelden zum Antworten