★★★内容により 300 ~ 最大 1000 pt まで★★★

マウスのショートカットを使って調べ物作業を早くしたい!
次の作業を自動化する方法を教えてください。

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

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

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

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

回答の条件
  • 1人2回まで
  • 登録:2009/05/18 13:15:47
  • 終了:2009/05/25 12:24:24

ベストアンサー

id:airplant No.3

airplant回答回数220ベストアンサー獲得回数492009/05/19 00:52:13

ポイント200pt

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


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

<記録範囲>

  • マイナーアプリでコピー操作。
  • 3と4の操作を記録し、それをスクリプトで保存(xxx.UWS)。
  • 記録後、文字列の前後に<a>と<b>を連結してペーストするように3の操作のスクリプトを加工する。

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


question:1231226545

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

id:Nigitama

ありがとうございます。

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

2009/05/25 12:19:25

その他の回答(2件)

id:kmyken1 No.1

kmyken1回答回数366ベストアンサー獲得回数22009/05/18 13:42:51

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

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

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

ご参考まで。

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

id:Nigitama

お疲れ様でした。

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

2009/05/18 13:53:19
id:miyamuko No.2

miyamuko回答回数29ベストアンサー獲得回数112009/05/18 23:22:52

ポイント200pt

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
id:Nigitama

ありがとうございます。

とりあえずダウンロードしてライブラリをインストールしました。

スクリプトもコピペして作成しました。

 

今日はもう遅いので簡単に。

 

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

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

2009/05/25 12:16:27
id:airplant No.3

airplant回答回数220ベストアンサー獲得回数492009/05/19 00:52:13ここでベストアンサー

ポイント200pt

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


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

<記録範囲>

  • マイナーアプリでコピー操作。
  • 3と4の操作を記録し、それをスクリプトで保存(xxx.UWS)。
  • 記録後、文字列の前後に<a>と<b>を連結してペーストするように3の操作のスクリプトを加工する。

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


question:1231226545

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

id:Nigitama

ありがとうございます。

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

2009/05/25 12:19:25
  • id:airplant
    いるか、ありがとうございました。お役に立てて幸いです。
    UWSCは結構使えます。

    なお、不安定なときは、タイマーでdelayを入れるか、APIを使った直接キー入力に変更すれば概ね安定します。
    APIを使った直接キー入力は、スクリプトが別場所のPCにあるので、後日探して記載してみようと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません