技術メモ

【C#】AutoScrollが表示されているか確認する

フォームのAutoScrollを有効にしている場合に、実際にスクロールバーが表示されているかは以下のプロパティで取得できる

//右端のスクロールバーが表示されているか
Console.WriteLine(this.VerticalScroll.Visible);

//下のスクロールバーが表示されているか
Console.WriteLine(this.Horizo​​ntalScroll.Visible);

 

 

 

【VMWare Player】仮想マシンをアップグレードしてくださいと表示され、起動できない

かなり昔のVMWare Playerで作成した仮想マシンを、VMWare Workstation 16 Playerで起動しようとしたところ、以下のエラーメッセージが表示され、起動できなかった。

パワーオン中にエラーが発生しました: 仮想マシンは、このバージョンの VMware Player ではサポートされていないハードウェア バージョンを使用しています。前のバージョンの VMware Player を使用して仮想マシンをアップグレードしてください。

モジュール Upgrade のパワーオンに失敗しました。

仮想マシンの起動に失敗しました。

とりあえず起動させたかったので、拡張子が.vmxのファイルをテキストエディタで開き、「virtualHW.version = “3“」を「virtualHW.version = “18“」(18 = Workstation Player 16.x)に書き換えてみたところ、起動した。
参考ページ

ゲストOS起動時にドライバの再インストールなどが自動で行われたが、特に問題なく使えるようになった。但し、直接バージョンを書き換えて起動させたためにどこかで不具合が出る可能性がある。書き換えて起動させる前に、.vmxファイル以外にもすべてのファイルを別の場所にコピーしてバックアップを行った後に、試した方がよさそう。

 

【C#】フォームのサイズを変更した際に、Paintでうまく描画されない

フォームのPaintイベントで背景などを描画している場合、フォームのサイズを変更した際に、Paintがうまく描画されない場合がある。

この場合、フォームのDoubleBufferedを確認する。Trueになっていれば、Falseにすれば正しく描画されるようになった。

 

【C#】フォーム右下のリサイズ用アイコンを消す

以下の図のような右下に表示されるアイコンを消したい。

表示を消すだけで良ければ、フォームのデザイナから、SizeGripStyleプロパティを「Hide」に設定する。

そもそも、サイズ変更させる必要がない場合は、FormBorderStyleをFixedSingleやFixed3DなどのFixed系にすればこのアイコンは表示されなくなる。

 

【C#】自動で折り返された分を含む行数を取得する

テキストボックスでWordWrapをTrueにしている場合など、右端に来た場合に自動で折り返された際には、もともとの文字列内に存在していた改行数と実際に見える行数が一致しない。

この場合は、RichTextBoxのGetLineFromCharIndexを利用すると実際に表示された行数を取得できる。

richTextBox1.GetLineFromCharIndex(richTextBox1.TextLength);

※例えば、以下の例では文字列中には改行は存在せず、RichTextBoxの幅にあわせて折り返されて見た目は3行だが、GetLineFromCharIndexは2が返ってくる。

 

【JavaScript】Submit時にパラメータを増やす

以下のように、onClickイベントでパラメータ追加処理を呼び出してあげればOK

<script>

<!-- パラメータを追加する関数 -->
function addParam() {

// 追加で送信するパラメータ
var newValue = document.createElement('input');
// 画面に表示されてしまうので、隠す
newValue.type = "hidden";
// パラメータ名
newValue.name = "paramName";
// パラメータ値
newValue.value = "paramValue";

// フォームの要素に加えることで、submit時に追加したパラメータも送信される
document.forms[0].appendChild(newValue);

}
</script>

<!-- パラメータを追加するフォーム -->
<form action="xxxxx" method="post">

<!-- ボタンクリック時、submit前に呼ばれるonClickイベントを利用する -->
<button onClick="addParam()">送信</button>


</form>

送信されたパラメータをFiddlerで見るとこんな感じ。

 

【Windows】【CrystalDiskInfo】回復不可能セクタ数が増えたらディスクが危険な状態になっているので急いでバックアップすること

