XREA.COM Logo XREA.COM Ad

スクリプト投稿スレ

1管理人 ★:04/08/12 21:53 ID:???
自作スクリプトの公開、AutoHotkey.ini晒しなどに使ってください。

大きなスクリプトはアップローダーに投稿してそのURLを貼って下さい。
http://lukewarm.s41.xrea.com/AutoHotkey/up/
2unnamed.ahk:04/09/17 16:22 ID:dg3Nrny+
先日お世話になりました6です
初めてまともなスクリプトが出来ましたので置いていきます
ホイール回転でウィンドウをアクティブ化します
では以後名無しに戻ります。

;ホイールでアクティブ化
~WheelDown::
~WheelUp::
MouseGetPos,,, title
WinActivate , ahk_id %title%
3unnamed.ahk:04/09/29 22:10 ID:???
SetTitleMatchMode ,2 ;部分一致

;● [F1] Help KILLER
$F1::
IfWinNotActive,ahk_class CabinetWClass ; Explorer
IfWinNotActive,ahk_class Progman ; Desktop
IfWinNotActive,Microsoft%A_Space% ; MS系 Office,IE
Send,{F1}
return


F2押下率の多いEXCELでうっかりF1ヘルプ呼び出しては鬱になってたので作ってみた。
面倒なんでタイトルに "Microsoft "と名のつくもの全て対象にしてるので
"Microsoft Officeってどうよ.txt - 秀丸" や
"Microsoft Acsses Club - unDonut"なんかでもヌッコロされます。
誤作動が嫌な場合は IfWinNotActive,Microsoft%A_Space% を消して
ahk_class で殺したいアプリのクラス名を列挙してってください
4unnamed.ahk:04/10/01 05:48 ID:???
;● ウインドウ位置移動/リサイズ
#Left:: ;[Win] 移動 (←)
#Right:: ; (→)
#Up:: ; (↑)
#Down:: ; (↓)
#!Left:: ;[Win+Alt] リサイズ(←)
#!Right:: ; (→)
#!Up:: ; (↑)
#!Down:: ; (↓)
WinGetPos,x,y,w,h,A
if A_ThisHotkey = #Left ;
x -= 50
else if A_ThisHotkey = #Right ;
x += 50
else if A_ThisHotkey = #Up ;
y -= 50
else if A_ThisHotkey = #Down ;
y += 50
else if A_ThisHotkey = #!Left ;
w -= 50
else if A_ThisHotkey = #!Right ;
w += 50
else if A_ThisHotkey = #!Up ;
h -= 50
else if A_ThisHotkey = #!Down ;
h += 50
WinMove,A,,%x%,%y%,%w%,%h%
return
5unnamed.ahk:04/10/04 17:07 ID:???
起動時にMSIME20002の言語バーを完全に消すためだけに使ってるよ……

SetControlDelay,100
Run,"C:\WINDOWS\System32\RunDll32.exe" shell32.dll`,Control_RunDLL input.dll
WinWait,テキスト サービスと入力言語
ControlClick,Button8
WinWait,言語バーの設定
Control,Uncheck,,Button2
ControlClick,Button6
WinWait,テキスト サービスと入力言語
ControlClick,Button10
6unnamed.ahk:04/10/05 21:14 ID:???
>>2
多分コピペし忘れだと思うけど、末尾 return抜けとる。
あと、ウインドウハンドルを入れる変数は titleよりwhdのほうが
サンプル的にはいいと思うが、どうよ

人様のソースにどうこう言えるほどスキルないけど
とりあえず気がついちゃったので亀レスしてみる
7unnamed.ahk:04/10/05 22:09 ID:???
; アクティブウインドウをシェード(キーバインドはてきとー)
#!ENTER::
#!x::
WinGet,whd,ID,A
GoSub,sub_WindowShade
return

;[Win]+ホイール↑↓で非アクティブウインドウもシェード
#WheelUp::
#WheelDown::
MouseGetPos, , , whd
GoSub,sub_WindowShade
return

;----------------------------------
; Window Shade Toggle sub
;  in whd : Window handle
;----------------------------------
sub_WindowShade:
WinGetPos,x,y,w,h,ahk_id %whd%
if wshade%whd% > 0
{
StringTrimLeft,h,wshade%whd%,0
wshade%whd% = 0
}
else
{
wshade%whd% = %h%
h = 27 ; ← 値はタイトルバー高さに合わせ適当に調節のこと
}
WinMove,ahk_id %whd%,,%x%,%y%,%w%,%h%
return


ウインドウハンドル別に動的変数を作ってみるテスト
PS.誰かタイトルバーWクリックで何かするようなサンプルコード書いたって下さい
8misc 21:04/10/19 22:50 ID:b6ZdtGG+
autohotkeyの宣伝しようかと思ったけど失敗した…
とりあえず作った奴あぷろだに上げます
ふぬああの画面上でホイールまわしてチャンネルが切り替えられます
マイナーソフトなんで需要ないと思うけど
9質問スレ20:04/10/22 14:23 ID:???
質問スレ15〜に関連して、現在起動中のウィンドウの情報を
クリップボードに格納するスクリプトをあげてみました。
http://lukewarm.s41.xrea.com/AutoHotkey/up/file/002.zip

GUIコマンド、Progressコマンドの練習の意味もあったんで、
使ってみた人、感想とかよろしく〜。
・・・自分で作っておきながら、Timerは使ってないんで。
変数名ながいのは仕様なんで、突っ込まんといてくだたい。
そういえば、GUIコマンドってなんかまだ不具合多い気がしる。
GUI,AddでDisableきかなかったり・・・(Ver1.0.21)

それにしてもAutoHotkeyという名前なのに、
ホットキーを使ったスクリプトあんまり書いてない・・・
10unnamed.ahk:04/10/23 20:21 ID:???
半透明でクリックが下のウィンドウに抜けるウィンドウを作るテスト。
使い道は不明。

Gui,-Border +ToolWindow
Gui,add,Text,,aaaaaaaaaa`nbbbbbbbbb

Gui,+E0x00020020
WinSet,Topmost,ON,ahk_class AutoHotkeyGUI
WinSet,Trans,192,ahk_class AutoHotkeyGUI
Gui,Show
return
11unnamed.ahk:04/11/27 05:36 ID:???
タスクバー上配置用,タスクバーとウインドウが重なったら押し戻す
「助けてってば〜!」なんかで知られる機能でつ

;;; AutoExecute
init:
SetTimer,tm_WinCheck,1000
return

tm_WinCheck:
WinGet,ast,MinMax,A
if ast<>0, return
WinGetPos ,ax,ay,,,A
if ay<27 ;※
{
ay = 27 ; ※
WinMove,A,,%ax%,%ay%
}
return


※値はタイトルバー高さに合わせ適当に調節
(ちなみに27はクラシックモード一列の時のタスクバー高さ)
12sage:04/11/27 12:44 ID:4XIwsR8w
>11
単独で動かすには、#Persistent 追加ですな。

これってタスクバーが画面の上部にあるときだよね?
タスクバーの位置・高さを頻繁に変えたりはしないと思うんだけど、
WinGetPosあたりでタスクバーの位置・高さを得て、
タスクバーが画面の上部以外でも使えるようにすると良いかも。
13unnamed.ahk:04/11/27 12:45 ID:4XIwsR8w
やば、名前の方で下げちゃったよw
14unnamed.ahk:04/11/27 23:56 ID:???
>>12
>単独で動かすには、#Persistent 追加ですな。
そですね、既存のスクリプトにコピペすることしか考えてなかった
フォローサンクス

>WinGetPosあたりでタスクバーの位置・高さを得て、
>タスクバーが画面の上部以外でも使えるようにすると良いかも。
タスクバーは ahk_class Shell_TrayWnd で取得できるんですね。
アホなのでSendMessage やWM_メッセージばかり調べとりました

