HOME  >  2014/10

リボン UI の要素を検索する その 2

Migemize Windows に機能追加中
前回挙がっていた問題をいくつか解決

展開できるボタン(ポップアップを持つボタン)がある場合、中の要素を取得できない

段階を踏んで、取得できるようにしました。
以下は、ブラシの要素を取得する例です。
mw_menu103.jpg
展開できるボタンの場合、「>」が名称に付加されます。
mw202.jpg
これを選択して、TAB キーを押下すると中の要素が表示されます。
このリストから選択、実行もできます。 mw203.jpg

検索が遅い

遅延ロードで対応することにしました。
ウィンドウを早めに表示し、ユーザのキー入力を先行して受け付けるようにしています。
そうすれば、ユーザがキー入力している間に要素の取得処理が終わってくれる……かも。
少なくともユーザが何もせずに待つ時間が減るので、ストレスは軽減されるはず。
下は「ヘルプ」まで取得した状態でウィンドウが表示されています。
mw200.jpg
全要素を取得し終えたら、リストの内容が更新されます。
下の例だと、「ホーム」リボンに含まれる要素の取得が終わり、「ヘルプ」の下に追加されています。
mw201.jpg

その他の変更点

実行できない要素は文字色を変えています。(上の例だと、文字色がシアンの要素)

次やることメモ

ツールバーの要素も取得できるようにする

一旦、実装したが、アプリケーションによっては全ての要素の名称を取得できない。
理由がよく分からない。
振舞いを見るかぎり、最後に実行した要素の名称だけは取得できている。
MSAA、 UI Automation、Win32 API、どれ使っても結果が同じだったので、どうしよう……。

メニューの取得方法を改善する

中途半端に取得できたり、全く取得できなかったり、これも謎が多い……が、
Win32 API でしか試してないので、まだ希望はあるかも。
ただ、MSAA、 UI Automation どちらを使うにしても、遅延ロードは必須になりそう。
スポンサーサイト



2014/10/28 | カテゴリ:ソフトウェア開発 | トラックバック(1) | コメント(0)

リボン UI の要素を検索する(Migemize Windows に機能追加中)

リボン UI の要素をそれとなく取得できました。
mw_menu101.jpg

ホームタブ以外の要素も取得できています。(表示タブの要素「表示|ズーム|拡大」など)
mw_menu102.jpg

現状の問題をつらつらと

1. 表示の仕方がイマイチ

上のスクリーンショットにも表示されてますが、
「図形 | 図形 | 図形 | 四角形」のように「図形」が重なりすぎ!!
あまり操作を阻害しない内容なので、いったん放置

2. 検索が遅い

Windows Automation API だと、現在見えているタブの要素だけしか取得できないので、
全要素を取得するには、いちいちタブを切り替えながら要素を取得する必要がある。
自動でタブが切り替わる機能を追加したけれど、やっぱり遅い。

タブの切り替え時にそれなりの計算コストがかかるみたい(要検証)

検索対象にしているアプリケーションの描画を抑制すれば、多少マシになるのかなと思うけれど。
でも、それは正直あまりやりたくない
(よそのアプリケーションにそういう風にちょっかいかけるのはちょっと……)

3. 展開できるボタン(ポップアップを持つボタン)がある場合、中の要素が取得できない

2 つ目の問題と似ているけれど、展開できるボタンが配置されていた場合、
いちいち展開しないと中の要素を取得できない。
下のブラシの例だと、中の 9 個の要素を取得できない。
mw_menu103.jpg
展開できるボタンがあった場合は、Migemize Windows で展開できるボタンを選択した後、
TAB キーを押すと展開して中の要素を検索するとか、 そういう機能を追加した方がいいのかも。
最初から全検索しようして、片っ端から展開しまくると、さらに遅くなってしまうし。

初回の検索時のみ全展開検索して、検索結果をキャッシュしておくっていう手もあるけれど、
動的に要素が変更された場合とかが困るんだよね……
でも、キャッシュ使う案は悪くないと思うので、
ユーザの要求をトリガーにして再検索とかすればいいかも。

2014/10/19 | カテゴリ:ソフトウェア開発 | トラックバック(0) | コメント(0)

Migemize Windows に機能追加中

メニュー項目の一覧を作成し helm/anything のように絞り込み/実行できる機能を追加中
メニュー項目が多すぎて、どこにあったか忘れた場合とかに便利……なはず。
詳しくは画像で。

ホットキーで起動して、メニュー項目の一覧が表示(今回の例はメモ帳)
mw_menu006.jpg

絞り込み、Migemo 検索も可能
(ここで絞り込まれたリストから、矢印キーで選択して実行することも可能)
mw_menu007.jpg

スペースでアンド検索可能
mw_menu008.jpg

Enter でメニュー項目をクリックしたときと同様の動作
mw_menu009.jpg

ショートカットキーも表示されるので、忘れたときに便利かも。
"Ctrl+G" ってなんの機能だったっけ?と思ったら、"ctrl+g" で検索してみる。
mw_menu010.jpg

問題

Win32API の GetMenu とか GetMenuItemInfo とかを使っているのだけど、 いくつか問題が。
  • 名称("上書き保存(S)" とか、"開く(O)" とか)を取得できないメニュー項目がたまにある
  • アプリケーションによっては、メニューをまったく取得できない場合もある (Visual Studio とか)
  • # 旧来のメニューの形式だと取得できることが多い(メモ帳とか電卓とか)
    # Windows Automation API を使うとメニューを開いた状態でないと中の項目を取得できない……

    あと、ツールバーとかリボン UI 上のボタン達も一括してリスト化したいなぁ。
    2014/10/12 | カテゴリ:ソフトウェア開発 | トラックバック(0) | コメント(0)
外部リンク

カンパのお願い
公開しているソフトウェアはフリーウェアなので無料でご利用いただけます。 気に入ってくださった方は、Amazon でお買い物をする際に下記のリンクを経由して頂ければ励みになります。

検索BOX・タグ一覧