WindowsXP Professinalインストールできない

新しくXPマシンを作りたいと思い、Cent OSの入っていたマシンにXP Professionalをインストールしようとしたところ、
「Setup is inspecting your computer's hardware configuration.」
が一瞬表示されたあと、真っ黒な画面となりインストールが進まない現象が発生した。

インストールDVDがおかしいのかも知れないため、Windows Server 2003を選んだところ、インストールは正しく開始された。
ネットで調べてみたら、同様の事象はかなり起きているらしく、たくさんのページがヒットした。
ほとんどのページは事象は同じであったが、役に立ちそうな(自分の場合と同じ原因と思われる)ページはなかなか見つからなかった。

やっと、あるページに行き着き、自分と同じと思われる原因が見つかった。
それは、Linuxパーティションが存在するとXP Professionalのインストールができないと言うものであった。
自分もCent OSが入っていたPCにインストールしようとしていたため、試しにLiveDVDから起動してHDDのパーティションを削除してみた。すると、上記メッセージが表示されたあと、インストールの画面が始まった。

CapsLockキーをCtrlキーにする

最近、Windows7を触るようになったが、「A」の左に「Ctrl」がないと使いづらいので、キーマップをいじることにした。
WindowsXPではいつもやっているが、Windows7でも同じ方法が使えるか分からなかったので、調べてみた。

結果は、いつもと同じ方法が使えるということであった。
ちなみに、方法は以下となる。

(1)「ファイル名を指定して実行(R)」で、「regedit」と入力して実行し、レジストリエディタを起動する。
(2)「HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Keyboard Layout」を選択する。
(3)[編集(E)]-[新規(N)]-[バイナリ値(B)]をクリックする。
(4)名前の入力を求められるので、「Scancode Map」を入力する。
(5)「Scancode Map」を右クリックして開くメニューから「修正(M)」をクリックする。
(6)以下の値を入力する。
   00 00 00 00 00 00 00 00
   03 00 00 00 1D 00 3A 00
   00 00 00 00 00 00 00 00
(7)マシンを再起動する。

32ビットマシンのVMwareで64ビットのOSを動かす

64ビットのWindows7の環境がほしかったため、
32ビットマシン(XP SP3)にVMwareを入れる方法を行うこととした。

64ビットのWindows7は後輩に準備してもらい、パワーオンを試みた。
「64ビットは動かせません。VTがどうのこうの」
というような内容のメッセージがでた。

後輩によると、BIOSにVTの設定があれば有効にすることで
動かせるようになるというである。
長い時間後輩の手を止めてしまうのは申し訳なかったので
自分で調べることにした。

以下の設定を行うということが分かった。
そのページに書いてあったマシンの一つは私のマシン(dc5700)と同じであった。

Intel Vertual TechnologyのVTx・VTdの設定変更
F10でBIOS出して、セキュリティ→システムのセキュリティ→仮想化技術 を有効に。

F10でBIOSを出して、セキュリティを選択したが、「システムのセキュリティ」がなかった。
セキュリティの中を一つずつ選択していったら、「OSセキュリティ」の中に
Intel 仮想化技術」という項目があり、「無効」の状態であった。

この「Intel 仮想化技術」を「有効」に設定したところ、
VMwareで64ビットWindows7を動かすことができた。

ListBoxの任意な行の色変え

「ListBox においてある条件にあてはまるアイテムを赤色表示する」ということとなった。

for (int ii = 0; ii < listBox.Items.Count; ii++)
{
  if (〜〜〜〜である場合)
  {
    listBox.Items[ii].________ = Color.Red;
  }
}

みたいなことができるのかと思ったが、Items[ii]には色を変えるようなプロパティはなかった。
というより、プロパティが一つもなかった。

色のプロパティは listBox が持っている。ということは、任意の行の色を変えることはできないのか?


調べてみたら、ListBox の DrawItem イベントで個別の色表示が可能となるらしい。
以下の処理を作成してイベント設定してみた。

※インデントのため、行頭に全角スペースが入っています
private void listBox_DrawItem(object sender, DrawItemEventArgs e)
{
  e.DrawBackground();
  //背景を描画する
  //項目が選択されている時は強調表示される

  //ListBoxが空のときにListBoxが選択されるとe.Indexが-1になる
  if (e.Index > -1)
  { //空でない場合
    Brush b = null;
    //文字を描画する色の選択

    string txt = *1
      { //違反ありの場合
        b = new SolidBrush(Color.Red);
        //赤字にする
      }
      else
      { //違反なしの場合
        b = new SolidBrush(e.ForeColor);
        //そのままの前景色を使う
      }
    }
    else
    { //選択されている時
      b = new SolidBrush(e.ForeColor);
      //そのままの前景色を使う
    }
    e.Graphics.DrawString(txt, e.Font, b, e.Bounds);
    //文字列の描画
    b.Dispose();
    //後始末
  }

  e.DrawFocusRectangle();
  //フォーカスを示す四角形を描画
}

