TascherVer.1.64公開
マウスの移動とホイールの回転やMigemoインクリメンタルサーチでウインドウを切り替えるTascher Ver.1.64を公開しました。
○Ver.1.64 – 2021/05/08
・PropVariantToString()を動的リンクするように。(Special Thanks!:kiyohiro様)
・[仮想デスクトップ]-[アクティブな仮想デスクトップのウインドウのみ表示]が有効な場合、強制終了していた不具合を修正。
・プロセスのコマンドライン取得処理でエラーが発生するとメモリリークしていた不具合を修正。
・「選択項目にカーソルを移動」で選択項目が先頭か末尾の場合、移動しない不具合を修正。
・Windows10環境でWin+Tabと同じ順番(最前面属性や最小化状態に関係なく表示順)となるように。
・モーダルダイアログ等が表示中であってもそのオーナーウインドウをリストアップするように。
・ウインドウの切り替え方法を変更。
・WinUIアプリに対応。
・設定ダイアログをタブ表示からツリー表示に変更。
・設定のデザインでフォントを変更すると、設定をキャンセルしても反映されてしまう不具合を修正。
・インクリメンタルサーチ文字列の表示をツールチップから子ウインドウに変更、文字色、背景色を設定できるように。
・インクリメンタルサーチの表示文字列を設定できるように。
・設定のうち、全般にあったインクリメンタルサーチ設定を分離。
・[デザイン]で背景色の終了色を設定できるようにし、グラデーション表示ができるように。
・隠し設定[ListView]DialogFrameをWS_EX_WINDOWEDGE|WS_THICKFRAMEの付加ではなく、リージョンの描画に変更。
・隠し設定[ListView]DialogFrameColorを追加。
・[デザイン]に「DirectWrite設定」を追加。ウインドウリストをDirectWriteで描画できるように。カラー絵文字にも対応。
・設定「ウェブタブブラウザ」を追加。ウェブブラウザタブの列挙ができるように。
・[全般]-[表示項目]に「ウインドウ」「ウェブタブブラウザ」を追加。
・ショートカット/マウスのコマンドに「itemtypeメニュー」「windowitem」「webbrowsertabitem」を追加。
・[コマンド]-[引数]にプロセスID「%P」URL「%U」、タブID「%I」を追加。
・[情報を表示](info)でプロセスIDを表示するように。
・[コマンド]-[引数]で連続する置換文字が2回目以降置換されない不具合を修正。
・隠し設定[ListView]UWPAppNoBackgroundColorを追加。
・[全般]-[動作]-[サムネイルを表示]を削除、[高度な設定]からサムネイル関連の設定を[全般]へ移動。
・隠し設定[MouseClipCursorMode][MouseClipCursorTime][HotKeyClipCursorMode][HotKeyClipCursorTime]を[高度な設定]に移動。
・隠し設定[LeftCornerDistance][RightCornerDistance][TopCornerDistance][BottomCornerDistance]を[表示]に移動。
・対象ウインドウがWS_DISABLEDであっても操作できるように。
・他プロセスのコンテキストメニューやシステムメニュー表示中の場合、ウインドウの切り替えができない場合がある不具合を修正。
・Tascherのメニュー表示中に選択項目を変更した場合、メニューを非表示にするように。
・[マウス]で設定できる組み合わせにチルトホイール(マウスホイール左/右)を追加。
・[表示]-[マウスの移動][ホットキー]に[フルスクリーン時は無効]を追加。
・コンパイラをMicrosoft Visual Studio Community 2019 Previewに変更。プラットフォームツールセットも32bit版はv141_xp、64bit版はv142に変更。
・列挙するウインドウ数が多くスクロールが発生する場合、サムネイル表示位置がスクロールによって変動してしまう不具合を修正。
・[全般]-[表示項目]に「アイコンの余白」を追加。
・ウインドウリスト表示のデザインから下線と打ち消し線を削除。
・[全般]-[表示項目]に「大きなアイコン(48×48)」表示を追加。
・管理者権限のプロセス名を表示できるように。
・一部ストアアプリのアイコンが取得できない不具合を修正。
・UWPアプリではない場合にアイコンの取得をウインドウからではなく実行ファイルから行うことで一部ウインドウのアイコンが表示されない不具合を修正。
・隠し設定[ListView]IconFromWindowを追加。従来通りウインドウから取得します。
・[マウス]に「カーソル位置にメニューを表示」を追加。
・列挙するウインドウ数が多く表示数を制限している場合において、インクリメンタルサーチの結果がモニタサイズ以下だったとき、制限せずそのまま表示されてしまう不具合を修正。
・XP環境でcopynameやinfoで取得できるプロセスファイル名をデバイス名ではなくドライブ名で表示するように。
・アイコン取得に時間を要した場合、強制終了していた不具合を修正。
・高DPI環境に一部対応(Per Monitor V2)。ただしマルチモニタ環境や、そもそも高DPIのディスプレイではテストできていません。
・設定ダイアログのフォント設定やテキストサイズを環境に合わせて変更するように。
・コマンド「reset」でアイテムが1つであっても確定しないように。
・[コマンドメニュー]を[メインメニュー]に名称変更。
今回も見た目はあまり変わっていませんが、色々と機能が増えていたりします。
ウインドウの列挙方法を変更
Windows10環境において、Ver.1.63まではウインドウが最小化されていても最前面表示であれば先頭に列挙されてしまう仕様でしたが、
1.IApplicationViewCollectionで列挙
2.IApplicationViewのGetLastActivationTimestamp()で表示タイムスタンプを取得しソート
で解決しました。
なお、これらのインターフェースは公式ドキュメントがないため、ジェット氏のTipsを参考にさせていただきました。
また、ビルドによってIIDが異なるためレジストリから取得するようにしています。
ウェブブラウザタブの列挙に対応
↑の方法で列挙することで、Microsoft Edgeのタブも列挙できるようになりましたが、切り替え方法が分からず…。
(プロセスがexplorer.exe、クラスがWindows.Internal.Shell.TabProxyWindow)
そこで、Chrome DevTools Protocol(CDP)を使用する方法でタブの取得や切り替えに対応してみました。
☆CDPでタブを切り替えてみるテスト
1.ブラウザをremote-debugging-port付きで起動し、タブの一覧を取得。
msedge.exe –remote-debugging-port=9222
curl http://127.0.0.1:9222/json/list
2.タブ等の情報が出力されます。
{
“description”: “”,
“devtoolsFrontendUrl”: “/devtools/inspector.html?ws=127.0.0.1:9222/devtools/page/9E15D440688EB1F99042F1C35B7D7533”,
“faviconUrl”: “https://~”,
“id”: “9E15D440688EB1F99042F1C35B7D7533”,
“title”: “~”,
“type”: “page”,
“url”: “https://~”,
“webSocketDebuggerUrl”: “ws://127.0.0.1:9222/devtools/page/9E15D440688EB1F99042F1C35B7D7533”
},
3.一覧の中のidを使用し、アクティブ化
curl http://127.0.0.1:9222/json/activate/9E15D440688EB1F99042F1C35B7D7533
で切り替えることができます。
※切り替えの前にAllowSetForegroundWindow()しておかないと点滅するだけで切り替えができないので注意です。
現在のところ、Google ChromeとMicrosoft Edgeで動作確認をしています。
我らがMozilla FirefoxはCDPではなくRemote Debugging Protocol (RDP)として実装しているようですが、activateできませんでした。
DirectWrite対応
環境にもよりますが、スクロール描画がスムーズになります。
なお、LVS_OWNERDATA|LVS_OWNERDRAWFIXEDなリストビューでお作法に従いWM_DRAWITEMで描画しようとすると、BeginDraw()/EndDraw()が遅いため、WM_PAINTで描画する必要がありました。
インクリメンタルサーチ文字列の表示をウインドウ化
インクリメンタルサーチ文字列の表示をツールチップから子ウインドウに変更しました。
文字色、背景色、フォントが指定できるようになりました。
加えて表示文字列の設定もできるようになりました。
高DPI環境に一部対応
Per Monitor V2に対応したつもりです。
ただしマルチモニタ環境や、そもそも高DPIのディスプレイではテストできていません…