Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > FindFirstPrinterChangeNotification|FindNext...


Автор: Cyr 26.5.2008, 13:29
Необходимо отслеживать появление нового принтера в системе.
Взял с MSDN код, преобразовал в Delphi:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows,
  WinSpool;

{ TODO -oUser -cConsole Main : Insert code here }
var
   hPrinter:THANDLE;
   chgObject:THANDLE;
   pdwChange:DWORD;
   fcnreturn:BOOL;
   ppPrinterNotifyInfo: Pointer;
begin
chgObject := FindFirstPrinterChangeNotification(hPrinter, PRINTER_CHANGE_ALL, 0, nil);
WaitForSingleObject(chgObject, INFINITE);
fcnreturn := FindNextPrinterChangeNotification(chgObject, pdwChange, nil, ppPrinterNotifyInfo);
if (fcnreturn) then
 begin
     // check value of *pdwChange and deal with the indicated change
     Writeln('Событие');
     Writeln(pdwChange);
 end;
end.

Конечно же ничё не работает. Помогите заставить работать это.

Автор: _RIM_ 29.5.2008, 13:03
Тебе важно само событие появления принтера?  Можно запомнить кол-во принтеров уже имеющихся в системе - а потом сравнить новый полученный список со старым - и определить т.о. появление нового. Или можно отловить именно событие появления принтера и определить его имя. Что нужно в данном случае? объясни. а я тебе пример накидаю.

Автор: Cashey 2.6.2008, 10:24
Cyr, не работает потому что ожидание должно работать в цикле. Пример можно посмотреть http://forum.vingrad.ru/forum/topic-211422.html там свои проблемы есть конечно, но тем не менее это ближе к успеху

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)