Quantcast
Channel: わんくま同盟
Viewing all articles
Browse latest Browse all 994

DirectoryAccessクラスに追加したプリンタ関連のメソッド

$
0
0

DirectoryAccess クラスに追加したプリンタ関連のメソッドのコードです。(前回追加したコードはこちら

 

VB

'プリンタを取得します。

Public Shared Function GetPrintQueues() AsIList(OfPrintQueue)

  Dim printers As NewList(OfPrintQueue)()

  If CanConnectDomain Then  'ドメインに接続できる時

    Using root = GetRootEntry()   'ルートのDirectoryEntryを取得

      Dim filter = String.Format("(objectCategory={0})", CategoryType.PrintQueue)

      Using searcher As NewDirectorySearcher(root, filter)

        Using results = searcher.FindAll()

          For Each res AsSearchResultIn results

            printers.Add(DirectCast(CreateInstance(res.GetDirectoryEntry()), PrintQueue))

          Next

        End Using

      End Using

    End Using

  End If

  Return printers

End Function

 

C#

//プリンタを取得します。

public static IList<PrintQueue> GetPrintQueues<T>()

{

  var printers = newList<PrintQueue>();

  if (CanConnectDomain)    //ドメインに接続できる時

  {

    using (var root = GetRootEntry())    //ルートのDirectoryEntryを取得

    {

      var filter = String.Format("(objectCategory={0})", CategoryType.PrintQueue);

      using (var searcher = newDirectorySearcher(root, filter))

      {

        using (var results = searcher.FindAll())

        {

          foreach (SearchResult res in results)

          {

            printers.Add((PrintQueue)CreateInstance(res.GetDirectoryEntry()));

          }

        }

      }

    }

  }

  return printers;

}

 

DirectoryObject のインスタンスを作成する CreateInstance メソッドにプリンタ部分のコード(太字の部分)を追加しました。

VB

Private Shared Function CreateInstance(entry AsDirectoryEntry) AsDirectoryObject

  Dim category AsCategoryType

  If[Enum].TryParse(OfCategoryType)(entry.SchemaClassName, True, category) = False Then

    Throw NewArgumentException("entry の種類が CategoryType に該当しません。", "entry")

  End If

 

  Select Case category

    CaseCategoryType.User

      If CanConnectDomain Then    'ドメインに接続できる時

        Return NewDomainUser(entry)

      Else    'ドメインに接続できない時

        Return NewLocalUser(entry)

      End If

    CaseCategoryType.Group

      If CanConnectDomain Then    'ドメインに接続できる時

        Return NewDomainGroup(entry)

      Else    'ドメインに接続できない時

        Return NewLocalGroup(entry)

      End If

    CaseCategoryType.Computer

      Return NewComputer(entry)

    CaseCategoryType.PrintQueue

      Return NewPrintQueue(entry)

    Case Else

      Throw NewNotImplementedException()

  End Select

End Function

 

C#

private staticDirectoryObject CreateInstance(DirectoryEntry entry)

{

  CategoryType category;

  if (Enum.TryParse<CategoryType>(entry.SchemaClassName, true, out category) == false)

  {

    throw newArgumentException("entry の種類が CategoryType に該当しません。", "entry");

  }

 

  switch (category)

  {

    caseCategoryType.User:

      if (CanConnectDomain)    //ドメインに接続できる時

      {

        return newDomainUser(entry);

      }

      else    //ドメインに接続できない時

      {

        return newLocalUser(entry);

      }

    caseCategoryType.Group:

      if (CanConnectDomain)    //ドメインに接続できる時

      {

        return newDomainGroup(entry);

      }

      else    //ドメインに接続できない時

      {

        return newLocalGroup(entry);

      }

    caseCategoryType.Computer:

      return newComputer(entry);

    caseCategoryType.PrintQueue:

      return newPrintQueue(entry);

    default:

      throw newNotImplementedException();

  }

}


Viewing all articles
Browse latest Browse all 994

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>