检测打印机

//是大富翁上看到的,觉得有用

//设计: Linc 2004.04.29
//功能: 判断打印机是否就绪
//参数:允许是网络打印机

function IsPrinterReady: Boolean;
var
  hDeviceMode, hGlobal, hPrinter: THandle;
  dwNeeded: DWord;
  pDefs: TPrinterDefaults;
  pInfo: PPrinterInfo2;
  bFlag: Boolean;
  cDevice,
  cDriver,
  cPort: array[0..255] of char;
begin
  Result := False;
  if Printer = nil then Exit;
  if Printer.PrinterIndex = -1 then Exit;
  hGlobal := 0;
  try
    Printer.GetPrinter(cDevice, cDriver, cPort, hDeviceMode);
    if hDeviceMode = 0 then Exit;

    FillChar(pDefs, SizeOf(TPrinterDefaults), 0);
    pDefs.DesiredAccess := {STANDARD_RIGHTS_REQUIRED or} PRINTER_ACCESS_USE;
    bFlag := OpenPrinter(cDevice, hPrinter, @pDefs);
    dwNeeded := GetLastError;
    if not bFlag or (hPrinter = INVALID_HANDLE_VALUE) then Exit;

    FillChar(pInfo, SizeOf(pInfo), #0);
    WinSpool.GetPrinter(hPrinter, 2, nil, 0, @dwNeeded);
    if dwNeeded = 0 then Exit;

    hGlobal := GlobalAlloc(GHND, dwNeeded);
    if hGlobal = 0 then Exit;

    pInfo := PPrinterInfo2(GlobalLock(hGlobal));
    if pInfo = nil then Exit;

    bFlag := WinSpool.GetPrinter(hPrinter, 2, pInfo, dwNeeded, @dwNeeded);
    if bFlag then
      Result := pInfo.Status = 0
    else Result := False;
  finally
    if pInfo <> nil then GlobalUnlock(hGlobal);
    if hGlobal <> 0 then GlobalFree(hGlobal);
    if hPrinter <> 0 then ClosePrinter(hPrinter);
  end;
end; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C#编程语言来实现这个需求。下面是一个基本的框架,可以供你参考: ```csharp using System; using System.IO.Ports; using System.Management; using System.Timers; namespace PrinterConnectionStatus { class Program { private static Timer timer; static void Main(string[] args) { timer = new Timer(2000); // 设置定时器间隔为2秒 timer.Elapsed += TimerElapsed; timer.Start(); Console.WriteLine("按下任意键退出..."); Console.ReadKey(); timer.Stop(); timer.Dispose(); } private static void TimerElapsed(object sender, ElapsedEventArgs e) { // 检测串口连接状态 string[] serialPorts = SerialPort.GetPortNames(); foreach (string port in serialPorts) { Console.WriteLine($"串口 {port} 连接状态:{(SerialPort.GetPortNames().Contains(port) ? "已连接" : "未连接")}"); } // 检测USB设备连接状态 ManagementObjectCollection usbDevices = GetUSBDevices(); foreach (ManagementObject device in usbDevices) { Console.WriteLine($"USB设备 {device.GetPropertyValue("DeviceID")} 连接状态:{(device.GetPropertyValue("Status").ToString() == "OK" ? "已连接" : "未连接")}"); } // 检测并口、网口等其它设备连接状态(根据具体需求添加实现代码) } private static ManagementObjectCollection GetUSBDevices() { ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like 'USB%'"); return searcher.Get(); } } } ``` 需要注意的是,这只是一个简单的示例代码,只针对串口和USB设备进行了连接状态的检测。对于其他类型的设备连接状态的检测,你需要根据具体情况进行相应的实现。同时,为了使程序定期检测连接状态,我们使用了定时器。你可以根据实际需求调整定时器的间隔时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值