XREA.COM Logo XREA.COM Ad

管理人の雑記

1管理人 ★:06/04/30 20:55 ID:???
雑記サイト移転に伴い、AutoHotkey関係はこっちに書くことに。
88unnamed.ahk:2007/11/01(木) 05:34:41
いつも色々乙です。
AHKについては初心者でスクリプトについても
詳しく知らないので的外れなことを言ってたら
スルーしてください。
ThumbRemapについて、タッチパッドに触れているときは
全体を50msくらいの間隔で監視し続けて、
何も触れていない場合のパラメータを検知したら
強制的にThumb_Deactivate()実行、
みたいにしたら、既知の不具合の
「ボタンの押しあげ操作が発生せず
押しっぱなしになる」
という不具合に対応できないかと思ったのですが。
89管理人 ★:2007/11/01(木) 20:20:34
マウスジェスチャ2 ツールバーボタンのコマンドIDを調べてSendMessageコマンドを作成する機能追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture2.zip
ファイルダイアログの上フォルダコマンドと戻るコマンドを実行させたかったので作った。

動作割り当てのスクリプトテンプレート部分では、テンプレートの代わりにラベル名を登録しておいて、
「入力」ボタンが押されたときにそのサブルーチンを実行するという機能を用意してあったので、それを使う。
コマンドIDを調べる部分は、昔作ったスクリプトを適当につなぎ合わせたら動作した。
90管理人 ★:2007/11/04(日) 19:42:32
ディスプレイが2台になったので、旧マシンもVNCではなく直接操作したいと思い、1011puという得体の知れないタッチパッド付きキーボードを買ってきた。
キーボードとポインティングデバイスがコンパクトなサイズにまとまっているので、必要なときだけ取り出して使うには丁度良いと思ったのである。
ThumbRemapを使えるかと思ったが、対応するドライバが見つからない。SynapticsのもALPSのもGlidePointの奴も認識してくれない。
仕方ないので、単に右シフトに右ボタンを割り当てることに。
タッチパッドに触れてなくても動作するから、こっちの方が使いやすい。
左ボタンは元から付いてるタップでいいや。
91管理人 ★:2007/11/05(月) 18:58:20
マウスジェスチャ2 修正とか改良
http://lukewarm.s101.xrea.com/myscripts/MouseGesture2.zip
オプション画面に色々とひどいバグがあったので修正した。

また、8方向モードで斜めとみなす角度の範囲を設定可能に。
デフォルトでは45度だが、60度にして斜めを認識しやすくしたり、90度にして斜めだけにしたりもできる。
また、斜めストロークの後と縦横ストロークの後で斜めの範囲を変化させる機能も用意した。
初回のみ8方向にしたり、斜めから開始したら斜めのみということも可能なはず。
8方向モードは使っていないので、正直どうでもいいが。

ユーティリティ関数として、マウスカーソルを移動する「MG_Move()」を用意した。
CoordMode、SetMouseDelay、BlockInputなどを行いつつMouseMoveする。
引数を省略すると、ジェスチャ開始位置に移動する。

あと、初回起動時の処理を再び修正。
初期状態で同梱されているMG_Config.ahkの中に、MG_Edit.ahkを呼び出すコードを入れることにした。
これにより、色々と余計な物を削減できたはず。
92管理人 ★:2007/11/14(水) 05:35:44
マウスジェスチャ2 矢印ナビ機能追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture2.zip

従来も、ジェスチャ入力中に内容をツールチップ表示する機能があったが、
動作確認のためにジェスチャ文字列をそのまま表示していたので分かりにくかった。
そこで、矢印で表示する機能も付けることに。

Shift_JISには上下左右の矢印はあるが、斜めはなかった気がする。
そこで、斜め矢印が存在するWingdingsという記号フォントを使う。
http://lukewarm.s101.xrea.com/misc/FontsStandard.html によると、XPなら標準で入っているはずなので大丈夫だろう。
しかし、Gui,Fontでこのフォントを指定しても、何故か0x80以上(?)の文字が正しく表示されない。
仕方ないので、自分でデバイスコンテキストを取得して直接描画することに。
なにやら文字の間隔なども設定できるらしい。
Wingdingsで表示している都合上、矢印以外のものを表示するのが面倒だったので、
押しているボタンによって文字色を変えて区別できるようにした。
設定画面を作るのは面倒なので、拡張設定スクリプトに自分で記述する手抜き仕様。
設定画面には、矢印ナビを使うかと、起動時からナビを有効化するかの設定のみ用意した。

