投稿

Power Automate for Desktop: UI要素調査方法

イメージ
Power Automate for DesktopでUI要素がうまく取れないため調査してみようと思いました。それにはUI要素の解析ツールが必要です。 Windows 11 での Inspect.exe 入手方法 Inspect.exe はMicrosoft製のUI調査ツールです。単体での提供はなく Windows SDK に含まれる製品のようです。 私はVisual Studio をインストールしていたので、そちらのコンポーネントとして Windows SDK をインストールしました。 1. Visual Studio Community 2022 を入手してインストールします。 Visual Studio Community  Microsoft 2. Windowsの「設定」「アプリ」の「インストールされているアプリ」を開き、Visula Studio Community 2022 を探し、「…」から「変更」を選びます。 3. 「個別のコンポーネント」をクリックし、下の方にある Windows SDK を適宜選びます。 私は、Visual Studio Community は元から入っていましたが、 Windows SDK がインストールされていませんでした。 4. ウィンドウ右下の「変更」をクリックします。 5. エクスプローラーを起動し、Inspect.exe を探します。 私は次のフォルダーにあったものを使いました。 C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64 10や 10.0.22000.0 はバージョンやビルド番号を示しているようです。私はWindows Kitsフォルダーの中で一番新しそうなものを使いました。 arm や x64 などはご利用の環境に合わせて適切なものを選ぶ必要があるでしょう。 次の外部ページでは Windows SDK をインストールして、Inspect を利用されています。 Inspect.exe のインストール (Windows SDK)  Qiita Microsoft Accessibility Insights for Windows による UI 要素調査 アサヒロボ研さんのページに、 Microsoft Accessibility Insig

Power Automate Desktop: Acrobat を使ってPDFのページ数を取得

イメージ
Power Automate for Desktop の機能で PDFファイルのページ数を調べるのは容易ではないという話を書きました。 Power Automate DesktopでPDFのページ数を取得するのは難しい Acrobat で取得する 原始的ですが、Acrobat を起動してプロパティからページ数を取得する方法を書いてみます。 全体の流れは次の通りです。 1. 「フォルダー内のファイルを取得」アクションで、フォルダー内の PDF ファイルを取得します。 変数はデフォルトの Files です。 2. 「For each」アクションで、Files から一つずつファイルオブジェクトを取得し、処理します。 ファイルオブジェクトは CurrentItemに代入されます。 3. 「アプリケーションの実行」アクションで、PDFファイルを開きます。 アプリケーションパス」acrobat.exe コマンドライン引数: %CurrentItem.FullName% アプリケーション起動後には「アプリケーションの読み込みを待機」を指定します。効果はないかもしれません。 メインウィンドウのハンドルを取得できないことが多いので、「エラー発生時」をクリックし、「詳細」の「アプリケーションのメインウィンドウハンドルを取得できません」で、「フロー実行を続行する」を選択します。 4. 「ウィンドウの取得」アクションで「フォアグラウンドウィンドウ」の情報を取得します。 ウィンドウの情報が AutomationWindow に保存されます。 5. 「キーの送信」アクションで、Acrobatに対して、Ctrl+D を送信し、PDFファイルのプロパティを開きます。 キーの送信先: ウィンドウインスタンス/ハンドル ウィンドウインスタンス: %AutomationWindow% 送信するテキスト: {Control}({D}) 6. 「ウィンドウにある UI 要素の詳細を取得する」アクションでページ数のテキストを取得します。 UI要素にはページ数を指定します。 属性名は OwnText を取得します。 問題なければ、 AttributeValue にページ数が保存されます。 7. 「ウィンドウ内のボタンを押す」アクションで、キャンセルボタンを押します。 追加した UI 要素のウィンドウは、タイトル

Power Automate for Desktop ウィンドウを画面中央に移動する

イメージ
Power Automate for Desktopで操作するウィンドウを監視するために画面中央に配置しておくと便利です。そんなフローを作ってみました。 フローの概要は次の通りです。 1. 「画面の解像度を取得する」アクションでモニターの幅と高さを取得します。 ここではモニターに1を指定しています。モニターが複数ある場合は適宜指定する必要があると思います。 変数名はデフォルトの、MonitorWidth と MonitorHeight 2. 「ウィンドウの詳細を取得する」アクションで、ウィンドウの場所とサイズを取得します。この例では「メモ帳」のウィンドウを指定しています。 変数名はデフォルトの WindowProperty WindowProperty には 503, 843, 1060, 802 のように、ウィンドウ左上の X 値、同Y値、ウィンドウの幅、ウィンドウの高さが CSV 形式で保存されます。 詳細については次のページを参考にするとよいでしょう。 ウィンドウの位置とサイズを取得する ウィンドウ指定の際に、うまく指定できず、ウィンドウ内の別の要素を取得してしまった場合は、ウィンドウを選択し直します。 3. 「テキストの分割」アクションを使って WindowProperty をリストに変換します。 変数名はデフォルトの TextList 4. 「テキストを数値に変換」アクションを使って、ウィンドウ幅を取り出します。 式は %TextList[2]% 、変数名は uWindowWidth 。 5. 同様にウィンドウ高さを取り出します。 式は %TextList[3] % 、変数名は uWindowHeight 。 6. 「数値の切り捨て」アクションを使って、ウィンドウ移動先の、ウィンドウの左上座標のX値を計算します。 式は  %MonitorWidth / 2 - uWindowWidth / 2% 、変数名は X 。 計算式は次の図を参考にしてください。 7. 同様にY値を求めます。 式は %MonitorHeight / 2 - uWindowHeight / 2% 、変数名は Y 。 8. 「ウィンドウの移動」アクションを使って、ウィンドウ左上の位置を X, Y 変数を使って指定します。 追記: 公開当初は、%MonitorHeight / 2 - uW

Excel VBA: Simple DB access by ODBC without ADO

イメージ
How to use ODBC from VBA without ADO object?  The answer is the following. Create Access File: Create the following sample Access table. Table name: ProductMaster Column names: ID, Product, Amount And, Save as a SampleDB.accdb in appropriate folder. Create DSN: Create a DSN by the following. Click Search button on taskbar. Type "odbc", and select appropriate ODBC Data Source. (If your Access is 64bit, select 64bit Data Source) Click Add...  (If other user needs to use this DSN, select "System DSN" tab, and then click it.) Select "Microsoft Access Driver (*.mdb, *.accdb), and click Finish. Type "SampleDB" into Data Source Name, and then click Select button. Select SampleDB.accdb and click OK. Click OK. Click OK. Create Table: Open an Excel book, and then execute the following sub procedure. Private Sub uCreateTableWithQuery()     Dim uWS As Worksheet     Dim uList As ListObject          Set uWS = ActiveSheet     Set uList = uWS.ListObjects.Add( _      

サーマレスト ネオエアーXサーモマックスを購入

イメージ
前から検討していたネオエアーXサーモマックスを発注しました。 サーマレスト ネオエアーXサーモマックスを発注 ヨドバシから商品到着のメールが来たので、早速石井スポーツに受け取りに行ってきました。 早速開梱 パッケージはこんな感じです。Apple Watch SE1 との比較です。もう少し一般的なものを並べればよかったのに、一杯飲んでいたので。 箱から出して 伸ばしてみました。 展開して備品を乗せてみました。グレーの袋は空気注入用で、電動ポンプを使わない場合に使います。壊れた時のために携帯してもよさそうです。黒い小さい袋は携帯用のケースです。 電動ポンプ。空気を入れるインフレートと、抜くときに使うデフレートが書かれています。 注入開始! 見ている間に膨らんでいきます。 待っている間に一杯になりました。 枕と寝袋を置いてみました。 ファーストインプレッション 箱から出してみて、さすがにコンパクトだなと思いました。 空気を入れるとみている間に段々膨らんでいき、十分待てる時間です。あとで時間を測ってみます。電動ポンプだけで十分に空気が入ります。 上に乗るとある程度音はしますが、音は低めでレジ袋のような感じではありません。 表面は比較的良い手触りで、ビニールっぽさはありません。 寝てみると、結構空気がいっぱいで、高さを感じます。 一晩寝てみたところ、寝返りを打つときに狭くて気になり、何回か目が覚めました。 ラグジュアリーマップL: 63×196×7.6cm。 ネオエアーXサーモマックス: 64x183x6.4cm。 なので、スペック上はネオエアーの方が微妙に低くて幅が広いはずなのですが、実際に寝てみると、ネオエアーの方が狭くて高く感じます。 もっとも、草サイトのテントの中とフローリングでは比較が難しいので、やはり本当のところは実際にキャンプで寝てみるしかないと思います。 寝返りの時に起きるたびに、柔らかくて広いベッドが恋しくてそちらに行こうかと思いましたが、眠いのと実験もあってそのまま寝ていました。ただ、途中からは慣れたのか、次に気がついたら朝でした。 朝起きてみると、痛いところや疲れなどはなく、むしろすっきりとした感じで快調でした。慣れれば結構いいマットなのかもしれません。 目が覚めてから、少し空気を抜いて寝てみたところ、身体との密着度が上がり、これはこれでよく眠れそうでし