タスクバー位置考慮して一通り直し終わった後、マルチモニタをどうしようかと
SysGetpos を調べたら…ずばりタスクバー部分除いた境界座標とかあってガクン(´・ω・`)

つうわけで修正版です。当方マルチモニタ環境ではないのでテキトーに
処理入れ込んだだけで試してません。動作おかしいようでしたらどなたか修正ヨロシコ
15unnamed.ahk:04/11/28 00:00 ID:???
#Persistent

;;;--- AutoExecute ---
init:
SetTimer,tm_WinCheck,1000
return

; --- スクリーン外に出てマウス操作できないウインドウを押し戻す ---
tm_WinCheck:
WinGet,ast,MinMax,A
if ast<>0, return

;タスクバーの部分を除いた境界座標を取得
SysGet, mcnt,MonitorCount
Loop, %mcnt%
{
SysGet, ww,MonitorWorkArea,%a_index%
if a_index=1
{
sL = %wwLeft%
sT = %wwTop%
sR = %wwRight%
sB = %wwBottom%
}
else ; マルチモニタ環境用(動作未確認)
{
if sL > %wwLeft%, SetEnv,sL,%wwLeft%
if sT > %wwTop%, SetEnv,sT,%wwTop%
if sR < %wwRight%, SetEnv,sR,%wwRight%
if sB < %wwBottom%, SetEnv,sB,%wwBottom%
}
}

;ウインドウドラッグ可能な境界範囲を計算
;タイトルバー左 [_]□[X] + α
;;;SysGet, ww,29 ; タイトルバー内ボタン幅
SysGet, ww,52;小タイトルバー内ボタン幅
ww *= 3 ; [_]□[X]
ww += 30 ; +α
sL += %ww%;

;タイトルバー右 小アイコン + α
SysGet, ww,49 ; 小アイコン幅
ww += 30 ; + α
sR -= %ww%;

;下
SysGet, ww,35 ; ウィンドウの最小トラッキングサイズ高さ
sB -= %ww%

; スクリーン領域外のウインドウを押し戻す
WinGetPos ,ax,ay,aw,,A
ifay<%sT%, WinMove,A,,,%sT% ; 上杉
ifay>%sB%, WinMove,A,,,%sB% ; 下杉
ifax>%sR%, WinMove,A,,%sR% ; 右杉
ax += %aw%
ifax<%sL%
{
ax = %sL%
ax -= %aw%
WinMove,A,,%ax% ; 左杉
}
return
16unnamed.ahk:04/12/15 19:03 ID:???
いつのまにかに便利な組込み変数が増えてるね
管理人さんの Ctrl key double tap スクリプトも今だったら
↓な感じでいけるぽい

~CTRL::
        if A_PriorHotkey <> %A_ThisHotkey%, return
        if A_TimeSincePriorHotkey > 400, return
            ;some action


return
17管理人 ★:04/12/25 17:46 ID:???
適当に作ったアイコンランチャ

DetectHiddenWindows,On
Gui,-Caption +E0x00000080
Gui,Color,000001,000001
Loop,Read,%A_ScriptDir%\iconlaunch.txt
{
IfExist %A_LoopReadLine%
Gui,Add,Picture,gIconLaunch ym,%A_LoopReadLine%
}
WinWait,%A_ScriptName%
WinSet,TransColor,000001
WinSet,Topmost,On
Gui,Show,x0 y0
DetectHiddenWindows,Off
return

IconLaunch:
GuiControlGet,tmp,,%A_GuiControl%
Run,%tmp%
return
18unnamed.ahk:04/12/27 16:04 ID:???
>17
そういえば新しいバージョンでアイコン表示できるようになったんだっけか
次のバージョンでは、EXE以外のアイコンも表示出来るようになるかな
Miscの43あたりから書かれてるの内容似るけど、やっぱりボタン押し下げで起動ってのは良くない希ガス
ボタン押してから「まちがった」とか「やっぱやめよ」とかって思うことがあって
ボタン押し上げ起動なら、そういうときにカーソル位置ずらしてボタン離すか
右クリックすればキャンセル出来るけど、押し下げで起動だとデキネ
とんだ先(IconLaunch)にkeywait挟んで云々やれば押し上げ起動もなんとか出来そうだけど
右クリックキャンセルはちょっとめんどくさそう

ランチャーはWindowsでデフォでついてるクイックランチャー(タスクバーのスタートボタンと
最小化ウインドウが並ぶところの間にあるやつ)を独立させたやつが使いやすいんだけど
AutoHotkeyであれくらい出来るようにならないかな...
19unnamed.ahk:04/12/27 19:07 ID:???
最初のMouseDownトリガが拾えれば、スクリプトの書き方でどうにかできる問題ではあるんだが
確かに面倒臭くはある。
どうせCALLBACK情報フックして横流してるんだろうし、MouseDown, Up, Click, DoubleClickあたりを
それぞれ別イベントとしてサポートしてくれるとありがたいのだが
20unnamed.ahk:05/01/10 22:39 ID:???
最近始めました。便利なんですがそれ以上にスクリプト作るのがおもしろいです
リロードするのがめんどいんで作ってみました
AutoHotkey.iniを編集後ALT+F4で閉じるとダイアログを消してリロードしてくれます
!F4::
ifwinactive,AutoHotkey.ini
{
send,!{F4}
sleep,500
send,{return}
sleep,500
Reload
return
}
else
send,!{F4}
return
21unnamed.ahk:05/01/11 19:35 ID:???
クリップボードを二個に拡張してみました
二回連続でコピー出来ます
CTRL+Vで貼り付けると古いほうから順番に貼り付けます

~^C::
sleep,50
StringReplace,Clipboard,Clipboard,`n,,1
FileAppend,%Clipboard%`n,clip.txt
return

^v::
line+=1
FileReadLine,temp,clip.txt,%line%
Clipboard=%temp%
StringReplace,Clipboard,Clipboard,,`n,1
send,+{ins}
if line=2
{
line=0
FileDelete,clip.txt
}
return
複数行コピペするのがややこしくって力技になってます
どなたか改良してやってくださいな
2221:05/01/11 19:44 ID:???
StringReplace,Clipboard,Clipboard,`n,,1
     ↓
StringReplace,Clipboard,Clipboard,`n,\\\,1
StringReplace,Clipboard,Clipboard,,`n,1
     ↓
StringReplace,Clipboard,Clipboard,\\\,`n,1
すみませんちと間違いました。該当部分を入れ替えてください
23unnamed.ahk:05/01/11 21:52 ID:???
>>20
AutoHotkey.iniは使わず、主に***.ahkにスク書いてるんで、これだと使えないのと、
使ってるエディタ(EmEditor)に『関連付けられたプログラムで起動』ってのがあって
それ使ってるからリロードは面倒ではないんだけど、一応ちょっと修正してみた

~!F4::
WinWaitActive, ahk_class #32770,, 1
WinGetText, Text
If Text Contains 変更を保存しますか
If Text Contains AutoHotkey.ini,.ahk
{
Send, {Return}
WinWaitClose
Reload
}
Return

とりあえずEmEditorとメモ帳で使えるの確認したけど、Textだけで判断してるんで危険な予感。
WinGetTextの前にWinGetでProcessNameゲトーして確認したりしたほうがいいかも。

そいやEmEditor最近更新されてないなぁ...。
強調する文字列の設定ファイルがAutoHotkeyオフィシャルで入ってるんで、
AutoHotkeyのスクリプト書くときには良いと思うんだけど、
他のエディタ使ってる人は、文字列強調とかどうしてるんだろ?
24unnamed.ahk:05/01/12 02:09 ID:???
>>23
リロード前提だったらA_ScriptNameでファイル名特定できるんでない?
#Include先のファイルだったらダメだけど

芸ないけど自分の場合

#e::Run,D:\...\hidemaru.exe %A_ScriptFullPath%
#r::Reload

Ctrl+S Win+Rでリロードしながらちょこちょこ修正して動作確認してる。
エディタは開きっぱなしにしてる。別に毎回閉じなくても排他制御で
怒られたりもしないし問題ないみたいです
25unnamed.ahk:05/01/12 13:26 ID:???
この前のクリップボード拡張のやつがパワーアップしました。終了は#ESCです
今回はGUI付でマウスのみでクリップボードに格納します
GUIをアクティブにするのに#Zを当ててますがマウスに割り当てたほうが良いと思います

#Persistent

loop,10
{
xyz+=1
iniRead,a%xyz%,clip.ini,clip,%xyz%
}

Gui, Add, ListBox,h130 w70 Vcopybox ReadOnly gClicked a1 a2 a3 a4 a5 af6 a7 a8 ai9 a10,%a1%|%a2%|%a3%|%a4%|%a5%|%a6%|%ag%|%a7%|%a8%|%a9%|%a10%
WinGetActiveTitle,Winclass
Gui,Show
WinActivate,%Winclass%
oldclip=%Clipboard%
goto,label1
return

Clicked:
GuiControlGet,clipbox,,copybox
Clipboard=%clipbox%
WinActivate,%Winclass%
return

label1:
count=0
count2=1
SetTimer,getclip,10
return

getclip:
oldclip=%Clipboard%
sleep,500
WinGetActiveTitle,Winclass
if Clipboard<>%oldclip%
Gosub, Label2
return

Label2:
loop,9
{
count+=1
count2+=1
clipwait
IniRead,aa,clip.ini,clip,%count2%
IniWrite,%aa%,clip.ini,clip,%count%
}
StringReplace, clipboard, clipboard, `r`n,\\\\, all
IniWrite,%Clipboard%,clip.ini,clip,10
stringReplace,Clipboard,Clipboard,\\\\,`r`n,1
oldclip=%Clipboard%
count=0
count2=1
reload

#z::WinActivate,ahk_class AutoHotkeyGUI
#esc::exitapp
26unnamed.ahk:05/01/13 02:40 ID:???
>>24
そういえば、そんな組み込み変数があったか。となると、

If Text Contains AutoHotkey.ini,.ahk
        ↓
If Text Contains %A_ScriptName%

ってことになるのかな
でも>>23>>20に手を加えてみただけなんで、実際に自分では使ってなかったりする。


>>21,22,25
\\\を含む行をコピーするとおかしくなる

FileReadLineとかIniReadとか使ってるけど、処理が重くなるし、
改行を置換したりするのも面倒な気がするんで、
ClipCopy%A_index% みたいな配列っぽい変数に格納した方がいいと思うんだがどう?

まぁ正直、クリップボード拡張専用のソフト使った方が、テキスト以外も使えたり、
他にもいろいろと便利なんだろうけど(使ってないからよく知らない)。
2725:05/01/13 03:03 ID:???
あれから改造をしました
確かになぜ.iniを使ったかが不明です
今回のは普通に変数に格納してるのでかなり軽快です
作ってる時って夢中でまわりが見えないもんですな
プログラムとかは組んだ事がないので聞きたいことがあります
クリップボードと自分で設定した変数は別物なんですか?
テキストは格納できるのに、ファイルが格納できないのです
ファイルの履歴も取れれば便利なのにな
改造版はアップロード板にあげときますんで、どなたか突っ込んでください
28unnamed.ahk:05/01/13 07:32 ID:???
自分もクリップボード拡張作りかけて放り出したままだ
なるたけメモリ食わないようにしたいんだけど変数や配列の扱いが
どうやったら最適なのかまだ理解できないっつーか。。。
速度的には難あるかもだけどファイルに保存ってのは結構いいアイディアだと思ったよ

あと改行置換は`aとか、テキストでは絶対出てこない制御文字にしたらいいかも
2925:05/01/13 12:04 ID:???
GUIのリストボックスを作るときに
テキストに「|」が含まれるとややこしいことになります。意外な盲点でした
オプション指定で「|」を使うコマンドには要注意ですね
「|」を「I」に置換するなどの作業が必要です
3025:05/01/13 17:05 ID:???
リストボックスじゃなくボタン方式に改良しました。
区切り文字の問題がなくキーボードで選択も出来るので使いやすいかと。
これで完成とするとします。キリがないや
スクリプトはアプロダにあげてありますのでツッコミお願いします。
キーカスタマイズソフトでここまで出来るとは思いませんでした
んではまた名無しに戻ります。お騒がせしました
3128:05/01/13 20:07 ID:???
>>30
選んでも貼り付けされない…と思ったらクリップボード入換えのみの仕様なのね
ESCでウィンドウを非表示にできるといいかも

自分はメニューで作ってたんだけど
 1.キャレット位置にメニュー表示
 2.メニュー表示直後のデフォルトのカーソル位置は前回選択位置
 3.カーソル位置内容をツールチップで内容補完
とかが現状のMenuだとい実現できないんで使い物にならない
GUI版の参考にさせてもらおうと思ったけどGotoの嵐で挫折した orz
3228:05/01/13 20:12 ID:???
せっかくなんで自分も上げて見る

cpex_init:
cpex_Separator = `a /* セパレータ文字 */
cpex_BufMax = 10 /* バッファ数 */
Menu,cpMenu,Add
cpex=
return

;;;クリップボード監視(Ctrl+Cをフック)
$^c::
AutoTrim,OFF
StringCaseSense,ON
ClipBoard =
Send,^c
ClipWait,0.5
if ErrorLevel = 0
{
Loop,Parse,cpex,%cpex_Separator%
{
cpex_cnt=%A_Index%
if ClipBoard=%A_LoopField%
{
StringReplace,cpex,cpex,%A_LoopField%%cpex_Separator%
break
}
}
if cpex_cnt>=%cpex_BufMax%
{
StringGetPos,len,cpex,%cpex_Separator%
StringTrimRight,cpex,cpex,%len%
}
SetEnv, cpex,%ClipBoard%%cpex_Separator%%cpex%
}
return

;;;[ctrl*2] 貼り付け文字列選択MENU表示
~CTRL::
if A_PriorHotkey <> %A_ThisHotkey%, return
if A_TimeSincePriorHotkey > 400, return
WinWaitActive,A
Menu,cpMenu,DeleteAll
Loop,Parse,cpex,%cpex_Separator%
{
if A_LoopField= , continue
StringLeft,cpw,A_LoopField,20
StringReplace, cpw, cpw, %A_Tab%,...,All
StringLen,len,A_LoopField
if len>20, SetEnv,cpw,%cpw%...
Menu,cpMenu,Add,%A_Index%.%cpw%,cpMenu_SelString
}
Menu,cpMenu,Add
Menu,cpMenu,Add,Clear,cpMenu_Clear
Menu,cpMenu,Show
WinActivate
return

cpMenu_SelString:
;;貼付文字列選択
AutoTrim,OFF
Loop,Parse,cpex,%cpex_Separator%
{
if A_Index = %A_ThisMenuItemPos%
{
ClipBoard=%A_LoopField%
ClipWait,0.5
SetTimer,cpex_past,ON
}
}
return

cpex_past:
;;;選択文字列貼り付け
Send,^v
SetTimer,cpex_past,OFF
return

cpMenu_Clear:
cpex=
return
3328:05/01/13 22:26 ID:???
古履歴廃棄で失敗してた orz
しかも Ctrl+X 考慮してないし (鬱氏

;;;クリップボード監視(Ctrl+Cをフック)
$^c::

return



;;;クリップボード監視(Ctrl+C Ctrl+Xをフック)
$^c::
$^x::
AutoTrim,OFF
StringCaseSense,ON

ClipBoard =
StringReplace,cpex_hotkey,A_ThisHotkey,$
Send,%cpex_hotkey%
ClipWait,0.5
if ErrorLevel = 0
{
cpex_cnt=0
Loop,Parse,cpex,%cpex_Separator%
{
if A_LoopField<>
{
cpex_tmp=%A_LoopField%
cpex_cnt=%A_Index%
}
if ClipBoard=%A_LoopField%
{
StringReplace,cpex,cpex,%A_LoopField%%cpex_Separator%
break
}
}
if cpex_cnt>=%cpex_BufMax%
{
StringReplace,cpex,cpex,%cpex_tmp%%cpex_Separator%
cpex_tmp=
}
SetEnv, cpex,%ClipBoard%%cpex_Separator%%cpex%
}
return

スレ汚しスマン
34unnamed.ahk:05/01/14 15:38 ID:???
指摘をうけまして綺麗に書き直しました。アップしなおしましたので、お暇な方は添削をお願いします
http://lukewarm.s101.xrea.com/up/file/006.zip
数日前AutoHotkeyに出会いはじめてスクリプトに触り、寝るのも忘れるほど熱中してしまいました
変数の名前のつけ方のルールとかも知らない素人なので迷惑かけるかもしれませんが今後ともよろしくお願いします
35namazu:05/01/15 01:44 ID:q9Pp6Yw6
Sleipnirは素晴らしいタグブラウザですが、あまりキーボード派向きとは言えま
せん。例えば、IntelliSearchの結果を確認するためには、マウスポインタを持っ
てきてツールチップを出す必要があり、キーボードから手を離さないといけませ
ん。そこで、Sleipnirをキーボードで利用するのに便利なモジュールを作ってみ
ました。

IntelliSearch等のエクスプローラバーでの選択項目の上にマウスポインタを自
動的に移動させてツールチップを表示させたり、エクスプローラバーとメインビ
ューとのフォーカス移動を同一のキーでトグルで行ったり、RSS Pluginの記事の
選択とオープンをキーボードのみで行ったりできます。

スマートなやり方がわからず、ピクセル値を調べたり、マウスポインタの形をチ
ェックしたりと、かなり強引な事をやっています。ソースコードを読んで笑って
いただければ幸いです。

http://lukewarm.s101.xrea.com/up/file/007.zip
36unnamed.ahk:05/01/15 04:36 ID:???
>>32,33
ちょっとしか使ってないけど、気がついた点をあげてみる。
・メニュークリック時、アクティブなウィンドウがなくなるんでペーストできない
・何も選択しないで Ctrl+C 押すとクリップボードが空になる

新しいバージョンのAutoHotkey(Ver1.0.25以降)だと If , の後にコマンドかけなくなるんで、
そのせいでうまく動いてない部分があるような気もする。


>>34
・Gui起動時、タスクバーに最小化ウィンドウが出るのがウザったい。
 →Gui Optionだか、Guiスタイルで表示しないように出来た気がする

・Gui表示位置を620とかやらないで、SysGet使ったほうがいいと思う。
A_ScreenWidthでもいいけど、SysGetの方がタスクバーも考慮できるんでそっちがいいかと。
そこら辺の話は、>>15参照

・Gui,add,button大杉、aaサブルーチン大杉
Gui,add・・・はLoopと配列変数使って減らせるはず。
あと、vオプションは実質使ってないような気がするんで削除、
gオプションの跳び先(サブルーチン)は全部同じにして、
跳んだ先でA_GUIControlと配列使えばサブルーチンも減らせる。
37unnamed.ahk:05/01/15 04:37 ID:???
>>36の続き
配列っぽい変数の扱い方は、
StringTrimLeft か StringTrimRight使って、第3引数を0にすればいい。
つまり、
Var1 = %Var2%
Var2 = %Var3%
...
Var8 = %Var9% なら
Loop, 8
{
Next = %A_Index%
Next ++
StringTrimRight, Var%A_Index%, Var%Next%, 0
}
ちなみに、RightよりはLeftを使う方が一般的っぽい(1バイト小さく出来るし)。

AHKv1.0.25以降なら新機能のExpression使って、
Loop, 8
{
Next := A_Index + 1
Var%A_Index% := Var%Next%
}
で出来る。Var%A_Index% := Var(A_Index + 1) とか一行で出来ればよかったんだが。

あと、スクリプトの内容自体には関係ないけど、スクリプトの見易さを考えると、
引数とその前のカンマの間はスペース入れた方がいいかと思う。
個人的には演算子の前後にもスペース入れると見やすいと思うんだけど、
まぁこの辺は好き好きってことで。


v1.0.25新機能のComplex expressionsも便利でいいんだけど、はやくRegular expressions来てほしいなぁ。
今、マウスのボタン拡張する(X-Wheelみたいな)スクリプト作り途中なんだけど、
設定ファイル読み込み部分が煩雑になるわ、メイン部分より大きくなるわで投げ出しそうだよ。
(現在メイン部 6KB、設定ファイル読み込み部 13KB。メイン部はまだ手加えなきゃならんけど)
正規表現使えれば、30行が3〜5行ぐらいになるところもあるんで、ほんと早く来てほしい。
もういいかげん、StringSplitとかLoop,Parseで判定すんの疲れた。
>The main feature planned for the next version is the ability to pass parameters to subroutines and receive return values.
>Regular expressions (pattern matching) are tentatively planned for the version after the next one.
本家フォーラムよりコピペ。
次でサブルーチンで引数と返り値つかえるようになって、正規表現はとりあえずその次っぽいんで、
出来ればこの春、遅くとも夏までには来てホスィ...
3828:05/01/15 08:56 ID:???
>>36
d
張る前に1.0.25にうpだてするべきダタヨ、まともに動きゃしねぇ orz
一応メニュー表示前後でアクティブウィンドウに戻る処理は入れてるんだけど
それ以前の部分でダメダメぽいです。
つかよく考えたらキーフックだとマウスでコピ-した内容拾えないね。タイマ張るしかないのか…

:= のサンプルもサンクスです。機能がわからなくて悩んでたんだけど>37でやっと理解できた。
正規表現はでかい変更になりそうなので期待より不安のが大きいなぁ
仕様変更やバグが少ないといいんだけど。
自分的には次回のサブルーチン引数が待ち遠しい。


>>34
書き方わからんときは質問スレ活用するといいかも
Ver1.0.25だと一行 if構文はアウトなので>15のスクリプト参考にするときは注意しる
マルチモニタ云々のコメントがある付近もデタラメなので無視してよし
3934:05/01/15 19:13 ID:???
みなさまのおかげでやっと完成しました
暴走の処理に苦戦のあとが。。
Var%A_Index% := Var%Next% は目からウロコでした

クリップボード拡張スクリプト
http://lukewarm.s101.xrea.com/up/file/008.zip
40unnamed.ahk:05/01/16 06:33 ID:???
>>35
Sleipnir使いじゃないから使用感とかについては何とも言えんのだけど、
スクリプト見た感じ、コメントとか丁寧に書いてあるし、かなりよさそうな感じを受けますた。
次のバージョンアップで、サブルーチンでの引数と返り値使えるようになれば、
スクリプトのサイズも小さくなりそうだし、ver1.0.25出たばっかだけど、早く次のver来てほしいねぇ。


>>39
乙。細かいトコでの修正はまだありそうだけど、
現時点でのClipboardだとテキストしか扱えないんで、機能的に大きな修正はもうなさそうかな。
つまりあとは、Clipboard関連を拡張しろ・・・と本家に書き込むだけですな。
41unnamed.ahk:05/01/17 15:06 ID:???
;複数回タップで動作を変える
~ctrl::
tapcount=1
loop,2 ;希望の回数-1(トリプルなら2)
{
sleep,100
KeyWait,ctrl,t0.1 d
if ErrorLevel<>1
tapcount+=1
}

if tapcount=2
msgbox,ダブルタップ ;希望のアクション
if tapcount=3
msgbox,トリプルタップ ;希望のアクション

return

トリプルクリックの判定が難しかったので変則的な方法を取ってみました
クワドロタップも可能です。。クワドロはいらないかw
途中のダブルクリックをキャンセルするのが悩ましかったです
4241:05/01/17 15:12 ID:???
むむ。。貼り付けたら、コメントの前のスペースが何故かなくなっちゃった。見にくくてごめんね
43unnamed.ahk:05/01/17 17:57 ID:???
>>42
行頭の空白文字(スペース、タブ)は削除されるっぽいね。
全角スペースならokっぽいんだど、それだとコピペして実行する際に手間かかるし。
で、>>41は、質問スレの>45に関してのレスだよね?
動かしてみたけど、結構誤認があるような...。
漏れもマウスクリックの方でやってみたけど、トリプルって以外に難しいやね。

Input, InputKey, T0.5 V, {LCtrl}{RCtrl}
If ErrorLevel Contains Control
...
を何回か繰り返すほうがうまくいくような気がする(確認してないけど)。
4441:05/01/17 20:04 ID:???
~ctrl::
tapcount=1
loop,
{
KeyWait,ctrl
;-------------sleepは変えない。変えると誤認が増えます
sleep,50
;----判定時間0.1にすると判定が厳しくなるがレスポンスが上がる
KeyWait,ctrl,t0.2 d
if ErrorLevel=0
tapcount+=1
else
break
}
;---------------------ここから希望動作を入れる
if tapcount=2
msgbox,ダブルタップ
if tapcount=3
msgbox,トリプルタップ
if tapcount=4
msgbox,クワドロタップ

return

前回の方法だとマウスの右クリックでは動作しなかったもので改良です
キーのアップがあるまで待機させたらうまいこといきました
KeyWaitの値が0.5だとタップ終了後に0.5秒待機がはいるので、sleepで待機してます
ちなみに質問スレの45は私です。クリップボードをアプロダにあげてるのも自分だったり。。
クリップボードのほうはファイルのコピーも実現しました。バグ修正後アプロダのほうへあげときます
はぁ。。楽しすぎて仕事が手につかないや。。
45unnamed.ahk:05/01/17 23:17 ID:???
そういえば自分もAutohotkeyいじりはじめの頃は、*3,*4タップがやりたくて
指定キーのタップ回数をカウントする汎用サブルーチンとか必死になって作ってたっけ。

Ctrl,Alt,Shift,Insあたりでの使用ならさほどむづかしくないんだけど
マウスでも動作させようと思うといきなり難易度上がりそうだね。
~付けるとダブルクリックした時点でイベント発生してしまうし
46unnamed.ahk:05/01/18 00:09 ID:???
>>44
キーボードならこっちの方がいいかも。

~Ctrl::
CtrlCount = 1
Loop
{
Input, InputKey, T0.3 V L1 I, {LCtrl}{RCtrl}
If ErrorLevel Contains Control
CtrlCount ++
Else Break
}
If Not(ErrorLevel = "TimeOut" && CtrlCount > 1)
Return
MsgBox, %CtrlCount% Clicks
Return

スクリプト書いてて気がついたけど、Ctrlはボタン押下ではなく
押上時にホットキーサブルーチンが始まってるっぽいね。修飾キーは押上で開始なのかな?
4744:05/01/18 01:55 ID:???
MouseClick,LEFT, , , , ,d
KeyWait,LButton
MouseClick,LEFT, , , , ,u
これを先頭にを追加してctrlをLButtonに置換したら~を外してもドラッグとシングルクリックが出来るよ
タイミングを微調整せんとあかんかもだけども。つーか左クリックで完全にフックって使わないっぽいな
あとはホイールの加速さえ出来ればX Wheelから脱却できるのだが
ホイールの加速は誰かにまかせた!!といいつつ明日から考えてみる。たぶんレジをいじらんとあかんっぽい
48unnamed.ahk:05/01/18 03:32 ID:???
ホイールの加速って何?
49unnamed.ahk:05/01/18 04:48 ID:???
>>46
>スクリプト書いてて気がついたけど、Ctrlはボタン押下ではなく
>押上時にホットキーサブルーチンが始まってるっぽいね。修飾キーは押上で開始なのかな?
自分も前に試してて気がついたんだけどキーによってイベントタイミング違うみたいね。
>19にも書いたけど、将来的にはKeyDownとKeyUpそれぞれ別々のトリガで
フックかけられるようになると理想だな。

>>47
マウスのLRButton系はフックかけてしまうと結構泥沼化するかも。
miscスレの42あたりから読むとわかるけど、タスクトレイに常駐してるAutohotkeyの
アイコン操作する時に難が出る。
最近のスレ傾向見てて思ったんだが、自分も含め大体みんな同じところで
つまづいたりはまったりしてるので、ここのBBSの各スレと、2ちゃんの
AutoHotKey Threadの過去レスはチェックしといたほうがいいとオモ
どこもそんなにレス数伸びてないので全部読むのも大変じゃないと思うし
50unnamed.ahk:05/01/18 14:45 ID:???
>>48
通常1ノッチで1ラインのスクロールなんだけど、素早く回したときは1ノッチが5ラインのスクロールになるって感じでしょうか?
スクロールを1に設定しといても一気にまわすとホームページの一番下までスクロールできます
X Wheelについてる機能ですね。AutoHotkeyでマウスをフックするとこの機能がうまくはたらかなくなるんです
5150:05/01/18 17:24 ID:???
;---ホイールを加速します
;---countは好みで調整して下さい。あげると感度が上がります

~WheelUp::
SetMouseDelay,-1
count:=50-A_TimeSincePriorHotkey

loop,%count%
{
send,{WheelUp}
}
a=0
return

~WheelDown::
SetMouseDelay,-1
count:=50-A_TimeSincePriorHotkey

loop,%count%
{
send,{WheelDown}
}
return

試作品です。ブラウザ以外には使わないほうがいいかもしんない
52unnamed.ahk:05/01/18 23:37 ID:???
色々試した結果
count:=50-A_TimeSincePriorHotkey

count:=80-A_TimeSincePriorHotkey
count:=count/3
に変えてやるとマイルドな動きになりました。80のとこが感度で、3のとこが移動量ですね。あとは個人の好みかと
53unnamed.ahk:05/01/19 01:11 ID:???
>>49
確かにKeyDownとKeyUpの両方別々でフックかけられるといいね。
Keywaitでボタン押上待つのもいいんだけど、その間止まっちゃうから、
SettimerでGetKeyStateってことになるんだろうけど、これもなんかイマイチなんだよね。

そういえば、タスクトレイのアイコンを右クリックしてメニューを開く時は、
ボタン押下じゃなくて押上の時にした方がいいんじゃないか・・・ってことを、
この板の住人が本家フォーラムでChris氏に伝えてたと思うんだけど、
あれはまだ実現されてないよね?・・・不採用?それとも修正が面倒くさいのかね?

>>47
まだはじめたばっかりで、書き方とか分からない部分があると思うんで、
>49氏が言ってるのに加えて、本家も読める範囲で見るといいと思う。
英語は分からなくても、スクリプトは共通語だしね。
今はスクリプト書く方が楽しくてしょうがないって感じだけど、
他の人のスクリプトを理解するように読んでるだけでも参考になることが多いしね。
54unnamed.ahk:05/01/19 07:56 ID:???
今回のバージョンアップで、Send {LButton down}がサポートされてたのを見て
もしかして、英訳上手くいかなくて感じちがいされて理解されてるのかなぁと
思ってたり…
55◆tsGpSwX8mo :05/01/19 14:27 ID:9gBWK9zY
mayuから乗り換え用に色々試してる最中。
&WindowClingTo(Top|Bottom|Left|Right)に相当。マルチモニタ対応はしてない。
窓をデスクトップ(タスクバー除く)の上下左右の端にくっつくように移動。
キーアサインは適当に変えるべし。
スクリプトの先頭で呼んでタスクバー位置を変えない or
タスクバーの移動を検知して再呼び出しするなら、
キー定義の先頭のサブルーチンを無くしてもいい。

#+Left::
#+Right::
#+Up::
#+Down::
Gosub, sub_GetDesktopPositon:
WinGetPos,x,y,w,h,A
if A_ThisHotkey = #+Left
x = %DesktopLeft%
else if A_ThisHotkey = #+Right
{
x = %DesktopRight%
x -= %w%
}
else if A_ThisHotkey = #+Up
y = %DesktopTop%
else if A_ThisHotkey = #+Down
{
y = %DesktopBottom%
y -= %h%
}
WinMove,A,,%x%,%y%,%w%,%h%
return
56#2:05/01/19 14:28 ID:9gBWK9zY


sub_GetDesktopPositon:
{
SysGet, Monitor, Monitor
WinGetPos, x,y,w,h, ahk_class Shell_TrayWnd
DesktopLeft = %MonitorLeft%
DesktopRight = %MonitorRight%
DesktopTop = %MonitorTop%
DesktopBottom = %MonitorBottom%
If h >= %MonitorBottom% ;右or左
{
If x <= %MonitorLeft% ;左
{
DesktopLeft = %w%
DesktopLeft += %x%
}
Else ;右
{
DesktopRight = %x%
}
}
Else if y <= %MonitorTop% ;上
{
DesktopTop = %h%
DesktopTop += %y%
}
Else ;下
{
DesktopBottom = %y%
}
return
}

#1と書いたんでトリップになっちまったよorz
57unnamed.ahk:05/01/21 00:49 ID:???
ホイールの加速

#HotkeyInterval 5000
#MaxHotkeysPerInterval 130
#SingleInstance
;SetMouseDelay, -1
Hotkey, ~WheelUp, WheelAccelerater, B T5
Hotkey, ~WheelDown, WheelAccelerater, B T5
Return

WheelAccelerater:
If (A_PriorHotkey <> A_ThisHotkey || A_TimeSincePriorHotkey > 100)
{
Acceleration = 0
Return
}
If Acceleration < 6
Acceleration ++
StringTrimLeft, WheelAction, A_ThisHotkey, 1
MouseClick, %WheelAction%,,, %Acceleration%
Return

初めの2行は早く回し過ぎる人用なんでいらないかも。
Hotkeyコマンドのバッファ処理とスレッド上限数の設定は適当なんでお好みで調整しる。
SetMouseDelay, -1を入れるとかえって動きが悪くなったので、コメントアウトした。
設定・環境・好みによっては入れたほうがいいかも。
Hotkeyコマンドで登録してるからか、#SingleInstanceないと多重起動するのが

自分の使ってるマウスはホイールが特殊なんで(ホイールじゃなくてトラックボール)、
自分のトコじゃうまくいかなかったけど、もしかすると、
#SingleInstance の行から、WheelAccelerater: の行までを
~WheelUp:: と ~WheelDown:: の2行に変えてもうまくいくかも。
Accelerationを6で止めてるのは、自分トコだと7以上になると
正常に動かなかったからで、もしかするとこれも自分の特殊なマウスが原因かも知れない。

しかしこのマウス、独自のマウスドライバー使ってて、チルト(Tilt…横スクロール)が
使えるのはいいんだけど、MButtonクリックにちょっと制限あるのがイタイ。
標準マウスドライバ使うとチルトが効かなくなるから、どっち取るかって事なんだけど...。
AutoHotkeyでホイールチルト(トラックボール左右回転)もフック出来ればいいんだけど、
多分、標準マウスドライバがチルトに対応しないと無理だと思うんで、Longhorn 待ちになるのかな...

>>54
タスクメニューのことで話してたから、それはない気もするんだけど、
変わってないって事は勘違いしてるのかなぁ...。忘れられてるってこともあるかも。

>>55,56
SysGetのMonitorWorkArea使ったらもっと簡単に書けるんじゃ・・・と思ったら、
なんかうまく値が取れないんだけど、オレダケディスカ?バグ?(;´Д`)
58unnamed.ahk:05/01/23 14:22 ID:Lkiug8xg
メニューでディレクトリやファイルを再帰表示する

#NoTrayIcon

CoordMode, Menu, Screen

;表示するドライブを|を区切りで列挙する。\はつけない
DriveList = A:|C:|D:|G:|H:

init:
Loop,1
{
Path := %A_index%
}

Menu:
IfNotExist, %Path%
Goto, Drive

FileGetAttrib, Attrib, %Path%
IfInString, Attrib, D
Pattern = %Path%\*
else
{
SplitPath, Path, OutFileName, OutDir, OutExt, OutNameNoExt, OutDrive
Pattern = %OutDir%\*
}

Dir =
File =

;メニュー表示は、ディレクトリ→ファイルの順
;変数に入れる時にパスの区切りを`nにしている。|とかだと2バイト文字がうまくいかない感じだったので・・・
Loop, %Pattern%, 1, 0
{
FileGetAttrib, Attrib, %A_LoopFileFullPath%
IfInString, Attrib, D
{
Dir = %Dir%%A_LoopFileFullPath%`n
}

else
{
File = %File%%A_LoopFileFullPath%`n
}
}

Menu, Menu, Add, %Path%, Open
Loop, Parse, Dir, `n
{
if A_LoopField is not space
{
if A_index = 1
Menu, Menu, Add
Menu, Menu, Add, %A_LoopField%, Next
}
}

Loop, Parse, File, `n
{
if A_LoopField is not space
{
if A_index = 1
Menu, Menu, Add
Menu, Menu, Add, %A_LoopField%, Next
}
}

Menu, Menu, Add
Menu, Menu, Add, &Back, Back
Gosub, MenuShow
return
59unnamed.ahk:05/01/23 14:24 ID:Lkiug8xg
Drive:
Loop, Parse, DriveList, |
Menu, Menu, Add, %A_LoopField%, Next
Gosub, MenuShow
return

MenuShow:
Menu, Menu, Show, 0, 0
return

Next:
FileGetAttrib, Attrib, %A_ThisMenuItem%
IfInString, Attrib, D
{
Menu, Menu, DeleteAll
Path = %A_ThisMenuItem%
Gosub, Menu
}
else
Goto, Open
return

Back:
SplitPath, Path, OutFileName, OutDir, OutExt, OutNameNoExt, OutDrive
if OutFileName is space
Path = Dummy
else
{
FileGetAttrib, Attrib, %Path%
IfInString, Attrib, D
Path = %OutDir%
else
{
SplitPath, OutDir, OutFileName, OutDir, OutExt, OutNameNoExt, OutDrive
Path = %OutDir%
}
}
Menu, Menu, DeleteAll
Gosub, Menu
return

Open:
;some action
Run,hogehoge.exe "%A_ThisMenuItem%"
ExitApp
60unnamed.ahk:05/01/23 17:13 ID:E7DmBcio
↑ファイルがフルパス表示だったので変更。変更した近辺のみ記載

Menu:


Loop, Parse, File, `n
{
if A_LoopField is not space
{
if A_index = 1
Menu, Menu, Add
SplitPath, A_LoopField, OutFileName, OutDir, OutExt, OutNameNoExt, OutDrive
Menu, Menu, Add, %OutFileName%, Next
}
}



Next:
FileGetAttrib, Attrib, %A_ThisMenuItem%
IfInString, Attrib, D
{
Menu, Menu, DeleteAll
Path = %A_ThisMenuItem%
Gosub, Menu
}
else
{
Path = %OutDir%\%A_ThisMenuItem%
Goto, Open
}
return

Open:
Run,hogehoge.exe "%Path%"
ExitApp
61unnamed.ahk:05/01/23 17:17 ID:???
面白い。
62unnamed.ahk:05/02/02 03:41 ID:???
適当に書いた非常駐のウィンドウ最前面/透明化スクリプト
しょぼいけど晒してみる

SetTimer,ShowTooltip,300
t=OFF

Esc::
RButton::
ExitApp

ShowToolTip:
ToolTip,LButton `:最前面表示ON/OFF`nMButton `:透明度変更(%t%)`nShift+MButton `: 特定色透明化`nEsc/RButton `: キャンセル
return

LButton::
MouseGetPos,,,wnd
WinSet,Topmost,Toggle,ahk_id %wnd%
ExitApp

WheelDown::
If t=OFF
t=224
else
If t>0
t-=32
return
WheelUp::
If t<>OFF
{
t+=32
If t>0xFF
t=OFF
}
return

MButton::
MouseGetPos,,,wnd
WinSet,Trans,%t%,ahk_id %wnd%
ExitApp

+MButton::
MouseGetPos,xx,yy,wnd
PixelGetColor,cl,%xx%,%yy%,RGB
WinSet,TransColor,%cl% %t%,ahk_id %wnd%
ExitApp
63unnamed.ahk:05/02/02 18:51 ID:???
適当に作ったのでバグあったらすみません。
ローカルに保存の2ちゃんDATファイルのスレタイの一覧をメニュー表示して、好みのエディタで開く。

・DAT→TXTへの変換は、dat2htmlを使わせてもらった。
・ESCキーを押下する前迄、対象スレをメニューより選択。ESCキー押下でエディタで開く
・引数(スペースを区切りにして(1)(2)の組み合わせで複数指定可)
(1)ファイル :DATファイルのフルパス
(2)ディレクトリ :直下にDATファイルがあるディレクトリのフルパス

#NoTrayIcon

CoordMode, Menu, Screen

;一時ファイルのディレクトリに変更する
Dst = D:\temp

Main:
Dat0 = 0
Loop, %0%
{
Src := %A_index%
FileGetAttrib, Attrib, %Src%
IfNotInString, Attrib, D
{
SplitPath, Src, Name, Dir, Ext, NameNoExt, Drive
if Ext <> dat
Continue
FilePattern = %Src%
}
else
{
IfNotExist, %Src%\*.dat
Continue
FilePattern = %Src%\*.dat
}
Gosub, Menu
}
if Dat0 = 0
ExitApp
Menu, Menu, Show, 0, 0
OnExit, ExitSub
return
64unnamed.ahk:05/02/02 18:52 ID:???
Menu:
Loop, %FilePattern%, 0, 0
{
ErrorLevel = EOF
Loop, Read, %A_LoopFileFullPath%
{
if A_index > 1
break
StringGetPos, Pos, A_LoopReadLine, >, R
if ErrorLevel <> 0
break
Pos ++
StringTrimLeft, Trim, A_LoopReadLine, %Pos%
Menu, Menu, add, %Trim%, Open
}

if ErrorLevel = 0
{
Dat0 ++
Dat%Dat0% = %A_LoopFileFullPath%
}
}
return

Open:
IfNotExist, %Dst%
FileCreateDir, %Dst%
Dat := Dat%A_ThisMenuItemPos%

;dat2htmlを使用
Run,D:\tool\dat2html\DAT2TXT.EXE /c /t %Dat%, %Dst%, HIDE
Menu, Menu, Disable, %A_ThisMenuItem%
Menu, Menu, Show, 0, 0
return

ExitSub:
Loop, %Dst%\*.txt, 0, 0
{
Run,エディタのフルパス %A_LoopFileFullPath%
Sleep, 500
FileDelete, %A_LoopFileFullPath%
}
ExitApp

-完-
65sos_hdr:05/02/03 16:46 ID:qL00CcJs
AutoHotkeyスクリプトのトリッキーな実行方法(COM化)について。

 C言語のように、コメント /* */ が使える事を利用して、
www.asahi-net.or.jp/~bi3t-aoym/nidetool.htm の SOS.HDR で
COM化することができました。コンパイルで実行ファイルを作成
するより小サイズで、COM化したのちも編集できるので紹介します。

sos111.tgzのsos.hdrの先頭行の最初の2文字 #? を/* に変更
sos.hdrの最後に、下記2行を追加(パスは適当に修正して下さい)
C:\AutoHotkey\AutoHotkey.exe %0 %@
*/
スクリプトの先頭に上記 sos.hdr をコピーして、拡張子を com に
変更。これで実行可能になります。
( ttp://lukewarm.s101.xrea.com/up/file/009.zip )
66unnamed.ahk:05/02/03 18:02 ID:yNqYqbaI
>>65
うわ、懐かしい……。
dos使ってたころ世話になったよそれ。
comだとサイズが小さくてメモリ上に展開するのに有利だとか何だとかあったなぁ。
でも、comって64kb制限かなんかあったような気がしたんだが。
かなり前のことだからうろ覚えだけど。




ぱっと見、Component Object Model かと思ったけどw
67unnamed.ahk:05/02/03 19:47 ID:qL00CcJs
>>66 確かにDOSの制限で、comは64KBの制限がありましたね。
でも、64KBの長さのスクリプトを書くことは、まずないでしょうね。
6865:05/02/04 08:42 ID:hBIfQQPA
C:\AutoHotkey\AutoHotkey.exe を、
ショートカットファイル名にしないと
動作しないようです。
申し訳けありませんでした。
69unnamed.ahk:05/02/04 09:08 ID:???
>>68
人それぞれなんで意味がないとは思わないけど
俺はインストールしてない環境で使えないならexe化するメリットが感じられん
70unnamed.ahk:05/02/07 14:38 ID:???
超小物ですが、PowerVCR IIでテレビ見てる人用です
PowerVCR IIは起動するとウィンドウが三個も出てきてALT+TABのときうっとうしいので、操作パネルを非表示で起動します
PowerVCR IIのインストールフォルダに入れるか、絶対パスで指定するかして下さいな。
ウィンドウたくさん出るアプリに応用すると便利かもしんない

run,PVCR.exe
Winwait,マスターパネル
WinHide,マスターパネル
winwait,PowerVCR IIパネル
WinHide,PowerVCR IIパネル
return
71unnamed.ahk:05/02/07 21:06 ID:???
LastFoundWindowがあるからWinHideのところで改めてタイトル指定する必要は無いよ
72unnamed.ahk:05/02/13 03:18 ID:Ve2WCzzc
EmEditorへの乗り換えに失敗したので orz
秀丸用の強調キーワード(.hilight)ファイル作成スクリプトを作ってみました。

ttp://lukewarm.s101.xrea.com/up/file/010.zip

Autohotkeyパッケージに含まれているシンタックスファイルからワードを抽出して
秀用のインポートファイルを生成します。正規表現キーワードも個別指定可能。
とかく動作改良系ばかりに目が行きがちのahkですがテキスト処理も結構楽に
作れちゃいますね。

あとソースコーディングに便利な機能とか秀ユーザー向けtipsなんかもまとめて
みました。自分以外に秀でahk編集してる人がいるのかは謎ですが。

秀に限らず、使用エディタの話題とか紹介とかあるととっつきやすくていいかなぁとか
73unnamed.ahk:05/02/13 04:03 ID:Ve2WCzzc
連続投稿スマソ
Autohotkey.exe 試験実行用ラッパーソフトです

http://lukewarm.s101.xrea.com/up/file/011.zip

記述エラー出るたびにダイアログ消すのがしんどくなってきたので作ってみました。
スクリプト起動時にエラーダイアログが出たら 自動で一旦閉じ、メッセージを取り
込むため/ErrorStdOutオプションで再度実行し、任意のエディタで開きます。
タグジャンプ機能のあるエディタじゃないと意味ないかもですが


おまけで、秀丸用のサンプルマクロもいれてみました。
 ・ 編集中のスプリクトを保存してから試験実行するマクロ@秀丸
 ・ 編集中のスプリクトを保存してからEXE化するマクロ@秀丸
74なまず:05/02/16 00:57 ID:TAHmCiOU
IMEが半角英数入力状態なのか、ローマ字入力状態かわからなくて、入力間違い
することがよくあります。LR_HLDというフリーソフトでは、キャレットの
点滅速度を変えてモードがどちらか教えてくれるのですが、私の環境では
相性が悪くてうまく動きませんでした。そこで、AHKで作ってみました。
以下の関数をSetTimerで適当な間隔で起動してください。200msecくらいが
適当でしょうか。

;
; IMEのOpen/Close("あ"か"A"か)をツールチップで表示する
; IMEがOpenなら、"あ"というツールチップをキャレットの上に出す
;
; 接頭語: dio_
; 引数: なし
; 戻り値: なし
DispIMEopen:
 ; キャレットが出ていなかったらリターン
 if A_CaretX =
  return

 ; 除外Windowはリターン
 IfWinActive, xyzzy
  return

 ; アクティブウインドウと同じProcessIDを持つclass IMEウインドウを見つける
 DetectHiddenWindows, On
 WinGet,dio_actpid,PID,A
 WinGet, dio_winids,list,ahk_class IME
 Loop, %dio_winids%
 {
  dio_winid := dio_winids%A_Index%
  WinGet,dio_pid,PID, ahk_id %dio_winid%
  If dio_pid=%dio_actpid%
  {
   ; SendMessageで、IMEがOpenかCloseか聞く
   SendMessage, 0x283, 5, 0, , ahk_id %dio_winid%
   if ErrorLevel = 0
   {
    ToolTip
   }
   else
   {
    dio_x := A_CaretX
    dio_y := A_CaretY - 20
    ToolTip, あ, %dio_x%, %dio_y%
   }
   return
  }
 }
return
75なまず:05/02/16 01:50 ID:???
すみません、さっきのIME表示のスクリプトですが、これ、すごく重たい
ことがわかりました。常駐させとくとダブルクリックが効かなくなる。
考え直しますので、ちょっと待ってください。
76なまず:05/02/16 02:59 ID:???
どうもSendMessageが原因のようです。これを頻繁にコールすると、ダブルクリックの
検出が阻害されるみたいです。
残念ながら、タイマによる定期チェックはあきらめました。
かな漢キーをホットキー登録し、そこから上記関数をコールすれば、ある程度の目的は
達成できますが、ちょっといまいちです。おすすめできません。
すみませんが、先ほどの投稿は忘れてください。
77unnamed.ahk:05/02/16 14:53 ID:???
>>76 当方もLR_HLDの調子が良くなく、現在はIMEWatcher
ttp://homepage3.nifty.com/takubon_world/index.html
というのを使っていますが、あまり満足していません。

またいいのが思いついたら投稿してください。
78unnamed.ahk:05/03/03 23:14 ID:eJrDml52
IrfanViewここからスライドショー
IrfanView32で今表示している画像から、フォルダ内画像のスライドショーを開始するスクリプトです。

http://lukewarm.s101.xrea.com/up/file/012.zip

画像を表示している状態で、Ctrl+スペースを押すとスライドショーを開始します。
↑↓でスライド速度の調整もできます。
79unnamed.ahk:05/03/10 02:37 ID:???
唐突にアップしてみる。

http://lukewarm.s101.xrea.com/up/file/013.zip
テンキーで数式を入れて、スペースキーで答えに!
要は漢字変換の要領で計算。

起動時に一瞬、WINの計算機が表示されるのは、ご愛嬌。

計算したい数式が、演算記号(/*-+)からスタートした場合は、
前回の答えに引き続いて計算。
例。
123+123 246
+54 300

こんな感じ。
80unnamed.ahk:05/03/10 15:30 ID:lXHQvlok
>>79
自宅のPCだとIME(WXG)に翻訳や計算機能ついてるんだが
職場でもついやってしまいショボーンってなる

軽く使ってみた感想、Spaceより = か Enterで計算のが直感的な気がした。
電卓はHide属性で起動しahk_pidを、貼付け先ウィンドウは ahk_idを使うといいと思う
ahk_Classだと電卓や貼付け先ウィンドウが複数起動してると誤動作の元になる
(つか電卓使わないでAutohotkey内部で計算して貼り付けても良さそうな)
ウエイトループはWinWaitActive, ClipWaitで省略できる

;隠し電卓起動
WinGet,activeWinID,ID, A
Run,calc,,Hide,Calc_PID
WinWaitActive, ahk_pid %Calc_PID%,,1
WinActivate, ahk_id %activeWinID%

終了時、非表示CalcはWinCloseで閉じられないみたい(NTSP6 Ahk v1.0.30.01)
タスクマネージャで見ると残ってしまってる。Winkillもダメで
Process, Close ならOKの模様

ホットキー部は殆ど内容一緒なので A_ThisHotkeyとサブルーチンで丸めてはどうか
(LoopかSetTimerで GetKeyStateしてやったほうがよりスマートかもだが)

Sendで {Esc Down}とかやってんのは環境依存を考慮してなのかも知れないけど
SetKeyDelayを多めに取ってみてはどうだろうか
8179:05/03/11 02:31 ID:???
サンキュウ。
参考になったよー。

>ウエイトループはWinWaitActive, ClipWaitで省略できる

これって、きちんとアクティブにならないときがないすか?
今のウチの環境は、Win2000Sp4,Ahk v1.0.27.00
なんだけど、たしかもうちょっと前のバージョンのAhkでちゃんとアクティブに
ならなかったのんよ(今は直ってるとかかも;)

あと、
>Sendで {Esc Down}
とかは、
http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1092315284/15
みて、なんとなくしてみた。

さー、改良改良。
82unnamed.ahk:05/03/14 10:36 ID:CHP68w4A
キーバインドをemacsっぽくする設定ファイルをアップしてみました
C-x C-cでウィンドウを閉じたりとか、そんなかんじのやつです

http://lukewarm.s101.xrea.com/up/file/014.zip
83unnamed.ahk:05/03/22 23:02 ID:???
ttp://lukewarm.s101.xrea.com/up/file/015.zip

2ちゃんの AutoHotKey Thread
http://pc8.2ch.net/test/read.cgi/software/1098531338/316-
あたりで話題になってたSpace & Shiftの挙動をするスプリクトです。

> Spaceキー普通に押して離したらA_Space出力
> 押しっぱなしで、他の文字キー押すときはシフトキーの働きするヤツ。

あとオプションでIMEON/OFF状態の挙動を変えられるみたいです。
> 1.IME/OFFの時だけSandSが機能するようにする
> 2.IME/OFFの時だけ無変換(変換)をスペースキーにする
> 3.無変換と変換の同時打鍵でIME ON/OFFを切り換える

尚IMEの検知は「直接入力のときにIMEツールバーを隠す」に
なってないと使えないハンパ仕様でつ
84unnamed.ahk:05/03/24 22:54 ID:7hMHHHQc
2chのスレにも書いたけど、こっちにも。
叩き台なんで色々改変してください。
ttp://lukewarm.s101.xrea.com/up/file/016.zip
85unnamed.ahk:05/03/25 22:21 ID:???
やっぱ98じゃorz
どうも美味しいところがNT系のみだったりで歯痒いですわ。
86unnamed.ahk:05/03/26 02:02 ID:ws3lbNbI
IMEのON/OFFを検知プログラム(外部プログラム)アップしました。

ONとOFF逆に書いたかも
87unnamed.ahk:05/03/26 10:09 ID:pUkHmZrw
>>86
乙、XP & WXGで確認しますた。
ON/OFF逆だね。サンプルついてるんで動かし方はわかったけど。

質問スレのほうにはCでコンパイルって書いてあるけど
もしソース出して貰えるなら、Chris氏にフィードバックして
Autohotkey自体に入れ込んでくれるようお願いしてみたいとかいってみるテスト

英語圏のソフトだし2バイト文字への正式対応とかは期待してないんけど
IME検知 & 状態セット(ON|OFF|Toggle) あたりだったら
サンプル提示したら WinGet/WinSetあたりに追加してくれないかなぁ
8886:05/03/26 23:29 ID:ws3lbNbI
017のソース修正 & その他状態検知 or セットいろいろUPしますた。018.zipです。
>>87 Chris氏にフィードバックしてもらえるよう頼んでください。
IME関連他にもなんかあったらいいのかな?
89unnamed.ahk:05/03/27 07:52 ID:???
>>88
d 一個ずつ全部ソースわけされてるね。
Chris氏に送るならひとまとめにしてパラメータ指定かなんかの方がいいかな
…ってソース見せてもらったら SendMessageで制御してるんだ
(自分も調べたけどパラメータ詳細がわからんのでできんのかと思ってた。
つーかAPI使わないと無理って話じゃなかったのかい orz)

えー、貰ったソース全部現状のAutohotkeyでやれてしまったんですが、どうしましょうか。
とりあえず IME検知部 はこんな感じで
;----------------------------
; IMEの状態の取得
GetActiveImeStatus:
; Out ErrorLevel 0:OFF 1:ON
    Gosub,GetActiveImeID
    ; WM_IME_CONTROL IMC_GETOPENSTATUS
    SendMessage 0x283, 0x0005,,,ahk_id %ActiveImeID%
return

GetActiveImeID:
;--------------------------------------
; アクティブウィンドウのIME IDを返す
; Out ActiveImeID : IMEのID
;--------------------------------------
    DetectHiddenWindows,ON

    Winget, Pid, PID, A
    Winget, FoundWindow, List, ahk_pid %Pid%
    Loop, %FoundWindow%
    {
        ActiveImeID := FoundWindow%a_index%
        WinGetClass, Class, ahk_id %ActiveImeID%
        ifEqual Class,IME, Return

;         WinGetTitle, WindowTitle, ahk_id %ActiveImeID%
;         ifEqual WindowTitle,Default IME, Return
    }
    ActiveImeID =
return
90>>89:05/03/27 09:02 ID:mIiwWnPo
W2K,ATOK15で動作確認しました。
出来るもんなのんだなぁ。
91unnamed.ahk:05/03/27 09:30 ID:55RUWVa+
>>89
018.zip のソース全部現状のAutoHotKeyのみで出来たんですか、びっくり。
実は自分も最初API叩いてて何故か出来なかったから調べまくって、
出来たCのソース見たところで、もう一回AutoHotKeyのコマンドリファレンス見たらSendMessageがあったから出来そうだと思った。
でも少し疲れてきたんでそこから先はやらなかったんで。
(018.zipは引数が違うだけのソースで全部別の実行ファイルにするには自分もかなり抵抗あった。
DLL化すれば引数渡せるしね。)

IMC_GETOPENSTATUS でググッたら少しは情報はあるけど、細かいパラメータ値まではなかなか判んないね、確かに。
MSDNにも載ってない情報らしいからね…
とりあえずChris氏に送る、送らない、パラメータ指定、まとめる方法等々全部任せますよ。
以前あった、変換候補ウインドウの検知 OR 強制変換? も入れたほうがいいのかな?
これはちょっとだけ試してできなかったからやめた。
92unnamed.ahk:05/03/27 10:44 ID:55RUWVa+
よく見ると SendMessage >>74 で書いてあるね。
すぐ後ろで忘れてくださいって書いてあるんでスルーしてた。
9389:05/03/27 11:07 ID:XFaVncgM
>91-92
本当だ。。。自分も完全にスルーしてたよ。(今更だけど なまず氏GJ!)
アッチ製のソフトでIME関係は鬼門って先入観があったみたいだわ orz

しかしMSDN隠しパラメータって、MSはそんなんばっかだなぁ
IME系パラメータ、ググったら出てきたけけど殆ど意味わかんないし
ttp://www.catnet.ne.jp/mori/vcpp/higi/hh/p_00000133.html

本家へのフィードバックは現状でできちゃってるから…どうしようかな
英語圏の人々にうまく説明できる自信ないし
とりあえず 018.zipのCソースを AHKにまとめたものをアップしてみますね。
9489:05/03/27 15:30 ID:XFaVncgM
UPしました。
http://lukewarm.s101.xrea.com/up/file/019.zip

非アクティブウィンドウのIME制御もできるようにしてみた。
裏で弄りたいこととかあるかなって思ったんだけど
あんまり意味ないかも知れない。
95unnamed.ahk:05/03/28 11:17 ID:???
>>94
うちの環境だとON,OFFは取得できるけど
入力モードは、9で一定になるな

XP Professional SP2
MS IME Standard 2002 ver. 8.1
9695:05/03/28 11:19 ID:???
あ、今のところ使う必要性ないんで
修正の要望ではないです
報告だけ
97unnamed.ahk:05/03/28 20:24 ID:???
>>95
MS-IMEだったら大体いけるのかと思ってたんだけど。
しかもモード9って何なんでしょ。ビット分解しても意味不明

職場のマシンでサーバーの基幹システムアプリ(IMEもサーバーのになってる)を
Autohotkeyの入ってるローカルPC動かてみたけど状態取得できなかった。
リモートだとダメなのかな?
9895:05/03/29 09:31 ID:???
>>97
ごめん、一定じゃなかった。
かな打ち(ローマ字じゃない)時は

半カナ    →3
ひらがな  →9
全カタカナ →11

に成るみたい。
昨日いろいろ試したはずだったんだけど…
99unnamed.ahk:05/03/29 19:42 ID:???
>>98

0000xxxx  かな
0001xxxx  ローマ字
xxxx0xxx  半角
xxxx1xxx  全角
xxxxx000  英数
xxxxx001  ひらがな
xxxxx011  カナ/カナ

. 0 (0x00 0000 0000) かな  半英数
. 3 (0x03 0000 0011)     半カナ
. 8 (0x08 0000 1000)     全英数
. 9 (0x09 0000 1001)     ひらがな
11 (0x0B 0000 1011)     全カタカナ
16 (0x10 0001 0000) ローマ字半英数
19 (0x13 0001 0011)     半カナ
24 (0x18 0001 1000)     全英数
25 (0x19 0001 1001)     ひらがな
27 (0x1B 0001 1011)     全カタカナ

...ってことだな、辻褄あってる。
100unnamed.ahk:05/03/29 22:41 ID:???
需要がかなり少ないかと思いますが、トラックボールを転がしてスクロールさせます
左クリックしながら右クリックでスクロールモードに入り、もっかい左クリックで通常モードに戻ります
Track Scrollというソフトを参考にしました。ホイールのないマウスでスクロールさせたい時にも便利かもしれません


~LButton & RButton::
mousegetpos,posX,posY, ,
keywait,LButton
loop
{
mousegetpos, ,posY2, ,
move:=posY2-posY
if move<0
{
move:=move*-1
arrow=L
}
if move between 2 and 7
count+=1
if move between 6 and 15
count+=2
if move>14
count+=4
if count>3
{
count=0
if arrow=L
send,{WheelUp}
else
send,{WheelDown}
}
arrow=
mousemove,posX,posY, 0,
getkeystate,Lstate,LButton
if Lstate=d
break
}
return
70KB
名前: E-mail:
ファイル:
0ch BBS 2005-10-08