Akira's Commentary

WinVNC - The Windows NT VNC server

WinVNC in system tray WinVNCはウィンドウズ用のVNCサーバで、 これを使うと、どのようなマシンのビューワからでも ウィンドウズのデスクトップにアクセスすることが できるようになります。

現在のウィンドウズでは、 ある時点でログインしてデスクトップを使用できるユーザは 一人だけに限られます。 WinVNCはPC上の既存のデスクトップを 遠隔操作できるようにするだけのもので、 Unixサーバのように別のデスクトップを作ったりはしません。

この点強調しておきますが、VNCは、Citrix等のソフトウェアとは異なり、 決してNTマシンをマルチユーザサーバにするものではありません。 確かに、VNCを使って複数のユーザが 単一のNTマシンにアクセスすることができます。 しかし、VNCでは、そのような複数のユーザは みんな同じデスクトップを見ることになります。

WinVNCは、Windows95、Windows98、WindowsNT4.0、Windows2000、 そして多分将来のWin32ベースのシステムでも、そのまま動作します。 システムファイルを取り替えたり、 OS専用バージョンのプログラムを用意したりする必要はありません。 WinVNCは普通のアプリケーションプログラムで、 スタートメニューから起動し、 普通に終了させることができます。

WinVNCはサービスとして実行させることもできます。 その場合には、ビューワからリモートで、ログインし、作業して、 ログアウトすることができるようになります。 このようにサービスとして実行させることをお勧めします。 詳細は後で説明します。

そして、WinVNCはフリーです。 ソースが公開されていますので、色々な人によって WinVNCが改良されていくことを期待しています。

Installation

WinVNCは簡単にインストール/実行できます。

  1. WinVNCのセットアッププログラムを起動します。 無論、VNCを、ZIPやTARアーカイブで受け取ったなら その前に展開する必要があります。
  2. スタートメニューのWinVNCフォルダの Install Default Registry Settingを実行します。 これによってデフォルトのフックが設定されます。 このフックは、クロックのような変わった描画を行なう いくつかのプログラムに対処するためのものです。 これは必須というわけではありませんが、 これがあると処理が改善されます。 フックのレジストリ設定の詳細については後で説明します。
  3. これで、スタートメニューからWinVNCを(アプリケーションモードで) 起動することができます。 あるいは、タスクバーのメニューのスタートアップグループに ショートカットを登録するのもいいでしょう。 こうすると、ログインする毎にWinVNCが起動されるようになります。

    ですが、このようにWinVNCをアプリケーションとして起動するよりも、 サービスとして実行する方をお勧めします。 詳細については後で説明します。

Using WinVNC

起動されるとWinVNCは小さな、緑色のVNCアイコンを システムのタスクバーに付け加えます。 このアイコンを右クリックするとメニューが表示されます。 このメニューから以下の処理を行なうことができます。

・Properties
Propertiesダイアログが表示されます。 これによってWinVNCのパラメタを変更することができます。
・Add New Client
サーバから「リスニング」ビューワへ接続します。 ダイアログで接続先のビューワのマシン名を入力します。 このようにして確立されたコネクションは 「shared」として扱われます。 「-connect」オプションのところも御覧ください。
・Kill All Clients
現在接続しているすべてのクライアントを切断します。
・About WinVNC
説明するまでもないでしょう。
・Close
サーバを終了させます。

マウスポインタをこのアイコンの上に持ってくると ローカルマシンのIPアドレスが表示されます。

サーバが動作していれば、 他のマシン上のVNCビューワによってサーバに接続して リモートアクセスすることができます。

WinVNC Properties

Propertiesダイアログからは以下のオプションを設定することができます。

Incoming Connections

