如何取得LPT端口打印机支持的 最小和最大页面大小

本文介绍了一种通过Delphi代码获取打印机最小和最大纸张尺寸的方法。利用Windows API函数,如OpenPrinter和GetPrinter,结合DeviceCapabilities函数来读取打印机的具体参数。

由于工作需要,经朋友 (DS,FT)指点,先贴工作中代码,至于使用USB端口打印机,日后再说。

  TPrinterSett = record
    PrinterName: string;
    MinPaperSize: TPoint;
    MaxPaperSize: TPoint;
  end;

private
  FPrnSett: TPrinterSett;

uses
  Printers, WinSpool;

function GetMinMaxPaperSize: Boolean;
var
  R, dwNeeded: DWORD;
  PrnName, PortName: string;
  hPrn: THandle;
  DevMode: TDeviceMode;
  pPrnInfo: PPrinterInfo2;
begin
  Result := False;
  if Printer.PrinterIndex < 0 then Exit;

  PrnName := Printer.Printers.Strings[Printer.PrinterIndex];
  if not OpenPrinter(PChar(PrnName), hPrn, nil) then Exit;

  try
    FPrnSett.PrinterName := PrnName;
    if not GetPrinter(hPrn, 2, nil, 0, @dwNeeded) then
    begin
      pPrnInfo := AllocMem(dwNeeded);
      try
        if GetPrinter(hPrn, 2, pPrnInfo, dwNeeded, @dwNeeded) then
        begin
          PortName := pPrnInfo.pPortName;
          if Pos('LPT', PortName) = 0 then Exit;
        end else begin
          Exit;
        end;
      finally
        FreeMem(pPrnInfo);
      end;
    end;

    R := DeviceCapabilities(
      PChar(PrnName), PChar(PortName), DC_MINEXTENT, nil, @DevMode);

    if R > 0 then
    begin
      with FPrnSett do
      begin
        MinPaperSize.x := LoWord(R);
        MinPaperSize.y := HiWord(R);
        {
        ShowMessage('Min Paper Width: ' + IntToStr(MinPaperSize.x) + #13 +
                    'Min Paper Length: ' + IntToStr(MinPaperSize.y));
        }
      end;
    end else begin
      Exit;
    end;

    R := DeviceCapabilities(
      PChar(PrnName), PChar(PortName), DC_MAXEXTENT, nil, @DevMode);

    if R > 0 then
    begin
      with FPrnSett do
      begin
        MaxPaperSize.x := LoWord(R);
        MaxPaperSize.y := HiWord(R);
        {
        ShowMessage('Max Paper Width: ' + IntToStr(MaxPaperSize.x) + #13 +
                    'Max Paper Length: ' + IntToStr(MaxPaperSize.y));
        }
      end;
    end else begin
      Exit;
    end;

    Result := True;
  finally
    ClosePrinter(hPrn);
  end;
end;

 

内容概要:本文研究了基于DPWMA调制与正负序分离的ANPC三电平并网逆变器前馈控制策略,旨在解决传统三电平逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应速度不足等问题。通过采用有源中点箝位(ANPC)三电平逆变器拓扑,结合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术电网电压前馈控制,构建了一套一体化的高性能并网控制体系。该体系不仅优化了逆变器的开关动作机制,改善了输出电压电流的谐波特性,而且通过精确的相位同步扰动补偿,显著提高了系统的动态响应能力抗扰性能。仿真结果显示,所提出的控制策略能有效降低并网谐波含量,提升锁相精度与系统动态稳定性,确保在复杂电网工况下的高质量稳定并网。 适合人群:具备一定电力电子基础知识仿真技能的研发人员,尤其是从事新能源发电、储能系统、柔性输电等领域研究的专业人士。 使用场景及目标:①研究开发高性能并网逆变器,特别是针对大功率、高电能质量要求的应用场景;②探索如何通过先进的调制控制策略来提高并网逆变器对电网扰动的适应性响应速度;③为相关领域的学术研究技术开发提供理论依据实践指导。 阅读建议:建议读者结合实际的仿真软件(如MATLAB/Simulink)进行实践操作,以便更好地理解掌握文中提到的各种控制策略的具体实现方法。同时,鼓励读者关注最新的研究成果发展趋势,不断深化对该领域的认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值