8 5月

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つであっても確定しないように。
・[コマンドメニュー]を[メインメニュー]に名称変更。

今回も見た目はあまり変わっていませんが、色々と機能が増えていたりします。

Tascher Ver.1.64

ウインドウの列挙方法を変更

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のディスプレイではテストできていません…

22 8月

TascherVer.1.63公開

マウスの移動とホイールの回転やMigemoインクリメンタルサーチでウインドウを切り替えるTascher Ver.1.63を公開しました。

○Ver.1.63 – 2020/08/22
・インクリメンタルサーチで絞り込むとサムネイルが選択中のウインドウにならない不具合を修正。
・Migemo検索を開始するまでの時間の初期値を30に変更。
・ウインドウを透過させる「opacity0」~「opacity100」「opacitytoggle」を追加。
・最背面表示する「background」を追加。
・マルチモニター環境で、カーソルのあるモニターにTascherのウインドウを表示できるように。(Special Thanks!:razgriz13様)
・マルチモニター環境で、画面端の判断をプライマリモニターだけでなく、モニター全体で判断できるように。(Special Thanks!:razgriz13様)
・表示用ホットキーでWindowsキーが使えるように。(Special Thanks!:涼様)
・設定から「タスクバー相当の表示」を削除。
・設定から「取得したアイコンをキャッシュ」を削除。
・設定から「ウインドウにフレームを表示」を削除。(Tascher.cfgの直接編集では対応可能)
・設定から「候補のウインドウが1つなら確定」遅延時間」を削除。(Tascher.cfgの直接編集では対応可能)
・設定から「Migemo検索を開始するまでの遅延時間」を削除。(Tascher.cfgの直接編集では対応可能)
・[表示方法]-[マウスの移動][ホットキー]設定に「選択項目にカーソルを移動」を追加。
・[表示方法]-[共通]-[「選択項目にカーソルを移動」が有効なら表示時に移動]を追加。
・設定ダイアログを閉じた時、最小化している最前面属性を持つウインドウがアクティブになる不具合を修正。
・ウインドウを切り替えた時に最前面属性が解除されてしまう不具合を修正。
・D&Dの判定方法を変更。
・[マウス]で設定できる組み合わせに中央クリックやX1/X2クリック等を追加。(Special Thanks!:Jun様)
・[コマンド]を追加。追加したコマンドはメニュー、[ショートカットキー]、[マウス]で選択できるようになります。(Special Thanks!:Jun様)
・[高度な設定]-[サムネイル]に「表示位置」を追加。
・[表示方法]-[マウスの移動]に「表示までの時間」を追加。
・UWPアプリで最小化されている場合のウインドウの特定方法を変更。
・「MMHook.dll」を廃止。RawInputで処理するように。
・ウインドウの切り替え方法を変更。
・「マウスホバーで選択」が「マウスアウトで確定」が有効でないと機能しない不具合を修正。
・隠し設定にカーソルを非表示までの時間を追加。
・サムネイルサイズをオリジナルで表示できる設定を追加。(thumbnailoriginal)
・[表示方法]-[マウスの移動][ホットキー]設定に「カーソルを移動しない」「カーソルを○○へ移動」を追加。
・隠し設定にダブルクリック判定時間及びクリック+ホイール判定時間を追加。
・表示・非表示を繰り返すと重複してアイテムを追加してしまう不具合を修正。
・隠し設定にマウスの移動表示及びホットキー表示時のカーソル位置マージンを追加。
・[全般]-[管理者権限で起動]を追加。
・ドラッグ中にホットキー表示でウインドウ外だとタイムアウト確定してしまう不具合を修正。
・ドラッグ中だとマウスホイール操作ができない不具合を修正。
・migemo.dllの辞書ファイルをmigemo.dllがあるディレクトリから取得するように。
・Windows8以降の環境で「自動起動する」設定でも起動しない不具合を修正。
・切り替えてカーソルをウインドウ中央へ移動する「centercursor」を追加。
・隠し設定にウインドウリスト非表示の際はMigemoを解放するオプションを追加。
・「デスクトップ」を表示する方法を変更。
・[情報を表示](info)でプロセスが管理者特権かどうか表示するように。
・隠し設定にマウスカーソルの移動範囲を一定時間制限するオプションを追加。
・AND検索を行う「and」を削除。インクリメンタルサーチ中であれば設定しなくともスペースでAND検索するように。
・ウインドウリスト上ではIMEを無効にするように。
・インストーラの配布を中止。
・二重起動であれば元のTascherのウインドウリストを表示するように。
・「2番目にアクティブなウインドウを選択」で2番目にアクティブなウインドウがなければ先頭のウインドウを選択するように。
・[高度な設定]-[マルチモニタ]-[表示位置][アクティブモニタのウインドウのみ表示]を追加。
・アクティブモニタにウインドウを移動する「movetoactivemonitor」を追加。
・指定モニタにウインドウを移動する「movetomonitor」を追加。
・プライマリモニタ以外ではウインドウリストの高さの調整ができていなかった不具合を修正。
・[表示方法]-[マウスの移動]-[モニタごとに画面端を判定]を追加。
・画面中央にウインドウを移動し表示する「center」を追加。
・[仮想デスクトップ]-[アクティブな仮想デスクトップのウインドウのみ表示]を追加。
・「情報を表示」の処理方法を変更、コマンドラインが一度目は表示されない不具合を修正。
・隠し設定に画面端と判断する端からの距離を指定するオプションを追加。
・表示後すぐの左クリックが効かない場合がある不具合を修正。
・ウインドウタイトルの取得タイミングを変更、アイコン・ウインドウの取得を別スレッド化。
・ウインドウ切り替え方法の変更。別スレッド化。

