- PR -

メタ環境にてのクライアント情報取得

1
投稿者投稿内容
KNGY
会議室デビュー日: 2008/04/28
投稿数: 8
投稿日時: 2009-01-29 10:49
いつもお世話になっております。

現在.NET3.5 C# VS2008、Win.XP Pro. SP3 環境で開発を行っているのですが、

メタ環境にてのクライアント情報の取得で悩んでおります。

やりたいことは以下のとおりです。。

あるアプリケーションをCitrixのXenAppにて仮想化しています(XenAppが乗っかってるのはWin.2008)。
で、アプリケーションを実行(クライアントはWin2000,WinXP,WinVistaのどれか)し、
印刷ダイアログを表示した際、あらかじめシンクラサーバのINIファイルにてホスト名と結びつけておいたデフォルトプリンタ名を表示したいと思います。
しかし、実際のクライアントのプリンタ名は

「セッション 2 の (<ホスト名> からの) EPSON LP-S5500」

となっており、単純に「EPSON LP-S5500」の部分をPrintDialog.PrinterSettings.PrinterNameに設定しているだけでは設定されません。


ホスト名はVBの関数であるInteraction.Environ("CLIENTNAME") を使用して取得できるのでいいんですが、「セッション 2 」の部分の「2」を取得することってできないものでしょうか?取得できるのなら文字をつなげてプリンタ名に設定しようと考えているのですが。。

以上よろしくお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2009-01-29 14:32
引用:

「セッション 2 」の部分の「2」を取得することってできないものでしょうか?


ターミナルサービスのセッションIDですよね。
WTSQuerySessionInformation(API関数)で取れます。
または安直な方法ですが、環境変数TMPから取れます。

引用:

取得できるのなら文字をつなげてプリンタ名に設定しようと考えているのですが。。


それより、使用できるプリンタをすべて列挙して「EPSON LP-S5500」と部分一致するものを探すとか。
KNGY
会議室デビュー日: 2008/04/28
投稿数: 8
投稿日時: 2009-01-29 15:37
todoさんありがとうございます。
使用できるプリンタってのが取得できるんですね。(知らなかったです(^^)
以下のような感じで設定したいと思います。

//インストールプリンタ取得
var printers = PrinterSettings.InstalledPrinters;
string defPrinterName = string.Empty;
foreach (var printer in printers)
{
    //プリンタ名はどこかに設定しとく。。
if (printer.ToString().Contains("EPSON LP-S5500"))
{
defPrinterName = printer.ToString();
break;
}
}

 //ここでプリンタ名設定
if(!string.IsNullOrEmpty(defPrinterName))
printDialog.PrinterSettings.PrinterName = defPrinterName;
1

スキルアップ/キャリアアップ(JOB@IT)