・Accept Socket Connections
通常サーバはvncviewerプログラムからの 直接のソケットベースのコネクションを受け付けます。 このチェックをクリアすると、 WinVNCへの直接のコネクションが無効になり、 AT&T内部版のビューワが使うCORBAインターフェースによる コネクションだけが有効になります。 公開版ではこれをクリアするとコネクションを一切受け付けなくなります。
・Display Number
サーバが使用するディスプレイ番号を指定することができます。 通常はデフォルトの0から変更する必要はありません。
・Auto
このチェックは、 「Display Number」で指示されたディスプレイ番号を使うか、 サーバマシン上で最初に使用可能な(使われていない) ディスプレイ番号を使うかを決めます。
・Password
入ってくるコネクションについては、 接続しようとする人が このマシンへの接続を許されているかどうかを 認証する必要があります。 このテキストボックスで、 認証の際に使われるパスワードを設定します。
・Disable Remote Keyboard & Pointer
リモートビューワからのキー、マウスイベントを無効にします。 以降の新たな接続では、スクリーンを見ることはできますが 入力することはできません。
・Disable Local Keyboard & Pointer
これは試験的に入れた機能で、NTでのみ動作します。 これがセットされた場合には、ビューワが接続している間は ローカルマシンのキー、マウスが無効になります。 どこか他の場所にあるマシンにリモートアクセスするような場合に、 通り掛った人によっていじられたりするのを防ぐことができます。

Update Handling

ウィンドウをクリックすると、大抵は画面が更新されます。 このような場合に、 ビューワ側の画面がきちんと更新されなかったなら 以下の設定を試してみてください。 デフォルトの設定は大抵の場合にうまくいくはずです。 これを変えると、だいたいは速度が低下します。 ですからアプリケーションで何か問題が発生しない限り、 そのままにしておいた方が無難です。

・Poll Full Screen
ある種のアプリケーションによる画面の描画は、 現在VNCが使っている画面の更新領域の取得方法では 把握できません。 このようなケースでは画面全体について、 更新領域のチェックが必要になります。 この方法を使うと確実に更新された領域を 把握することができるようになりますが、 性能は極端に低下してしまいます。
・Poll Foreground Window
これは現時点でフォアグラウンドになっているウィンドウについてのみ 更新領域のチェックを行なうものです。 この方法は画面全体のチェック程にはCPUに負荷を掛けませんが、 だいたいは同じような結果を得ることができます。 コマンドプロンプト(DOS窓)での描画は、 WinVNCの通常の方法では取得できませんが、 この方法を使うと、それほどCPUに負荷を掛けることなく 更新された領域を把握することができます。
・Poll Window Under Cursor
フォアグラウンドウィンドウのチェックの変形で、 この場合にはマウスカーソルの下のウィンドウだけをチェックします。 フォアグランドウィンドウのチェックと同時に指定することができます。
・Poll Console Windows Only
このオプションが指示された場合には、 コマンドプロンプト(DOS窓)だけをチェックします。 このチェックはPoll Window Under Cursorと組み合わせた場合には、 マウスカーソルがコンソールウィンドウ(DOS窓)の上にきた時だけ チェックされるようになります。
・Poll On Event Received Only
このオプションが指示された場合には、 リモートクライアント(ビューワ)からの マウス、キーイベントを受け取った時だけ 画面の更新領域のチェックが行なわれます。 これは低速のネットワークでVNCを使うためのものです。 これを使うとビューワ側でスクリーンの更新チェック、 更新データの送信の頻度をコントロールすることができます。

これらの設定は、 WinVNC終了時にレジストリのユーザ毎のセクションに保存され、 次回WinVNC起動時に同じ設定が使用されます。

Running WinVNC as a service

WinVNCはWindows NTだけではなくWindows 95/98でも、 サービスプロセスとして実行させることができるようになりました。 具体的な手順は後で説明します。

WinVNCをサービスプロセスとして実行させると、 誰もログインしていないマシンに接続し、 ビューワ経由でログインして作業することができるようになります。 またNTでなら、 サーバがサービスとして動作していれば、 サーバにCtrl-Alt-Delを送って ワークステーションのロックを解除するすることも できるようになります。

サービスモードではいくつかの設定が、ユーザ毎ではなく、マシン毎、 になります。これらの「マシンデフォルト」の設定については VNCのスタートアップメニューの Administrative Toolsによってアクセスすることができます。 サービスとして動作させる場合には以下の点にも注意してください。

Windows NTの場合

  • WinVNCはユーザをきちんと特定して、 レジストリに入っているユーザ毎の設定を使用します。 (ただし、後述のAllowPropertiesで禁止されていなければ、です) このためにユーザがログインした時にヘルパーアプリケーションが実行され、 ユーザ毎の情報をWinVNCサービスに渡します。 もし何かの理由でヘルパーアプリケーションが実行できない場合には、 WinVNCは誰がログインしているかを知らないままで動作します。 この場合にはローカルマシンデフォルト、 デフォルトのユーザセッティングで動作することになります。