見た目はあまり変わっていませんが、色々と機能が増えていたりします。

好きなコマンドを実行できるようになっていたり、

マルチモニタにちょっとだけ対応したり、

サムネイル表示位置をちょっとだけ変えることができたり、

あと選択項目にカーソル移動できたりとかできるようになりました。
「MMHook.dll」も不要になりました。
ちょっとだけマルチスレッドにもなりました。
Windows10の仮想デスクトップ対応にもチャレンジしました。(完全ではないかもです)

ダウンロードはこのへんから。

27 3月

Tascher Ver.1.62公開

マウスの移動とホイールの回転やMigemoインクリメンタルサーチでウインドウを切り替えるTascher Ver.1.62を公開しました。

○Ver.1.62 – 2017/03/27
・タスクバーへのアイコン登録に失敗すると操作ができなくなる不具合を修正。
・Migemo検索において特殊記号「[」「]」「~」でもマッチできるように。
・ウインドウリストのフレームを非表示にできない不具合を修正。
・Ver.1.61までの隠し設定を設定ダイアログの「高度な設定」タブから編集できるように。
・[表示方法]-[マウスの移動]に「上」「左」「右」「下」「マウスホイール回転時のみ」を追加。
・「restore」をShowWindow(SW_RESTORE)ではなくPostMessage(WM_SYSCOMMAND,SC_RESTORE)で行うように
・中断しているUWPアプリを列挙しないように。
・UWPアプリのアイコン表示やファイル名取得に対応。(Windows 10に対応)
・ウインドウのサムネイル表示ができるように。
・ウインドウリスト非表示時に関係のないウインドウに切り替わってしまう不具合を今度こそ修正。

