Developer's Blog

その後の「UserAction Extension でオレオレスクリプト」

screenshot
謎の人です。こんにちわ。
大変ごぶさたしております。みなさん、Super Drag Extension でいろんなものを Drag したり Drop したりしてますか?
Super Drag Extension 0.2.5 では、UserAction Extension を使うことでユーザースクリプトを実行可能になりました! これで、より一層オレオレスクリプトを使いやすくなり、私も何か楽しいことができないかと色々考え中ですよ。
今日は、ずいぶん前に告知した「Sleipnir.pm」について。


Perl から Sleipnir.API をちょっとだけ気軽に使うための方法として考え始め、

ドキュメントだけ先に出しときます。多分こんな感じになる。。。と思いますよ。

から早幾月。待っていてくださるコアな方のために、動くものを公開。
忘れてたわけじゃないですよ。
以下、導入方法。

  1. ActivePerl をインストール
  2. 本エントリ末尾のコードを、「Sleipnir.pm」の名前で保存
    • <ActivePerl インストール場所>¥lib¥Sleipnir.pm として保存してください。ActivePerl が C:¥Perl にインストールされている場合は、C:¥Perl¥lib¥Sleipnir.pm です
  3. <Sleipnir インストール場所>¥resources¥languages¥default¥english¥ScriptEngine.ini
    に一行追記

    pl=PerlScript

ドキュメント通りに動いてて、面白みがないですが、よろしければどうぞ
ちょっと間が開きましたので、おさらい & 今後の予定も合わせて。

  1. UserAction スクリプトは、いろんな言語で書けますよ
  2. もちろん Perl でも書けますよ
  3. 書けるけど、もうちょっとだけ楽に書きたいですよ
  4. まずはドキュメントだけ準備しましたよ
  5. Sleinir.pm 初公開 <= 今ここ
  6. たくさんの人が Perl で UserAction を書き始める
  7. Sleipnir.pm が、いろんな人の手でどんどん拡張される
  8. Windows に Perl/Ruby 標準搭載
  9. UserAction Extension 、世界にはばたく
  10. 謎の人に取材殺到

忘れてたわけじゃないですよ。
ありがとうございました。

<br />
#<br />
# $Id: Sleipnir.pm,v 1.1 2007/12/11 01:18:15 nazonohito Exp $<br />
#<br />
package Sleipnir;</p>
<p>use strict;<br />
use warnings;</p>
<p>our $VERSION = sprintf "%d.%03d", q$Revision: 1.1 $ =~ /(\d+)/g;</p>
<p>use Win32::OLE;</p>
<p>sub AUTOLOAD {<br />
    my $self = shift;<br />
    my $method = our $AUTOLOAD;</p>
<p>    $method =~ s|.*::||o;<br />
    $method eq 'DESTROY' and return;</p>
<p>    ref $self && $method<br />
        or die 'Undefined attribute or method ', $method, ' called on Sleipnir.API';</p>
<p>    return $self->{api}->$method(@_);<br />
}</p>
<p>sub new {<br />
    my $class = shift;<br />
    my $package = ref $class || $class;<br />
    my $self = bless{}, $package;</p>
<p>    $self->_init();</p>
<p>    return $self;<br />
}</p>
<p>sub _init {<br />
    my $self = shift;<br />
    $self->{api} = new Win32::OLE('Sleipnir.API');<br />
    return $self;<br />
}</p>
<p>sub id {<br />
    my $self = shift;<br />
    return $self->{api}->GetDocumentID($self->{api}->ActiveIndex);<br />
}</p>
<p>sub document {<br />
    my $self = shift;<br />
    my $id = shift || $self->id;<br />
    $self->{document} = $self->{api}->GetDocumentObject($id);<br />
    $self->{document};<br />
}</p>
<p>sub window {<br />
    my $self = shift;<br />
    my $id = shift || $self->id;<br />
    $self->{window} = $self->{api}->GetWindowObject($id);<br />
    $self->{window};<br />
}</p>
<p>sub event {<br />
    my $self = shift;<br />
    $self->{event} = $self->window->event;<br />
    $self->{event};<br />
}</p>
<p>sub get_charset {<br />
    my $self = shift;</p>
<p>    my $charset = '';<br />
    my $nodelists = $self->document->getElementsByTagName('META');<br />
    for my $i ( 0 .. $nodelists->length -1 ) {<br />
        if ( $nodelists->item($i)->getAttribute('content') =~ m|charset=([^\s;]+)| ) {<br />
            $charset = $1;<br />
            last;<br />
        }<br />
    }<br />
    return $charset;<br />
}</p>
<p>###<br />
#</p>
<p>sub _load_module {<br />
    my $self = shift;<br />
    my $module = shift;</p>
<p>    unless ( exists $INC{$module} ) {<br />
        (my $m = $module.'.pm') =~ s/::/\//g;<br />
        require $m or die $!;<br />
    }<br />
}</p>
<p>#<br />
###</p>
<p>1;<br />
__END__<br />

Copyright © 2019 Fenrir Inc. All rights reserved.