Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2009, 16:29   #11
Iskatel
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию

понимаю, что уже достал всех вопросами, но у меня возникла проблема, где я её совсем не ждал.
В функции FindNextPrinterChangeNotification в последний параметр должна возвращаться структура с инфой, оттуда я собирался вытащить JobId для SetJobs, но этот параметр всегда равен nil. Как нужно объявлять и как передавать в функцию этот последний параметр? Большая просьба написать рабочий пример, а то в инете море примеров, но во все не работают.
Iskatel вне форума Ответить с цитированием
Старый 28.01.2009, 17:58   #12
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

как ты получаешь JobId? дай сюда свой код
rpy3uH вне форума Ответить с цитированием
Старый 29.01.2009, 15:24   #13
Iskatel
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию

Код:
unit VZ;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,WinSpool, Printers, StdCtrls;

type
  TPrintThread=class(TThread)
    constructor Create(aPrinter:THandle;
    aNot:Thandle);
  private
    hPrinter:Thandle;
    hNotification:DWORD;
    hWait:THandle;
  protected
    Procedure Execute; override;
  end;
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    PT:TPrintThread;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 {$O-}
procedure TForm1.FormCreate(Sender: TObject);
var
  Device, Driver, Port: array[0..255] of Char;
  hDeviceMode: THandle;
  MyPrinter,myNotification:Thandle;
  res:Boolean;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
res:=OpenPrinter(@Device, MyPrinter, nil);
myNotification:=FindFirstPrinterChangeNotification(MyPrinter,PRINTER_CHANGE_JOB,
0,nil);

PT:=TPrintThread.Create(MyPrinter,myNotification);
PT.Resume;

end;

constructor TPrintThread.Create(aPrinter:THandle; aNot:Thandle);
begin
inherited Create(True);
Priority:=tpTimeCritical;
FreeOnTerminate:=True;
hPrinter:=aPrinter;
hNotification:=aNot;
end;

procedure TPrintThread.Execute;
type
  TJobs = array[0..50] of JOB_INFO_2;
  PJobs = ^TJobs;
var
  bytesNeeded, numJobs, i, MyError: Cardinal;
  pJ: PJobs;
  pwdChange:DWORD;
  pPrnInfo:PPrinterNotifyInfo;
  res:Boolean;
begin
while not Terminated do
  begin
  hWait:=WaitForSingleObject(hNotification,INFINITE);
  res:=FindNextPrinterChangeNotification(hNotification,pwdChange,nil,Pointer(pPrnInfo));
  MyError:=GetLastError;
  if (pwdChange and PRINTER_CHANGE_ADD_JOB)=PRINTER_CHANGE_ADD_JOB then
    begin
//здесь должно идти вытаскивание
//JobId из pPrnInfo, но он всегда nil.
    end;
  end;

end;

end.
Iskatel вне форума Ответить с цитированием
Старый 29.01.2009, 16:32   #14
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

во-первых, после вызова FindFirstPrinterChangeNotification надо тоже обрабатывать последний параметр, а он у тебя равен nil
во-вторых, пятый параметр перед вызовом FindFirstPrinterChangeNotification надо инициализировать, чтобы получить адекватные результаты
rpy3uH вне форума Ответить с цитированием
Старый 17.02.2009, 17:17   #15
renieaa
Новичок
Джуниор
 
Регистрация: 26.05.2008
Сообщений: 1
По умолчанию

Iskatel, получилось получить путь к файлу?
Если да, то как
Очень надо
renieaa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить нажатие клавиш в Windows? JoanM Win Api 15 31.05.2013 14:42
Как перехватить нажатие клавиши Windows? UnD)eaD)Snake Win Api 3 16.03.2009 18:21
Как перехватить обращения к принтеру? Classic Win Api 2 16.08.2007 11:07
Как перехватить программно смену пользователя ale_krolik Win Api 1 15.12.2006 20:15
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12