ストアアプリ(UWPアプリ)の列挙やアイコン取得に対応しました。
以下、Note.txtの内容掲載。
《UWPアプリ対応メモいろいろ》

  • 中断かつタスクバーに表示されていないUWPアプリ(「設定」、「ストア」、「フォト」等々)を弾くため、
    1. WS_EX_NOREDIRECTIONBITMAPの有無でUWPアプリか確認。
    2. DwmGetWindowAttribute(DWMWA_CLOAKED)でFALSEを返すウインドウのみを列挙。
  • ↑で列挙されるウインドウはクラス名「ApplicationFrameWindow」、プロセス名は「ApplicationFrameHost.exe」とUWPアプリ共通なので、
    FindWindowEx(hWnd,NULL,”Windows.UI.Core.CoreWindow”,NULL)
    で取得したウインドウハンドルを利用し個別のプロセスを操作。
  • UWPアプリが最小化されている場合、「Windows.UI.Core.CoreWindow」は「ApplicationFrameWindow」以下ではなくトップレベルに存在するため、
    1. トップレベルの「Windows.UI.Core.CoreWindow」を列挙。
    2. ↑のウインドウタイトルを含む「ApplicationFrameWindow」を親とする。

    という処理に。
    ただ、これだと一部UWPアプリに対応出来ないと思われます。
    Ver.1.63で改善

  • UWPアプリのアイコンはSendMessage(WM_GETICON)やGetClassLongPtr(GCLP_HICON)で取得することができません。
    アイコン(HICON)取得方法は以下の通り。
    1. ↑で取得した「Windows.UI.Core.CoreWindow」のウインドウハンドルからGetWindowThreadProcessId()でプロセスIDを取得。
    2. OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION)で開く。
    3. GetPackageFullName()でパッケージ名取得。
    4. GetPackagePathByFullName()でUWPアプリのディレクトリを取得。
    5. PackageIdFromFullName()でパッケージIDを取得。
    6. UWPアプリのディレクトリにある「AppxManifest.xml」をMSXMLで開く。
    7. Square44x44Logoからロゴのパスを取得。(Windows 8.1ならSquare30x30Logo、Windows 8ならSmallLogoらしい。未確認。)
      (Microsoft Edgeなら”Assets\MicrosoftEdgeSquare44x44.png”が取得出来ました。)
    8. BackgroundColorから背景色を取得。
    9. “@{パッケージ名?ms-resource://パッケージID/Files/ロゴのパス}”をSHLoadIndirectString()に投げ、ロゴ用PNGファイルをパスを取得。
      Ver.1.64から「”@{パッケージ名?ms-resource:///Files/ロゴのパス}”」で取得するように。
    10. Gdiplus::Bitmap()でロゴを開く。
    11. 表示用アイコンのサイズでGdiplus::Bitmapを作成し、Gdiplus::Graphics()で開き、FillRectangle(BackgroundColor)で塗りつぶす。
    12. 読み込んだロゴをDrawImage()で描画し、GetHICON()でHICONを取得。
  • 上記は全てWindows 10で確認しました。Windows 8/8.1で動作するかは不明です。

サムネイルの表示機能なんかも実装してみました。
Windows10導入と同時にXPが故障したため、XPでは動作を確認していません。

21 4月

Tascher Ver.1.61公開

マウスの移動とホイールの回転やMigemoインクリメンタルサーチでウインドウを切り替えるTascher Ver.1.61を公開しました。

○Ver.1.61 – 2016/04/21
・アイコンの取得をリスト表示時のみに限定する設定[ListView]CacheIconを追加。
・ドラッグ時のみマウスホバーを有効にする設定[ListView]DragMouseHoverを追加。
・ドラッグ時のみタイムアウトを有効にする設定[ListView]DragTimeOutを追加。
・コマンドメニューで設定が有効ならばチェックを付けるように。
・ウインドウリスト非表示時に関係のないウインドウに切り替わってしまう不具合を修正。
・不透明度が255でない場合に限り、WS_EX_LAYEREDを付加するように。
・ウインドウ切り替え時に落ちる場合がある不具合を修正。
・アイテム数が多い場合にウインドウリスト下部に余白が発生していた不具合を修正。
・デフォルトでウインドウリストにフレームを表示するように。
・ウインドウリストから除外するファイル名を指定する設定[Exclude]FileNameを追加。
・インクリメンタルサーチの結果、選択していたウインドウが絞り込み対象外となる場合、先頭ではなく順序が近いウインドウを選択するように。
・Migemo「デフォルトで有効」を「小文字入力で有効」に名称変更。
・Migemo「常に有効」を追加。

細かい不具合修正がメインです。
相変わらずウインドウ切り替え処理は安定しません^q^
自己解凍ファイルをインストーラに変更しました。
アップデートが少し楽に…?

Tascher161ss

29 3月

Tascher Ver.1.60公開

マウスの移動とホイールの回転やMigemoインクリメンタルサーチでウインドウを切り替えるTascher Ver.1.60を公開しました。

○Ver.1.60 – 2016/03/29
・インクリメンタルサーチ中、選択しているウインドウがリストにある限り選択し続けるように。
・「候補のウインドウが1つなら確定」で切り替えるまでの時間を指定できるように。(Special Thanks!:hokorobi様)
・「close」「restore」等で処理後もTascherがフォーカスを保持したままになる不具合を修正。
・メニュー表示中にホットキーを押下するとメニューが残ったままになる不具合を修正。
・リスト外アイテムのウインドウタイトルがインクリメンタルサーチの検索対象とならないことがある不具合を修正。
・Migemo検索の対象をリスト内のウインドウに限定するように。
・最小化されているウインドウに切り替える場合にまず元の大きさに戻すように。
・インクリメンタルサーチ「あいまい検索」機能、コマンド「flexmatch」(あいまい検索)を追加。
・設定項目[IncrementalSearch]ForwardMatchをMatchModeに変更。
・コマンド「uniquewindow」(候補が1つなら切り替えする/しない)を追加。
・透過PNGや透過GIFを背景画像として使用できるように。
・「背景画像」の「明るさ」を「不透明度」に変更。
・設定項目[Background]Colorを廃止。
・「背景画像」のオフセットを相対値ではなく座標値で指定するように。
・アイテム数が多い場合に、背景画像が一瞬スクロールされてしまう不具合を修正。

Tascher160ss

背景画像はまがりひろあき先生に描いていただいた、せせりちゃんです。

  

続きを読む

広告