技術メモ

【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」)を実行している。(後続の処理でエラーレベルを見ていなければ記述しなくても大丈夫)

 

【C#】コントロールの位置を計算して画面中央に表示させる

以下のように、LeftとTopを変更すればOK

//横軸の中央に移動させる
control.Left = (this.ClientSize.Width - control.Width) / 2;

//縦軸の中央に移動させる
control.Top = (this.ClientSize.Height - control.Height) / 2;

※this.Widthやthis.Heightを使うと計算しても中央にならないので、this.ClientSize.Widthとthis.ClientSize.Heightを利用すること

 

【マウスコンピューター】起動時にEFI PXE 0 for IPv4 boot failedエラーが発生する

パソコン起動時に以下のエラーメッセージが表示される(mouse K5 2021年5月購入)
EFI PXE 0 for IPv4(80-FA-XX-XX-XX-XX) boot failed.

OKをクリックすればWindowsが普通に起動するが、毎回止まってしまうのは面倒なので修正を行った。

<修正手順>

  1. パソコンの電源を入れた直後にF2キーを連打する
  2. UEFI(BIOS)画面が表示されるので、「Setup Utility」をクリック
  3. 表示された画面左下の「Boot」をクリック
  4. 「EFI PXE~」が先頭に表示されているので、F5キー、F6キーを利用して「Windows Boot Manager」が先頭に表示されるようにする
  5. 「EFI PXE~」の行は利用しないので、「Enabled」と表示されている部分をドラッグし、「Disabled」に変更する
    設定変更した結果はこんな感じ↓
  6. F10キーを押すと保存される。自動で再起動される。

解決!

ちなみに、この現象(勝手に起動順序が変わってしまう)はこれで2回目。
原因は何だろう…