Windows 95の場合

  • コントロールパネルのパスワードセクションでの設定により、 VNCのパスワードもマシンで共通、あるいはユーザ毎になります。 もしWin95がユーザ毎に異なったレジストリセット(デスクトップ設定)を 使うようになっていれば、ユーザがログインした時点で、 VNCパスワードはマシン共通のパスワードから ユーザ毎のパスワードに切り替えられます。 Win95がどのユーザについても同じレジストリ(デスクトップ設定)を 使うようになっていれば、 いつでもマシン共通のVNCパスワードが使用されます。

共通事項

  • なにかでスクリーンの解像度(サイズ)が変更されると ビューワとのコネクションが切断されますので、 再接続する必要があります。 ユーザがシステムのデフォルトの解像度と異なった スクリーンサイズを設定していると、 ログイン時にコネクションが切断されます。
  • ユーザが、サービスで使用しているものとは異なった ディスプレイ番号を設定していると、 やはりログイン時にビューワからのコネクションが切断されます。
  • WinVNCがサービスとして動作されている場合には、 ユーザレベルでWinVNCを起動することはできません。

以下では、WinVNCは既にインストールされているものとして、 どのようにサービスとして実行させるかを説明します。 Windows NTでは、以下の設定を行なうには アドミニストレータの権限が必要です。 ログインアカウントにそのような権限がなければ Administrator でログインし直してください。

  1. スタートメニューの WinVNC Administrative Toolセクションの "Install WinVNC serive"を実行します。 あるいは コマンドプロンプトを開いて、 WinVNCを-installオプションを付けて実行します。
    D:\>C:
    C:\>cd "\Program Files\ORL\VNC"
    C:\Program Files\ORL\VNC> winvnc -install
  2. Windows 95: WinVNCサービスは動作を始めています。 また、システムのブート時に起動されるように インストールされています。
    Windows NT: WinVNCサービスはインストールされており、 以降システムのブート時に起動されるようになっています。 しかしまだ起動されてはいません。 次回にシステムがブートされた時には起動されます。 すぐ起動するには、コントロールパネルのサービスセクションから起動するか、 あるいはコマンドプロンプトで "net start"で起動します。
    C:\>net start winvnc
    これでサービスは動作を始めますが、 一旦ログアウトして再度ログインしないと、 WinVNCサービスはユーザが誰なのかを知ることができません。 この状態ではタスクバーへの表示も現われません。 ここでWinVNC Service Helperを実行すれは WinVNCサービスにユーザの情報が渡されて タスクバーにもアイコンが表示されるようになります。
  3. WinVNCのアイコンがタスクバーに表示されていない時に その設定(パスワードとか)を変更するには、 スタートメニューのWinVNCセクションの Show User Settingsを使用します。
    誰もログインしていない状態で、あるいは ユーザ独自の設定が使われていない状態で、 WinVNCサービスが使うデフォルトの設定を変更するには WinVNCスタートメニューの Administrative Toolsサブセクションの Show Default Settingsを使用します。 デフォルトの詳細については後で説明します。
    Windows 95の場合: Win95がユーザ毎に異なったデスクトップ設定を使うように 設定されていた場合には、 現在ログインしているユーザの設定が使用されます。 ユーザがログインしていない場合、あるいは すべてのユーザが同じデスクトップ設定を 使うようになっていた場合には、 マシンについて登録されている デフォルトのユーザ設定が使用されます。 これが、WinVNCが普通に起動された場合には ユーザ毎の設定が使用されるのとは異なる点です。 なお、Win95では、ログインダイアログで キャンセルボタンを押した時に デフォルトのユーザ設定が使用されることになります。
  4. 新しいバージョンのWinVNCをインストール使用する場合、 あるいは単にWinVNCを削除しようとする場合には、 最初にWinVNCサービスを削除しなければなりません。 WinVNCサービスは、Administrative Tools、あるいは コマンドラインオプションの-removeで 削除することができます。
    注:サービスの削除で 何かエラーメッセージがでたなら、 大抵はそもそもインストールされていないということです。

Command-line options

以下にすべてのコマンドラインオプションをリストします。 ですが、いままで説明したもの以外は、 よどほのパワーユーザでない限り使うことはないでしょう。

