Delphi в Windows факс

Кто-нибудь знает, как я могу отправить факс с помощью Windows 8 Fax true Delphi. Я имею в виду, что мне нужно запустить Windows Fax с номером и вложением в формате PDF. Любой учебник об этом? Спасибо.


person Sardukar    schedule 24.02.2013    source источник


Ответы (1)


Например, вы можете использовать Fax Service COM Interfaces. Для простой манипуляции вы можете импортировать библиотеку типов из библиотеки fxscomex.dll и использовать такой код (на основе this example):

uses
  ComObj, ActiveX, FAXCOMEXLib_TLB;

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  JobIDs: OleVariant;
  FaxServer: IFaxServer2;
  FaxDocument: IFaxDocument2;
begin
  try
    FaxServer := CoFaxServer.Create;
    FaxServer.Connect('');
    FaxDocument := CoFaxDocument.Create;
    FaxDocument.Body := 'd:\Document.pdf';
    FaxDocument.DocumentName := 'Document name';
    FaxDocument.Recipients.Add('+1 (425) 555-4567', 'Bill');
    FaxDocument.Sender.Name := 'Bob';
    FaxDocument.Sender.BillingCode := '23A54';
    FaxDocument.Sender.Department := 'Accts Payable';
    FaxDocument.Sender.FaxNumber := '+972 (4) 555-9070';
    JobIDs := FaxDocument.ConnectedSubmit(FaxServer);

    for I := VarArrayLowBound(JobIDs, 1) to VarArrayHighBound(JobIDs, 1) do
      ShowMessage('Job ID: ' + VarArrayGet(JobIDs, [I]));
  except
    on E: EOleSysError do
      ShowMessage(
        Format('Sending of the fax failed! %s [%d]', [E.Message, E.ErrorCode])
      );
  end;
end;

Или то же самое без библиотеки типов:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  JobIDs: OleVariant;
  FaxServer: OleVariant;
  FaxDocument: OleVariant;
begin
  try
    FaxServer := CreateOleObject('FaxComEx.FaxServer');
    FaxServer.Connect('');
    FaxDocument := CreateOleObject('FaxComEx.FaxDocument');
    FaxDocument.Body := 'd:\Document.pdf';
    FaxDocument.DocumentName := 'Document name';
    FaxDocument.Recipients.Add('+1 (425) 555-4567', 'Bill');
    FaxDocument.Sender.Name := 'Bob';
    FaxDocument.Sender.BillingCode := '23A54';
    FaxDocument.Sender.Department := 'Accts Payable';
    FaxDocument.Sender.FaxNumber := '+972 (4) 555-9070';
    JobIDs := FaxDocument.ConnectedSubmit(FaxServer);

    for I := VarArrayLowBound(JobIDs, 1) to VarArrayHighBound(JobIDs, 1) do
      ShowMessage('Job ID: ' + VarArrayGet(JobIDs, [I]));
  except
    on E: EOleSysError do
      ShowMessage(
        Format('Sending of the fax failed! %s [%d]', [E.Message, E.ErrorCode])
      );
  end;
end;
person TLama    schedule 25.02.2013
comment
Еще один вопрос. Я получаю факс-модем для проверки сценария, как я могу проверить, присутствует ли модем? - person Sardukar; 26.02.2013
comment
Это может быть хорошей темой для нового вопроса, но вы можете использовать что-то вроде этого, чтобы определить общий количество доступных факсимильных устройств на локальном компьютере (но не их состояние). - person TLama; 26.02.2013