2014年から利用していたPCの動きが昨年から遅くなった。この時点で新しいPCを購入したが、古いPCも作成したソフトの動作テストなどのために残しておいた。

久しぶりに立ち上げたところ、動作が極端に遅くなっていた。そのため、ハードディスクの状態を疑い、CrystalDiskInfoで確認したところ、回復不可能セクタ数の生の値が0x248になっていることを確認した。

もうメインで利用していないPCなので必要なデータはなかったが、スキャンディスクを試してみたところ、更に回復不可能セクタ数が増加していった。
改めて必要なデータがないことを確認し、PCを再起動してみたところ、二度と起動しなくなった。

なので、以前に比べて動作が遅くなった場合は、外付けのハードディスクなどにデータをバックアップすることと、回復不可能セクタの生の値が1以上であれば早急に利用を止めることをお勧めしたい。特に、再起動する直前は極端に遅くなり、Windowsエクスプローラーを表示するだけで数分かかるようになったので、問題が発覚した時点では、バックアップも難しくなる可能性が高い。

問題が見つかった場合は、スキャンディスクをかけずに、別のハードディスクにコピーする。コピーが終わるまでは再起動しない方がよさそう。

以下は実際の値。


【Windows Bat】【Tera Term】バッチファイルをダブルクリックするだけで、自動ログインできるようにする

以下の内容をbatファイルに保存すれば、ダブルクリックするだけで、ログインが完了した状態でTera Termが起動する。

start "" "C:\Program Files (x86)\teraterm\ttermpro.exe" 192.168.xxx.xxx /auth=password /user=root /passwd=p@$$w0rd

※IPアドレス、ユーザー名、パスワードは書き換えること。
※ユーザー名とパスワードを平文のまま保存することになるため、社内にある検証用サーバなどへのログイン時に利用することを推奨。

 

【ReactOS】Windows互換OSをVMWareにインストールする

結論

2022/4/27時点(ReactOS v0.4.14)では、実用的に利用可能なレベルではない。
試しにchromeをインストールしている最中にブルースクリーンになり、以降OSが起動しなくなった(ReactOSがWindows Server2003との互換を目指しているようなので、最新のソフトを使おうとしている方が間違いかもしれない)

ポイント

  • 仮想マシン作成時に、バージョンで「Windows XP Professional」を指定する。
    (最初、Windows Server 2019を選択したところ、インストール用のISOイメージをマウントしているにもかかわらず認識されなかった)
  • 言語は日本語にしてもおおむね大丈夫そう。
    ただし、インストール完了後、コマンドプロンプトを開くと文字化けする。
  • 言語以外は、すべてデフォルトのままEnterキーを連打していけばインストールが終わる。
  • ソフトのインストールは、デスクトップにある「アプリケーションマネージャ」からインストールできる。ただし、例えばFireFoxの選択可能なバージョンは48までなど古い。
  • ブラウザは、ファイル名を指定して実行から「iexplore」と指定すると起動する(スタートメニューにショートカットがないのでわかりにくい)
  • 実際に利用している画面はこんな感じ。ソリティアや電卓もある。

今回試した感じでは、付属のアプリは動作するといった感触。
バージョン0.5からベータ版になるようなので、今後の改良に期待しています。

 

【Windows bat】特定のEXEが起動していたら強制終了する

まず、tasklistで該当のEXEが起動しているか確認する。
起動している場合は、taskkillで終了させる(ここではnotepad.exeが起動していたら強制終了させている)。

rem EXEが起動中か確認
tasklist | find "notepad.exe"

if %errorlevel% == 0 (
    rem 起動中の場合は、強制終了させる
    taskkill /im notepad.exe /f
) else (
    rem エラーレベルクリア
    cd > nul
)

尚、該当のEXEが起動していない場合はエラーレベルが1のままになるので、エラーレベルを0で上書きするように、正常終了する適当なコマンド(ここでは「cd > nul」)を実行している。(後続の処理でエラーレベルを見ていなければ記述しなくても大丈夫)