-run
WinVNCを普通に起動します。 コマンドラインの残りは無視されます。
-install
WinVNCをサービスとして登録します。 コマンドラインの残りの部分も処理されます。
-remove
WinVNCサービスを削除します。 コマンドラインの残りの部分も処理されます。
-settings
動作中のWinVNCに User Propertiesダイアログを表示させます。
-defaultsettings
動作中のWinVNCに Default Propertiesダイアログを表示させます。
-connect host
動作中のWinVNCに 指示されたホストで動作しているリスニングビューワへの コネクションを要求させます。 これはメニューのAdd New Clientオプションと 同じ動作をさせるものです。 ひとつのコマンドラインで 複数の-connectオプションを指定して 一度に複数のビューワへのコネクションを 要求させることができます。
-kill
動作中のWinVNCを終了させます。
-about
動作中のWinVNCにAboutダイアログを表示させます。

オプションが何も指定されなかった場合には、 WinVNCは普通に(アプリケーションモードで)起動されます。 複数のオプションを同時に指定することができます。 ですから、現在実行中のWinVNCサービスを新しい バージョンにアップグレードするなら、

WinVNC_new -remove -install

でサービスの削除と新バージョンのサービス登録を 行なうことができます。また

WinVNC_new -kill -run

で動作中のWinVNCを終了させ、新しいバージョンの WinVNCを起動することができます。

WinVNC - Advanced Settings

以下のオプションは システムアドミニストレータによって WinVNCサーバの動きを特定の要求に合わせて 設定することができるように追加されたものです。 これらのオプションはシステムのレジストリのDWORD値で指定します。 Windows Policy Editorなどのツールを使うと、 多数のマシンに同じ値を設定することができます。

バージョン3.3.2R5以降では、よりフレキシブルな設定ができるように、 オプションの構成がより高度になりました。 その結果としてオプションがずいぶんと複雑になってしまったので、 将来のバージョンでは他の方法を使うことを考慮しています。 現在、WinVNCは以下の場所にある設定情報を参照します。

  1. ローカルマシン固有の設定 ここで設定されたオプションは上書きされません。 情報は以下の場所に格納されます。
    HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\
  2. ローカルのデフォルトユーザ設定 情報は以下の場所に格納されます。
    HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\Default
  3. ローカルのユーザ毎の設定 これによってデフォルトユーザ設定が上書きされます。 ユーザがログインしていない場合にはユーザ名SYSTEMが使用されます。 情報は以下の場所に格納されます。
    HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3\<username>
  4. グローバルユーザ毎の設定 これらの情報は、AllowPropertiesがゼロ以外になっていた時だけ 参照されます。情報は以下の場所に格納されます。
    HKEY_CURRENT_USER\Software\ORL\WinVNC3\

大抵のオプションはこれらの格納場所の一部分にしか設定できません。 これについてはそれぞれのオプションの説明のところで示します。

Advanced Options:

