2025-11-28 00:35:46 +09:00

405 lines
18 KiB
VB.net

'==========================================================================
'
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
' PARTICULAR PURPOSE.
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
'--------------------------------------------------------------------------
Imports System
Imports System.Globalization
Imports System.Security.Permissions
Imports Microsoft.VisualBasic
Imports Microsoft.VisualBasic.ApplicationServices
<Assembly: System.Reflection.AssemblyKeyFile("key.snk")>
<Assembly: CLSCompliant(True)>
Namespace Microsoft.Samples.Fax.FaxAccounts.VB
Module FaxAccount
'+---------------------------------------------------------------------------
'
' function: GiveUsage
'
' Synopsis: prints the usage of the application
'
' Arguments: void
'
' Returns: void
'
' Modifies:
'
'----------------------------------------------------------------------------
Sub GiveUsage()
System.Console.WriteLine("Usage : " + System.Diagnostics.Process.GetCurrentProcess().ProcessName)
System.Console.WriteLine(" /s Fax Server Name ")
System.Console.WriteLine(" /o <Add/Delete/Validate/Enum> Account option ")
System.Console.WriteLine(" /a Account Name Only if the option is Add/Delete or Validate ")
System.Console.WriteLine("Usage : " + System.Diagnostics.Process.GetCurrentProcess().ProcessName + " /? -- help message")
End Sub
'+---------------------------------------------------------------------------
'
' function: IsOSVersionCompatible
'
' Synopsis: finds whether the target OS supports this functionality.
'
' Arguments: [iVersion] - Minimum Version of the OS required for the Sample to run.
'
' Returns: bool - true if the Sample can run on this OS
'
'----------------------------------------------------------------------------
Function IsOSVersionCompatible(ByVal iVersion As Integer) As Boolean
Dim os As OperatingSystem
Dim osVersion As Version
os = Environment.OSVersion
osVersion = os.Version
If (osVersion.Major >= iVersion) Then
Return True
Else
Return False
End If
End Function
'+---------------------------------------------------------------------------
'
' function: DisplayFaxAccount
'
' Synopsis: prints the display name of a Fax Account
'
' Arguments: [objFaxAcc] - FaxAccount object whose display name is to be printed
'
' Returns: bool: true if passed successfully
'
' Modifies:
'
'----------------------------------------------------------------------------
Function DisplayFaxAccount(ByVal objFaxAcc As FAXCOMEXLib.IFaxAccount) As Boolean
If (TypeOf objFaxAcc Is FAXCOMEXLib.IFaxAccount) Then
'Print the account name
System.Console.WriteLine("Fax Account Name: " + objFaxAcc.AccountName)
Return True
End If
System.Console.WriteLine("DisplayFaxAccount: Parameter is NULL")
Return False
End Function
'+---------------------------------------------------------------------------
'
' function: FaxEnumAccounts
'
' Synopsis: Enumerates the list of accounts
'
' Arguments: [objFaxAccSet] - FaxAccountSet object having the list of all Fax Accounts
' [bCheck] - if set to true then is verifies if the account with name strAccName is present.
' [strAccName] - name of the account that is to be verified.
' [pbFound] - used to return the result of whether the account is present or not
'
' Returns: bool: true if passed successfully
'
' Modifies: pbFound : if the account with the name strAccName is found then pbFound is set to true.
'
'----------------------------------------------------------------------------
Function FaxEnumAccounts(ByVal objFaxAccSet As FAXCOMEXLib.IFaxAccountSet, ByVal bCheck As Boolean, ByVal strAccName As String, ByRef pbFound As Boolean) As Boolean
If (TypeOf objFaxAccSet Is FAXCOMEXLib.IFaxAccountSet) Then
Dim objFaxAccounts As FAXCOMEXLib.IFaxAccounts
Dim objFaxEnum As System.Collections.IEnumerator
Dim bLast As Boolean
Dim objFaxAccount As FAXCOMEXLib.IFaxAccount
pbFound = False
'Get the FaxAccounts object
objFaxAccounts = objFaxAccSet.GetAccounts()
'Print the number of FaxAccounts
System.Console.WriteLine("Number of accounts: " + objFaxAccounts.Count.ToString(CultureInfo.CurrentCulture.NumberFormat))
'start enumerating each account.
objFaxEnum = objFaxAccounts.GetEnumerator()
While (True)
bLast = objFaxEnum.MoveNext()
If (bLast = False) Then
'enumeration is done
System.Console.WriteLine("Enumeration of accounts done.")
Exit While
End If
objFaxAccount = objFaxEnum.Current
'if check that a account is present.
If (bCheck) Then
If (String.IsNullOrEmpty(strAccName) = False) Then
If (String.Compare(objFaxAccount.AccountName.ToLower(CultureInfo.CurrentCulture), strAccName.ToLower(CultureInfo.CurrentCulture), True, CultureInfo.CurrentCulture) = 0) Then
pbFound = True
End If
Else
System.Console.WriteLine("FaxEnumAccounts: strAccName parameter is NULL")
Return False
End If
End If
'Display the current account info.
DisplayFaxAccount(objFaxAccount)
End While
Return True
End If
System.Console.WriteLine("FaxEnumAccounts: Parameter is NULL")
Return False
End Function
'+---------------------------------------------------------------------------
'
' function: AddAccount
'
' Synopsis: Adds a Fax Account
'
' Arguments: [objFaxAccSet] - FaxAccountSet object having the list of all Fax Accounts
' [strAccName] - name of the account to be added. Must be a valid NT/Domain user.
'
' Returns: bool: true if passed successfully
'
' Modifies:
'
'----------------------------------------------------------------------------
Function AddAccount(ByVal objFaxAccSet As FAXCOMEXLib.IFaxAccountSet, ByVal strAccName As String) As Boolean
If (TypeOf objFaxAccSet Is FAXCOMEXLib.IFaxAccountSet) And String.IsNullOrEmpty(strAccName) = False Then
Dim bFound As Boolean
Dim objFaxAccount As FAXCOMEXLib.IFaxAccount
bFound = True
'first enum the existing accounts
If (FaxEnumAccounts(objFaxAccSet, False, Nothing, bFound) = False) Then
'enum failed
System.Console.WriteLine("FaxEnumAccounts failed")
End If
'now add the account
objFaxAccount = objFaxAccSet.AddAccount(strAccName)
'Display Info on added account.
DisplayFaxAccount(objFaxAccount)
Return True
End If
System.Console.WriteLine("AddAccount: Parameter is NULL")
Return False
End Function
'+---------------------------------------------------------------------------
'
' function: DeleteAccount
'
' Synopsis: Deletes a Fax Account
'
' Arguments: [objFaxAccSet] - FaxAccountSet object having the list of all Fax Accounts
' [strAccountName] - name of the account to be deleted.
'
' Returns: bool: true if passed successfully
'
' Modifies:
'
'----------------------------------------------------------------------------
Function DeleteAccount(ByVal objFaxAccSet As FAXCOMEXLib.IFaxAccountSet, ByVal strAccountName As String) As Boolean
If (TypeOf objFaxAccSet Is FAXCOMEXLib.IFaxAccountSet) And String.IsNullOrEmpty(strAccountName) = False Then
Dim bFound As Boolean
'Dim objFaxAccount As FAXCOMEXLib.IFaxAccount
bFound = True
'first enum the existing accounts
If (FaxEnumAccounts(objFaxAccSet, False, Nothing, bFound) = False) Then
'FaxEnumAccounts failed
System.Console.WriteLine("FaxEnumAccounts failed before deleting")
End If
objFaxAccSet.RemoveAccount(strAccountName)
'now enumerate to see if account exists
If (FaxEnumAccounts(objFaxAccSet, True, strAccountName, bFound) = False) Then
'we can properly validate if this call fails, hence log an error
System.Console.WriteLine("FaxEnumAccounts failed during validation")
Return False
End If
If (bFound) Then
'we just deleted the account but still the enumeration shows the account. hecen log error
System.Console.WriteLine("Account exists after deleteion")
Return False
End If
Return True
End If
System.Console.WriteLine("DeleteAccount: Parameter is NULL")
Return False
End Function
'+---------------------------------------------------------------------------
'
' function: GetAccountInfo
'
' Synopsis: Get the account object.
'
' Arguments: [objFaxAccSet] - FaxAccountSet object having the list of all Fax Accounts
' [strAccountName] - Account whose info is to be printed.
'
' Returns: bool: true if passed successfully
'
' Modifies:
'
'----------------------------------------------------------------------------
Function GetAccountInfo(ByVal objFaxAccSet As FAXCOMEXLib.IFaxAccountSet, ByVal strAccountName As String) As Boolean
If (TypeOf objFaxAccSet Is FAXCOMEXLib.IFaxAccountSet) And String.IsNullOrEmpty(strAccountName) = False Then
Dim objFaxAccount As FAXCOMEXLib.IFaxAccount
'Get the account with the name lptstrAccountName
objFaxAccount = objFaxAccSet.GetAccount(strAccountName)
DisplayFaxAccount(objFaxAccount)
Return True
End If
System.Console.WriteLine("GetAccountInfo: Parameter is NULL")
Return False
End Function
Sub Main()
Dim objFaxServer As FAXCOMEXLib.FaxServer
Dim objFaxAccountSet As FAXCOMEXLib.FaxAccountSet
Dim strServerName As String
Dim strAccountName As String
Dim strOption As String
Dim bConnected As Boolean
Dim bFound As Boolean
Dim count As Integer
Dim args As String
Dim iVista As Integer
Dim bVersion As Boolean
Dim bRetVal As Boolean
iVista = 6
bVersion = IsOSVersionCompatible(iVista)
If (bVersion = False) Then
System.Console.WriteLine("OS Version does not support this feature")
bRetVal = False
Return
End If
strServerName = ""
strAccountName = Nothing
strOption = Nothing
objFaxServer = Nothing
bRetVal = True
bFound = True
bConnected = False
count = 0
args = Nothing
Try
If ((My.Application.CommandLineArgs.Count = 0)) Then
System.Console.WriteLine("Missing args.")
GiveUsage()
bRetVal = False
GoTo ExitFun
End If
' check for commandline switches
Do Until count = My.Application.CommandLineArgs.Count -1
If count >= My.Application.CommandLineArgs.Count - 1 Then
Exit Do
End If
args = My.Application.CommandLineArgs.Item(count)
If ((String.Compare(args.Substring(0, 1), "/", True, CultureInfo.CurrentCulture) = 0) Or (String.Compare(args.Substring(0, 1), "-", True, CultureInfo.CurrentCulture) = 0)) Then
Select Case (((args.ToLower(CultureInfo.CurrentCulture).Substring(1, 1))))
Case "s"
If (String.IsNullOrEmpty(strServerName) = False) Then
GiveUsage()
bRetVal = False
GoTo ExitFun
End If
strServerName = My.Application.CommandLineArgs.Item(count + 1)
Case "o"
If (String.IsNullOrEmpty(strOption) = False) Then
GiveUsage()
bRetVal = False
GoTo ExitFun
End If
strOption = My.Application.CommandLineArgs.Item(count + 1)
Case "a"
If (String.IsNullOrEmpty(strAccountName) = False) Then
GiveUsage()
bRetVal = False
GoTo ExitFun
End If
strAccountName = My.Application.CommandLineArgs.Item(count + 1)
Case "?"
GiveUsage()
bRetVal = False
GoTo ExitFun
Case Else
End Select
End If
count = count + 1
Loop
If (strOption = Nothing) Then
System.Console.WriteLine("Missing args.")
GiveUsage()
bRetVal = False
GoTo ExitFun
End If
If ((String.Compare("enum", strOption.ToLower(CultureInfo.CurrentCulture), True, CultureInfo.CurrentCulture) <> 0) And (strAccountName = Nothing)) Then
System.Console.WriteLine("Missing args.")
GiveUsage()
bRetVal = False
GoTo ExitFun
End If
objFaxServer = New FAXCOMEXLib.FaxServer()
'Connect to Fax Server
objFaxServer.Connect(strServerName)
bConnected = True
If (objFaxServer.APIVersion < FAXCOMEXLib.FAX_SERVER_APIVERSION_ENUM.fsAPI_VERSION_3) Then
bRetVal = False
System.Console.WriteLine("Feature not available on this version of the Fax API")
GoTo ExitFun
End If
'lets also get the account set since that is the basis for all account relates operations
objFaxAccountSet = objFaxServer.FaxAccountSet
'if Enum Account option is selected
If (String.Compare("enum", strOption.ToLower(CultureInfo.CurrentCulture), True, CultureInfo.CurrentCulture) = 0) Then
If (FaxEnumAccounts(objFaxAccountSet, False, Nothing, bFound) = False) Then
'we dont want to log any error here as the error will be logged in the function itself
bRetVal = False
End If
End If
'if Add Account option is selected
If (String.Compare("add", strOption.ToLower(CultureInfo.CurrentCulture), True, CultureInfo.CurrentCulture) = 0) Then
If (AddAccount(objFaxAccountSet, strAccountName) = False) Then
bRetVal = False
End If
End If
'if Delete Account option is selected
If (String.Compare("delete", strOption.ToLower(CultureInfo.CurrentCulture), True, CultureInfo.CurrentCulture) = 0) Then
If (DeleteAccount(objFaxAccountSet, strAccountName) = False) Then
bRetVal = False
End If
End If
'if validate account option is selected
If (String.Compare("validate", strOption.ToLower(CultureInfo.CurrentCulture), True, CultureInfo.CurrentCulture) = 0) Then
If (GetAccountInfo(objFaxAccountSet, strAccountName) = False) Then
bRetVal = False
End If
End If
Catch excep As Exception
System.Console.WriteLine("Exception:" + excep.Message)
End Try
ExitFun:
If (bConnected) Then
objFaxServer.Disconnect()
End If
If (bRetVal = False) Then
System.Console.WriteLine("Function Failed")
End If
End Sub
End Module
End Namespace