マウスのショートカットを使って調べ物作業を早くしたい!
次の作業を自動化する方法を教えてください。
[私の操作]
1. あるマイナーなアプリケーションで「はてな」という文字列を選択する
2. マウスの特殊ボタンAを押す
特殊ボタンAに割り当てられたプログラム/スクリプト(←これが欲しい)が次の操作を実行します。
[プログラム/スクリプトの動作]
3. ブラウザ (例:Chrome) の「Nigitama NigiNigi」というタブ(タイトル)に表示されているページの、「<textarea name="question">」というテキストエリアに、「<a>はてな<b>」という文字列を挿入する (この際、テキストエリアにはすでに何らかの文字列が入っている場合もあります)
4. エンターキーを押す
以上です。
柔軟性の高い方法であればポイントを多めに配分したいと思います。
質問等あると思いますのでコメント欄にお願いします。
もし、Windowタイトルが*Nigitama NigiNigi*のように表現でき、テキストエリアへ移動するときのタブカーソル入力回数が固定ならば、キーボードの記録ソフトで簡単にできます。
キーボードの記録ソフトは、UWSCが結構お手軽で簡単に動きます。
<記録範囲>
マウスカーソルのAボタンへxxx.UWSを割り当てておけば、自動で別アプリケーション間でコピー&ペーストが動きます。
求められている動作になっているのかどうか、若干不安ですが。。。
ご質問者の方のご意図を正確に理解できているかどうかわからないのですが、FileMaker Pro の Ver.10以降で、Webビューア機能とスクリプトトリガの機能を使えばできそうな気がします。
私もこのような手法で情報収集を効果的に行いたいと考えていまして、検索した結果を蓄積するようなデータベースをいずれは自分で作ってみたいと考えているのですが、着手する余裕がありません。
あまり柔軟性が高いとはいえないかもしれませんが、上手く作れれば便利なものができそうな気がしています。
ご参考まで。
お疲れ様でした。
参考にはなりませんでした。
Chrome で検索と言うのは難しいので IE を利用しました。
gem install win32-clipboard
require "dl" require "win32ole" require "rubygems" require "win32/clipboard" ### 設定 APP_TITLE = "あるマイナーなアプリケーションのウィンドウのタイトル" SEARCH_TITLE = "Nigitama NigiNigi" SEARCH_URL = "http://nigitama.com/" # APP_TITLE = "メモ帳" # SEARCH_TITLE = "人力検索" # SEARCH_URL = "http://q.hatena.ne.jp/" ### VK_CONTROL = 0x11 KEYEVENTF_KEYUP = 0x0002 MB_OK = 0 User32 = DL.dlopen("user32") EnumWindows = User32["EnumWindows", "IPL"] GetWindowText = User32["GetWindowText", "ILSI"] OpenIcon = User32["OpenIcon", "IL"] CloseWindow = User32["CloseWindow", "IL"] BringWindowToTop = User32["BringWindowToTop", "IL"] SetForegroundWindow = User32["SetForegroundWindow", "LL"] KeybdEvent = User32["keybd_event", "0IILL"] MessageBox = User32["MessageBox", "ILPPI"] # メッセージボックスを表示して終了する def msgbox_and_exit(message) MessageBox.call(0, message, "Error", MB_OK) exit 1 end # Window のタイトルを取得 def get_window_text(hwnd) buff = "\0" * 256 r, rs = GetWindowText.call(hwnd, buff, 256) return buff.delete("\0") end # Window をアクティブにする def activate_window(hwnd) SetForegroundWindow.call(hwnd) end # title を含む Window を探す def find_window(title) r = [] re = Regexp.compile(Regexp.quote(title)) enum_windows_proc = DL.callback('ILL') {|hwnd,lparam| t = get_window_text(hwnd) r << hwnd if re.match(t) 1 } EnumWindows.call(enum_windows_proc, 0) if r.empty? msgbox_and_exit("Window が開かれていません: #{title}") end r[0] end # title を含む Window が選択している文字列を取得する def get_selection_text(title) activate_window(find_window(title)) sleep(0.3) KeybdEvent.call(VK_CONTROL, 0x1D, 0, 0); KeybdEvent.call(0x43, 0x2E, 0, 0); KeybdEvent.call(0x43, 0x2E, KEYEVENTF_KEYUP, 0); KeybdEvent.call(VK_CONTROL, 0x1D, KEYEVENTF_KEYUP, 0); sleep(0.3) Win32::Clipboard.get_data end # IE を起動して url を表示する # すでに起動している場合はその IE を使う def connect_or_create_ie(title, url) shell = WIN32OLE.new("Shell.Application") shell.Windows.each do |win| if win.FullName =~ /iexplore\.exe$/i and win.LocationName =~ /#{Regexp.quote(title)}/ return win end end ie = WIN32OLE.new("InternetExplorer.Application") ie.Navigate(url) sleep(0.1) while ie.Busy ie end # 入力欄のフォームを取得する def parent_form(node) if node.nodeName == "FORM" node else parent_form(node.parentNode) end end ### メイン # 選択テキスト取得 word = get_selection_text(APP_TITLE) if word == nil || word.strip == "" msgbox_and_exit("テキストが選択されていません") end # IE 起動 ie = connect_or_create_ie(SEARCH_TITLE, SEARCH_URL) ie.Visible = true activate_window(ie.HWND) # 入力欄を取得 input = ie.document.getElementById("question") if input == nil msgbox_and_exit("検索欄が見つかりません") end # 入力欄に選択テキストを設定 input.value = "<a>#{word}<b>" # フォームを取得 form = parent_form(input) if form == nil msgbox_and_exit("検索フォームが見つかりません") end # 検索実行 form.submit
ありがとうございます。
とりあえずダウンロードしてライブラリをインストールしました。
スクリプトもコピペして作成しました。
今日はもう遅いので簡単に。
1. 問題となっているWebページはログインが必要です。ブラウザの新規起動はあまり現実的ではありません。
2. ブラウザはChromeかFirefoxにしたいです。理由は下のほうに書きました。
3. 実を言うと、問題となっているWebページのURLの後半部分(クエリ部分)は日によって異なる場合があります (正規表現等で対応できれば問題ありませんが)。
4. あるマイナーなアプリケーションのウインドウタイトルの後半部分は変化します(「アプリケーション名+ファイル名」というタイトルです。正規表現等で対応できれば問題ありませんが)。
5. マウスの特殊ボタンAを押す前に、手作業でコピー操作をすることも可能です。スクリプト部分でコピー動作をしないという手もあります (単にクリップボードにある内容を使う)。
Chromeはページ内検索(Ctrl+F)をしたときにインクリメンタルしてくれるところ、ヒット件数が出るところ、早いところが利点です。
Firefoxはページ内検索(Ctrl+F)をしたときにインクリメンタルしてくれるところ、大文字小文字を区別できるところが利点です。
不明点などあればコメント欄にお願いします。
回答上限を上げておきます。
引き続きよろしくお願いします。
[追記:2009年5月19日 0:54]
IEがすでに起動しているときはそのIEを操作するようですね。
>ブラウザの新規起動はあまり現実的ではありません。
上記のコメントは誤りでした。すいません。
[追記:2009/05/25 12:15]
結局UWSCとIEを使ってやることにしました。
いただいたスクリプトをいろいろといじってみましたが、どうしても新規IEが立ち上がってしまいうまくいきませんでした。
また似たような質問をすることがあると思いますが、用意した環境はそのままにしておきますのでまた回答をお願いします。
もし、Windowタイトルが*Nigitama NigiNigi*のように表現でき、テキストエリアへ移動するときのタブカーソル入力回数が固定ならば、キーボードの記録ソフトで簡単にできます。
キーボードの記録ソフトは、UWSCが結構お手軽で簡単に動きます。
<記録範囲>
マウスカーソルのAボタンへxxx.UWSを割り当てておけば、自動で別アプリケーション間でコピー&ペーストが動きます。
求められている動作になっているのかどうか、若干不安ですが。。。
ありがとうございます。
UWSCはすでに使っていていろいろと重宝しています。
ACWやGETIDを使って操作できるのですが、問題のtextareaまではタブキーをかなりの回数押す必要があります。回数は一定ですが、時間がかかりすぎてしまいます。
ブラウザをIEにすれば、UWSCから直接IEを操作してIE.Document・・・のように扱うことができました。IE7に「Find as you type」というページ内検索プラグインを入れたので、インクリメンタル、ハイライト、大文字小文字の区別ができるようになりましまた。
目下最大の問題はIE7がべらぼうに遅いということです。
今夜また追記します。
[追記:2009/05/20 14:42]
忙しくなってそれ以降手を付けられないでいます。
遅いという点以外は特に問題なく動いています。
[追記:2009/05/25 12:17]
結局UWSCとIEで処理をすることにしました。
ちょっと不安定ですがおおむね問題ない感じです。
気になっていた速度についても問題なさそうです。ほかの作業をしている間に勝手に検索されているという感じなので遅くても気になりませんでした。
おそるべしUWSCですね。
ありがとうございます。
UWSCはすでに使っていていろいろと重宝しています。
ACWやGETIDを使って操作できるのですが、問題のtextareaまではタブキーをかなりの回数押す必要があります。回数は一定ですが、時間がかかりすぎてしまいます。
ブラウザをIEにすれば、UWSCから直接IEを操作してIE.Document・・・のように扱うことができました。IE7に「Find as you type」というページ内検索プラグインを入れたので、インクリメンタル、ハイライト、大文字小文字の区別ができるようになりましまた。
目下最大の問題はIE7がべらぼうに遅いということです。
今夜また追記します。
[追記:2009/05/20 14:42]
忙しくなってそれ以降手を付けられないでいます。
遅いという点以外は特に問題なく動いています。
[追記:2009/05/25 12:17]
結局UWSCとIEで処理をすることにしました。
ちょっと不安定ですがおおむね問題ない感じです。
気になっていた速度についても問題なさそうです。ほかの作業をしている間に勝手に検索されているという感じなので遅くても気になりませんでした。
おそるべしUWSCですね。