Printer status

Printer status
2006-11-09T18:15:30+01:00
2006-12-15T06:37:33+01:00
2022-11-02T15:30:43+01:00
amargo
Sziasztok!

Eddig még nem találtam a kérdésemre választ.
Win XP alatt kellene lézer nyomtatótól lekérdezni a státuszát:

DWORD dwReturned, dwNeeded ;
EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, NULL,
0, &dwNeeded, &dwReturned) ;
sizeof(PRINTER_INFO_2);
PRINTER_INFO_2* pPrinterEnum = (PRINTER_INFO_2 *)malloc (dwNeeded) ;
EnumPrinters (PRINTER_ENUM_LOCAL, NULL, 4, (PBYTE) pPrinterEnum,
dwNeeded, &dwNeeded, &dwReturned) ;
(...)

Ezzel egy nyomtatótól lehet közvetlenül lekérdezni minden információt.. legalább is Ő ezt mondja: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi..

Láttam olyan megoldásokat is, ahol kokrétan a nyomtató driver lett betöltve és azon keresztűl lett lekérdezve, viszont nekem álltalánosabban kellene ezt megoldani, hogy lássam a státuszát.

JOB_INFO_2 *pJobs;
long int cJobs,
i;
DWORD dwPrinterStatus;

if (!GetJobs(hPrinter, &pJobs, &cJobs, &dwPrinterStatus))
return FALSE;
if (dwPrinterStatus & ...
(...)
Ezzel a spoolerből kapok is vissza hibaüzeneteket, ha nicns benne lap, vagy kivan kapcsolva stb..
De azért kellene közvetlenűl a nyomtatótól megkérdezni a státuszt, mert tudni akarom, hogy konkrétan nyomtat-e még. Vagy már befejezte. A spoolerben nem láttam erre utaló jeleket, hogy megmondaná..
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi..
Itt a státusz, csak addig él, amíg ugye feldolgozza az adatokat és elküldi a nyomtatónak, de ha már kikülte.. onnantól csak a nyomtatótól tudom megkérdezni.

Most egy HP 1010-el tudok tesztelni ez USB-n van.

Köszönöm a segítséget!
Mutasd a teljes hozzászólást!
Es amit irnak a WM_SPOOLERSTATUS aljan az sem jo?

Note The WM_SPOOLERSTATUS message is not supported after Windows XP. To be notified of changes to the print queue status, use FindFirstPrinterChangeNotification and FindNextPrinterChangeNotification
ezen belul is a PRINTER_NOTIFY_TYPE - PRINTER_NOTIFY_FIELD_STATUS flag. Egy probat meger es NT 3.5+ kell hozza.
Mutasd a teljes hozzászólást!

  • Szia amargo!

    Nem tudom értesz-e Delphihez, de pont most van egy ilyen téma itt
    Próbáld meg te is.
    Mutasd a teljes hozzászólást!
  • Ezt dobtam össze:
    void Valami() { DWORD flags = PRINTER_ENUM_LOCAL; DWORD level = 4; DWORD pcbNeeded = 0; DWORD pcReturned = 0; LPPRINTER_INFO_4 lpInfo4 = NULL; CStringArray m_printersName; // lekerdezzuk a szukseges buffermeretet (pcbNeeded) EnumPrinters(flags, NULL, level, NULL, 0, &pcbNeeded, &pcReturned); // mem lefoglalas lpInfo4 = (LPPRINTER_INFO_4)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, pcbNeeded); EnumPrinters(flags, NULL, level, (LPBYTE)lpInfo4, pcbNeeded, &pcbNeeded, &pcReturned); // Feltöltsük az m_printersName -t a nyomtatók neveivel... for (DWORD dwItem = 0; dwItem < pcReturned; dwItem++) m_printersName.Add(lpInfo4[dwItem].pPrinterName); // felszab. az lpInfo4 által lefogl. memóriát HeapFree (GetProcessHeap (), 0, lpInfo4); LPPRINTER_INFO_2 lpInfo2; HANDLE phPrinter = NULL; for (int i = 0; i <= m_printersName.GetUpperBound(); i++) { char * printerName = (char *) (LPCTSTR) m_printersName[i]; OpenPrinter(printerName, &phPrinter, NULL); GetPrinter(phPrinter, 2, (LPBYTE)lpInfo2, 0, &pcbNeeded); lpInfo2 = (LPPRINTER_INFO_2)HeapAlloc ( GetProcessHeap (), HEAP_ZERO_MEMORY, pcbNeeded); GetPrinter(phPrinter, 2, (LPBYTE)lpInfo2, pcbNeeded, &pcbNeeded); //itt kérdezed le a nyomtató álllapotát //lpInfo2->cJobs ; lpInfo2->pDriverName; ...... HeapFree (GetProcessHeap (), 0, lpInfo2); ClosePrinter(phPrinter); } }
    szerk:
    Úgy látszik a tabulátort nem szereti...
    :)
    És persze a .cpp elején
    #include "winspool.h"
    Mutasd a teljes hozzászólást!
  • Szia!

    Megisnézem! Azt látom, hogy az info_4ből szeded ki az adatokat. Amit átírtam írok is.

    Köszönöm addig is :)
    Mutasd a teljes hozzászólást!
  • Azt látom, hogy az info_4ből szeded ki az adatokat.

    Nem. lpInfo4-ből csak az installált nyomtatók neveit szedem ki. A nyomtatók adatait lpInfo2-ből kapom meg.

    Különben nem vagyok egy C-s guru.
    Mutasd a teljes hozzászólást!
  • Tehát leteszteltem:
    GetPrinter(phPrinter, 2, 0, 0, &pcbNeeded);
    Elsőnek, amúgy elszáll.
    Tehát ezt használva egyedül az LPPRINTER_INFO_2 deklaráció volt, más ahogy eddig próbáltam, de semmi infót nem látok. nem is értem. De lehet egy kis kavar van bennem
    e szerint, elég sok státuszt lehet megkülönböztettni, de semmit nem látok, még azzal a módszerrel sem, amit adtál (mint írtam előtte is így próbáltam)
    http://msdn2.microsoft.com/en-us/library/ms536023.aspx

    Status
    Specifies the printer status. This member can be any reasonable combination of the following values.
    Value Meaning
    PRINTER_STATUS_BUSY The printer is busy.
    PRINTER_STATUS_DOOR_OPEN The printer door is open.
    PRINTER_STATUS_ERROR The printer is in an error state.
    PRINTER_STATUS_INITIALIZING The printer is initializing.
    PRINTER_STATUS_IO_ACTIVE The printer is in an active input/output state
    PRINTER_STATUS_MANUAL_FEED The printer is in a manual feed state.
    PRINTER_STATUS_NO_TONER The printer is out of toner.
    PRINTER_STATUS_NOT_AVAILABLE The printer is not available for printing.
    PRINTER_STATUS_OFFLINE The printer is offline.
    PRINTER_STATUS_OUT_OF_MEMORY The printer has run out of memory.
    PRINTER_STATUS_OUTPUT_BIN_FULL The printer's output bin is full.
    PRINTER_STATUS_PAGE_PUNT The printer cannot print the current page.

    Windows 95/98/Me: Indicates the page is being "punted" (that is, not printed) because it is too complex for the printer to print.
    PRINTER_STATUS_PAPER_JAM Paper is jammed in the printer
    PRINTER_STATUS_PAPER_OUT The printer is out of paper.
    PRINTER_STATUS_PAPER_PROBLEM The printer has a paper problem.
    PRINTER_STATUS_PAUSED The printer is paused.
    PRINTER_STATUS_PENDING_DELETION The printer is being deleted.
    PRINTER_STATUS_POWER_SAVE The printer is in power save mode.
    PRINTER_STATUS_PRINTING The printer is printing.
    PRINTER_STATUS_PROCESSING The printer is processing a print job.
    PRINTER_STATUS_SERVER_UNKNOWN The printer status is unknown.
    PRINTER_STATUS_TONER_LOW The printer is low on toner.
    PRINTER_STATUS_USER_INTERVENTION The printer has an error that requires the user to do something.
    PRINTER_STATUS_WAITING The printer is waiting.
    PRINTER_STATUS_WARMING_UP The printer is warming up.

    Te ezek közül látsz is valamilyen értéket? Pl, ha nincs benne lap.. vagy vár valamire stb.. offline. Mert nálam a státusz mindig 0-a és idegesít miért?

    Job-ból sok mindent letudok kérdezni, de itt a spooler, ha már kiköpte az adatott, akkor semmi üres.. státusza sincs.
    A job részében akár belinkelhettem volna, amit tudok sőt meg is teszem okulás képpen:

    BOOL GetJobs(HANDLE hPrinter, /* Handle to the printer. */
    JOB_INFO_2 **ppJobInfo, /* Pointer to be filled. */
    long int *pcJobs, /* Count of jobs filled. */
    DWORD *pStatus) /* Print Queue status. */

    {
    DWORD cByteNeeded,
    nReturned,
    cByteUsed;
    JOB_INFO_2 *pJobStorage = NULL;
    PRINTER_INFO_2 *pPrinterInfo = NULL;
    /* Get the buffer size needed. */
    if (!GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded))
    {
    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
    return FALSE;
    }
    pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);
    if (!(pPrinterInfo))
    /* Failure to allocate memory. */
    return FALSE;
    /* Get the printer information. */
    if (!GetPrinter(hPrinter,
    2,
    (LPBYTE)pPrinterInfo,
    cByteNeeded,
    &cByteUsed))
    {
    /* Failure to access the printer. */
    free(pPrinterInfo);
    pPrinterInfo = NULL;
    return FALSE;
    }
    /* Get job storage space. */
    if (!EnumJobs(hPrinter,
    0,
    pPrinterInfo->cJobs,
    2,
    NULL,
    0,
    (LPDWORD)&cByteNeeded,
    (LPDWORD)&nReturned))
    {
    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
    {
    free(pPrinterInfo);
    pPrinterInfo = NULL;
    return FALSE;
    }
    }
    pJobStorage = (JOB_INFO_2 *)malloc(cByteNeeded);
    if (!pJobStorage)
    {
    /* Failure to allocate Job storage space. */
    free(pPrinterInfo);
    pPrinterInfo = NULL;
    return FALSE;
    }
    ZeroMemory(pJobStorage, cByteNeeded);
    /* Get the list of jobs. */
    if (!EnumJobs(hPrinter,
    0,
    pPrinterInfo->cJobs,
    2,
    (LPBYTE)pJobStorage,
    cByteNeeded,
    (LPDWORD)&cByteUsed,
    (LPDWORD)&nReturned))
    {
    free(pPrinterInfo);
    free(pJobStorage);
    pJobStorage = NULL;
    pPrinterInfo = NULL;
    return FALSE;
    }
    /*
    * Return the information.
    */
    *pcJobs = nReturned;
    *pStatus = pPrinterInfo->Status;
    *ppJobInfo = pJobStorage;
    free(pPrinterInfo);
    return TRUE;
    }
    BOOL IsPrinterError(HANDLE hPrinter)
    {
    JOB_INFO_2 *pJobs;
    long int cJobs, i;
    DWORD dwPrinterStatus;

    /*
    * Get the state information for the Printer Queue and
    * the jobs in the Printer Queue.
    */
    if (!GetJobs(hPrinter, &pJobs, &cJobs, &dwPrinterStatus))
    return FALSE;
    /*
    * If the Printer reports an error, believe it.
    */
    if (dwPrinterStatus &
    (PRINTER_STATUS_ERROR |
    PRINTER_STATUS_PAPER_JAM |
    PRINTER_STATUS_PAPER_OUT |
    PRINTER_STATUS_PAPER_PROBLEM |
    PRINTER_STATUS_OUTPUT_BIN_FULL |
    PRINTER_STATUS_NOT_AVAILABLE |
    PRINTER_STATUS_NO_TONER |
    PRINTER_STATUS_OUT_OF_MEMORY |
    PRINTER_STATUS_OFFLINE |
    PRINTER_STATUS_DOOR_OPEN))
    {
    free( pJobs );
    return TRUE;
    }
    /*
    * Find the Job in the Queue that is printing.
    */
    for (i=0; i < cJobs; i++)
    {
    if (pJobs.Status & JOB_STATUS_PRINTING)
    {
    /*
    * If the job is in an error state,
    * report an error for the printer.
    * Code could be inserted here to
    * attempt an interpretation of the
    * pStatus member as well.
    */
    if (pJobs
    .Status &
    (JOB_STATUS_BLOCKED_DEVQ | //The driver cannot print the job.
    JOB_STATUS_COMPLETE | //Windows XP and later: Job is sent to the printer, but the job may not be printed yet. See Remarks for more information.
    JOB_STATUS_DELETED | //Job has been deleted.
    JOB_STATUS_DELETING | //Job is being deleted.
    JOB_STATUS_ERROR | //An error is associated with the job.
    JOB_STATUS_OFFLINE | //Printer is offline.
    JOB_STATUS_PAPEROUT | //Printer is out of paper.
    JOB_STATUS_PAUSED | //Job is paused.
    JOB_STATUS_PRINTED | //Job has printed.
    JOB_STATUS_PRINTING | //Job is printing.
    JOB_STATUS_RESTART | //Job has been restarted.
    JOB_STATUS_SPOOLING | //Job is spooling.
    JOB_STATUS_USER_INTERVENTION))
    {
    free( pJobs );
    return TRUE;
    }


    }
    }
    /*
    * No error condition.
    */
    free( pJobs );
    return FALSE;
    }
    Itt a spoolertől megtudod az informáziókat.

    Mutasd a teljes hozzászólást!
  • Tehát a nyomtató nevére gondoltam, hoyg abból szeded.

    Köszönöm az infórmációkat, viszont az elözőbe írtam a problémámat.

    szerk: elnéztem pár dolgot.
    Mutasd a teljes hozzászólást!
  • GetPrinter(phPrinter, 2, 0, 0, &pcbNeeded);

    Én ilyet nem írtam sehová, és hiszem is, hogy így nem működik.
    Tehát ott van az a függvény amit adtam, másold be és a printer statust megkapod így:
    //itt kérdezed le a nyomtató álllapotát lpInfo2->Status;

    Nem értem, mi a baj vele, hisz copypaste dolog.

    szerk:
    mindent ami itt szerepel le lehet kérdezni.
    Még találsz infókat a nyomtatóról a lpInfo2->pDevMode->... struct-ban is.
    Tehát: másold be a kódot amit adtam, futtasd lépésenként (azt hiszem F11)és figyeld az lpInfo2 értékét.
    Mutasd a teljes hozzászólást!
  • Amit írtál azt másoltam be!
    A módszereddel:
    GetPrinter(phPrinter, 2, (LPBYTE)lpInfo2, 0, &pcbNeeded);
    error - The variable 'lpInfo2' is being used without being defined.

    Nálam nem száll el, ha így csinálom a példa programban is így csinálják
    GetPrinter(phPrinter, 2, NULL, 0, &pcbNeeded);

    Viszont ennyi lesz benne:
    - lpInfo2 0x00148028 {pServerName=0x00000000 <Bad Ptr> pPrinterName=0x001486a2 "HP LaserJet 8150 PCL 6" pShareName=0x001486a0 "" ...} _PRINTER_INFO_2A *
    + pServerName 0x00000000 <Bad Ptr> char *
    + pPrinterName 0x001486a2 "HP LaserJet 8150 PCL 6" char *
    + pShareName 0x001486a0 "" char *
    + pPortName 0x00148684 "IP_10.1.5.243" char *
    + pDriverName 0x00148656 "HP LaserJet 8150 PCL 6" char *
    + pComment 0x00148654 "" char *
    + pLocation 0x00148652 "" char *
    + pDevMode 0x001481a4 {dmDeviceName=0x001481a4 "HP LaserJet 8150 PCL 6" dmSpecVersion=1025 dmDriverVersion=24 ...} _devicemodeA *
    + pSepFile 0x00000000 <Bad Ptr> char *
    + pPrintProcessor 0x00148640 "WinPrint" char *
    + pDatatype 0x00148638 "RAW" char *
    + pParameters 0x00000000 <Bad Ptr> char *
    pSecurityDescriptor 0x0014807c void *
    Attributes 2624 unsigned long
    Priority 1 unsigned long
    DefaultPriority 0 unsigned long
    StartTime 0 unsigned long
    UntilTime 0 unsigned long
    Status 0 unsigned long
    cJobs 0 unsigned long
    AveragePPM 0 unsigned long

    Itt a Status értékét még nem láttam másmilyennek mint 0 - Ready.

    Itt meg is tudtam miért: CodeGuru
    Tehát ez nekem nem járható..
    A DevMode ot is látom.
    lpInfo2->Status; Copy-z már be valamit (mit pl én is) mert akkor itt nálam nagyon nagy gubanc lehet.
    Mutasd a teljes hozzászólást!
  • Most veszem észre:
    .........
    Status
    Specifies the printer status. This member can be one of the following values:
    Windows NT:
    PRINTER_STATUS_PAUSED
    PRINTER_STATUS_PENDING_DELETION
    Windows 95:
    PRINTER_STATUS_BUSY
    PRINTER_STATUS_DOOR_OPEN
    .....
    .....

    PRINTER_INFO_2 leírása, MSDN Library Visual Studio 6.0.
    Tehát ha NT-d van akkor csak 2 állapotot tudsz figyelni.
    Azt hiszem szívás.
    Mutasd a teljes hozzászólást!
  • Ez a bajom.. írtam is a spooler már mindent lekezel.. Ezért írtam az alején, hogy XP mert 95-98ban még talán meglehetett tudakolni.

    A chip magazint olvasgattam és ott írták, hogy ilyen kütyüvel mérték meg az adatokat. Csak kérdés mennyi.. gondolom nem észveszelytő ár.
    Mutasd a teljes hozzászólást!
  • Akkor sajna az a válasz, hogy XP alatt nem lehet. :(
    Mutasd a teljes hozzászólást!
  • No jó és akkor ki kapja a pontot?
    A Kicsipuha? :(
    Mutasd a teljes hozzászólást!
  • Velem meg mi bajod?
    Mutasd a teljes hozzászólást!
  • :DD
    Hááát ez kész, nem Veled, hanem microsoft->spooler
    Mutasd a teljes hozzászólást!
  • Szerk: latom mar irtad a PRINTER_INFO_6-ot.
    Mutasd a teljes hozzászólást!
  • latom mar irtad a PRINTER_INFO_6-ot.

    PRINTER_INFO_6-ról nem írtam, viszont most kipróbáltam és a dwStatus == 0 mindig. Van egy LPT-s tűs nyomtatóm és egy USB-s, de bármit teszek velük akkor is 0. A helpben azt írja, hogy
    Windows NT: Requires version 4.0 or later.
    Windows: Unsupported.
    Windows CE: Unsupported.

    Érdekes, nekem XP-m van.
    Mutasd a teljes hozzászólást!
  • Bizony ez a gond.. de már "megoldva", favágó módszerrel, de majd közzé teszem. Körbe olvasva, van lehetőség messages-t küldeni, a spoolernek, amikere tud válaszolni

    WM_SPOOLERSTATUS

    Viszont ez sem az.. Marad a gombnyomás, csak kicsit több.. esetleg a drivert(dll-t) betöltve meg lehet(ne) csinálni, de az már nem álltalános.
    Mutasd a teljes hozzászólást!
  • Es amit irnak a WM_SPOOLERSTATUS aljan az sem jo?

    Note The WM_SPOOLERSTATUS message is not supported after Windows XP. To be notified of changes to the print queue status, use FindFirstPrinterChangeNotification and FindNextPrinterChangeNotification
    ezen belul is a PRINTER_NOTIFY_TYPE - PRINTER_NOTIFY_FIELD_STATUS flag. Egy probat meger es NT 3.5+ kell hozza.
    Mutasd a teljes hozzászólást!
  • Meg kaprmolom magam, ezeket észre sem vettem, csak a példában szereplő: PRINTER_CHANGE_JOB-al próbáltam, ennyire benéztem volna a nem olvasást, akkor sikítok. Holnap ki is próbálom.
    Itt van agy csomó lekérdezés..
    Mutasd a teljes hozzászólást!
  • FindFirstPrinterChangeNotification

    Ebből nekem az jön le, hogy hiába választom a PRINTER_CHANGE_ALL:
    PRINTER_NOTIFY_INFO_DATA
    PRINTER_NOTIFY_FIELD_STATUS adwData[0] specifies the printer status. For a list of possible values, see the PRINTER_INFO_2 structure.
    Innen szemezgetve, kapok egy ilyen struktúrát, de de de.. nah ehhez próbálni kell, hogy egyáltalán lássam.
    Mutasd a teljes hozzászólást!
  • Képtelenség.. és hihetettlen.
    Semmi, eszem faxom megáll..
    PRINTER_NOTIFY_TYPE - PRINTER_NOTIFY_FIELD_STATUS
    Az a baj ezzel a flag-el, hogy egyérteéműen, amikor feltöltöm.
    Lehet szarult töltöm fel a struktúrát (beírom)? És ezért van, hogy amint kiment a spoolerból a pni_ptr = NULL-al és innentől bambi.

    DWORD dwItem, Returned; LPPRINTER_INFO_4 lpInfo4 = NULL; Printing->WhoPrinters(lpInfo4, Returned); HANDLE phPrinter = NULL; HANDLE chgObject; DWORD pdwChange; BOOL fcnreturn; DWORD i; PRINTER_NOTIFY_OPTIONS no; PRINTER_NOTIFY_OPTIONS_TYPE not[2]; PRINTER_NOTIFY_INFO pni; PRINTER_NOTIFY_INFO *pni_ptr=&pni; //hEvent = CreateEvent(NULL,FALSE,FALSE,"Test"); WORD pnf[100], jnf[100]; no.Version = 2; no.Count = 2; no.pTypes = not; i = 0; pnf[i++] = PRINTER_NOTIFY_FIELD_SERVER_NAME; pnf[i++] = PRINTER_NOTIFY_FIELD_PRINTER_NAME; pnf[i++] = PRINTER_NOTIFY_FIELD_SHARE_NAME; pnf[i++] = PRINTER_NOTIFY_FIELD_PORT_NAME; pnf[i++] = PRINTER_NOTIFY_FIELD_DRIVER_NAME; pnf[i++] = PRINTER_NOTIFY_FIELD_COMMENT; pnf[i++] = PRINTER_NOTIFY_FIELD_LOCATION; pnf[i++] = PRINTER_NOTIFY_FIELD_SEPFILE; pnf[i++] = PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR; pnf[i++] = PRINTER_NOTIFY_FIELD_PARAMETERS; pnf[i++] = PRINTER_NOTIFY_FIELD_DATATYPE; pnf[i++] = PRINTER_NOTIFY_FIELD_ATTRIBUTES; pnf[i++] = PRINTER_NOTIFY_FIELD_PRIORITY; pnf[i++] = PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY; pnf[i++] = PRINTER_NOTIFY_FIELD_START_TIME; pnf[i++] = PRINTER_NOTIFY_FIELD_UNTIL_TIME; pnf[i++] = PRINTER_NOTIFY_FIELD_STATUS; pnf[i++] = PRINTER_NOTIFY_FIELD_STATUS_STRING; pnf[i++] = PRINTER_NOTIFY_FIELD_CJOBS; pnf[i++] = PRINTER_NOTIFY_FIELD_AVERAGE_PPM; pnf[i++] = PRINTER_NOTIFY_FIELD_TOTAL_PAGES; pnf[i++] = PRINTER_NOTIFY_FIELD_PAGES_PRINTED; pnf[i++] = PRINTER_NOTIFY_FIELD_TOTAL_BYTES; pnf[i++] = PRINTER_NOTIFY_FIELD_BYTES_PRINTED; not[0].Type = PRINTER_NOTIFY_TYPE; not[0].Count = i; not[0].pFields = pnf; i=0; jnf[i++] = JOB_NOTIFY_FIELD_PRINTER_NAME; jnf[i++] = JOB_NOTIFY_FIELD_MACHINE_NAME; jnf[i++] = JOB_NOTIFY_FIELD_PORT_NAME; jnf[i++] = JOB_NOTIFY_FIELD_USER_NAME; jnf[i++] = JOB_NOTIFY_FIELD_NOTIFY_NAME; jnf[i++] = JOB_NOTIFY_FIELD_DATATYPE; jnf[i++] = JOB_NOTIFY_FIELD_PRINT_PROCESSOR; jnf[i++] = JOB_NOTIFY_FIELD_PARAMETERS; jnf[i++] = JOB_NOTIFY_FIELD_DRIVER_NAME; jnf[i++] = JOB_NOTIFY_FIELD_STATUS; jnf[i++] = JOB_NOTIFY_FIELD_STATUS_STRING; jnf[i++] = JOB_NOTIFY_FIELD_DOCUMENT; jnf[i++] = JOB_NOTIFY_FIELD_PRIORITY; jnf[i++] = JOB_NOTIFY_FIELD_POSITION; jnf[i++] = JOB_NOTIFY_FIELD_START_TIME; jnf[i++] = JOB_NOTIFY_FIELD_UNTIL_TIME; jnf[i++] = JOB_NOTIFY_FIELD_TIME; jnf[i++] = JOB_NOTIFY_FIELD_TOTAL_PAGES; jnf[i++] = JOB_NOTIFY_FIELD_PAGES_PRINTED; jnf[i++] = JOB_NOTIFY_FIELD_TOTAL_BYTES; jnf[i++] = JOB_NOTIFY_FIELD_BYTES_PRINTED; not[1].Type = JOB_NOTIFY_TYPE; not[1].Count = i; not[1].pFields = jnf; OpenPrinter(lpInfo4[PrinterNumber].pPrinterName, &phPrinter, NULL); chgObject = FindFirstPrinterChangeNotification( phPrinter, PRINTER_CHANGE_ALL, 0, &no ); no.Flags = 0; fcnreturn = FindNextPrinterChangeNotification(chgObject, &pdwChange, &no, (LPVOID*)&pni_ptr);
    Mutasd a teljes hozzászólást!
  • Kaptam levelet ezért lekell zárnom, össze foglalva, amire rájöttem/tünk. Ezt álltalánoságba nem tudom megoldani, azt tudam eddig is, ha külön a gyári drivereket betöltöm van mód ilyen adatok lekérdezésére, amit utoljára írtam be egy sokkal részletesebb állapot jelzést ad, mint az PRINT_INFO. De ez sem válasz a kérdésemre, ezért ki a francnak adjak pontot ilyen esetben? Mert, amilyen válaszok érkeztek, azokat előtte mind próbáltam csak más módszerrel, de e van.
    Mutasd a teljes hozzászólást!
  • Elfogadtam megoldásnak, de nem az(!), sajnos, fentebb már több helyen leírtam/tuk, hogy álltalánosan ezt így nem lehet megoldadni.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd