SetPrinter

Тема в разделе "WASM.WIN32", создана пользователем Modulator, 9 авг 2011.

  1. Modulator

    Modulator New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    3
    Добрый день.Есть код:
    Код (Text):
    1. HANDLE hand;
    2. DWORD ret,ret1;
    3. PRINTER_INFO_2 *printers1 = NULL;
    4. EnumPrinters(PRINTER_ENUM_LOCAL,
    5. 0,
    6. 2,0,
    7. 0,
    8. &ret,
    9. &ret1);
    10.  
    11.   BYTE* buf = new BYTE[ret];
    12. EnumPrinters(PRINTER_ENUM_LOCAL,
    13. 0,
    14. 2,buf,
    15. ret,
    16. &ret,
    17. &ret1);
    18. LPPRINTER_INFO_2A printers=(LPPRINTER_INFO_2A)buf;
    19.  
    20. for(DWORD i(0); i<ret1; ++i)
    21.    {
    22.    OpenPrinter(printers[i].pPrinterName,&hand,0);
    23.    GetPrinter(hand, 2, 0, 0, &ret1);
    24.    BYTE* buf1 = new BYTE[ret1];
    25.    printers1=(PRINTER_INFO_2A *)GlobalAlloc(GPTR, ret1);
    26.    GetPrinter(hand, 2, (LPBYTE)printers1, ret1, &ret1);
    27.    printers1->Status=PRINTER_STATUS_PAUSED;
    28.    SetPrinter(hand,2,(LPBYTE)&printers1,1);
    29.    ShowMessage(GetLastError());
    30.    ClosePrinter(hand);
    31.  }
    Приложение вылетает и пишет "Access violation at address 72FCAD76 in module winspool.drv", или GetLastError() выдает 1803.
    Как отправить принтеру PRINTER_CONTROL_PAUSE?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Код (Text):
    1. SetPrinter(hand,2,(LPBYTE)&printers1,1);  // зачем амперсэнд перед printers1?