AuthRequired
デフォルトでは、WinVNCサーバは、 NULL以外のパスワードが設定されない限り 入ってくるコネクションを受け付けません。 この制限は、設定の間違ったサーバが ユーザを把握せずにコネクションを受け付けて セキュリティホールになることを防ぐためのものです。 しかしサーバがLAN環境だけで使われるなら、 このようなチェックをスキップして NULLパスワードを許す方がいいかもしれません。 このレジストリを0にすると、 NULLパスワードのチェックが無効になります。 これはローカルマシン固有の設定です。
AllowLoopback
デフォルトでは、WinVNCサーバは同一マシン上の VNCビューワからのコネクションは受け付けません。 しかし、テストを行なう場合、あるいは Windows Terminal Server等で複数のWinVNCを 実行させる場合には、これは好ましくありません。 このレジストリを1にすると ローカルループバックコネクションが許されるようになります。 0にした場合にはそのようなコネクションは 排除されるようになります。 これはローカルマシン固有の設定です。
AllowProperties
このレジストリを0にすると、 ユーザはプロパティダイアログを表示することができなくなり、 どのような設定も、パスワードも含めて、 変更することができなくなります。 なおこの場合にはグローバルのユーザ毎設定を止めてしまいます。 ですから、このオプションを使用する前に 有効なパスワードを設定しておく必要があります。 通常はデフォルトユーザ設定で与えておきます。 これはローカルユーザ毎の設定です。
AllowShutdown
このレジストリを0にすると、 ユーザはWinVNCを終了させることができなくなります。 これはローカルユーザ毎の設定です。
AuthHosts
AuthHostは他のオプションとは異なってREG_SZ文字列で指定します。 ここではIPアドレステンプレートを指定します。 これは入ってきたコネクションのIPアドレスに対するパターンで、 それによってコネクションを受け付けるかどうかを決めるものです。 デフォルトではこれは空になっていて、 その場合にはすべてのコネクションを受け付けます。 テンプレートは以下の形式を取ります。
+[ip-address-template]
?[ip-address-template]
-[ip-address-template]
[ip-address-template]は、文字列表現(ドットノーテーション)された IPアドレスの左側部分を示します。 例えば+158.97は158.97.12.10、158.97.14.2とマッチします。 複数のマッチパターンを使用する場合には":"で区切って並べます。 後の項はそれ以前の項よりも優先されます。 ですから「-:+158.97:」は158.97で始まるIPアドレスの コネクションだけを受け付ける(それ以外はすべて拒否する) 指示になります。
?で始まる項は、デフォルトでは、 そのアドレスにマッチしたホストからのコネクションが、 サーバ側でのダイアログによって 受付けるかどうかを判断されるべきことを示しています。 AuthHostsオプションの設定に対する動作の詳細は QuerySettingオプションで指示されます。 これはローカルマシン固有の設定です。
QuerySetting
QuerySettingを使うと、マシン固有のAuthHostsの指示に対する動作を ユーザ毎に偏執狂的に調整することができます。 これはDWORD値で0(もっとも緩い)から4(もっとも厳しい)の 範囲の値を取ります。 以下の表は、QuerySettingの値に対して、AuthHostsの設定が どのように取り扱われるかを示しています。
0 +:Accept?:Accept-:Query
1 +:Accept?:Accept-:Reject
2 +:Accept?:Query -:Reject [Default]
3 +:Query ?:Query -:Reject
4 +:Query ?:Reject-:Reject
デフォルトは2で、この場合にはAuthHostsでの指示にそのまま従います。 これはローカルマシン固有/グローバルユーザ毎の設定です。
QueryTimeout
QueryTimeoutは、新しいコネクションが到着してから 自動的にリジェクトされるまでの Accept Connectionダイアログが表示されている時間を秒数で指示します。 これはローカルマシン固有/グローバルユーザ毎の設定です。
AutoPortSelect
これがセットされている場合、WinVNCは自動的に 最初に利用可能なディスプレイ番号を選択します。 プロパティダイアログの 「Auto」チェックボックスに対応するものです。 これはローカルマシン固有の設定です。
CORBAConnect
AT&T内部版にのみ関連しています。 これはローカル/グローバルユーザ毎の設定です。
DebugLevel
DebugMode
実行時に内部のデバッグメッセージのロギングが可能になりました。 ログデータは、ファイル、コンソールウィンドウ、 あるいはプログラムがデバッグ版でコンパイルされた場合には MSVCのデバッガに、出力されます。 これらのレジストリキーは以下のように使われます。
DebugModeはどのようなロギング方法を使うかを指定します。
1 = MSVCデバッガ
2 = WinVNCディレクトリのWinvnc.logファイルに出力
4 = コンソールウィンドウに出力
これらの値は組み合わせて使うことができます。 DebugMode=6であれば、ロギングはWinVNC.logファイルと デスクトップのコンソールウィンドウの両方に出力されます。
DebugLevelは どれだけのデバッグ情報を出力するかを指示します。 任意の正の整数値で指定します。 0の場合にはデバッグ情報は何も出力されません。 これがデフォルトです。 10~12ですべてのデバッグ情報が出力されるようになります。 これらはローカルマシン固有の設定です。
ConnectPriority
デフォルトでは、 新しい非共有のコネクションが到着して認証されたなら、 WinVNCサーバは既存のコネクションを切断します。 しかし、このような動作は、 サーバマシンを共有のワークステーションとして使っている場合、 あるいは教室などで ひとつのディスプレイを複数のビューワで見ているような場合には 望ましいものではありません。
ConnectPriorityは、 新たな非共有のコネクションが到着した時に WinVNCサーバがどのように振る舞うべきかを指示するものです。
0 = 既存のコネクションをすべて切断します。
1 = 既存のコネクションを切断しません。
2 = 新しいコネクションを拒否します。
これはローカルマシン固有の設定です。
IdleTimeout
この設定は、 アイドル状態のクライアント(入力イベント、更新要求が無い)が 強制的に切断されるまでの秒数を、WinVNCに指示するものです。 この設定が指示されていなかった場合、 あるいは0が指示されていた場合には、 タイムアウトによる切断は行なわれません。
InputsEnabled
これはプロパティダイアログの 「Disable Remote keyboard and poiner」オプションに (逆に)対応するものです。 これはローカル/グローバルユーザ毎の設定です。
LockSetting
これはビューワとのコネクションが切断された場合に、 WinVNCがどのような処理を行なうべきかを指示するものです。
0 - 何もしません。
1 - ワークステーションをロックします(未実装)。
2 - 切断されたならログオフします。
これはローカル/グローバルユーザ毎の設定です。
LoopbackOnly
デフォルトでは、WinVNCサーバは ネットワークアダプタから入ってくる すべてのコネクションを受け付けます。 これは、マルチホームのマシンに もっとも簡単に対処できるからです。 しかし、場合によってはローカルマシンからの 「localhost」アダプタへのコネクションだけを 受け付けるようにしたいことも考えられます。 SSH経由でより安全にVNC使う場合等では このような使い方が必要になります。 このレジストリを1にすると WinVNCはローカルコネクションしか 受け付けないようになります。 この状態では、、AllowLoopback、 およびAuthHostsの設定は無視されます。 このレジストリを0にすると、 WinVNCはネットワークアダプタ経由の コネクションだけを受け付けるようになります。 これがデフォルトの設定です。 これはローカルマシン固有の設定です。
Password
これはローカル/グローバルユーザ毎の設定です。
PollUnderCursor
PollForeground
PollFullScreen
OnlyPollConsole
OnlyPollOnEvent
これらの設定は、プロパティダイアログの 「Update Handlings」オプションに対応するものです。 これらはローカル/グローバルユーザ毎の設定です。
PortNumber
VNCで使われるポート番号を指定します。 これを有効にするには 「AutoPortSelect」を無効にしなければなりません。 これはローカル/グローバルユーザ毎の設定です。
RemoveWallpaper
コネクション時にユーザの壁紙を取り除くかどうかをWinVNCに指示します。 これはコネクション時にのみチェックされますので、 設定変更後は再接続しない有効になりません。 これはローカル/グローバルユーザ毎の設定です。

