人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

★★★内容により 300 ? 最大 1000 pt まで★★★
マウスのショートカットを使って調べ物作業を早くしたい!
次の作業を自動化する方法を教えてください。

[私の操作]
1. あるマイナーなアプリケーションで「はてな」という文字列を選択する
2. マウスの特殊ボタンAを押す

特殊ボタンAに割り当てられたプログラム/スクリプト(←これが欲しい)が次の操作を実行します。

[プログラム/スクリプトの動作]
3. ブラウザ (例:Chrome) の「Nigitama NigiNigi」というタブ(タイトル)に表示されているページの、「<textarea name="question">」というテキストエリアに、「<a>はてな<b>」という文字列を挿入する (この際、テキストエリアにはすでに何らかの文字列が入っている場合もあります)
4. エンターキーを押す

以上です。
柔軟性の高い方法であればポイントを多めに配分したいと思います。
質問等あると思いますのでコメント欄にお願いします。

●質問者: にぎたま
●カテゴリ:コンピュータ
✍キーワード:chrome PT はてな アプリケーション エリア
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kmyken1
●0ポイント

ご質問者の方のご意図を正確に理解できているかどうかわからないのですが、FileMaker Pro の Ver.10以降で、Webビューア機能とスクリプトトリガの機能を使えばできそうな気がします。

私もこのような手法で情報収集を効果的に行いたいと考えていまして、検索した結果を蓄積するようなデータベースをいずれは自分で作ってみたいと考えているのですが、着手する余裕がありません。

あまり柔軟性が高いとはいえないかもしれませんが、上手く作れれば便利なものができそうな気がしています。

ご参考まで。

http://www.filemaker.co.jp/

◎質問者からの返答

お疲れ様でした。

参考にはなりませんでした。


2 ● miyamuko
●200ポイント

Chrome で検索と言うのは難しいので IE を利用しました。

動かし方

  1. ファイル先頭の APP_TITLE, SEARCH_TITLE, SEARCH_URL を設定
  2. 文字列を選択
  3. スクリプトを実行

インストール

  1. http://arton.hp.infoseek.co.jp/indexj.html から ruby をインストール
  2. 以下のコマンドでライブラリをインストール

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が立ち上がってしまいうまくいきませんでした。

また似たような質問をすることがあると思いますが、用意した環境はそのままにしておきますのでまた回答をお願いします。


3 ● airplant
●200ポイント ベストアンサー

もし、Windowタイトルが*Nigitama NigiNigi*のように表現でき、テキストエリアへ移動するときのタブカーソル入力回数が固定ならば、キーボードの記録ソフトで簡単にできます。


キーボードの記録ソフトは、UWSCが結構お手軽で簡単に動きます。

<記録範囲>


マウスカーソルのAボタンへxxx.UWSを割り当てておけば、自動で別アプリケーション間でコピー&ペーストが動きます。


question:1231226545

求められている動作になっているのかどうか、若干不安ですが。。。

◎質問者からの返答

ありがとうございます。

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ですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