Microsift純正Windows Exploer 代替え品お試し【継続調査中】

win10になっても、win11になっても不調がなくならない Microsoft純正Windows Exploer。起動直後、検索中かなにかで数分ダンマリが目立つようになってきました。Windowsを再起動すると解消しますが、急ぎのときはそれもできません。 代替え品を探します。この手の記事はたくさんあるのですが、肝心な問題点が記載されていない(タダの検索件数稼ぎ?)ので、レポートいたします。弊方では、Win32API/MFC/.NETも大体使え、開発環境もあるので純粋Winアプリでオープンソースがよいです。

ばっと目についたのがコレ、64bit版あり、フリーですがオープンソースではないようです。ダウンロードはこちら

普通にダウンロードできます。

インストーラは無く、exe直実行です。

以下画面サンプルです。メニュー等は英語ですが複雑なアプリではないのであまり問題ないのでしょう。

問題点は、

  • 操作音が消せない。これは致命傷レベルです。Windowサウンド設定は「無」にしていても消せない。オプション設定もみられず。

以上、実用できません。

シンプルで軽そうなので目に留まりました。古くから存在するようです。ダウンロードはこちら。

こちらはWindows Installerタイプ。スキンから見ますと古い2010の頃の Install shiled で作られているようです。

確かに軽い、タブも2つで必要最小。以下画面です。

問題点は、

  • 列の表示項目が固定となっている。「ファイルの種類」は要らんです。
  • ネットワークドライブを参照すると、左ツリーのカレント位置が、約一秒置きにルートディレクトリに戻る。これも致命傷です。おそらく周期的に接続状態をチェックしている影響かと思います。

以上、実用できません。

最新で高機能っぽいので目に留まりました。こちにはMS Storeアプリで、無償(お試し?)版と有償版があります。ダウンロードはこちら

やはり少し重い。以下画面サンプルです。同様に行間詰めるモードあり。Win11 Exploer に準拠している感じですね。

少し触ってみると、邪魔なピン止めを非表示にできたり、Win11でファイルドラッグ中に別タブ上を通過するとタブが切替わってしまう問題(MSの怠慢かと、かなりイラっときます)が解消されていたり。MS版のネガが抑えられているようです。

上書きの問い合わせが面倒です。強制上書きオプションまでは無いようです。

拡張子警告しないオプションは画期的です。

問題点は、

  • クリック時の反応が、純正Expolerにくらべワンテンポ遅い。ソフトウェア芸が多すぎでは?
  • 左ツリーのツリー表示がない。これも致命傷です。弊方は、左ツリーをキーボート操作で開いていくのが常なので、無いと仕事になりません。有償版ではあるのでしょうか?
  • 起動時にダンマリすることあり。

以上、実用できません。


以上、継続調査中です。

.NET DataGridViewで行末尾追加を実現するには?

.NET DataGridViewで行末尾に、行追加できないようです。以下の行追加試しました。

AIによると DataSource を追加しないといけないと言われます。ちょっと面倒すぎです。別の手を考えました。

追加用のダミー末尾を追加して、見せないようにします。コード例は CLI です。

private: System::Windows::Forms::DataGridView^  dgrdSend;

  ・・・中略・・・
 
private: System::Void Form1_Load(  System::Object^  sender,  System::EventArgs^  e) 
{
  ・・・中略・・・
	dgrdSend->RowCount = 2;
	dgrdSend->Rows[0]->Cells[1]->Value = "1000";	// デフォルト送信データ行
	dgrdSend->Rows[0]->Cells[2]->Value = "0";
	dgrdSend->Rows[1]->Height = 0;				// 送信データ行追加用ダミー(Addで末尾追加未サポのため)
	dgrdSend->Rows[1]->ReadOnly = true;
	// dgrdSend->Rows[1]->Visible = false;   -> エラーになる
	// dgrdSend->Rows[1]->Resizable = false; -> エラーになる
	dgrdSend->AllowUserToResizeRows = false;	// 全体に行リサイズ変更はOK
  ・・・中略・・・
}

		int		selectedRowSndData;			// 選択中の送信データ行

/* ****************************************************************************
 * 機能名 : 送信データ追加
 * ***************************************************************************/
private: System::Void menuAddSendItem_Click(
	System::Object^ sender, 
	System::EventArgs^ e 
) {
	selectedRowSndData ++;
	dgrdSend->Rows->Insert( selectedRowSndData, 1 );
}

/* ****************************************************************************
 * 機能名 : 送信データ挿入
 * ***************************************************************************/
private: System::Void menuInsertSendItem_Click(
	System::Object^ sender, 
	System::EventArgs^ e 
) {
	dgrdSend->Rows->Insert( selectedRowSndData, 1 );
}

実行結果です。

VB6/VBA 留意点まとめ【随時更新中】

極まれに使用するVB6/VBAにて他言語と異なる点の留意事項覚え書きです。

IDE上でUI配列が使用できる。.NETではなくなっている。

UI配列にuboundは使えない。ubound(text()) はNG、TextLever.UBound がただしい。

UI配列はアクセスしなければ欠番があってもよい。

他言語と比べ、配列は宣言数+1つ確保される。

フォームエディタで編集すると時間がかかる場合は、フォーム部はコード手打ちしても良い。

MSComm は、内部バッファに一定byte蓄積しないと受信イベントが発生しない模様。

TextBoxで入力禁止にするには、KeyDown と KeyPress でキーコード値引数を 0 に上書きする。

アプリの終了は “End” である。

Buildスイッチは、#Const XXXX、 #if XXXX then ~ #end if である。

unsignedは使えない。(これはjavaも同じ)

ラベルはデフォルト不透明だが、透明を指定するこができる。UIが重なるが文字はみだし策で大きくしておきたいとき重宝する。

Longは 2,147,483,647 どまりだが、CDec関数( 10 進型 (Decimal) )を使えば128bitまで表現できる。しかし変数としての型はなく工夫して使う必要がある。

配列引数を渡すときは、変数() である。

Win10以降では、管理者で実行した方がよい。多分レジストリ書込みを行っている。

長いイベント内でbrakeするとき、イベント先頭で一次brekeしないと、brakeしない場合あり。

挙動がおかしいときは、IDEを再起動する必要性が高い。

コードエディタのUNDOは一回しか効かない。複数戻したいとはき、プロジェクト解放 を行う。

フォームエディタのUNDO無い。戻したいとはき、プロジェクト解放 を行う。

フォームエディタで複数UIを選択する場合は、選択矩形領域に部分的かかっているUIも選択される。

外部エディタでコード修正したときは、Project 解放し、再読み込みすること。

タブ表示は無いので IDETab アドインを使う。

全検索はないので、greovb アドインを使う。

マウスホイールスクロールは無いので VB6IDEAddAutoScroll アドインを使う。

コード行番号を表示はないので、VB6IDEAddLineNumbers アドインを使う。

前回開いていたウインドウをリセットしたい場合は、.vbw を削除する。

Visual Basic 6 sp6 がインストール失敗するとき’25

2000年前後一世を風靡した Visual Basic 、まだMSDNでは配布され、ランタイムの実行もwin11サポートされています。 初期のwin11に Visual Basic 6 sp6 はインストール済みですが、新規に別win11にインストールが必要になりインストールしてみました。そのメモです。

MSDNよりエンタープライズ版をDLしインストール。終了時にエラー( ダンマリ状態だったかも )が出ましたが、IDE自体は起動でき Build もOK。win10でもこんなにすんなりいかなかった記憶があります。これでよかったのでしょうか?

VB6の最終Services pack である SP6 をインストールします。インストーラは現在通常公開されていないようです。保存していた公開当時のものをインストールしますが失敗します。管理者権限、XP-SP3互換モードでもダメ。

users\AppData/Loca/temp にも Windows\Temp にも インベントビューア にもどこにもログが残らずヒント無し。

SP6 は MSDN にはまだ公開されており、そちらでインストールを試みます。こちらは細かくバージョンが分かれているみたいです。しかし解消せず。

いろいろ見ていくと、VB6本体の実行ファイル類はインストールされていますが、本体インストール時に最後にエラーが発生したため、Windowsの管理上は未インストールになっているようですね。困った状態です。

一時アンインストール

