1

我正在尝试通过以下方式将一些打印机属性(即页面大小)保存到 ini 文件中:

    Printer()->PrinterIndex = Printer()->PrinterIndex;    

    wchar_t printerDevice[256], printerDriver[256], printerPort[256];
    THandle printerDeviceModeHandle = 0;
    DEVMODE *printerDeviceMode;

    Printer()->GetPrinter(printerDevice, printerDriver, printerPort, printerDeviceModeHandle);

    if (printerDeviceModeHandle != 0)
    {

        DEVMODE *printerDeviceMode = (DEVMODE *) GlobalLock((void *)printerDeviceModeHandle);

        if ((printerDeviceMode != NULL) && (printerDeviceMode->dmFields & DM_PAPERSIZE))                
            ini->WriteInteger("PrintingPage", "PaperSize", printerDeviceMode->dmPaperSize);

        GlobalUnlock((void *)printerDeviceModeHandle);
    }

代码在内部 if 语句中,但是当我检查printerDeviceMode变量时,只有dmDeviceName看起来是正确的。许多其他设置似乎是垃圾(包括dmPaperSize):

printerDeviceMode 的调试检查器窗口的图像

注意dmSize是0。

我尝试使用 TPrinterSetupDialog 组件更改打印机的页面大小,但值dmPaperSize保持不变。

我在某个地方错过了一步吗?

这是一个 XE4 c++ builder VCL 项目。

4

0 回答 0