<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=99206&amp;view=findpost&amp;p=750221</guid>
        <pubDate>Thu, 16 Jun 2005 05:34:18 +0000</pubDate>
        <title>Перехватывать печать на принтере</title>
        <link>https://forum.sources.ru/index.php?showtopic=99206&amp;view=findpost&amp;p=750221</link>
        <description><![CDATA[Rouse_: Вот накидал на скорую руку, дальше развивай по аналогии:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, WinSpool;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;btnStart: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cbPrinters: TComboBox;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure btnStartClick(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure FormCreate(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.FormCreate(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;PrintersInfo: array of TPrinterInfo5;</div><div class="code_line">&nbsp;&nbsp;I, Needed, Returned: DWORD;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;EnumPrinters(PRINTER_ENUM_LOCAL, nil, 5, nil,</div><div class="code_line">&nbsp;&nbsp; &nbsp;0, Needed, Returned);</div><div class="code_line">&nbsp;&nbsp;SetLength(PrintersInfo, Needed div SizeOf(TPrinterInfo5));</div><div class="code_line">&nbsp;&nbsp;if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 5, PrintersInfo,</div><div class="code_line">&nbsp;&nbsp; &nbsp;Needed, Needed, Returned) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Returned &#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for I := 0 to Returned - 1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cbPrinters.Items.Add(PrintersInfo[I].pPrinterName);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;btnStart.Enabled := True;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cbPrinters.ItemIndex := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.btnStartClick(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;hPrinter, hChanges: THandle;</div><div class="code_line">&nbsp;&nbsp;NotifyOption: TPrinterNotifyOptions;</div><div class="code_line">&nbsp;&nbsp;NotifyTipes: TPrinterNotifyOptionsType;</div><div class="code_line">&nbsp;&nbsp;Field: TPrinterNotifyInfoData;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if OpenPrinter(PChar(cbPrinters.Items.Strings[cbPrinters.ItemIndex]),</div><div class="code_line">&nbsp;&nbsp; &nbsp;hPrinter, nil) then</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyTipes.wType := JOB_NOTIFY_TYPE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyTipes.Reserved0 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyTipes.Reserved1 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyTipes.Reserved2 := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyTipes.Count := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyTipes.pFields := @Field;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyOption.Version := 2;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyOption.Flags := PRINTER_CHANGE_ALL;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyOption.Count := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NotifyOption.pTypes := @NotifyTipes;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;hChanges := FindFirstPrinterChangeNotification(hPrinter, PRINTER_CHANGE_ALL,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;0, @NotifyOption);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if hChanges = INVALID_HANDLE_VALUE then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;RaiseLastOSError</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;case WaitForSingleObject(hChanges, INFINITE) of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WAIT_OBJECT_0: ShowMessage(&#39;Есть изменения&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WAIT_FAILED: RaiseLastOSError;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FindClosePrinterChangeNotification(hChanges);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;ClosePrinter(hPrinter);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Rouse_</author>
        <category>Системные функции, WinAPI, работа с железом</category>
      </item>
	
      </channel>
      </rss>
	