Windows11からWindows FAXとスキャンの利用

  1. 「設定」を開く: スタートボタンをクリックし、「設定」を選択します。
  2. 「アプリ」を選択: 左側のメニューから「アプリ」を選び、「オプション機能」をクリックします。
  3. 「機能の追加」をクリック: 「機能の追加」をクリックし、検索フィルタに「FAX」と入力します。
  4. 「Windows FAXとスキャン」をインストール: 「Windows FAXとスキャン」を見つけてチェックを入れ、「次へ」をクリックしてインストールを行います12

注意FAXモデムがUSB3未対応のものあり
USB3対応
StarTech.com USB Faxモデム
US Robotics 56K USB Soft Modem (USR5639)
Micro Research MD30

ExcelからPDF返還後にFAX送信


主なFAXジョブステータスジョブのステータスが不明
fsPending:ジョブがキューに入っており、送信を待
fsInProgress:ジョブが現在送信中。
fsPaused:ジョブが一時停止。手動で再開する必要があります。
fsRetrying:送信が失敗し、再試行を行っている状態です。
fsCompleted:ジョブが正常に完了した。
fsFailed:ジョブが失敗したことを示します。エラーの詳細を確認する必要があります。
fsCanceled:ジョブがキャンセル。
fsUnknown:ジョブのステータスが不明であることを示します。

excelを起動し、PDF返還後に出力のソース

Imports FAXCOMLib
Imports Microsoft.Office.Interop.Excel

Module Module1
    Sub Main()
        ' Excelアプリケーションを起動
        Dim excelApp As New Application
        Dim workbook As Workbook = excelApp.Workbooks.Open("C:\path\to\your\document.xlsx")
        workbook.SaveAs("C:\path\to\your\document.pdf", XlFileFormat.xlPDF)
        workbook.Close()
        excelApp.Quit()

        ' FAXサーバーオブジェクトを作成
        Dim faxServer As New FAXServer
        faxServer.Connect("")

        ' FAXドキュメントオブジェクトを作成
        Dim faxDoc As FAXDocument = faxServer.CreateDocument("C:\path\to\your\document.pdf")

        ' 送信先のFAX番号を設定
        faxDoc.Recipients.Add("1234567890", "Recipient Name")

        ' 送信を試行
        Dim jobID As Object
        Dim maxRetries As Integer = 3
        Dim retries As Integer = 0
        Dim success As Boolean = False

        While retries < maxRetries AndAlso Not success
            Try
                jobID = faxDoc.Submit("")
                Console.WriteLine("FAX送信成功: ジョブID " & jobID.ToString())

                ' ジョブのステータスを確認
                Dim jobStatus As FAXJobStatus = faxServer.GetJobStatus(jobID)
                Console.WriteLine("ジョブステータス: " & jobStatus.Status.ToString())

                ' ステータスに応じた処理
                Select Case jobStatus.Status
                    Case FAX_JOB_STATUS_ENUM.fjsInProgress
                        Console.WriteLine("送信中...")
                    Case FAX_JOB_STATUS_ENUM.fjsCompleted
                        Console.WriteLine("送信完了")
                        success = True
                    Case FAX_JOB_STATUS_ENUM.fjsFailed
                        Console.WriteLine("送信失敗")
                    Case FAX_JOB_STATUS_ENUM.fjsRetrying
                        Console.WriteLine("再試行中...")
                    Case Else
                        Console.WriteLine("その他のステータス: " & jobStatus.Status.ToString())
                End Select

            Catch ex As Exception
                If ex.Message.Contains("話し中") Then
                    Console.WriteLine("送信先が話し中です。再試行します...")
                    retries += 1
                    Threading.Thread.Sleep(5000) ' 5秒待機して再試行
                Else
                    Console.WriteLine("FAX送信エラー: " & ex.Message)
                    Exit While
                End If
            End Try
        End While

        If Not success Then
            Console.WriteLine("FAX送信に失敗しました。最大再試行回数に達しました。")
        End If

        ' 接続を閉じる
        faxServer.Disconnect()
    End Sub
End Module

printoDocmentで使用

Imports System.Drawing
Imports System.Drawing.Printing
Imports FAXCOMLib

Module Module1
    Private printFont As Font
    Private streamToPrint As IO.StreamReader

    Sub Main()
        ' 印刷するテキストファイルを開く
        streamToPrint = New IO.StreamReader("C:\path\to\your\document.txt")
        Try
            printFont = New Font("Arial", 10)
            Dim pd As New PrintDocument()
            AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
            pd.Print()
        Finally
            streamToPrint.Close()
        End Try

        ' FAX送信
        SendFax("C:\path\to\your\document.txt")
    End Sub

    Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
        Dim linesPerPage As Single = 0
        Dim yPos As Single = 0
        Dim count As Integer = 0
        Dim leftMargin As Single = ev.MarginBounds.Left
        Dim topMargin As Single = ev.MarginBounds.Top
        Dim line As String = Nothing

        ' ページあたりの行数を計算
        linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)

        ' 各行を印刷
        While count < linesPerPage AndAlso ((line = streamToPrint.ReadLine()) IsNot Nothing)
            yPos = topMargin + (count * printFont.GetHeight(ev.Graphics))
            ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
            count += 1
        End While

        ' 追加のページがあるかどうかを確認
        If line IsNot Nothing Then
            ev.HasMorePages = True
        Else
            ev.HasMorePages = False
        End If
    End Sub

    Private Sub SendFax(ByVal filePath As String)
        Dim faxServer As New FAXServer
        faxServer.Connect("")

        Dim faxDoc As FAXDocument = faxServer.CreateDocument(filePath)
        faxDoc.Recipients.Add("1234567890", "Recipient Name")

        Dim jobID As Object
        Dim maxRetries As Integer = 3
        Dim retries As Integer = 0
        Dim success As Boolean = False

        While retries < maxRetries AndAlso Not success
            Try
                jobID = faxDoc.Submit("")
                Console.WriteLine("FAX送信成功: ジョブID " & jobID.ToString())

                Dim jobStatus As FAXJobStatus = faxServer.GetJobStatus(jobID)
                Console.WriteLine("ジョブステータス: " & jobStatus.Status.ToString())

                Select Case jobStatus.Status
                    Case FAX_JOB_STATUS_ENUM.fjsInProgress
                        Console.WriteLine("送信中...")
                    Case FAX_JOB_STATUS_ENUM.fjsCompleted
                        Console.WriteLine("送信完了")
                        success = True
                    Case FAX_JOB_STATUS_ENUM.fjsFailed
                        Console.WriteLine("送信失敗")
                    Case FAX_JOB_STATUS_ENUM.fjsRetrying
                        Console.WriteLine("再試行中...")
                    Case Else
                        Console.WriteLine("その他のステータス: " & jobStatus.Status.ToString())
                End Select

            Catch ex As Exception
                If ex.Message.Contains("話し中") Then
                    Console.WriteLine("送信先が話し中です。再試行します...")
                    retries += 1
                    Threading.Thread.Sleep(5000) ' 5秒待機して再試行
                Else
                    Console.WriteLine("FAX送信エラー: " & ex.Message)
                    Exit While
                End If
            End Try
        End While

        If Not success Then
            Console.WriteLine("FAX送信に失敗しました。最大再試行回数に達しました。")
        End If

        faxServer.Disconnect()
    End Sub
End Module