2009年11月7日土曜日

Windows XP で、リモートデスクトップ接続を複数ユーザで同時に行う方法(マルチセッション)

PCで作業をしていると、リモートデスクトップを使う機会がよくある。
かなり便利な機能なので、使う人はたくさんいるものだ。

そこで問題になるのが、「複数ユーザの同時ログオン」。
Windows XP では1人のユーザしかログオンすることはできないし、誰かがログオン中に無理やりログオンすると、既にログオン中のユーザが強制ログオフされてしまう。。

という問題はすっかり「仕方のないもの」だと思っていたのだけれど、今日調べたらそれが解決できる、つまり「複数ユーザが同時ログオンできる」方法を見つけたので共有しておく。

------------------------------------------------------------------------------

複数ユーザの同時ログオン方法(マルチセッション)

Ⅰ.設定手順

  1. Terminal Server Patch をインストール
    • http://www.kood.org/terminal-server-patch/ から、「Terminal Server Patch」をダウンロードする
      →「Download Latest 2.1 Binary」をクリック(2009/11/06 現在)
    • ダウンロードしたファイルを実行してインストールする
      →ファイル名は「Termiserv_XPSP2-SP3_i386_2.1.exe」(2009/11/06 現在)
      →実行中に「動作の保障がなんちゃら・・・」「CDを入れてください」などメッセージが出るが、気にせずOKで進む
    • PCを再起動する
      →最後に再起動を求められるので、再起動する
  2. グループポリシーで、接続数を設定する
    • グループポリシーエディタを起動する
      →ファイル名を指定して実行「gpedit.msc」
    • 「コンピュータの構成」→「管理用テンプレート」→「Windows コンポーネント」→「ターミナル サービス」を選択
    • 同「ターミナルサービス」内の「ターミナル サービス ユーザに対してリモート セッションを 1 つに制限する」を有効にする
    • 同「ターミナルサービス」内の「接続数を制限する」を有効にし、「最大接続数」を 999999 にする
      →「最大接続数」は任意の値でOK
  3. レジストリエディタで、マルチセッションを有効にする
    • レジストリエディタを起動
    • HKEY_LOCAL_MACHINE
      └SOFTWARE
         └Microsoft
           └Windows NT
              └CurrentVersion
                └Winlogon
      の「AllowMultipleTSSessions」の値を 1 にする

以上、簡単 3 ステップ!
あとは、実際にリモート接続するだけ。

Ⅱ.注意点

  1. ユーザについて
    • ドメインユーザには対応していない(と謳っている)
    • 同一ユーザでの同時ログオンは対応していない(ユーザアカウントを複数作成すること)
  2. OS のバージョンについて
    • この記事は、サーバ側(接続される側)に Windows XP SP3 を使用したときのものである
    • 接続する側も Windows XP SP3 だったが、接続する側は割と何でもいけるらしい
  3. 責任について
    • もちろん自己責任でやること
    • ライセンス云々の問題は不明

Ⅲ.補足

そもそもなぜこんなことが可能かというと、Windows XP SP2 の Beta版でマルチセッション機能の開発をしたが、セキュリティ上の問題(ライセンスの問題も?)等が解消されなかったので、機能を無効にしている、ということらしい。

Ⅳ.参考

<ポジティブ回路>http://blog.goo.ne.jp/sito1980/e/5204ff550ed8ad14bcb453921802b72d
<きたへいの悠々自適>http://kitahei.cocolog-nifty.com/youyou/2007/07/windows_xp_ece3.html
<IT pro>http://itpro.nikkeibp.co.jp/free/NT/NEWS/20040113/1/

 

以上。

2009年9月29日火曜日

知らないと損をする、Word の便利機能

 Micosoft Word ( 以下 Word ) って、ある程度の人なら特別勉強などをしなくても、触りながら使えてしまう。
で、そのままなんとなーく少しづつ機能を覚えていく・・・っていうパターンが多いのではないだろうか・・・ ( 自分もそうだった )。

 だがしかし、この「備え付けの機能すら覚えきれいない状態」で作業をするのはとても危険だ。
必死に時間をかけて作業をしたのに、「えっ、この機能あったの!?!?今まで無駄な(ry」なんてことになりかねない。
実際、自分がそういう思いをしたのだ・・・。

 そんな状況を見かねて、職場のリーダーが Word の本を貸してくれたので、使えそうなポイントをまとめておく。

---------------------------------------------------------------------

■Word の便利機能、およびポイント

Ⅰ. レイアウト

    • 「印刷設定・余白」などのレイアウト設定は、最後にやると体裁が崩れるので、最初にやると効率UP
    • 目次につかう「見出し」も、最後にやると面倒なので編集中に随時やる。と効率UP
    • 「見出しマップ」を使うと、左側のフレームに見出しが一覧表示され、ドキュメントが見やすい

Ⅱ. 編集

    • 「ブックマーク」を文書の任意の位置に設定できる。体裁には影響しないので、活用すべし
    • 「定型句」には、文章だけでなく図も登録しておける。活用すべし
    • 脚注には、「脚注」機能がある。わざわざ自分で「*1」とか入力しているとみっともない
    • 「相互参照」機能で、図表の番号・タイトルを連動させることができる ( “図-1を参照” などの表記 )。更新漏れ防止に便利

Ⅲ. 段落

    • 「書式設定」は、段落ごとに存在する。デフォルトでは、ページ設定の書式を適用
    • 「インデント」は書式設定で。スペースで調節だなんてありえない
    • 「インデント」はざっくり4種類を活用する。「一行目」「2行目以降」「左端」「右端」
    • 「ルーラー」でインデントを調整するとかなり楽。それぞれ次の形である。「▽一行目」「△2行目以降」「□左端」「▽右端」
    • 「タブ」が強力。「左揃え」「右揃え」「中央揃え」「小数点揃え」など種類豊富
    • 「タブ」はルーラーの左上端にあるボタン ( “┘” とか ”└” ) で切り替えられる
    • 「タブ」は段落内に複数設定可能。活用すべし

Ⅳ. セクション

    • ページ設定は「セクション」ごとに存在している
    • 「セクション」を区切ると、セクションごとに「用紙の向き」、「ヘッダー、フッター」などを設定できる
    • 「挿入→改ページ→セクション」でセクションを区切れる

Ⅴ. 図表

    • 「描画キャンバス」は一見邪魔だが、複数のシェイプで図を書くときは便利。好意的に活用すべし
    • 「描画キャンバス」を使うと、「コネクタ」が使える。Visio っぽくて便利。活用すべし
    • 「図形描画」ツールバーの「図形の調整」で、複数シェイプの位置を揃えることができる
    • 「罫線→オートフォーマット」で、表の書式を登録しておける

Ⅵ. 管理

    • 「ツール→文書の保護」で、履歴モードを強制実行できる
    • 「ファイル→版の管理」で、任意の状態を保存しておくことができる ( VSS のラベル的な存在 )。
    • 「ツール→オプション→セキュリティ」で、パスワードを設定できる
    • マシン情報の漏洩に注意。「ファイル→プロパティ」・「ツール→テンプレートとアドイン」の情報は不要であれば削除する

---------------------------------------------------------------------

 

以上。

2009年9月9日水曜日

Microsoft Word で、2ファイルの差分を比較する方法

今まで知らなかった。
変更の履歴なしで差分を比較できることを。


■ワードファイルの差分比較方法

 1.「ツール(T)」→「文書の比較と反映」
 2. ファイル選択ダイアログで、「厳密な比較」のチェックを ON
 3. ファイルを選択し、【比較】ボタンを押下


以上。


 

嗚呼、願わくば戻って来いマージ作業で浪費した時間よ。

2009年7月29日水曜日

Visual Studio 2008 アドインを更新

せっかくアドインを作成したのに、現場で適用したらメニューが追加されないという悲劇に。。
改めて見てみたら、ちゃんちゃらおかしいコードを書いていたので、修正して対応。

ついでに動作確認の方法もおかしかったので、正しく理解した。これでOKだろう。

修正内容:
 ・コマンドの取得ロジックを修正
 ・アサーションコードを修正
 ・VSS の「保留中のチェックイン」ウィンドウにも表示されたらいいなレベルのコードを追加

■最新版のダウンロードはこちら

2009年7月12日日曜日

Visual Studio 2008 のアドインを作ってみた。ソリューションエクスプローラに、ファイルパスのコピー、保存先フォルダを開くのメニューを追加!

昨日、ちょろっと時間があったので、Visual Studio 2008 用のアドインを作ってみた。

最近は色々と手を出してしまっていて、作りかけのアプリがいくつかある。
それもやりたいのだけど、今の現場が「生産性の向上」というテーマに重きを置き、みんな高い意識レベルで仕事をしているので、負けていられない!というか。
自分も乗っていこう!という気持ちで 今回のアドイン製作にいたったのだ。

と言ってもまだ、ショボイ (><
これから積み重ねていきます。

 

ということで以下、田中アドインの説明。


■ファイル

■概要

Visual Studio 2008 用のアドインです。

ソリューションエクスプローラでファイルを選択したときのメニューに、下記2つの機能を追加します。
選択したファイルの保存先フォルダを開く
選択したファイルのフルパスをクリップボードにコピーする

■詳細( 同じ内容のものが、zip ファイルに ReadMe.rtf として入っている )

※ 以下の免責事項に同意できる方のみ、ご使用ください

[ 免責事項  ]

このアドインは、作者が個人的な用途のために製造したものです。

よって、このアドイン自体は誰が使用してもかまいませんが、それによって発生したいかなる損害において、作者は責任を負いません。

また、何の保証もしません。

-----------------------------------------

Ⅰ. 構成ファイル

· TanakaAddIn.dll

· TnakaAddIn.AddIn

Ⅱ. インストール方法

A. 標準インストール

1.「TanakaAddIn.dll」 を適当なフォルダに保存する ( どこでも良い )

2.「TanakaAddIn.AddIn」 をテキストエディタで開き、<Assembly> タグに「1.」で保存したフォルダを指定する

3.「TanakaAddIn.AddIn」 を下記のフォルダにコピーする ( なければ作成 )
コピー先フォルダ:「C:\Documents and Settings\All Users\Application Data\Microsoft\MSEnvShared\Addins」

B. カスタム

・ 「TanakaAddIn.AddIn」のコピー先の変更方法

AddIn ファイルのインストール先は、標準で6箇所ぐらい用意されています。
そのうちどこへインストールしてもかまいません。
以下は、そのインストールフォルダの確認方法です。

1.Visual Studio 2008 の メニューから、「ツール(T)」>「オプション(O)」>「環境」>「アドイン/マクロセキュリティ」を開く

2.「アドイン ファイル パス」を確認する

Ⅲ. アンインストール方法

インストールしたファイル「TanakaAddIn.dll」、「TanakaAddIn.AddIn」を削除してください。

-----------------------------------------


 

気が向いた方はどうぞ。

2009年6月24日水曜日

VC++ デバイスコンテキストを使っての描画方法。 ( GetDC、CreateSolidBrush、SelectObject、PatBlt、使い方 )

デバイスコンテキストについて

業務にて、デバイスコンテキストを使っての描画処理を担当。
描画関係の知識がなかったのでちょろっと勉強してみたので、メモを残しておく(たいしたことないけど 笑)。

Ⅰ. デバイスコンテキストとは

ウィンドウの描画に必要な材料のパッケージ。よく画用紙と画材のセットと表現される。
文字を書いたり、背景の色を変えたり、線を引いたり、画像を表示させたり・・・
といった全ての操作はこいつ(デバイスコンテキスト)のハンドルを取得するところから始まる。

業務系アプリでは、画面のほぼ全てが MFC 標準のコントロールで事足りてしまうのであまり関わる機会がない。
が、色の変更などの細かい制御をするときは世話になるので、覚えておくと非常に便利だ。

Ⅱ. 画用紙と画材のセット・・・というと?

デバイスコンテキストが画用紙と画材のセットと表現される理由は何か。
それは、デバイスコンテキストが持っているオブジェクトを知れば納得がいく。
以下がデバイスコンテキストが持つオブジェクト・・・つまり画材のリスト ( 厳密にはこれだけではない )

  • Bitmap ・・・ 画像(画像を表示するときに使う)
  • Brush  ・・・ ブラシ(背景を塗りつぶすときに使う)
  • Font   ・・・ フォント(文字を書くときに使う)
  • Pen     ・・・ ペン(線を引くときに使う)
  • Region   ・・・ 領域(描画領域を限定するときに使う)

デバイスコンテキストは、これらの画材を全種類持っている。
ただし、もてる画材は1種類につき1つで、Pen なら Pen 1個。
つまり、赤ペンに青ペンに緑も・・のように、同じ種類の画材は複数持てないので入れ替えて使う。

また、1つのウィンドウにつき、デバイスコンテキストは1つである。
ということから、ウィンドウ、およびそれに張り付いている全てのコントロールもウィンドウなので、それぞれが1つづつデバイスコンテキストを持っていることになる。

[デバイスコンテキストのイメージ ( クリックで最大化 )]
無題

Ⅲ. デバイスコンテキストの使い方

Ⅱ まででデバイスコンテキスト(以下 DC )の考え方が理解できたとうことで、実際にコードを書いてみる。
まずは、DC のハンドルを取得してから描画をおこなう一連の流れはこうだ。

  1. DC のハンドルを取得
  2. 画材を作成
  3. 画材を設定
  4. 描画
  5. 画材を元に戻す
  6. 画材を削除
  7. DC のハンドルを開放

すでにお気づきだと思うが、これにはいくつか注意点がある。

  • DC のハンドルを取得したら、最後に必ず開放すること
  • 使う画材を作成したら、最後に必ず削除すること
  • 画材を入れ替えたら、最後にかならず元に戻すこと

以上の点に注意して、画面(画用紙)を赤で塗りつぶす処理を書くとこうなる。

--------------------------------------------------------------------------------
// ※ hWnd は、描画対象となるウィンドウのハンドル

//
// 画面を赤で塗りつぶす
//

// DC のハンドルを取得
HDC hDC = ::GetDC( hWnd );

// 赤のブラシを作成(画材を作成)
HGDIOBJ hBrushRed = ::CreateSolidBrush( RGB( 255, 0, 0 ) );

// 赤のブラシを設定(画材を設定)
HGDIOBJ hBrushOld = ::SelectObject( hDC, hBrushRed );

// 画面をぬりつぶす(描画)
RECT rtWindow;
::GetWindowRect( hWnd, &rtWindow );
::PatBlt( hDC, 0, 0, rtWindow.right, rtWindow.bottom, PATCOPY );

// 画材を元に戻す
::SelectObject( hDC, hBrushOld );

// 画材を削除
::DeleteObject( hBrushOld );

// DC のハンドルを開放
::ReleaseDC( hWnd, hDC );

--------------------------------------------------------------------------------

これで、画面を赤で塗りつぶすことができた。

やりたい描画、つまり使う画材によって呼び出す API が変わるが、
基本的な処理の流れは、どの画材を使うときも同じである。
( 逆に、それぐらいしか変わりがないとも言える )

Ⅳ. 最後に

今回は、GetDC を使って実装してみた。
GetDC は、ウィンドウハンドルのパラメータに NULL を設定すると、スクリーン全体の DC をも取得できる強力な API である。
画面のちょっとした描画にはもっと適した BeginPaint という API があるし、MFC のクラスを使うともっと簡単に実装できるので、
次回はそれらを使ったコードの書いてみることにする。

 

以上。

2009年6月3日水曜日

Visual Studio 2008 Team System 新機能の概要メモ

Visual Studio 2008 Team System 機能メモ
 
--------------------------
Ⅰ. コード分析
 A. 概要
  1. およそ200種類、大枠で11項目のルールからコードを検証する
  2. アンマネージコードのコード分析は貧弱
 B. 使い方
  1. プロジェクトのプロパティから、コード分析を有効にして、分析を実行する

Ⅱ. プロファイリング
 A. 概要
  1. CPU 負荷や、実行速度などのボトルネックの発見を助ける
  2. サンプリングは、定期スナップショットや、モジュール単位の検証など大まかな調査をする
  3. インストルメントは、関数ごとの処理などより詳細な情報を集める
  4. サンプリングは、長期シナリオにも向いている
 B. 使い方
  1. プロファイリングウィザードからプロジェクトを指定し、実行するだけ
------------------------------
 
 
調査が足りなすぎだけど、とりあえずメモ。
アンマネージ C++ で使えそうなのは、プロファイリングくらいかなぁ・・
カバレッジ機能とかは後日チェックしてみよう。
 
 
 
 
 

2009年5月20日水曜日

Visual Studio で、ソース管理プラグインの初期化エラーの対処法

本日の業務中、表題の件で1時間ほど時間を無駄にしてしまったので記録しておく。
・・・といっても、最終的に解決したのは自分じゃなくて先輩なのだけど・・(感謝
 

[問題]
Visual Studio 2008 で開発をはじめたところ、Visual SourceSafe(以下VSS)のバインドに失敗していることに気がついた。マシンには以前、Visual Studio6、.NET2003、2005、2008が入っており、2003と2005はアンインストールされた状態であった。Visual Studio 2008 上では、ソース管理プラグインの初期化エラーが発生しソース管理へのバイントに失敗する。そして、環境設定からもプラグインに SourceSafe を指定することができずに「なし」と表示されてしまう・・という状況。
ちなみに当然、VSS 6.0 はインストールされていた。。。
 
[解決]
コマンドプロンプトから、「RegSvr32 ssscc.dll」を実行する。
 
[原因]
どうやら、ssscc.dll が VSS のプラグインそのもので、通常はサービスに登録されているが、何かの拍子に(2003や2005のアンインストール時?)削除されてしまっていたようだ。
 
[補足]
あと、VS2008 からの VSS6 使用は公式サポートされていない。
また、VSS6 だと Unicode のソース管理に問題が発生する可能性がある様で、2005を使うのがベストらしい。

 
以上。
 
 
 

2009年2月24日火曜日

Adobe Flash Player の高速化(軽量化)!最新版の Flash は重い・・。

SONY PCG-U3 でのできごと。
 
Flash Player を最新にしてください・・・の指示に従いアップデートをしたら、
今までカクつきながらもなんとか再生できていた、youtube、Gyao などが完全に紙芝居になった。
 
なんとか古い Flash Player ( Ver.7 ) をインストールしなおしたら、再び動くようになった。
ちなみに、Ver.7 以前のバージョンは、古すぎで再生不可だった。
・・・最近の最新版はいろいろ余計なものを積みすぎていてけしからん。
 
過去のバージョンは、以下から入手可能。
アンインストーラを走らせて、インストールするだけ。
 
※導入は自己責任でね
 
テスト用のアーカイブ版 Flash Player の提供について

2009年1月5日月曜日

Excel ファイルの全シートを、左上選択状態にする ( VBA )

Excel を使っていて、いつもストレスを感じることがある。
それは、データを「保存」すると、開いていたシート、スクロールの位置まで保存されてしまうということ。。
 
”ここを編集していました”っていう備忘には便利かもしれないけど、ネットワークで共有しているファイルなど、
複数人が編集するファイルの場合は、開く度にシートがごちゃごちゃになっていて、非常に作業の効率が悪い。
 
ということで、几帳面というより少し神経質な人のために(自分)、
全てのシートを左上選択状態(A1セル)にするマクロを作成した爆笑
 
★こんな場面で意外と便利だ。
 1.ショートカットに設定して、毎回保存する前に整える
 2.ファイルオープンのイベントに追加して、表示位置をリセットして開く
 
以下コード
'
' 全てのシートを左上選択状態にする
'

Sub SelectA1AllSheets()
' 全シート分実行
Dim i As Integer
For i = 1 To Worksheets.Count
' シートをアクティブ化
Worksheets(i).Activate
' 左上にスクロール
Dim j As Integer
For j = 1 To Windows(1).Panes.Count
Windows(1).Panes(j).ScrollColumn = 1
Windows(1).Panes(j).ScrollRow = 1
Next
' 左上を選択
ActiveSheet.Cells(1,1).Select
Next
' 1番目のシートをアクティブ化
Worksheets(1).Activate
End Sub

※注意

 ・ウィンドウ枠の固定、ウィンドウの分割にも対応している

 ・念のため、編集しているファイルではなく個人用マクロブックに登録するのを忘れずに

 

以上