VB6インストール済みPCから以下レジストリエントリと file をコピーすると、インストール扱いにすることができました。

  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Visual Basic 6.0 Enterprise Edition (jpn)
  • C:\Program Files (x86)\Microsoft Visual Studio\VB98\Setup\1041\setup.stf

しかしこの状態で SP6 を試しにインストールしましたが同じ結果でした。仕方なくアンインストールします。

他WEB記事を拝見かすると以下のオプションでインストールするようです。

SP6のインストール3

これで SP6 が正しく入りました。一見インストールできたように見えるのはトラップですね。

SP6 以降のリリースされた Windows Update を手動実行します。まだダウンロードセンターにおいてあるようです。

  • VB60SP6-KB3096896-x86-JPN.msi ※2024版がでているようです。こちらはローカルドライブから実行のみ可でした。

上記は、VB60SP6-KB2708437-x86-JPN.msi の内容も含まれているようです。

  • VisualBasic6-KB896559-v1-JPN.exe もあるようです。mscomctl.ocx comctl32.ocx  が更新されると記載されていますが、Visual Studio下の.ocxのpropertyを見る限りは変わってないように見えます。検索するとofficeに入っているのが最新みたいです。しかし SysinternalsSuitevmapユーティリティ を見る限りIDEにロードされる .ocx は旧い方ですね。

以上でセットアップが完了しました。

なおIDE初回起動時は、管理者権限で一度起動したほうがいいようです。

VB6からExeclを呼出すとき、CLSIDは各バージョンで同じか?

VB6アプリを再ビルドしたいと相談があり調べました。ExeclをVB6から操作するとき、COMコンポーネント( Windows上で世界でユニークなオブジェクトを示すID:CLSIDとそのインターフェイスをレジストリに登録することで呼出すソフトウェアコンポーネント) として Execl.exe を登録して呼出すようです。※イマドキではもっと簡単に Python でも可能なようです。

Dim execlApp   As Excel.Application 
Dim execlBook As Excel.Workbook 
Dim execlSheet As Excel.Worksheet

Set execlApp = CreateObject("Excel.Application")


これをBuildする場合、Execlの本体が必要なようです。Execlはバージョン毎に収録先が異なります。Execl2024の場合、設定は以下のようになります。

紐づけられるCOMコンポーネントはバージョンが明示されています。.VBP をみると、

CLSID00020430-0000-0000-C000-000000000046 のようです。内部バージョンは 2.0

アプリが複数のWindows PCで実行されると、そのPC毎に Execl の格納先とバージョンは異なるハズです。通常この設定を行うと、アプリ実行時、このパス固定参照されるか、レジストリ上に登録されている同じコンポーネントが呼び出されます。EXECLバージョン毎にCLSIDは同じなのでしょうか? .VBP で管理されるライブラリバージョンが一致しなくても動作するのでしょうか?


オリジナルの参照設定と .VBP をみると、Execl 2007 (内部version12)でした。CLSIDは同じですが、内部バージョンは1.6 でした。


試しに Execl 2003(内部version11) を設定してみた結果です。CLSIDは同じ、内部バージョンは1.5


以下動作結果です。

PCBuild時のExecl設定呼出されたExecl
Win11 Execl2003 & 2024同居20032024
Win11 Execl2003 & 2024同居20072024
Win11 Execl2003 & 2024同居20242024
Win11 Execl2003のみ20032003
Win11 Execl2003のみ20072003
Win11 Execl2003のみ20242003

動作原理をまとめると、

  • CLSIDの一致はみるが、バージョンは照合しない。
  • 上位互換性はあり。
  • 複数Execlがインストールされている場合は、新しいExeclの方が呼び出される。
  • VB6 IDE用のExeclバージョンは問われない。

ただし、新しいExeclで追加されたオブジェクト、methodは使えないのでしょうから、開発時のExeclに近いバージョンを使った方が無難と思います。( methodインターフェイスがかわるとmethodのCLSIDが変わるが、VBAオブジェクトヘルプにもmethod毎に対応バージョンまでは明記されておらず、それらを全部調べるのは現実的ではないため )

しかしながら、.NETアプリでありながら、COMコンポーネントあわせもつEXEを作れるんですね。