Windows【Perl】IEの選択文字列を取得できる?


(1)インターネットエクスプローラ上で、文字列を選択します。
(2)右クリックして myscript.pl実行

myscript.plの内容
----
IEで選択した文字列を取得
文字列を整形して出力
----

このようなことは可能でしょうか?

IE右クリックすると「コピー」コマンドが現れるので、クリップボードにコピーしてしまえばPerlで取得できそうです。

しかし、
コピーコマンド実行 → myscript.pl実行
と続けるには、どうすれば良いのでしょうか?

Win32::DDE
user32.dll

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/11/12 11:34:42
  • 終了:--

回答(2件)

id:aki73ix No.1

aki73ix回答回数5224ベストアンサー獲得回数272005/11/12 14:39:32

ポイント10pt

http://nifberry.727.net/test/hatena156.htm

�I��������������PERL�ɓn��

可能です

右クリックにする場合はコンテキストメニューの拡張が必要ですが

PERLに渡す処理が出来ているのであれば

JavaScriptで渡してやればよいだけです


<HEAD>

<TITLE>選択した文字列をPERLに渡す</TITLE>

</HEAD>

<BODY>

<SCRIPT LANGUAGE="JavaScript">

<!--

    function main(){

      var ParentWindow  = this;//選択のターゲットウィンドウ

      var ParentDocument  = ParentWindow.document;//ターゲットのドキュメント

      var ParentSelection  = ParentDocument.selection.createRange(); //選択範囲

      var seltxt    = ParentSelection.text;

      if( seltxt.length >0){

//        alert(seltxt);

        document.forms[0].SEL.value=seltxt;

        document.forms[0].submit();

        return true;

      }else{

        ParentWindow.status="文字列が選択されていません";

        return false;

      }

   }


// -->

</SCRIPT>

<FORM METHOD="POST" ACTION="http://nifberry.727.net/test/hatena156.cgi">

<INPUT TYPE="HIDDEN" NAME="SEL">

<BUTTON OnClick="main()">選択</BUTTON>

</FORM>

ここに選択用の文字列

</BODY>

</HTML>

http://web.archive.org/web/*/http://www.cybercom.jp/~mikio/translate/ie_translate/wordlookup....

詳しくはこちらのソースが参考になります

id:radio3

JavaScriptで選択文字列を取得できることはわかりました。ありがとうございます。

起動は右クリックでなくても、簡単なら良いです。

JavaScriptなら、IEのお気に入りから実行させることができましたよね?

そうすると、後は、

1)クリップボードへの格納

2)外部プログラム(myscript.pl)実行

ができれば実現できそうです。

完成できる方を探してみます。

ありがとうございました。

2005/11/12 15:58:11
id:siachan No.2

siachan回答回数80ベストアンサー獲得回数142005/11/12 18:51:52

ポイント500pt

http://search.cpan.org/~ctrondlp/Win32-GuiTest-1.50.3-ad/Example...

Win32::GuiTest::Examples - collection of the scripts from eg - search.cpan.org

作ってみました。ただし事前にWin32::GuiTestをインストールしておかなければなりません。


use Win32::Clipboard;

use Win32::GuiTest qw(:ALL);


#@windows = FindWindowLike(0,””,”SleipnirMainWindow”); #sleipnir

#@childs = FindWindowLike($windows[0],””,”IEBrowserFrame”); #sleipnir


@childs = FindWindowLike(0,””,”IEFrame”); #IE


SetForegroundWindow($childs[0]);

SendKeys(”^c”);


$clip = Win32::Clipboard();

$text = $clip->GetText();


print ”内容:<$text>¥n”;


exit;


ブラウザが変わればウインドウを検索する部分を変えなきゃならないのでちょっと面倒ですが。


とりあえずIEと、自分が普段使っているSleipnir Ver.2でやってみました。


ちなみにClassNameの特定にはurlのspy.plを使いました。

id:radio3

素晴らしい!!!

完璧です。見事、期待通りに動作しました!

おまけに他ブラウザの場合も応用利くようなご指導!!

感謝感激です。素晴らしいお答えありがとうございました!!

2005/11/13 08:18:13
  • id:aki73ix
    補足

    > C:¥Win2k¥Webというフォルダを作り、書庫の中身を展開し、.plの1行目だけ修正して、再インストールしてもダメ。

    手順がまずいです
    フォルダは元々あるWindowsフォルダにインストールされます
    ですから、フォルダを作るのではなく
    PWin.location.href=(”/WIN2k/Web/hatena158.pl”);

    PWin.location.href=(”/WINDOWS/Web/hatena158.pl”);
    等に書き換えた上でインストールしてください
  • id:radio3
    あきらめます

    補足サポートありがとうございます!! このページ見つけるのに40分かかってしまいました(^^;

    結果は全く同じでした。
    The requested URL /WINNT/Web/hatena158.pl was not found on this server.

    今回はダメでしたが、インストール&アンインストールが1クリックでできるような状態(たいへん非常に助かります!)でご提供いただいたり、補足サポートいただいたり、たいへん非常にめっちゃ感謝しております。ありがとうございました!!


  • id:aki73ix
    コメントが入れ違いになったので(^^;

    こちらの動作確認に不備が合ったため動かなかったのようです
    これで確実に動くと思います
    ちなみに href.location=”file:///c:¥windows¥web¥hatena158.pl”
    にしてしまうと動かなかったのはJavaScriptによって ¥がエスケープされて
    しまうのが原因で
    href.location=”file:///c:¥¥windows¥¥web¥¥hatena158.pl”
    だったら動いていたのではないかと推測しています

    http://www.hatena.ne.jp/iwashi?mode=treedetail&thread=0000017024
  • id:radio3
    Re:コメントが入れ違いになったので(^^;

    1. hatena158a.lzhをダウンロード
    2. c:¥winnt¥webに全展開
    3. hatena158.htm 9行目コメント化
    4. hatena158.htm 8行目コメント解除、windows→winnt修正
    秀丸で「file:///〜」をクリックすると実行できるので、実行。
    動作OK(パス正常)
    5. .inf右クリックでインストール
    6. 全IE終了、IE再起動
    7. http://www.hatena.ne.jp/my 開く
    8. 普通テキスト文字列選択
    9. 右クリック→クリップ起動
    結果、何も起こらず。

    コントロールパネルからRemove

    1. hatena158a.lzhをダウンロード
    2. c:¥winnt¥webに全展開
    3. hatena158.htm 9行目コメント化
    4. hatena158.htm 8行目コメント解除、windows→winnt修正
    動作OK(パス正常)
    5. .inf(64) 修正
    ProgDir = ”windows¥web”
    ProgDir = ”winnt¥web”
    6. .inf右クリックでインストール
    7. 全IE終了、IE再起動
    8. http://www.hatena.ne.jp/my 開く
    9. 普通テキスト文字列選択
    10. 右クリック→クリップ起動
    結果、何も起こらず。
    文字列はクリップボードにコピーされている。


    hatena158.plに以下を追加して再トライ。
    open(LOG, ”>test.log”) or die(”test.logが開けない”);
    $time = localtime();
    print LOG ”$time¥n”;

    普通に実行すると、動作する。(test.logで確認できる)
    IEアドレスバーにfile:///c:/winnt/web/hatena158.pl貼り付け実行すると、動作する。(ログはデスクトップ上)
    右クリック→クリップ起動ではtest.logは吐かれない。Pauseも起きない。

    aki73ixさんの環境では、ローカルhttpサーバ止めても動作してるということですよね?
    環境が異なるせいでしょうか...?
    IE6 SP-1

    申し訳ないのですが、これ以上のテストはご勘弁ください<m(__)m>
    ありがとうございました。
  • id:aki73ix
    XPインストールして実験してみました

    >1. hatena158a.lzhをダウンロード
    >2. c:¥winnt¥webに全展開
    ちなみに、C:¥winnt¥webに展開する必要はありません
    INFファイルの右クリックインストールで自動的に Windowsフォルダの
    Webフォルダにインストールされます

    radio3さんのところで動作しないのは環境の違いだと思ったので、
    MSDN版のXP+IE6SP1をあいているHDDにインストールした上で実験してみました

    結論ですがどうやら、XPのセキュリティポリシーの問題みたいです
    一瞬ダイアログが出て「アクセスが拒否されました」というメッセージが
    出ているので、どうやらローカルのJavaScriptが拒否されているようです

    試行錯誤した結果、次のように変更したところ動作しました
    -----------
    <HTML>
    <HEAD>
    <form&nbsp;action=&quot;file:///c:/winnt/web/hatena158.pl&quot;></action>
    <SCRIPT&nbsp;LANGUAGE=&quot;JavaScript&quot;&nbsp;defer>
    <!--
    var&nbsp;PWin&nbsp;=&nbsp;external.menuArguments;
    var&nbsp;sel&nbsp;=&nbsp;PWin.document.selection;
    if(sel){
    &nbsp;&nbsp;PWin.clipboardData.setData(&quot;text&quot;,sel.createRange().text);
    //&nbsp;IE&nbsp;6.x用
    &nbsp;&nbsp;document.forms[0].submit();
    //&nbsp;IE5.5/5.0は&nbsp;ここにターゲットのScriptの場所を指定
    //&nbsp;&nbsp;PWin.location.href=(&quot;file:///c:/winnt/web/hatena158.pl&quot;);
    }
    //-->
    </SCRIPT>
    </HEAD>
    </HTML>

    -----------
    以上報告です
    http://nifberry.727.net/test/hatena158b.lzh

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

トラックバック

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

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

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