かなり適当な作りだが、一応綺麗に表示されているようである。
しかし、こんなものを見ながら入力していたらタイムアウトしてしまうので役に立たないのではないだろうか?
93管理人 ★:2007/11/14(水) 09:09:29
ビデオカードにDVI-D端子が2つ有ることに気付いたので、デュアルモニターにしてみた。
セカンドを上とか左に配置すると、マイナス座標の領域が生まれるんだな。
モニターの設置位置の問題であまり使いやすくないので、とにかく多くのスペースが必要なときだけ使うことにする。
94管理人 ★:2007/12/07(金) 01:36:49
マウスジェスチャ2 ツールチップテキスト変更機能を追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture2.zip

動作定義が多すぎて覚えきれないのでツールチップにアクション名を表示して欲しいという意見があったが、
このスクリプトの場合は何を表示しろと言うのか?
その時点で入力されているジェスチャに「ボタンを一つ放す」を追加したジェスチャの割り当てを表示すればいいのか?
あるいは、現在の状態から続くジェスチャの割り当て全てを表示するのか?
納得の行かない仕様で作ってもどうせ文句を言われるだけだろうし、
そもそもアクション名を設定できるようにするのが面倒くさいので、
適当に数行の変更で作れる簡易的な機能にした。

「MG_Tooltip」という変数にテキストが入っていると、
ジェスチャ文字列の代わりにそれが表示されるように。
ジェスチャ入力が終了すると、MG_Tooltipの内容はクリアされる。

例えば、「RB_」に
MG_Tooltip=
(
ウィンドウ状態変更
    ↑
前へ← →次へ
    ↓
  閉じる系
)
のように、右ボタン押し下げから派生するアクションの説明を割り当てて使う。

このスクリプトの仕様では、内容を読んでいる間にタイムアウトしてしまうが。
95管理人 ★:2008/01/13(日) 06:14:19
秋葉原のUSER'S SIDEとか言う店(キングケバブの向かい)で外付けのタッチパッドを見つけた。
GlidePointって書いてあったからThumbRemap.ahkも動作するはずである。
しかし、6000円以上もするしPS/2版しかなかったしそれほど欲しくもなかったのでスルー。
96管理人 ★:2008/02/16(土) 23:27:43
以前作ったコマンドラインランチャーに色々と不具合があることに気付いたが、行き当たりばったりに拡張していったせいで手の施しようが無くなっているので、作り直すことを考える。
せっかくだから、まともな拡張機構を用意して、ウィンドウやプロセス、テキストなども扱えるようにしたい。
以下、現在までに挙がっているアイデア。


●動作の流れ
ターゲットリスト、コマンド、絞り込みモードなどを決定してウィンドウ表示
┌→↓ ←──────────────────┐
│ターゲットリストから絞り込み→絞り込みモード遷移┤
│ ↓         ↑   └→サブアイテム展開─┘
│アイテム確定→追加のターゲットリスト
│ ↓         ↑
│コマンド決定→必要なターゲットが確定していなければ
│ ↓
│コマンド実行→(終了)
│ ↓
└出力をターゲットリストに

全ての状態遷移は、ホットキー/ローカルホットキーに割り当てる。
アイテム確定、コマンド決定、実行など、複数の遷移を1キーに割り当てることも可能。
Enterに割り当てる処理では、コマンド未指定時ターゲット種別に応じたデフォルトコマンドを実行。


●リスト種別
・コマンド(内部コマンド、外部コマンドライン)
・ファイルパス
・ウィンドウハンドル(コントロールの場合も)
・テキスト


●リスト形式
(視認用タイトル)(\t検索用の目印)*\t(本体)


●サブアイテムの展開
ファイルパス→フォルダとみなして内部ファイルパスリストに展開
       (圧縮ファイルなどに対応した展開処理を追加可能に)
プロセス→所有ウィンドウリスト
ウィンドウ→コントロールリスト
      (スタティックテキストなどは無視する)
コントロール→テキストリスト


●親アイテムの取得
ファイル→親フォルダ
プロセス→プログラムファイル
ウィンドウ→プロセス
コントロール→親ウィンドウ


●仮想アイテム
必要になったときに実体の生成・取得やサブアイテム展開を行う

・圧縮ファイル内のファイル
・リムーバブルメディア上のファイル
・プログラムファイルの仮想プロセス(起動していなければ実行する)
・同、仮想ウィンドウ
・外部コマンドライン


●内部コマンド(例)
・指定ファイルを指定ウィンドウにドロップ
・コンテキストメニューの表示
・指定ファイルの拡張子に関連付けられたコマンドを取得しコマンドリストに
・指定ウィンドウをアクティブ化
・指定ウィンドウを閉じる
・指定コントロールから指定テキストのアイテムを選択
・指定コントロールにフォーカスを与える
・指定テキストをクリップボードにコピー
・指定テキストをGoogle検索


●コマンドの引数
引数の扱いはコマンド内で実装

・例
引数があればターゲットファイルに
→ターゲットファイルがなければ選択させる


●外部コマンドライン
仮想アイテムとして扱い、実行時に内部コマンドに変換して実行

・複数のターゲットファイルを
  一つにつき1コマンドに展開
    一つずつ終了を待つ
    全部いっぺんに実行
  コマンドライン上に列挙する形で展開
・ターゲットテキストを一時ファイル経由でコマンドに与える
・一時ファイル経由で出力をテキストリストに


●絞り込みモード
・通常マッチ
・タイトル部分のみでのマッチ
・正規表現
・除外
・Migemo


●特殊な絞り込みモード
ターゲットリストは不要

・HyperEstraier(インデックス型全文検索)
入力テキストに一致する登録ファイルのパスリストを表示

・Googleサジェスト
入力テキストに対するキーワード候補テキスト一覧を表示


●自動生成型ターゲットリスト
・指定ディレクトリをスキャンしてファイルパスリストを生成
・アクティブウィンドウをファイルパス、仮想ウィンドウ、仮想プロセスリストに追加
・クリップボードのテキストをテキストリストに追加

スキャン中に検索できないとうざいので、非同期コマンドとして別スクリプトで実行


●外部プログラムからのコマンド実行


●設定
・INIファイルに記述
・コマンドでスクリプトに変換・再起動
・設定変更コマンド


●全てをモジュール化する
・コマンド
・リスト種別の定義(名前、デフォルトコマンド、デフォルト絞り込みモードなど)
・リスト生成機能
・サブアイテム展開・親アイテムの取得
・アイテムの仮想化・実体化
・絞り込みモード
97管理人 ★:2008/02/16(土) 23:51:54
>>96
追加

●候補リストの1位より入力内容を優先するモード
候補リストで選択を行っていない場合、Enterなどで入力内容自体がターゲットとして確定する。
Shift+Enterでは逆の動作になる。
98unnamed.ahk:2008/02/22(金) 19:54:38
wktk
99管理人 ★:2008/02/24(日) 20:14:07
マウスジェスチャ2、新規ボタン一発作成機能追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

8つほどボタンが付いているマウスを手に入れたので、ボタン定義スクリプトを作成してジェスチャに使うことに。
既存のボタン定義スクリプトをコピーして書き換えるのが思いの外面倒だったので、設定画面に作成補助機能を追加した。
これで、マウスのドライバユーティリティで拡張ボタンに割り当てたキー名と、登録したいボタン名を入力するだけで、定義スクリプトを作成できるようになった。
こんなマニアックな機能、使う人がいるかは疑問だが。
100管理人 ★:2008/02/24(日) 20:14:14
マウスジェスチャ2、新規ボタン一発作成機能追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

8つほどボタンが付いているマウスを手に入れたので、ボタン定義スクリプトを作成してジェスチャに使うことに。
既存のボタン定義スクリプトをコピーして書き換えるのが思いの外面倒だったので、設定画面に作成補助機能を追加した。
これで、マウスのドライバユーティリティで拡張ボタンに割り当てたキー名と、登録したいボタン名を入力するだけで、定義スクリプトを作成できるようになった。
こんなマニアックな機能、使う人がいるかは疑問だが。
101管理人 ★:2008/03/01(土) 11:54:34
マウスジェスチャ2 チルトとかのための機能を追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

マウスの左右チルトにジェスチャを割り当てたい。
しかし、従来の仕様では、ボタンを押している間中PostMessageし続けるというようなことが出来ない。
そこで、トリガが放されるまでタイマーでジェスチャサブルーチンを呼び出し続けるMG_While()関数を追加した。
トリガが放されたときに一度だけ別の動作を実行させたり、押し下げ・押し上げ時のみ実行する機能も付けた。

この関数により、WM_HSCROLLを繰り返しPostMessageさせることで、チルト風の動作を実現できるようになった。
更に、「右ボタンを押しながらチルト」や「タイトルバー上でチルト」など、様々な操作にスクリプトを割り当てられる。
設定の仕方が多少ややこしいが。
102管理人 ★:2008/03/10(月) 04:06:49
本体がv1.0.47.06になって、動的関数名による呼び出しが追加されたことで、>>96のモジュール機構が実現しやすくなりそうだ。
だが、不特定のスクリプトファイルを#Includeする方法がないと、設定スクリプトで動的にスクリプトを生成しなければならないことには変わりない。
ワイルドカードによる一括#Includeなどが欲しいところだ。
関数が存在しているかどうかのチェックも今の所用意されていないが、下記のようにすれば代用は出来そうだ。
IsFunction(n){
return p:=RegisterCallback(n) && !DllCall("kernel32.dll\GlobalFree","UInt",p,"UInt")
}
103管理人 ★:2008/03/13(木) 00:50:00
MouseGesture.ahk 画面端接触認識機能を追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

画面端はOrchisで使っているので自分では使わないだろうけど作ってみた。

認識処理自体は、SysGetで画面サイズを取得し、タイマーでカーソル位置を監視するだけで出来た。

画面端接触をボタンとして定義し、「画面上端でカーソルを左に移動」とか
「画面左端で右クリック」という操作も定義できるように。
その為、「画面端への接触」は接触した瞬間に発動する。
一定時間触れ続けたときに発動させたければ、「MG_Timer()」を使えばいい。

当初は、上下左右の各辺を任意の数に分割できるようにしようかと思ったが、
4つ以上は誰も使わないだろうからやめた。
分割数の設定自体を廃止してしまい、分割無し、2分割、3分割を共存させられるように。
使いたい部分の定義モジュールを手動でMG_Buttonsフォルダに入れるようにした。
これにより、「縦は2分割、横は3分割」のような使い方も可能に。

角の認識も可能にしたが、特別な処理は行っていないため、
角に触れる前に辺への接触が認識されると、角を認識させるのが困難なので、、
角を使うときはその角に接している辺は使わないようにする必要がある。
「各辺の中央1/3と角」のような使い方をしてもいい。

そんな感じで、かなり適当な作りだが、どうせ自分では使わないので構うまい。


なお、条件定義はジェスチャ認識開始時にカーソル下のウィンドウを手がかりにしているため、
画面端にカーソルを移動したときに操作したいウィンドウがしたにあるとは限らないため、
アプリケーション別の割り当てには使いづらい。
だが、そもそも画面端という絶対的な存在によってアプリケーション別の動作という
相対的な現象が起こるのはおかしいし、仕様が一貫していないと覚えにくいので、このままでいいだろう。
104管理人 ★:2008/03/13(木) 08:00:24
MouseGesture.ahk カーソル下ウィンドウではなくアクティブウィンドウをターゲットにするオプションを追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

一応付けた。
ホイール操作やキーボード操作はアクティブウィンドウに送られるのが普通だから、
こちらの仕様の方が一貫性という面では正しいような気もする。
というか、非アクティブなウィンドウがターゲットのとき、Sendが正しく動かない。
ControlSendだと、プログラムのキー操作認識方法によっては動作しないし、困ったもんだ。
105管理人 ★:2008/03/13(木) 08:03:46
これで右ボタンを押した時点でアクティブ化させれば大体何とかなるか

[Gesture_Start]
G=RB_
Default=WinActivate
106管理人 ★:2008/03/13(木) 20:04:57
MouseGesture.ahk スクロール機能追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

IEのホイールクリックのやつみたいなのがあれば便利かもと思い作ってみた。
ジェスチャ開始位置からの相対距離に応じてスクロールする。
MG_While()と組み合わせて、ボタンを押している間繰り返し実行することで使う。
IEの場合、ホイールボタンを放すことによって開始され、解除するのにもう一度クリックが必要だが、
こちらはボタンを放せばすぐに停まるので使いやすいかも知れない。

ついでに、JaneStyleのビューアとかにあるドラッグスクロールも作ってみた。
WM_[H|V]SCROLLは、コントロールが定めた単位でスクロールするため、
1単位とピクセルを正しく対応させるのが難しい。
GetScrollInfo()などのAPIで調べられるはずだが、IEなどから正しく取得できないので諦め、
適当に1スクロール単位あたりに必要なピクセル数を指定するようにした。
107管理人 ★:2008/03/15(土) 11:24:12
違った、IEもホイール押しっぱなしでカーソルを移動すると押してる間だけスクロールする。
ホイールだから押しづらいが。
108管理人 ★:2008/04/01(火) 00:05:30
「AutoHotkeyを廃れさせるページ」にて、JavaScriptベースのAutoHotkey風スクリプトユーティリティ「JHK」のテスト版を公開
http://lukewarm.me.land.to/

かねてからAutoHotkeyの行き当たりばったりに拡張されてきた言語仕様には辟易していたので、
JavaScriptエンジンを利用してAutoHotkey風のツールを作ることに。
SpiderMonkeyを使おうかと思ったが、なにやら面倒くさそうだったので、
とりあえずWindowsScriptControlを使う。
ホットキー割り当てとキー操作の送信などの機能を実装してみたところ、それなりに動作するようになった。
スクリプトコントロールのリファレンスやサンプルが少なくて、
エラー関連の動作などがよく分からずに困ったが、とりあえず何とかなった。

ホットキーに動作を割り当てるスクリプトは、以下のような感じになる。
面倒くせえ。
しかし、JavaScriptなら、文字列から関数を生成することも可能なので、
いくらでもラッパーを作って簡略化可能である。

with(Keyboard){
map("#F1",function(){
alert("終了します");
exit();
});
map("#F2",function(){
run("notepad");
});
map("#F3",function(){
send("this is test");
});
}
alert("起動しました");
109管理人 ★:2008/04/02(水) 01:53:17
JHKはエイプリルフールのネタである。
ActiveX.ahkを使って、AutoHotkeyで実装した。
110管理人 ★:2008/07/11(金) 19:21:35
USBタッチパッドがまともな日本語パッケージで売り出されていた
http://plusd.itmedia.co.jp/pcuser/articles/0806/19/news050.html
ので買ってきた。

「ありそうでなかった」とか書いてあるが、普通に前からあったような気がする。
今は無きUser'sSideとかで売ってた。

キーボードの下に消しゴムを挟んで浮かせ、その隙間に本体上部の枠を挟んで設置。
やや厚手の片手用パームレストを2つ買って、左右に設置した。
スタンダードモデルだと少し幅が広すぎて、6とか7を押そうとすると親指の付け根がパームレストからはみ出して不安定な感じだ。


ドライバはGlidePointとかいうやつ。
ALPS社製のはずだが、以前作ったThumbRemap.ahkの奴とは作りが違うようだ。
無くても別に困らないが、せっかくだからそのうち対応させよう。
111管理人 ★:2008/07/12(土) 03:14:37
ドライバをインストールすると設置する向きを変えられることに気付いた。
ただし、領域端でのスクロール機能はちゃんと回転してくれない。
これにより、左右パームレストの間隔を狭められると共に、ボタンが横に来るので親指でクリックできるようになる。
112管理人 ★:2008/08/24(日) 13:04:08
MouseGesture.ahk ツリー/リストビューのヒットテストなどを追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

ツリービューやリストビュー上では、TVM_HITTESTやLVM_HITTESTで、指定座標がアイテムのどの部分かなどを調べられる。
しかし、情報を構造体で受け渡す必要があるため、VirtualAllocEx()で対象プロセス上にメモリを確保した上で
WriteProcessMemory()やReadProcessMemory()で操作しなければならず、非常に面倒くさい。
どうせ自分では使わないので保留していたが、度々要望があったので、しかたなく実装することにした。

ターゲットのプロセスIDを記録しておく必要が出てきたため、MG_PID変数を新たに追加した。
他にはプライオリティの変更くらいしか使い道がなさそうだが。
113管理人 ★:2008/09/08(月) 00:02:22
MouseGesture.ahk ターゲットウィンドウ・コントロールの位置サイズなどを得る関数を追加
http://lukewarm.s101.xrea.com/myscripts/MouseGesture.html

一つのウィンドウ上に同種のコントロールが複数存在するうちの片方だけにマッチする条件を作りたいときなどに使うかもしれない。
そんな割り当てが必要になることがあるのかは謎だが。
114管理人 ★:2008/09/12(金) 00:04:22
MouseGesture.ahk マウスカーソルを判別する機能を追加

これにより、HTMLヘルプなどのIEコンポーネントでも、ホイールクリックで新規ウィンドウで開くを実現できたりするようになる。

GetCursor()では自分のスレッドのカーソルしか取得できないが、AttachThreadInputを使う事で他のスレッドのカーソルハンドルを得られる。
矢印などの標準カーソルのハンドルは、0x10011〜0x10029などの値で、複数の環境で同じ値だったので、とりあえず一定だと思う事にして、
カスタム条件式のテンプレートとして用意した。

あと、スクリプトの紹介ページを微妙に詳しくした。
115管理人 ★:2008/09/12(金) 10:10:36
MouseGesture.ahk ターゲットプロセスのコマンドラインを取得するMG_CommandLine()を追加

AutoHotkeyやJavaなど、ホストプログラムによって実行されるタイプのプログラムは、
ウィンドウクラスや実行ファイル名がどれも一緒になってしまって判別に使えない。
タイトルが不定だったり、他のプログラムと同じだったりすると、プログラムを見分ける手立てがない。
そこで、コマンドラインによる条件判別を可能にする事に。

自分のプロセスのコマンドラインは、「GetCommandLine」というAPIで取得できるのだが、
他のプロセスのコマンドラインを取得するAPIは存在しない。
しかし、何とかして対象プロセスからコマンドライン文字列を盗み出したい。
当初は、フックを利用して関数を注入するとか、WriteProcessMemoryで
機械語のコードを書き込んでCreateRemoteThread()で実行するとか、
ややこしい方法しか思いつかず苦労したが、結局意外と簡単な方法で済んだ。

実は、コマンドライン文字列が格納されているアドレスはどのプロセスでも一定で、
GetCommandLineはそのアドレスを返しているだけなのである。
格納アドレスはkernel32.dllのバージョンによって異なるようだが、GetCommandLineAの
アドレスから機械語のMOV命令の分を飛ばしたアドレスを読めば取得可能である。
都合の良い事に、GetCommandLineAのアドレスは全てのプロセスで共通なので、
自分のプロセス上で文字列の格納アドレスを調べ、「ReadProcessMemory」で
対象プロセスの当該アドレスから文字列をコピーすれば、コマンドラインが得られる。
116管理人 ★:2008/09/13(土) 06:28:16
MouseGesture.ahk MG_CommandLine()がAutoHotkey以外のプロセスで動作しないのを修正

一番最後のアドレスはプログラムによって違うので、ターゲットプロセス上から取得する必要があるのを見落としていた。
117管理人 ★:2008/09/13(土) 06:49:07
MouseGesture.ahkをWindowsVistaのUAC下で無理矢理使用する方法

UACの一般権限では、管理者権限のプロセスをSendなどで操作できない。
逆にAutoHotkeyのプロセスをが管理者権限で実行されている場合、
MG_CommandLine()で一般プロセスのコマンドラインを取得できないなどの制限がある。

MG_User.ahkに「#SingleInstance,off」を記述し、Disableに「MG_CommandLine()=""」
を登録して、一般権限と管理者権限の両方でMouseGesture.ahkを実行すれば、
両方の権限のプロセスで完全に動作するような気がする。面倒だが。

ところで、Vistaでタスクマネージャを見てみたら、コマンドラインが普通に表示できるようになっていた。
APIが追加されたのだろうか?こいつでも、権限の違うプロセスのコマンドラインは取得できないようだった。
118管理人 ★:2008/10/02(木) 23:17:25
MyScriptsに「クリップボード操作関数群」と「ファイルドロップ関数」を追加

前から作ろうと思っていて放置していたものを作った。
テキスト以外の任意のクリップボード形式を読み書きする関数群。
ファイル名のリストをエクスプローラなどに貼り付けられる形式でコピーするために。
エクスプローラやダイアログで開いているフォルダにファイルを送りたいときに使うかも。

ファイルドロップ関数は、改行区切りで指定したファイル群をWM_DROPFILESで指定ウィンドウに送る。
ウィンドウへのドラッグ&ドロップでしかファイルを受け付けないソフトなどに使用するかも。
119管理人 ★:2009/03/06(金) 05:30:52
MigemizeEverything

Everything(http://www.voidtools.com/)で無理矢理Migemo検索する。
超遅い。普通に変換した方が速い。
マルチバイトに対応していないらしく、時々誤検出する。


投稿ファイル名: MigemizeEverything.zip
http://lukewarm.s101.xrea.com/bbs/file/1146398137_119.zip
サイズ: 1376 bytes
120unnamed.ahk:2009/03/08(日) 17:01:37
はじめまして

ワードパッドのウインドウ上にあるボタンで
フォントの色、サイズ、上線のつけはずしを
操作するスクリプトを作りました。
これの座標を指定してクリック、ではなく
直接命令を送るスクリプトは作れるのでしょうか?
inspect_toolbar_id はうまく動きませんでした。
121unnamed.ahk:2009/03/09(月) 16:54:12
120ですが、なんとか出来そうなので自分
でやってみます。ありがとうございました。
1221:2009/03/10(火) 01:28:45
120/121です。inspect toolbarとResource Hacker
で無事できました。ありがとうございました。
123管理人 ★:2009/03/23(月) 06:07:20
2chのAutoHotkeyスレにMouseGesture.ahkの質問が書かれていたのに、DION規制で書き込めなくて困る。
誰か親切な人があと555モリタポほど恵んでくれれば、p2で書き込めるのだが。
http://find.2ch.net/moritapo/give.php?RK=93127982ff852cf03449c204be39fc07&AM=&CM=エノユ、「、熙ャ、ネ、ヲ、エ、カ、、、゙、ケ
124管理人 ★:2009/03/31(火) 08:44:17
「AutoHotkeyを廃れさせるページだったところ」にて、メモリの直接操作とネイティブコードの呼び出し機能に特化したJavaScript 1.8処理系を公開。
http://lukewarm.me.land.to/

WSHとAutoHotkeyを気分によって使い分けるのに嫌気がさしたので作ることに。

Firefoxで使われているJSAPIなる物を使う。
JSAPIだけをビルドする方法が分からず、何故かFirefox全体をビルドする羽目に。
しかも、出来上がったDLLがMSVCR90.DLLに依存していて、テスト用の環境で動作しない。
Firefox3.1betaに同梱されていたDLLに差し替えたら起動出来た。

とりあえず、DLL関数の呼び出しとコールバック関数の生成、メモリの確保・読み書き用の関数を作成。
一部AutoHotkeyのソースを参考にした。
とりあえず、EnumWindows関数を呼び出してコールバックを受け付け、可視ウィンドウのタイトルを出力するという処理が動作するようになった。
JavaScriptは動的に関数を生成出来るので、いちいちラッパー関数を定義したりしなくても、普通の関数と同じ感覚で呼び出せるのが便利だ。

しかし、Unicode対応でないAPIで日本語を扱うと文字化けする。
どうやら、JSAPIの内部文字コード(UTF-16)からANSI文字列への変換時に、Shift_JISではなくlatin-1として変換されている模様。
修正箇所が多くて面倒くさいが、WideCharToMultiByteで変換するようにすれば解決するだろうか。
125管理人 ★:2009/04/01(水) 00:30:56
間違えて一日早く公開してしまったが、上記はエイプリルフールのネタなので本気にしないように。
126管理人 ★:2009/04/05(日) 21:11:42
とりあえずいくつかのバグ修正と文字列変換のマルチバイト対応化、JSAPIの構造体ポインタを取得する機能の追加、非コンソール版の作成を行っておいた。
コマンドライン引数の取得やテキストの出力など、何から何まで自分で定義しなくてはならないが、使おうと思えば使えるはずである。
127管理人 ★:2009/04/12(日) 17:56:35
実行速度の比較。

AutoHotkeyが1.0.48で大幅に高速化されたというので、SpiderMonkeyと比べてみた。

1から60万までを文字列として連結するという処理の所要時間を計測したところ、
AutoHotkey1.0.47は5秒台、
AutoHotkey1.0.48は2秒台、
無調整のSpiderMonkeyは6秒台、
JITコンパイルを有効にしてGC自動実行を抑止したSpiderMonkeyが4秒台だった。
1.0.48は確かにかなり高速化されている。

しかし、A_Indexを使わずに別のカウンタ変数を使うなどの変更を行うと、すぐに4秒以上かかるようになってしまった。
また、SpiderMonkeyでは、文字列として連結せずに配列にpush()するようにすると0.4秒程度になるなど、方法によっては桁違いに高速になる。
128管理人 ★:2009/05/04(月) 04:59:34
>>124をマルチスレッドに対応させるなどした。

SpiderMonkeyをマルチスレッド対応させる上で主に注意すべきなのが、GCのタイミングであるらしい。
あるスレッドが何かに使うためにオブジェクトを生成して、他から参照されている状態にする前に、他のスレッドでGCが実行されてしまうと、使うはずだったオブジェクトが解放されてしまう恐れがある。
そこで、リクエストという仕組みで、スレッドがJSAPIの処理中であることを通知して、GCが発生しないようにしておく必要があるらしい。
GCが必要になると、他の全てのスレッドのリクエストが完了/中断されてGC可能状態になるまで待ち合わせてから、GCが実行されるらしい。
オブジェクトなどへのアクセスは、排他制御が行われるので、複数スレッド間で共有しても問題無いらしいが、共有オブジェクトへのアクセスが多発すると、待ち合わせが多発して効率は落ちるようだ。

大体の仕組みが分かったので、まず既存のコードにJS_[Begin/End]Request()などの処理を追加した。

次に、マルチスレッドでスクリプトを実行できるようにする。
とりあえず、別途作成したJSAPIコンテキストを使い、新規スレッドで指定のスクリプトを実行するという関数を用意してみた。
また、関数をネイティブコード側から呼べるようエクスポートする関数に、不特定多数のスレッドから呼ばれても大丈夫なようにする機能を追加。新規コンテキストを生成するコストが大きいため、従来方式と選択可能にした。
前者はグローバルオブジェクトも新規作成するが、後者は元のコンテキストのグローバルオブジェクトをそのまま利用する。

とりあえず、以前の1から60万までを文字列として連結する処理を2つのスレッドで実行させてみたところ、異様に遅くなった。
両方のバージョンとも速度は大差ないので、問題なのはGCの待ち合わせのようだ。
文字列やオブジェクトをあまり生成しないであろう素数探索処理を並列実行させたところ、シングルスレッドの時とほとんど同じ速度で実行された。(マルチコア環境なので)

コンテキスト作成版と関数エクスポート版での速度差はあまり見られない。
グローバルオブジェクトを共有すると、文字列やオブジェクトの操作時にも共有部分へのアクセスが発生して遅くなるかと思ったが、それほど問題にはならないようだ。
関数エクスポート版では、グローバル変数や関数が生成されたスコープでの変数にも普通にアクセスできるので、利便性が高い。

実際にマルチスレッド処理が必要になるのは、処理時間のかかるAPIの実行中に他の処理を行わせたい場合等だろうから、GCによる効率の低下はそれほど気にする必要はないだろう。
どうしてもそのような処理を並列実行させたい場合は、プロセス自体を並列化させればいい。
129unnamed.ahk:2009/05/11(月) 12:56:46
.NETFrameworkで作成されたアプリケーションのコンボボックスの選択値を取得する方法を知っている方がみえましたら教えてください。
ControlGet関数でChoiceを使用しても値を取得できません。
よろしくお願いします。
130管理人 ★:2009/05/11(月) 14:32:11
スレ違い
131管理人 ★:2009/12/12(土) 02:39:52
「File.exists」か「File.exist」か
迷って、検索して以下のページを見つけた
tp://piro.sakura.ne.jp/latest/blosxom/topics/2008-10-08_naming.htm

が、結局文字数の少なさを優先して、「has」「is」以外は原型にすることにした。
132管理人 ★:2009/12/23(水) 08:27:08
>>124を久しぶりに更新。
ネイティブコード関数を呼び出したときに、GetLastError()の値を取得して例外を投げる機能を追加した。
どうやら、ラッパ関数の中で使われているJSAPI呼び出しでエラーコードがリセットされてしまうらしく、
GetLastError()をラップしても役に立たないため。

それと、>>131は、exist以外の例が思い浮かばないので、sをケチるのはやめてexistsにした。
133管理人 ★:2009/12/27(日) 12:07:20
>>124を更に更新。
指定アドレスの64ビット整数を読み書きする機能を追加した。
符号無しであれば既存の機能だけでも無理矢理何とかなりそうだが、
符号付きの64ビット整数の負の値を読み書きするのが面倒くさそうだったので。
134管理人 ★:2010/01/01(金) 08:22:57
去年、延々と人知れず作っていたスクリプトを公開してみる。
>>124をまともに使えるようにするためのライブラリである。
ng.exeのディレクトリにlibディレクトリを置いて、ng.jsに
__NG__EvalFile(__NG__HostPath().replace(/([^\\]+)$/,"\\lib\\Base.ng"));
と書き、その下にプログラムを記述すれば試せる。
コマンドラインで与えられたスクリプトを読み込んで実行する部分とかは、そのうち実装する。

prototype.jsのように、独自のクラス機構を中核としたライブラリになっている。
インスタンスメソッドの他にクラスメソッドを登録でき、ミックスイン的なものによる多重継承のような感じの機能も搭載するなど、色々とややこしくなってしまった。

ドキュメント的な物はまだ無いが、スクリプトの後ろの方を見れば、前の方で定義された機能がどんな感じのものかくらいはわかるかも知れない。


投稿ファイル名: lib.zip
http://lukewarm.s101.xrea.com/bbs/file/1146398137_134.zip
サイズ: 18348 bytes
135管理人 ★:2010/01/30(土) 06:19:45
>>134にスクリプトファイルへの関連付け機能や、それなりのドキュメントなどを追加して、そこそこ実用的な感じにした。
以降は下記のスレで。
http://lukewarm.s151.xrea.com/test/read.cgi/b/1264431038/
136管理人 ★:2010/02/05(金) 00:02:10
http://lukewarm.me.land.to/を更新。
スクリプトが最後に評価した値をプロセスの終了コードにするように。
関数のインポート・エクスポートで、文字列系の型を廃止。
GetLastError()の値を例外として投げる場合、関数の返値をプロパティとして得られるようにした。
101KB
名前: E-mail:
ファイル:
0ch BBS 2005-10-08