それでもうまくいかなかった。
errorItems に最初からある行の文字列を設定しておくとその行は赤色に表示された。
errorItems に追加するだけではだめみたいである。
追加した後に Refresh() を呼ぶようにしたら

errorItems.Add("AAAAA");
listBox.Refresh();

うまくいった。

*1:ListBox)sender).Items[e.Index].ToString();     //描画する文字列の取得     if ((e.State & DrawItemState.Selected) != DrawItemState.Selected)     { //選択されていない時       if (errorItems.Contains(txt

XPから7へのリモートデスクトップ

Windows7のマシンをたてた。

普段使っているXPのマシンからリモートデスクトップで入れるといいなと思い、Windows7リモートデスクトップを設定した。よく分からずに、セキュリティが高いということで、「ネットワークレベル認証〜〜〜」という方を選んでみた。

XPからリモートデスクトップでアクセスを試みたが、「リモートコンピュータには、お使いのコンピュータでサポートされていないネットワークレベルの認証が必要です。サポートが必要な場合は、システム管理者かテクニカルサポートに問い合わせてください。」とはじかれてしまった。

調べてみたら、「XpやVISTAからWindows7へ接続するには”Windows XP SP3、Windows Vista SP1 および Windows Vista の SP2 の説明、リモート デスクトップ接続 7. 0 クライアントのリモート デスクトップ サービス (RDS) の更新します。”のページから更新されたRDC7.0クライアントプログラムをダウンロードしてきてインストールする必要があること」が分かった。

インストールしてみても結果は変わらなかった。
確認のために、Windows7リモートデスクトップの設定をセキュリティの低い方に変えてみたら、つながった。

リモートデスクトップのバージョンを調べたところ、XPは7.0で、7は7.1であった。

いつのまにか・・・時代に

プロジェクトが変わり、C#を使うようになった。
昔、やっていたが結構久しぶり。

サンプルのソースを見たが、理解できない・・・
調べたところ、LINQやラムダ演算子(=>)という仕様が追加されていた模様。
完全に、時代に取り残されてしまった。


急に会社が従業員の底上げをするといって、勉強会が始まることとなり、
JAVAの先生をやれと言われた。
確かに他にできる人がいないのはわかるけど。
昔は長い間やっていたけど、C#以上に久しぶり何ですけど・・・

大丈夫なのか・・・

ポインタの初期化:C++

 C++において、クラスポインタを宣言するだけでは、不定参照となる。

 自分では、宣言と同時に初期化をするように習慣づいているのだが、周りには、初期化をしないで使う人がいる。Javaは、明示的に初期化しなくても初期化されるので、Javaからプログラミングを始めたのであれば、初期化の習慣がないのもうなづけるのだが、周りでJavaができるのは、私だけである。周りのみんなは、Cで育ったはず。Cもポインタは初期化しないと不定参照になるはず。。。何故だ?何故、初期化しないのだ?

一応、以下のような処理で確認してみた。

long* p1;
long* p2 = 0;
long* p3 = NULL;
LOG_DEBUG(" @@@@@ p1( %p ) p2( %p ) p3( %p ) NULL( %p )", p1, p2, p3, NULL);
if (p1 != NULL) LOG_DEBUG(" @@@@@ p1はNULLではありません");
if (p2 != NULL) LOG_DEBUG(" @@@@@ p2はNULLではありません");
if (p3 != NULL) LOG_DEBUG(" @@@@@ p3はNULLではありません");

 これを実行すると以下のようなログが出力された。

2011/07/06 20:26:23:922 DEBUG @@@@@ p1( 0xbfffadd4 ) p2( (nil) ) p3( (nil) ) NULL( (nil) )
2011/07/06 20:26:23:922 DEBUG @@@@@ p1はNULLではありません
2011/07/06 20:27:54:852 DEBUG @@@@@ p1( 0xbfffae28 ) p2( (nil) ) p3( (nil) ) NULL( (nil) )
2011/07/06 20:27:54:852 DEBUG @@@@@ p1はNULLではありません

 やはり、宣言しただけでは、不定参照となる。

 ここで、初期化には、0を使うのか、NULLを使うのかという問題がある。ネットで調べると、C++では、0を使うべきというのが多い気がする。上の例では、0とNULLで初期化した場合の結果は同じとなった。詳細は、別途行うこととする。