トピック検索
464 件のトピックが該当しました。
- XenApp上だと印刷が出来ない - おーじ ( 2013/11/18 23:28:37 更新)
- XenApp6.5 ネットワークプリンタで印刷出力する際に縮小される - shom ( 2013/10/11 15:38:35 更新)
- HDXポリシーのフィルタ機能について - Kazu ( 2013/10/02 18:04:31 更新)
- XenApp 6 Fundamentals QuickStartのプリンター設定でエラー - じょんれもん ( 2013/08/26 21:19:05 更新)
- XenApp6.5 マッピングプリンタが時々消える - momo ( 2013/08/21 16:53:17 更新)
- アプリケーション内で印刷設定を変更すると別のアプリケーションにも反映されてしまう項目がある - sinta ( 2013/04/02 10:03:38 更新)
- XenApp6.5オートクリエイトプリンタの設定が初期値に戻る - ハムスター ( 2013/03/17 11:03:23 更新)
- Xen5.0で8台あるサーバーの3台でプリンタの初期設定が異なっている。 - yasuyan ( 2013/02/20 14:24:39 更新)
- リダイレクトプリンタの名称について - XEN ( 2013/02/04 19:25:16 更新)
- Auto Created Client Printerの用紙名取得がされない - たけやん ( 2013/01/16 19:27:22 更新)
XenApp上だと印刷が出来ない
ローカルでは印字可能、リモートデスクトップでサーバに接続、ネットワーク越しの印字可能、という状況なのですが、XenApp上では印字がされません。印字をしようとするとファイルの保存形式を聞かれ、印刷では無くファイルと認識されているのか、ローカル上のプリンタが見えていないのか。解決に向け、アドバイスをお願い致します。
XenApp6.5、receiver3.4、サーバOSは2008SeverR2でプリンタはレーザープリンタです。
XenApp6.5、receiver3.4、サーバOSは2008SeverR2でプリンタはレーザープリンタです。
とりあえずネイティブドライバとユニバーサルドライバどっちを使用しているか確認してみてください。
また、使ってない方に変更して印刷してみてください。
また、使ってない方に変更して印刷してみてください。
まず使ってるプリンタ確認。
ローカルのときはなにを選択してる?
リモートのときはなにを選択してる?
そしてxenappんときは?
ポートがFILEになってそうですね。
ローカルのときはなにを選択してる?
リモートのときはなにを選択してる?
そしてxenappんときは?
ポートがFILEになってそうですね。
XenApp6.5 ネットワークプリンタで印刷出力する際に縮小される
お世話になっております。
XenApp6.5で起動したExcelからクライアント側のネットワークプリンタへ
印刷出力したところ、一回り縮小されて印刷されてしまいます。
RDPでサーバに直接接続し、クライアントのプリンタで印刷した際には
問題なく印刷ができました。
解消方法をご存知の方、ご教示いただけないでしょうか。
環境:
Windows Server 2008 R2 SP1 (workgroup)
XenApp 6.0 Fundamentals (XA650W2K8R2X64R01 適用済)
XenApp6.5で起動したExcelからクライアント側のネットワークプリンタへ
印刷出力したところ、一回り縮小されて印刷されてしまいます。
RDPでサーバに直接接続し、クライアントのプリンタで印刷した際には
問題なく印刷ができました。
解消方法をご存知の方、ご教示いただけないでしょうか。
環境:
Windows Server 2008 R2 SP1 (workgroup)
XenApp 6.0 Fundamentals (XA650W2K8R2X64R01 適用済)
>XenApp6.5で起動したExcelからクライアント側のネットワークプリンタへ
>XenApp 6.0 Fundamentals (XA650W2K8R2X64R01 適用済)
今回の環境ってXenApp6.5ですよね。
XenApp 6.0 Fundamentalsというのは無視していいですか?
>XenApp 6.0 Fundamentals (XA650W2K8R2X64R01 適用済)
今回の環境ってXenApp6.5ですよね。
XenApp 6.0 Fundamentalsというのは無視していいですか?
>今回の環境ってXenApp6.5ですよね。
>XenApp 6.0 Fundamentalsというのは無視していいですか?
すみません。そのとおりです。
無視してください。
>XenApp 6.0 Fundamentalsというのは無視していいですか?
すみません。そのとおりです。
無視してください。
まずはXenApp側のポリシーを確認してください。
また、変更して現象が変わるか確認してください。
・使用しているプリンタドライバ(ユニバーサル or ネイティブ)
・プリンタ設定の保存に関するポリシー
・印刷ジョブの経路
また、変更して現象が変わるか確認してください。
・使用しているプリンタドライバ(ユニバーサル or ネイティブ)
・プリンタ設定の保存に関するポリシー
・印刷ジョブの経路
HDXポリシーのフィルタ機能について
社内でXenDesktop5の環境を使用しています。
以下の要件を実現する設定について検討しています。
・社内でオンラインのプリンタからの印刷を許可
・社外でオンラインのプリンタからの印刷を禁止(※社外での印刷を禁止するため)
社外からはVPNサービス経由で内部IPアドレスを取得し、VDAにICA接続する形となります。
HDXポリシーの[プリンタリダイレクト]と、フィルタ[クライアントのIPアドレス]を利用して実現できないか考えていますが実現は可能でしょうか。
社内のアドレスとVPN経由でのアドレスについてはサブネットが異なるため、そちらを条件にポリシーの許可(または禁止)の設定は可能でしょうか。
何方かご存知でしたらご教授頂ける様お願い致します。
以下の要件を実現する設定について検討しています。
・社内でオンラインのプリンタからの印刷を許可
・社外でオンラインのプリンタからの印刷を禁止(※社外での印刷を禁止するため)
社外からはVPNサービス経由で内部IPアドレスを取得し、VDAにICA接続する形となります。
HDXポリシーの[プリンタリダイレクト]と、フィルタ[クライアントのIPアドレス]を利用して実現できないか考えていますが実現は可能でしょうか。
社内のアドレスとVPN経由でのアドレスについてはサブネットが異なるため、そちらを条件にポリシーの許可(または禁止)の設定は可能でしょうか。
何方かご存知でしたらご教授頂ける様お願い致します。
社外用と社内用のポリシーを別けて作成して適用先をIPにすれば出来ると思います。
http://support.citrix.com/proddocs/topic/xendesktop-rho/nl/ja/cds-policies-applying-rho.html?locale=ja
http://support.citrix.com/proddocs/topic/xendesktop-rho/nl/ja/cds-policies-applying-rho.html?locale=ja
Reppaさん
ご回答頂きありがとうございます。
リンク先を確認したところ、サブネットでのポリシーの許可/禁止を制御できそうですので一度試したいと思います。
ご回答頂きありがとうございます。
リンク先を確認したところ、サブネットでのポリシーの許可/禁止を制御できそうですので一度試したいと思います。
XenApp 6 Fundamentals QuickStartのプリンター設定でエラー
こんばんは。初めて投稿するじょんれもんと申します。
某会計ソフトをリモートで接続するために業者指定のXenApp 6 Fundamentalsを導入しました。
インストール&HOTFIXの導入実施後、「Quick Start」内の「プリンター」を選択すると
下記エラーが発生してプリンタの設定が出来ません。
対処方法をお判りの方、ご教授頂けますと幸いです。
よろしくお願いいたします。
サーバ環境
OS:Windows Server 2008 R2 Standard SP1
Citrix:XenApp 6 Fundamentals
適用HOTFIX:XA600W2K8R2X64R02
エラー内容
--------------------------------------------------------------------------
Could not create task due to the following exception
System.ArgumentOutOfRangeException: インデックスが範囲を超えています。
負でない値で、コレクションのサイズよりも小さくなければなりません。
パラメータ名: index
場所 System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
場所 System.ThrowHelper.ThrowArgumentOutOfRangeException()
場所 System.Collections.Generic.List`1.get_Item(Int32 index)
場所 Citrix.QuickStart.Utilities.MFCOM.MFCOMADPolicies.GetItem(PolicyType type, String policyName, String relPath, String& Item)
場所 Citrix.QuickStart.Utilities.MFCOM.MFCOMADPolicies.GetDefaultPrinterLocation(PolicyType type, String policyName, String relPath, String& Item)
場所 Citrix.QuickStart.Utilities.MFCOM.MFCOMPrinters.get_DefaultPrinter()
場所 Citrix.QuickStart.Tasks.Printers.PrintersPage.RefreshPrinterDisplay()
場所 Citrix.QuickStart.Tasks.Printers.PrintersPage..ctor(PrintersTask t)
場所 Citrix.QuickStart.Tasks.Printers.PrintersTask.CreateTaskPage()
場所 Citrix.QuickStart.MainForm.SwitchContentPage(SideTabPage tab)
某会計ソフトをリモートで接続するために業者指定のXenApp 6 Fundamentalsを導入しました。
インストール&HOTFIXの導入実施後、「Quick Start」内の「プリンター」を選択すると
下記エラーが発生してプリンタの設定が出来ません。
対処方法をお判りの方、ご教授頂けますと幸いです。
よろしくお願いいたします。
サーバ環境
OS:Windows Server 2008 R2 Standard SP1
Citrix:XenApp 6 Fundamentals
適用HOTFIX:XA600W2K8R2X64R02
エラー内容
--------------------------------------------------------------------------
Could not create task due to the following exception
System.ArgumentOutOfRangeException: インデックスが範囲を超えています。
負でない値で、コレクションのサイズよりも小さくなければなりません。
パラメータ名: index
場所 System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
場所 System.ThrowHelper.ThrowArgumentOutOfRangeException()
場所 System.Collections.Generic.List`1.get_Item(Int32 index)
場所 Citrix.QuickStart.Utilities.MFCOM.MFCOMADPolicies.GetItem(PolicyType type, String policyName, String relPath, String& Item)
場所 Citrix.QuickStart.Utilities.MFCOM.MFCOMADPolicies.GetDefaultPrinterLocation(PolicyType type, String policyName, String relPath, String& Item)
場所 Citrix.QuickStart.Utilities.MFCOM.MFCOMPrinters.get_DefaultPrinter()
場所 Citrix.QuickStart.Tasks.Printers.PrintersPage.RefreshPrinterDisplay()
場所 Citrix.QuickStart.Tasks.Printers.PrintersPage..ctor(PrintersTask t)
場所 Citrix.QuickStart.Tasks.Printers.PrintersTask.CreateTaskPage()
場所 Citrix.QuickStart.MainForm.SwitchContentPage(SideTabPage tab)
これですかね。実行権限の問題やHotfixについて書いてあります。
AE001が何のことなのかわかりませんが、
XAFJ600QSW2K8R2X64001というHotfixがLimitedでリリースされているようです。
http://forums.citrix.com/thread.jspa?threadID=98941&tstart=0
AE001が何のことなのかわかりませんが、
XAFJ600QSW2K8R2X64001というHotfixがLimitedでリリースされているようです。
http://forums.citrix.com/thread.jspa?threadID=98941&tstart=0
XenApp6.5 マッピングプリンタが時々消える
毎回ではないのですが、時折マッピングプリンタが出てこなくなる現象が発生します。
何か設定とかあったりしますでしょうか。
[サーバ]
W2K8R2
XenApp6.5
Hotfix Rollup Pack 2
[クライアント]
W7SP1 x86
web Interface接続
よろしくお願いします。
何か設定とかあったりしますでしょうか。
[サーバ]
W2K8R2
XenApp6.5
Hotfix Rollup Pack 2
[クライアント]
W7SP1 x86
web Interface接続
よろしくお願いします。
XenApp6.5サーバの印刷関連サービスが停止していると思います。
特定のドライバに問題がある場合が考えられます。
問題のあるドライバをアップデートするか、
もしくは、印刷関連のサービスを自動再起動するのが良いと思います。
特定のドライバに問題がある場合が考えられます。
問題のあるドライバをアップデートするか、
もしくは、印刷関連のサービスを自動再起動するのが良いと思います。
試してみようと思います。
ありがとうございます。
ありがとうございます。
アプリケーション内で印刷設定を変更すると別のアプリケーションにも反映されてしまう項目がある
お世話になっております。
XenApp6.5でcitrix universal printerを利用しています。
通常プリンタの設定はコントロールパネル内で設定した部分が保存され、
アプリケーション内で変更した分に関してはそのプログラム内でのみ有効な一時設定と認識しています。
今回XenApp6.5でデスクトップを公開し、
Excel内で印刷設定を変更した後Wordを起動したところ、
変更した印刷設定の一部のみがWord側でも反映されてしまいました。
具体的には集約印刷の設定は別アプリケーションでも反映され、
両面印刷の設定は変更したとしても別アプリケーションでは反映されませんでした。
複数のメーカーのプリンタでも試してみたところ同様の現象が発生しました。
【動作環境】
・XenApp6.5
・サーバーOS:Windows Server 2008R2
・プリンタに関するポリシー設定:帯域制限のみ
・ローカルOS:Windows XP
ローカル環境では発生しない現象なのですが、
Citrixの仕様なのでしょうか?
ご存じの方いらっしゃいましたらご教授頂ければと存じます。
XenApp6.5でcitrix universal printerを利用しています。
通常プリンタの設定はコントロールパネル内で設定した部分が保存され、
アプリケーション内で変更した分に関してはそのプログラム内でのみ有効な一時設定と認識しています。
今回XenApp6.5でデスクトップを公開し、
Excel内で印刷設定を変更した後Wordを起動したところ、
変更した印刷設定の一部のみがWord側でも反映されてしまいました。
具体的には集約印刷の設定は別アプリケーションでも反映され、
両面印刷の設定は変更したとしても別アプリケーションでは反映されませんでした。
複数のメーカーのプリンタでも試してみたところ同様の現象が発生しました。
【動作環境】
・XenApp6.5
・サーバーOS:Windows Server 2008R2
・プリンタに関するポリシー設定:帯域制限のみ
・ローカルOS:Windows XP
ローカル環境では発生しない現象なのですが、
Citrixの仕様なのでしょうか?
ご存じの方いらっしゃいましたらご教授頂ければと存じます。
はい。仕様です。
プリンタの設定は公開アプリケーション単位ではなく、
クライアント単位で反映されます。
また、設定が反映されるされないはプリンタドライバにより異なる場合があります。
http://support.citrix.com/article/CTX120706
プリンタの設定は公開アプリケーション単位ではなく、
クライアント単位で反映されます。
また、設定が反映されるされないはプリンタドライバにより異なる場合があります。
http://support.citrix.com/article/CTX120706
ご回答頂きありがとうございます。
やはり仕様ですか、利用者側に注意喚起ということで対応するしかないですね。
ありがとうございました。
やはり仕様ですか、利用者側に注意喚起ということで対応するしかないですね。
ありがとうございました。
XenApp6.5オートクリエイトプリンタの設定が初期値に戻る
XenApp5からサーバの入れ替えでXenApp6.5に変更したところ、
クライアント側で自動作成されるプリンターの設定(カラーからモノクロに変更など)が、
アプリを軌道して設定直後は問題ないのに、アプリを終了してから再び起動すると、初期値に戻ってしまいます。
サーバ:Windows2008Server R2 64bit
プリンタ:Xerox DocucentreIV C3375
ドライバーは、サーバ側とクライアント側で同じバージョンです。
クライアント側で自動作成されるプリンターの設定(カラーからモノクロに変更など)が、
アプリを軌道して設定直後は問題ないのに、アプリを終了してから再び起動すると、初期値に戻ってしまいます。
サーバ:Windows2008Server R2 64bit
プリンタ:Xerox DocucentreIV C3375
ドライバーは、サーバ側とクライアント側で同じバージョンです。
お使いのプリンタはXenApp65に対応していますでしょうか。
メーカに確認が必要です。
またXenAPp65ではポリシー設定で モノクロかカラーに指定することができます。
メーカに確認が必要です。
またXenAPp65ではポリシー設定で モノクロかカラーに指定することができます。
Xen5.0で8台あるサーバーの3台でプリンタの初期設定が異なっている。
こんにちは
【環境】
webinterface 2台
XenApp5.0 8台
ActiveDirectory 2台
すべてWindowsServer2008SP1x64
で運用しております。
この環境で8台中3台に接続するとプリンタの初期設定がA4 から角型2号に
変わってしまうという現象が発生しています。
プリンタはネットワークプリンタでプリントサーバー上に存在します。
ポリシーでセッションプリンタの設定をしておりポリシー内のIPアドレスのユーザ
にプリンタが作成される設定になっています。
公開デスクトップでプリンタの設定を確認した場合、公開アプリケーション
(Notepadの印刷も含む)で印刷を行った場合の両方で同現象を確認してお
ります。
必ず再現している事象なので原因を追えそうですが、
Xenに接続した時に作成されるプリンタの初期設定の情報はどこにもって
いるのかわかりません。
再現されるサーバーが限定されるところを見ると
移動ユーザプロファイルではなくサーバーのどこか
(レジストリ)などで持っているようなのですが、
調査で行き詰まっています。
Xenに関しては詳しくないため情報が不足しているかも
知れませんがよろしくお願いいたします。
【環境】
webinterface 2台
XenApp5.0 8台
ActiveDirectory 2台
すべてWindowsServer2008SP1x64
で運用しております。
この環境で8台中3台に接続するとプリンタの初期設定がA4 から角型2号に
変わってしまうという現象が発生しています。
プリンタはネットワークプリンタでプリントサーバー上に存在します。
ポリシーでセッションプリンタの設定をしておりポリシー内のIPアドレスのユーザ
にプリンタが作成される設定になっています。
公開デスクトップでプリンタの設定を確認した場合、公開アプリケーション
(Notepadの印刷も含む)で印刷を行った場合の両方で同現象を確認してお
ります。
必ず再現している事象なので原因を追えそうですが、
Xenに接続した時に作成されるプリンタの初期設定の情報はどこにもって
いるのかわかりません。
再現されるサーバーが限定されるところを見ると
移動ユーザプロファイルではなくサーバーのどこか
(レジストリ)などで持っているようなのですが、
調査で行き詰まっています。
Xenに関しては詳しくないため情報が不足しているかも
知れませんがよろしくお願いいたします。
CPS4.5を使っているということで、こちらの情報も参考にしてみてはいかがでしょうか。
キャノンのサイトで対象となりそうなものがありました。
http://cweb.canon.jp/e-support/faq/answer/colorir/22798-1.html#LIPSenvironment
リダイレクトプリンタの名称について
XenApp6.5
WindowsServer2008R2 の環境で、
WEBインターフェースで公開アプリケーションを設定しています。
プリンタについてリダイレクトプリンタを利用してクライアントの
プリンタを利用したいと考えていますが、プリンタ名称が
「セッションX(PC名)プリンタ名」と長くなってしまいます。
プリンタ名を短くする方法はないか探しています。
何か情報をご存知の方がいましたらご教授をお願いいたします。
WindowsServer2008R2 の環境で、
WEBインターフェースで公開アプリケーションを設定しています。
プリンタについてリダイレクトプリンタを利用してクライアントの
プリンタを利用したいと考えていますが、プリンタ名称が
「セッションX(PC名)プリンタ名」と長くなってしまいます。
プリンタ名を短くする方法はないか探しています。
何か情報をご存知の方がいましたらご教授をお願いいたします。
Citrixのポリシーで変更するしか無いと思います。
「従来の~」というポリシーがあるハズです。
「従来の~」というポリシーがあるハズです。
Citrixのポリシーで「従来のプリンタ名」を設定すると、
プリンタ名が「Client/コンピュータ名#///プリンタ名」となります。
もう少し短い名称にしたいと思っています。
プリンタ名が最初に表示されればいいのですが。
プリンタ名が「Client/コンピュータ名#///プリンタ名」となります。
もう少し短い名称にしたいと思っています。
プリンタ名が最初に表示されればいいのですが。
メーカーの公式サポートの方法としては、
仕様なので仕方ないと思われます。
セッション名を表示したくない場合は、
セッションプリンタ以外の方式を
選択するとかしか無いと思います。
仕様なので仕方ないと思われます。
セッション名を表示したくない場合は、
セッションプリンタ以外の方式を
選択するとかしか無いと思います。
ありがとうございました。
難しいようですので、アプリケーション側の表示域を広げました。
難しいようですので、アプリケーション側の表示域を広げました。
Auto Created Client Printerの用紙名取得がされない
環境:
Metaサーバー
OS:Windows2008 R2 64Bit
クライアント
OS:WindowsXP
CitrixReceiver 3.1.0.64091
Citrix XenApp6.0を使用して、.NET 2010 VB で作成した公開アプリケーションで印刷を
行っています。Auto Created Client Printerでユニバーサルプリンタドライバが
使用されているプリンタをパラメータに以下のコードを実行させたところ
「①用紙名の数を取得」は問題なくできる。
「②用紙名(1メンバー64文字で用紙名数分)を取得」はすべて空白が取得されます。
「③用紙サイズ番号の数を取得」は問題なくできる。
「④用紙サイズ番号(配列)を取得」はすべてゼロが取得されます。
一方、サーバにインストールした別のプリンタ(ベンダー製の非ネイティブドライバ使用)を
指定した場合は問題なくすべての情報が取得されます。
その上、この状態でも該当のAuto Created Client Printerを「デバイスとプリンター」で
右クリックし印刷設定を選択→表示される印刷設定画面で用紙/品質タブを選択→
詳細ボタン押下→用紙サイズドロップダウンをクリックすると、目的の用紙サイズが一覧表示
されるので取得する方法はあると思いますが、その方法がわかりません。
Auto Created Client Printerでの上記情報の取得方法をご存知の方いらっしゃいましたら
御教授お願い致します。
<以下はVBコードの問題部分です>
'用紙名のリストを取得
Declare Function DeviceCapabilitiesNames Lib "winspool.drv" Alias "DeviceCapabilitiesA" ( _
ByVal pDevice As String, _
ByVal pPort As String, _
ByVal fwCapability As Short, _
ByVal pOutput As String, _
ByVal pDevMode As IntPtr) As Integer
'用紙番号のリストを取得
Declare Function DeviceCapabilitiesPapers Lib "winspool.drv" Alias "DeviceCapabilitiesA" ( _
ByVal pDevice As String, _
ByVal pPort As String, _
ByVal fwCapability As Short, _
ByVal pOutput() As Short, _
ByVal pDevMode As IntPtr) As Integer
Const DC_PAPERS As Integer = 2
Const DC_PAPERNAMES As Integer = 16
'以下のメソッドをDevMode構造体から取得した下記パラメータで実行したが・・・
'PrinterName : "セッション 3 の (NTTDSPC079 からの) EPSON VP-4300 ESC/P"
'PortName : "Client:3:EPSON VP-4300 ESC/P"
Private Function GetPaperNumber(ByVal PrinterName As String, ByVal PortName As String) As Short
Dim idx As Integer
Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
Dim PaperNamesCount As Integer
Dim svPrinterName As String = PrinterName
'①用紙名の数を取得
PaperNamesCount = DeviceCapabilitiesNames(PrinterName, PortName, DC_PAPERNAMES, Nothing, IntPtr.Zero)
Dim PaperNames As String = New String(" "c, PaperNamesCount * 64)
'②用紙名(1メンバー64文字で用紙名数分)を取得
Call DeviceCapabilitiesNames(PrinterName, PortName, DC_PAPERNAMES, PaperNames, IntPtr.Zero)
PrinterName = svPrinterName
Dim paperNumberCount As Integer
'③用紙サイズ番号の数を取得
paperNumberCount = DeviceCapabilitiesPapers(PrinterName, PortName, DC_PAPERS, Nothing, IntPtr.Zero)
Dim paperNumbers As Short()
ReDim paperNumbers(paperNumberCount - 1)
'④用紙サイズ番号(配列)を取得
Call DeviceCapabilitiesPapers(PrinterName, PortName, DC_PAPERS, paperNumbers, IntPtr.Zero)
For j As Integer = 0 To PaperNamesCount - 1
Dim paper As String = hEncoding.GetString(hEncoding.GetBytes(PaperNames), j * 64, 64)
PrinterInfo.Rows.Add()
idx = PrinterInfo.Rows.Count - 1
PrinterInfo.Rows(idx).Cells(0).Value = j.ToString("000")
PrinterInfo.Rows(idx).Cells(1).Value = paperNumbers(j).ToString("000")
PrinterInfo.Rows(idx).Cells(2).Value = paper.Trim()
Next
Return paperNumberCount
End Function
Metaサーバー
OS:Windows2008 R2 64Bit
クライアント
OS:WindowsXP
CitrixReceiver 3.1.0.64091
Citrix XenApp6.0を使用して、.NET 2010 VB で作成した公開アプリケーションで印刷を
行っています。Auto Created Client Printerでユニバーサルプリンタドライバが
使用されているプリンタをパラメータに以下のコードを実行させたところ
「①用紙名の数を取得」は問題なくできる。
「②用紙名(1メンバー64文字で用紙名数分)を取得」はすべて空白が取得されます。
「③用紙サイズ番号の数を取得」は問題なくできる。
「④用紙サイズ番号(配列)を取得」はすべてゼロが取得されます。
一方、サーバにインストールした別のプリンタ(ベンダー製の非ネイティブドライバ使用)を
指定した場合は問題なくすべての情報が取得されます。
その上、この状態でも該当のAuto Created Client Printerを「デバイスとプリンター」で
右クリックし印刷設定を選択→表示される印刷設定画面で用紙/品質タブを選択→
詳細ボタン押下→用紙サイズドロップダウンをクリックすると、目的の用紙サイズが一覧表示
されるので取得する方法はあると思いますが、その方法がわかりません。
Auto Created Client Printerでの上記情報の取得方法をご存知の方いらっしゃいましたら
御教授お願い致します。
<以下はVBコードの問題部分です>
'用紙名のリストを取得
Declare Function DeviceCapabilitiesNames Lib "winspool.drv" Alias "DeviceCapabilitiesA" ( _
ByVal pDevice As String, _
ByVal pPort As String, _
ByVal fwCapability As Short, _
ByVal pOutput As String, _
ByVal pDevMode As IntPtr) As Integer
'用紙番号のリストを取得
Declare Function DeviceCapabilitiesPapers Lib "winspool.drv" Alias "DeviceCapabilitiesA" ( _
ByVal pDevice As String, _
ByVal pPort As String, _
ByVal fwCapability As Short, _
ByVal pOutput() As Short, _
ByVal pDevMode As IntPtr) As Integer
Const DC_PAPERS As Integer = 2
Const DC_PAPERNAMES As Integer = 16
'以下のメソッドをDevMode構造体から取得した下記パラメータで実行したが・・・
'PrinterName : "セッション 3 の (NTTDSPC079 からの) EPSON VP-4300 ESC/P"
'PortName : "Client:3:EPSON VP-4300 ESC/P"
Private Function GetPaperNumber(ByVal PrinterName As String, ByVal PortName As String) As Short
Dim idx As Integer
Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
Dim PaperNamesCount As Integer
Dim svPrinterName As String = PrinterName
'①用紙名の数を取得
PaperNamesCount = DeviceCapabilitiesNames(PrinterName, PortName, DC_PAPERNAMES, Nothing, IntPtr.Zero)
Dim PaperNames As String = New String(" "c, PaperNamesCount * 64)
'②用紙名(1メンバー64文字で用紙名数分)を取得
Call DeviceCapabilitiesNames(PrinterName, PortName, DC_PAPERNAMES, PaperNames, IntPtr.Zero)
PrinterName = svPrinterName
Dim paperNumberCount As Integer
'③用紙サイズ番号の数を取得
paperNumberCount = DeviceCapabilitiesPapers(PrinterName, PortName, DC_PAPERS, Nothing, IntPtr.Zero)
Dim paperNumbers As Short()
ReDim paperNumbers(paperNumberCount - 1)
'④用紙サイズ番号(配列)を取得
Call DeviceCapabilitiesPapers(PrinterName, PortName, DC_PAPERS, paperNumbers, IntPtr.Zero)
For j As Integer = 0 To PaperNamesCount - 1
Dim paper As String = hEncoding.GetString(hEncoding.GetBytes(PaperNames), j * 64, 64)
PrinterInfo.Rows.Add()
idx = PrinterInfo.Rows.Count - 1
PrinterInfo.Rows(idx).Cells(0).Value = j.ToString("000")
PrinterInfo.Rows(idx).Cells(1).Value = paperNumbers(j).ToString("000")
PrinterInfo.Rows(idx).Cells(2).Value = paper.Trim()
Next
Return paperNumberCount
End Function
解決しました。自己レスです。
DeviceCapabilities呼び出しの際、PrinterNameとPortName をsjisに変換し、
null(0)で終了する(c/c++で使用する)文字列にしてから、実行すると期待していた
結果が返されました。
日本版のWindows系でプリンタ名に日本語が含まれる場合にだけ発生する
現象のようで、DeviceCapabilitiesの呼出しと実行結果の文字列はsjis文字で
null(0)にて終了する形式で行うようです。日本版citrixではAuto Created Client Printerの
プリンタ名に日本語が入るので要注意です。
(こんなことで3~4日も悩むなんて・・)
これでプリンタ用紙選択を実行時に行えるようになり、用紙サイズ別のプリンタを
あらかじめ作っておいてそれを選択といったことをせずに済むようになりました。
ご覧になったみなさんありがとうございました。
DeviceCapabilities呼び出しの際、PrinterNameとPortName をsjisに変換し、
null(0)で終了する(c/c++で使用する)文字列にしてから、実行すると期待していた
結果が返されました。
日本版のWindows系でプリンタ名に日本語が含まれる場合にだけ発生する
現象のようで、DeviceCapabilitiesの呼出しと実行結果の文字列はsjis文字で
null(0)にて終了する形式で行うようです。日本版citrixではAuto Created Client Printerの
プリンタ名に日本語が入るので要注意です。
(こんなことで3~4日も悩むなんて・・)
これでプリンタ用紙選択を実行時に行えるようになり、用紙サイズ別のプリンタを
あらかじめ作っておいてそれを選択といったことをせずに済むようになりました。
ご覧になったみなさんありがとうございました。
Powerful & Beautiful
力強く、美しいシステムを。