壁紙を取り除くことによって、リモートでのWindowsデスクトップの 表示を高速化することができます。 これを指示すると、Windowsをローカルに使用する場合には壁紙付きで、 リモートで操作する場合には壁紙無しで使用することができるようになります。

SocketConnect
この設定は、プロパティダイアログの 「Accept Socket Connections」オプションに対応するものです。 これはローカル/グローバルユーザ毎の設定です。

VNCHooks - Advanced Settings

WinVNCは固有のライブラリ「VNCHooks」を使います。 これは他のアプリケーションにフックして、 更新されたスクリーンの領域を取得してWinVNCに通知するものです。 VNCHooksライブラリは 可視状態のウィンドウにメッセージを送って どの範囲を更新しようとしているのかを判定します。 しかし残念ながらスクリーンの更新の方法は アプリケーションによって異なっています。 このため、特定のアプリケーションに合わせて、 レジストリを編集してWinVNCで使用される取得方法を 調整する必要があります。 リストアップしたエントリは、 以下のレジストリに含まれています。

HKEY_CURRENT_USER\Software\ORL\VNCHooks\Application_Prefs
・use_GetUpdateRect
ウィンドウが、自分自身の再描画を行なうべきことを 知らせるメッセージ(WM_PAINT)を受け取った場合には、 どの領域が更新されるかを正確に知ることができます。 WinVNCはこのような更新領域だけをチェックするなら 処理効率があがります。 しかしながら、 この方式はたまに描画上のグリッチを引き起こします。 特にアプリケーションがウィンドウの内容をスクロールする場合、 新たに表示される領域だけが更新領域としてマークされるため、 古いイメージがそのまま残ることがあります。 このような問題を解決したい場合にはレジストリの <appname>\use_GetUpdateRectエントリを 変更してみてください。 1の場合には最適化が有効になります。 0の場合には最適化は行なわれません。
・use_Timer
ある種のウィンドウアプリケーション、特に時計のようなプログラムは、 WM_PAINTではなく、WM_TIMERイベントで画面を更新します。 WinVNCは。デフォルトではタイマーメッセージでの 更新領域のチェックは行ないません。 多くの場合、アプリケーションはタイマーメッセージを 描画以外の目的で使っているためです。 ですがこのため、タイマーメッセージで描画を行なう 時計のようなアプリケーションでは、 WinVNCを使った場合には画面が正しく描画されないことがあります。 このような問題に対処する場合にはレジストリの <appname>\use_Timerエントリを 変更してみてください。 1の場合にはWM_TIMERメッセージでWinVNCの画面が更新されます。 0の場合にはこれは行なわれません。
・use_KeyPress
ウィンドウアプリケーションによっては、 WM_PAINTで再描画を行なうのではなく、 ユーザからのキー入力で直接画面を描画することがあります。 このような変更をキャッチするために、 WinVNCにキー入力毎に 更新領域をスキャンするように指示することができます。 これはレジストリの <appname>\use_KeyPressエントリで 指示します。 1の場合にはキープレスでの更新領域のスキャンが行なわれます。 0の場合にはこれは行なわれません。
・use_LButtonUp,use_MButtonUp,use_RButtonUp
ウィンドウアプリケーションによっては、WM_PAINTを使用せずに、 マウスクリックで直接画面を更新することがあります。 このような変更をキャッチするためには、 WinVNCにマウスアップで更新領域をスキャンするように 指示する必要があります。これはレジストリの <appname>\use_LButtonUpエントリで 指示します。 1の場合にはマウスアップでの更新領域のスキャンが行なわれます。 0の場合にはこれは行なわれません。 中央ボタン、右ボタンについても同様です。
・use_Deferral
VNCHooksライブラリは、ウィンドウに送られるメッセージを ウィンドウが処理する前にキャッチします。 このため、更新された可能性のある領域を示す更新メッセージが WinVNCに送られた場合、 アプリケーションが実際に画面を更新する前に、 WinVNCが通知された更新領域を クライアントに送信してしまう可能性があります。 これは、特にマルチプロセッサ版のNTにおいては、よくある問題でして、 このためデフォルトで遅延更新を行なうようになっています。 遅延更新では、直接WinVNCにメッセージを送るのではなく、 ウィンドウのメッセージキューにカスタムメッセージを ポストすることによって実現されています。 VNCHooksがこのカスタムメッセージを見つけると、 今度はWinVNCに更新領域を通知するメッセージが送付されます。 これによって、更新前の画面を送出することを防いでいます。 しかし、プログラムによってはこのようなカスタムメッセージを 取り扱うことができませんので、この処理はオプションになっています。 この処理はレジストリの <appname>\use_Deferralエントリで 指示されます。1の場合には通知が遅延されます。 0の場合には遅延されません。

Running on other Win32 systems

WinVNCはNT3.51でも動作します。 しかしNT3.51にはシステムトレイがありませんので、 プロパティダイアログを使用することができません。 またNt3.51ではクライアントからのCtrl-Alt-Delがきちんと処理できません。 このためNT3.51ではサービスとして実行させた場合の機能が 一部制限されることになります。 またNT5.0ベータでも動作します。 ですが、環境を選べるのでしたら、最新サービスパックをインストールした NT4.0で使ってください。

ですが、サービスパックによっては問題が発生するものもあります。 FAQ7に出ていますが、SP6で、一般ユーザでWinVNCを起動しようとすると 「disabling Nagel's algorithm」というエラーが出ます。 詳しくはFAQ [原文翻訳] を御覧ください。

Problems?

なにか問題があって、それがこのドキュメントに 記載されていなかったなら、まずFAQ [原文翻訳] をチェックしてみてください。 それでも解決できなければ、メイリングリストで尋ねてみてください。 直接開発者に問い合わせる場合には、VNCのユーザは非常に大勢いるので、 個別の問い合わせに答えられるとは限らない、ということに注意してください。 多分問い合わせを見るとは思いますが、回答は期待しないでください。