2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

AutoHotkey スレッド part11

1 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:30:27 ID:9VNdm34c0
■公式
http://www.autohotkey.com/

■日本語解説
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )

AutoHotkeyJp
http://sites.google.com/site/autohotkeyjp/

Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/

■過去スレ
1 http://pc7.2ch.net/test/read.cgi/software/1098531338/
2 http://pc7.2ch.net/test/read.cgi/software/1129836713/
3 http://pc11.2ch.net/test/read.cgi/software/1157043396/
4 http://pc11.2ch.net/test/read.cgi/software/1184556627/
5 http://pc11.2ch.net/test/read.cgi/software/1201502896/
6 http://pc11.2ch.net/test/read.cgi/software/1219130051/
7 http://pc12.2ch.net/test/read.cgi/software/1230694774/
8 http://pc12.2ch.net/test/read.cgi/software/1243005818/
9 http://pc12.2ch.net/test/read.cgi/software/1253888736/
10 http://pc12.2ch.net/test/read.cgi/software/1265518996/

【重要】 スクリプトが動かない等の質問は、OS・AHKのどのバージョンを利用しているかを明記すること。

関連リンク>>2以降も参照

2 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:31:07 ID:9VNdm34c0
■派生版
AutoHotkey_L (内部Unicode、オブジェクト指向などの言語仕様拡張)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

ironahk (.NET製、クロスプラットフォーム)
http://code.google.com/p/ironahk/

AutoHotkey64 (ネイティブ64ビット版) (AHKLベース)
http://www.autohotkey.com/forum/topic58237.html

AutoHotkey.dll (真のマルチスレッド対応など) (AHKLベース)
http://www.autohotkey.net/~tinku99/ahkdll/

駄目文字微対策版 (ファイル名処理部分のみ不具合対応)
http://yak.myhome.cx/junks/#ahk.cp932

■ 関連スレ
AutoIt
http://pc12.2ch.net/test/read.cgi/software/1277173327/

3 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:52:13 ID:JeFr0hn90
■ 関連記事のあるサイト

AutoHotkey メモ - Principia
http://principia.s54.xrea.com/index.php?AutoHotkey%20%A5%E1%A5%E2
AutoHotKey - notitle.txt
http://kan.s151.xrea.com/?AutoHotKey
なまず日記
http://www.tierra.ne.jp/~aki/diary/
eamatの日記
http://d.hatena.ne.jp/eamat/
おばけ日記
http://d.hatena.ne.jp/obake/

1 Hour Software by Skrommel - DonationCoder.com
http://www.donationcoder.com/Software/Skrommel/
Tips N Tricks(公式フォーラムのトピック)
http://www.autohotkey.com/forum/topic8795.html&highlight=gui

4 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:52:54 ID:JeFr0hn90
■ リマップ・ホットキー割り当て

Q1:[CapsLock(英数)]や[ひらがな]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
  OS側がキーUp/Down情報が正しく返してこないのでAHKのみで対処は無理なので、
 ドライバレベルでのリマップソフト(窓使いの憂鬱など)や、レジストリ変更でリマップを行う(ChangeKeyなど)を利用して
  [CapsLock]を別の普段使わないキー([F13]〜[F24]など)に割り当ててからAHKで利用すると良い。

 例) ChangeKeyを使って[ひらがな]を[F13]にする
  AutoHotkeyで任意のキーをF13にリマップする例えばF12をF13にリマップし、スクリプトを実行)。
   F12::F13
  Changekeyを起動する。( ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
  「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
  F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
  「上のスキャンコードでキー変更する」をクリックすると「変更前 (中略) 0x0064 をどのキーに変更しますか?」
  というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
  リマップ( F12::F13 )を解除する。

Q2:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A2:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
  これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
   ^1::Send, {Esc}

Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
 例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
   sc07B & I::Send, {Blind}{Up}
   sc07B & K::Send, {Blind}{Down}
   sc07B & J::Send, {Blind}{Left}
   sc07B & L::Send, {Blind}{Right}

5 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:53:38 ID:JeFr0hn90
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
  先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
  #UseHookで全部にキーボードフックを適応する方法でも可。

■ マウス関連

Q1:「RButton & WheelDown::〜」とやったら右ボタンが使えないし、
   「~RButton & WHeelDown::〜」とやったらメニューがでてうざい。
A1:決定的な解決策はないけど、メニューが出たら消すって方法なら↓。
  ~RButton & WheelUp::
   Send, +^{Tab}
   SetTimer, CancelRMenu, -1
   Return
  ~RButton & WheelDown::
   Send, ^{Tab}
   SetTimer, CancelRMenu, -1
   Return
  CancelRMenu:
   KeyWait, RButton
   SetTitleMatchMode, RegEx
   WinWait, ahk_class #32768|MozillaDropShadowWindowClass,,0.5
   If (!ErrorLevel)
    Send, {ALt}
   Return

Q2:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない・・・
A2:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。

6 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:54:18 ID:JeFr0hn90
■ IME関連

Q1:IMEのOn/Offの切り替えや、On/Offの状態を得るにはどうすればいいの?
A1:http://www6.atwiki.jp/eamat/pub/MyScript/ の「IME.ahk」を使いましょう。

Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)

■ ジョイスティック関連等

Q1:ジョイスティックのリマップがうまくいきません!!助けて
A4:ジョイスティックではリマップできないので、「Send」コマンドでキー発行してちょ
   × Joy1::Esc
   ○ Joy1::Send, {Esc}

Q2:ジョイスティックの上下左右にキーを割り当てたいけど、JoyLeft とか JoyUp って仮想キーは無いの?
A2:無いです。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。

Q3:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A3:AutoHotkeyではできません。

Q4:Bluetoothリモコン等を使えたらいいなぁ・・・
Q5:過去ログを漁るといいかも。

7 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:55:03 ID:JeFr0hn90
■ 日本語の取り扱い
AuthoHotkeyは英語圏でつくられたソフトでマルチバイト文字列のことを全く考慮していないので以下の問題が起き得る。
なお、ユニコード対応されたAutoHotkey_Lでは以下の問題は発生しない。

Q1:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ
A2:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]であるために起きる。
  回避方法は以下の通り
   (1) これらの文字の"直後"に「`」を記述する(例:「線形`代数」)
   (2) 外部ファイルに文字列を定義して後から読み込む方式にする(IniRead、FileRead 等)
   (3) #EscapeCharでエスケープ文字を別のものに変える(玄人向け)

Q2:IfInString や InStr()、StringReplaceで意図しない結果が出ることがあるんだけど、、、
A2:文字単位ではなくバイト毎に比較するだけなので、以下のような場合は意図せずにマッチしたりする。
 回避したい場合は、流行らせるページの「マルチバイト文字列操作関数群」などを使う。
 例) 意図しない置換
  str = モノ ; 0x83 0x82, 0x83 0x6d,
  StringReplace, str, str, c, c, All ; c:0x82 0x83
  MsgBox, %str%

Q2:A_ScriptDir、A_LoopFileName や SplitPath の結果がおかしいことがあるんだけど?
A2:「\」記号を無条件でディレクトリ区切り文字としてファイル/ディレクトリ/拡張子を分割してしまうことによる。
  対象となりうる文字:
    ―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭xx\\
  これは、>>1にある「駄目文字微対策版」を使うことで回避できる。

8 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:56:29 ID:JeFr0hn90
■ スクリプト仕様
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
  複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
  が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。

Q2:配列変数やハッシュ(仮想配列)は使ええないの?
A2:「式」を使うと配列やハッシュのように変数を参照できる。
  Loop, 10
    value_%A_Index% := A_Index**2

Q3:テキストエディタでキーワードの色づけなどをしたいんだけど。
A3:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり

Q4:GUI作るのめんどくせ〜〜
A4:公式( ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。

Q5:AHKってマルチスレッドじゃないの?
  タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A5:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
  MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド   →→→→→→……………………………………→→→→
>                  ★割込                ↑再開
> 割り込みスレ          →→→→…………→→→→→→END
>                        ◆割込 ↑再開
> 更に割り込み                →→→END

Q6:このスレからコピペしたんだけど、うまく動かないよ。どうして?
A6:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
  全角スペースをタブや半角スペースに変換してみよう。

9 :名無しさん@お腹いっぱい。:2010/07/30(金) 18:57:10 ID:JeFr0hn90
■ AutoHoekey_Lって具体的にどう違うの?

本家との違いは以下の通り
(1) ユニコード対応されているので、駄目文字(>>6)が無いなど日本語の取り扱いが楽。
(2) #If 任意の「式」を用いてキーマップ定義ができる
(3) メニューにアイコン表示ができる
(4) Exeやトレイアイコン描画の向上
(5) GUIのテキスト表示のレンダリング方法を変更できる(アンチエイリアスOFF等)
(6) 正規表現にマッチした文字列を引数にして関数を呼べる
(7) Send, {Asc XXXX}のUnicode版が使える
(8) 配列変数や連想配列として使えるオブジェクトの導入。

目玉は(1)および(2)。 ユーザ定義関数作って #If で使うととても便利。
例1) [Ctrl]+[Alt]+[Space]で On/Off 切り替え。変数がOnの時のみIKJLでカーソル移動可。
 ^!Space::KeyMap:=!KeyMap
 #If (KeyMap=1)
  I::Up
  K::Down
  J::Left
  L::Right
 #If

例2) トレイの時計部分でホイールを回すと音量変更
 #If MouseOver("ShellTray_Wnd", "TrayClockWClass")
 WheelUp::SoundSet,+5, Master
 WheelDown::SoundSet, -5, Master
 #if
 MouseOver(win, ctrl="") {
  MouseGetPos,x,y,hwnd,class2,1
  WinGetClass, class1, ahk_id %hwnd%
  Return InStr(class1, win) && InStr(class2, ctrl)
 }

10 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:35:22 ID:elYoeAxq0
Q:[Ctrl]や[Shift], [Alt]が押されっぱなしになることがあるけど、これってAHKのせい?
 もしそうじゃないとしたら、AHKで何か対処できる?
A:報告が多くありますが、よく分かっていません。以下のような報告があります。
  ・クリップボードユーティリティ(CLCLなど)で[Ctrl]+[V]で貼り付けを行った後に起きるという報告があります。
  ・Logicool(Logitec) の "SetPoint" は「クロ」との報告があります。
  ・窓使いの憂鬱をデュアルコア以上のプロセッサで使っている場合に起きるという報告もあります。
  ・VMWareが悪さしているという報告もあります。
 上記のソフトはAHKより下位(物理層寄り)なので、AHKでは物理的にキーが押されているとしか分かりません。
 タイマーでキー押下を監視して一定時間以上押下されていたら警告を出したり、
  SetPoint を再起動などで対処していたりするようです。

ttp://pc11.2ch.net/test/read.cgi/software/1219130051/782
782 名前:名無しさん@お腹いっぱい。[sage ] 投稿日:2008/11/27(木) 01:43:58 ID:pOwnMABe0
よく分からんけど、 Ctrl とかが押しっぱなしになる。解決はよく分からんが対処法としてアラートだすようにした。
if書きたくないから、三項演算子だいすき

#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
return
Alerter:
alert =
Loop, PARSE, keys, |
{
%http://www1.axfc.net/uploader/A/so/
alert .= (%http://www1.axfc.net/uploader/A/so/
}
Tooltip, %alert%
return

11 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:35:37 ID:elYoeAxq0
10 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 14:26:39 ID:q0UbybZB0
お役立ちリンク

公式フォーラムより
http://www.autohotkey.com/forum/topic34517.html 標準入出力を扱いたい
http://www.autohotkey.com/forum/topic26855.html ListViewで大きな画像を扱いたい
http://www.autohotkey.com/forum/topic19509.html GUIで標準のもの以外を使いたい
http://www.autohotkey.com/forum/topic20097.html GUIを手軽に作りたい
http://www.autohotkey.com/forum/topic39598.html DllCallで定数調べるのマンドクセ
http://www.autohotkey.com/forum/topic22975.html コンパイルユーティリティ(Compile_AHK II)
http://www.autohotkey.com/forum/topic23072.html HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい
http://www.autohotkey.com/forum/topic19367.html Windowsのイベントをフックして色々やりたい
http://www.autohotkey.com/forum/topic20701.html ShellFolder() : エクスプローラのPathおよび選択ファイルを取得
http://www.autohotkey.com/forum/topic20701-42.html ShellDesktop() : デスクトップで選択されたファイルを取得
http://www.autohotkey.com/forum/topic22923.html COM Standard Library
http://www.autohotkey.com/forum/topic49433.html COMをオブジェクト指向で使う
http://www.autohotkey.com/forum/topic21451.html ポップアップメニューの情報を得る
http://www.autohotkey.com/forum/topic53103.html 高速・軽量配列ライブラリ
http://www.autohotkey.com/forum/topic17549.html XPATHライブラリ

12 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:35:53 ID:elYoeAxq0
11 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 17:32:06 ID:3wCYCZ7UP
■自分の環境で、どのキーを押したかを調べる方法

キーボードのキーアサインや、Up/Downの状態を知りたければ、
AHKを常駐させて、トレイアイコンで右クリしてKeyHistoryを開けば、出てくる。
F5でリフレッシュされるので、調べたいキーを押した後、F5を連打する。

KeyHistoryは、キーを押した後にF5を押してリフレッシュしないと
内容が表示されない。また、F5でリフレッシュすると、F5を押した、という内容も
合わせて出てくるため、少々見にくい。

そんなときは>>10

「HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい」

のリンク先にあるスクリプトを実行する。コンソール(DOSプロンプトウインドウ)が
でてきて、そのウインドウへ、リアルタイムにキーの上げ下げ状況が表示される。

PrintScreenや、日本語入力などの特殊キーにHotkeyを定義しようとして、
うまく動かない場合は、これで調査すると、原因を掴みやすい。

13 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:36:48 ID:elYoeAxq0
ネタ: テキスト音声合成ミドルウェア AquesTalk を使って時報

準備:
http://www.a-quest.com/products/aquestalk.html からWin版を落として、
書庫にあるAquesTalk2Da.dll を Autohotkey.exe のフォルダに置く。

以下のスクリプトを実行する。[Win]+[1]で現時刻を喋る。

#1::Talk("<NUMK VAL=http://www1.axfc.net/uploader/A/so/

; phrase: 喋る内容(音声記号列という名の文字列)
; speed:速さ(遅50〜300速)
; sync:喋り終わるまで待つかどうか(真偽値)
Talk(phrase, speed=100, sync=true) {
 static hModule, hMe
 If (!hModule) {
  hModule := DllCall("LoadLibrary", "Str", "AquesTalk2Da.dll", "Ptr")
  hMe := DllCall("AquesTalk2Da\AquesTalk2Da_Create", "Ptr") ; 合成エンジン作成
 }
 If (sync) {
  Return DllCall("AquesTalk2Da\AquesTalk2Da_PlaySync", "AStr", phrase, "Int", speed, "UInt", 0, "Int")
 } Else {
  If DllCall("AquesTalk2Da\AquesTalk2Da_IsPlay", "Ptr", hMe, "Int") ; 喋り中なら
   DllCall("AquesTalk2Da\AquesTalk2Da_Stop", "Ptr", hMe) ; 止める
  Return DllCall("AquesTalk2Da\AquesTalk2Da_Play", "Ptr", hMe, "AStr", phrase, "Int", speed, "UInt", 0, "UInt", 0, "UInt", 0, "UInt", 0, "Int")
 }
}

※ 上はAHKL(Unicode)用なので、本家で使う場合は "Ptr"→"UInt", "AStr"→"Str" に置換する

14 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:37:53 ID:elYoeAxq0
テンプレ以上。

>>11>>12
>11 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 17:32:06 ID:3wCYCZ7UP
とかの部分が余計なので次スレから削除よろしく。手違いスマン。

15 :名無しさん@お腹いっぱい。:2010/07/30(金) 19:53:34 ID:p5e5vCII0
いちおつ

16 :名無しさん@お腹いっぱい。:2010/07/30(金) 20:37:12 ID:E3vpMotR0
>>1おつ

過去ログが多いスレだと
過去URL1 過去URL2
過去URL3 過去URL4
っていう風になってるスレもあるね


17 :名無しさん@お腹いっぱい。:2010/07/30(金) 20:42:03 ID:elYoeAxq0
●持ちでも数スレ〜10スレだけ遡って書いてあれば、part1まで辿っていけるわけだし

18 :名無しさん@お腹いっぱい。:2010/07/30(金) 23:55:59 ID:7qkG/NZl0
いちおつ
しっかしテンプレなげーなw

19 :名無しさん@お腹いっぱい。:2010/07/31(土) 14:16:51 ID:K6Z0VvT+0
> ttp://pc12.2ch.net/test/read.cgi/software/1265518996/979 の「ERROR: No COM Dispatch Object!」の件

これはウチでも起きる。
ちなみにAHK64の32ビット版のビルトインのやつでも起きる。
(COM_CreateObject を ComObjCreate に置換するだけ)

よくわからないけど、メソッドとプロパティがごっちゃになってるっぽい感じ。
解決法はわからんorz

20 :名無しさん@お腹いっぱい。:2010/08/01(日) 06:42:39 ID:uqxw/fPd0
ankでファンクションキー割り当てたいんだけど
Alt+F4の場合Send,!F4では無理みたいなんだけど
ファンクションキーってどうやったら割り当て出来るの?

21 :名無しさん@お腹いっぱい。:2010/08/01(日) 06:45:10 ID:lw0qNV5A0
!{F4}

ってか、もうちょっとマニュアル読もうぜ。試行錯誤も足りん。

22 :名無しさん@お腹いっぱい。:2010/08/01(日) 07:56:17 ID:uqxw/fPd0
あれ?それで行けた?
まず最初に試したのがソレだったんだが無理だったんだ
!{f4}だったのが駄目だったのか

23 :名無しさん@お腹いっぱい。:2010/08/01(日) 08:02:51 ID:uqxw/fPd0
右↑とか↓とかだと閉じれるが右↓↑だと設定が機能しないのはなぜ?

24 :名無しさん@お腹いっぱい。:2010/08/01(日) 08:06:42 ID:uqxw/fPd0
ank解凍してもう一度設定したら出来た
>>21
バカでごめん
ありがとう

25 :名無しさん@お腹いっぱい。:2010/08/04(水) 05:33:02 ID:KpoLKvEb0
リマップを使ってキーを入れ替えるスクリプトを書いたのですが、
困ったことにキーボードからの入力だけでなくマウスやアプリケーションが
はき出したキーまでもリマップされるようになりました。

例えばa::b b::c c::aとした時、キーボードでaを押したときにbが入力され、これは希望動作なのですが
アプリケーションでaをはかせたときにbが入力されてしまい、これは避けたいです。
aをはかせたい時にリマップを考慮してcをはかせるのも避けたいです。

リマップされるのはキーボードによる入力の場合だけで良く、
アプリケーションによる入力の場合(ahkのkeyhistoryでtype:aフラグが立っていた)
はリマップさせたくないのですが可能でしょうか?

26 :名無しさん@お腹いっぱい。:2010/08/04(水) 07:58:00 ID:7S5kTAOq0
DllCall を使ったスクリプトを AHK64 に移植する際、どういうことに気をつければ良い?
さっぱり動かないんだけどw
これを機会に勉強したいので、参考になるサイトなど教えてもらえたら嬉しいです。

27 :名無しさん@お腹いっぱい。:2010/08/04(水) 09:10:53 ID:a8HN120B0
前スレかそのまた前スレ辺りに一通り出てたな>64に移植

28 :名無しさん@お腹いっぱい。:2010/08/04(水) 10:34:11 ID:7S5kTAOq0
流行らせるページにあった ThumbRemap スクリプトを適当に書き換えて使っています。
こいつを AHK64 で動かしたのですが、どうにも動きません。
前スレ該当レス (>>749,752,755,757,762-765) を見たところ
Put/Get のところがマズそうなんですがよく分かりせん。
(参考のスクリプトはファイルの期限切れで閲覧できませんでした)
どなたか、アドバイスをいただけないでしょうか。

下記に該当のスクリプトを記載します。
オリジナルからの更新は、パッドが対応していれば 2 本指 + キーも定義できます。
(#If, TouchPad =2 以下に定義する)

29 :名無しさん@お腹いっぱい。:2010/08/04(水) 10:35:14 ID:7S5kTAOq0
; AHK_L 版 ThumbRemap モドキ / Synaptics 製タッチパッド専用
TouchInit:
IBuf := DllCall("GlobalAlloc", "Ptr", 0x40, "Ptr", A_PtrSize * 4, "Ptr")
OBuf := DllCall("GlobalAlloc", "Ptr", 0x40, "Ptr", A_PtrSize * 2, "Ptr")
NumPut(0x01000000 | 10, IBuf + A_PtrSize * 0, 0, "Ptr")
NumPut(0x01000000 | 729, IBuf + A_PtrSize * 1, 0, "Ptr")
NumPut(~0 - 1, IBuf + A_PtrSize * 3, 0, "Ptr")
SetTimer, TouchCheck, 10

TouchCheck:
If GetKeyState("LButton")
Return
hSynTP := DllCall("CreateFile", "Str", "\\.\SYNTP", "Ptr", 0xC0000000, "Ptr", 3, "Ptr", 0, "Ptr", 3, "Ptr", 80, "Ptr", 0, "Ptr")
DllCall("DeviceIoControl", "Ptr", hSynTP, "Ptr", 0x80006004, "Ptr", IBuf, "Ptr", A_PtrSize * 4, "Ptr", OBuf, "Ptr", A_PtrSize * 2, "Ptr", 0, "Ptr", 0, "Ptr")
DllCall("CloseHandle", "Ptr", hSynTP, "Ptr")
TouchPad := NumGet(OBuf + A_PtrSize) & 0xFF
Return

30 :名無しさん@お腹いっぱい。:2010/08/04(水) 10:36:01 ID:7S5kTAOq0
; 続き、キーバインド定義
#If, TouchPad = 1
I:: Click, WheelUp
K:: Click, WheelDown
*J::Click("Left")
*L::Click("Right")
*O::Click("Middle")
Click(value) {
StringReplace, key, A_ThisHotKey, *
Click, % "Down " value
KeyWait, % key
Click, % "Up " value
}
#If, TouchPad =2
#If

31 :名無しさん@お腹いっぱい。:2010/08/04(水) 11:45:02 ID:5a8nfcIui
32bit符号なしが UINT だけど、全部がポインタじゃないよ。
フラグとかで使う DWORD 型はそのまま UINT のままでいい。

あそこのは相当古いし上に、コメントも少ないからかなり苦労するな。
GlobalAlloc は大抵は VarSetCapacity でいいし、
NumPut/Get, StrPut/Get を使う方がいいところも多い。

32 :名無しさん@お腹いっぱい。:2010/08/04(水) 14:08:02 ID:RjWEdL6U0
>>25
$

33 :25:2010/08/04(水) 17:34:52 ID:KpoLKvEb0
>>32
レスありがとうございます。
$a::bとしてみましたが、以前と変わらずアプリケーションからの入力もリマップされてしまいます。

スクリプト実行前
41 01E a d 0.56 A
41 01E a u 0.11 A

スクリプト実行後
41 01E h d 0.78 A
42 030 i d 0.00 B
41 01E h u 0.14 A
42 030 i u 0.00 B

34 :名無しさん@お腹いっぱい。:2010/08/04(水) 23:03:24 ID:0HOUPXSK0
Windows7のエクスプローラのリストビューにアクセスする方法ってありますか?
デスクトップ以外だとうまくいかないのですが

35 :名無しさん@お腹いっぱい。:2010/08/05(木) 00:20:17 ID:6WJcNi4Y0
>>25
前スレの795にデバイスID(キーボードのデバイスID)で分岐させる方法が希望通りの動作に近いと思う。
代案としてはカスタマイズや設定の全てをAutohotkeyに任せること。

36 :28:2010/08/05(木) 03:39:36 ID:hd9YaTXp0
>>31
そうなんですね。一部をオリジナルの UInt 型に戻しました。
ポインタ型についてもう少し勉強してみます。

不躾なお願いなのですが、どなたかに本スクリプト (>>29-30) の流れを解説して
いただけないでしょうか。DllCall 内の関数は型通りに使われているようなので、
問題点はバッファー確保 (IBuf & OBuf) と NumPut/Get の使い型だと思っています。
ここから先を理解するのに難儀しており、アドバイスいただければ幸いです。

37 :名無しさん@お腹いっぱい。:2010/08/05(木) 04:24:50 ID:dptoT0ZSi
デバイス開いて(CreateFile)制御命令送って(DeviceIoControl)データ読みだし(NumGet)。
開いたものは閉じる。
命令用(in)と結果用(out)のバッファはあらかじめ確保(Alloc)しておく。

というか、書いてあるとおりだぜ。
DllCall いじるなら、 MSDN で関数を調べようぜ。

38 :名無しさん@お腹いっぱい。:2010/08/05(木) 04:27:53 ID:dptoT0ZSi
あと、Vista/7 持ってないからわかんないけど、
デバイス開くあたりが、UACにひっかかるんじゃないかねぇ。

39 :名無しさん@お腹いっぱい。:2010/08/05(木) 21:18:42 ID:KSKnEENb0
http://sites.google.com/site/autohotkeyjp/
左メニューに組み込み変数追加お願いします、とか書いてみる
それとアイコンがオレンジ色の変わって一瞬驚きました

40 :名無しさん@お腹いっぱい。:2010/08/05(木) 23:55:15 ID:KSKnEENb0
今見たら左メニューに組み込み変数追加されてました。
ありがとうございました!

41 :名無しさん@お腹いっぱい。:2010/08/06(金) 14:04:18 ID:kcR3Cisg0
AutoHotkey64がAVGでwin32/Heurとか検出されてるんだがもちろん誤検出だよな?

42 :名無しさん@お腹いっぱい。:2010/08/06(金) 14:09:58 ID:YArs/9MG0
オンラインで検体を送れるところがあるから送ってみれば?

43 :25:2010/08/06(金) 22:28:27 ID:TY2IF4pN0
>>35
うーん、一行でポンと出来るようなものではないんですね。
前スレ795は何をやっているか分からない行が多かったですが全体としては入力時にdeviceIDを取得して
比較しているだけのようなのでリファレンス見ながらやっていこうと思います。
レスありがとうございました。

44 :名無しさん@お腹いっぱい。:2010/08/07(土) 00:12:47 ID:k0UxEdTq0
>>25>>43
こういうことかと思ったけど違うのかな
$a::
If GetKeyState("a","P")
Send, b
Else
Send, a
Return

45 :25:2010/08/07(土) 01:55:44 ID:tQubyQTW0
>>44
おお、GetKeyStateにPを添えるとバッチりの挙動をするんですね。
*と{Blind}を付け加えたら理想の動きをするようになりました。
レスありがとうございます。検索が足りませんでした。

a::b
41 01E h d 1.05 A
42 030 i d 0.00 B

GetKeyState
41 01E h d 0.70 A
41 01E i d 0.00 A

46 :名無しさん@お腹いっぱい。:2010/08/08(日) 01:11:57 ID:3q3w8jHr0
AutoHotkeyでボス(嫁)が来たスクリプトを作ろうとしているのですが
Ctrlキーの二度打ちを設定するのは不可能でしょうか
^1::Send, #dでは危うかったので、御存知の方宜しく御願いします。

47 :名無しさん@お腹いっぱい。:2010/08/08(日) 06:57:40 ID:KpyNAP6d0
>>46
http://endoh-namazu.tierra.ne.jp/diary/?date=20050916

48 :名無しさん@お腹いっぱい。:2010/08/09(月) 10:32:44 ID:aYtdGkcui
Lにいろいろと統合されたな。
スレが建った頃に大きく変わるのがデフォだなぁw

Significant functionality developed by other community members:
* Native 64-bit support by fincs.
* Native COM support by Sean.
* Native Unicode support by jackieku.
* Support for various text encodings.
* New DllCall arg types for portability.
* Object-oriented file I/O.


49 :名無しさん@お腹いっぱい。:2010/08/09(月) 10:55:46 ID:JfWbspPo0
どうせならこのぐちゃぐちゃな文法も直してくれればいいのに

50 :名無しさん@お腹いっぱい。:2010/08/09(月) 12:43:28 ID:qUuquxFLP
なんだかなあ・・AutoHotkey64からAutoHotkey_Lw64にしたらどうもうまく動かない
何が違うんだ

51 :名無しさん@お腹いっぱい。:2010/08/09(月) 13:27:05 ID:qUuquxFLP
#Persistent
OnExit,_Exit
hHookMinimize:=DllCall("SetWinEventHook","UInt",0x16,"UInt",0x16,"UInt",0,"Ptr",RegisterCallback("WinMinimizeHandler"),"UInt",0,"UInt",0,"UInt",0,"Ptr")
return
WinMinimizeHandler(){
MsgBox
}
_Exit:
DllCall("UnhookWinEvent","Ptr",hHookMinimize)
ExitApp

いろいろ試したみたけど_Lw64だとイベントフックが腐ってる気がする
コールバック呼ばれない

52 :名無しさん@お腹いっぱい。:2010/08/09(月) 14:35:57 ID:W80hlfpgi
> Quote:
> EDIT: RegisterCallback() broken:
>
> Thanks. I should've known there was a reason for that 'add'. Quote:
New code:

フォーラムで報告あがってるし、Lexikosも認識してるからすぐ治るっしょ

53 :名無しさん@お腹いっぱい。:2010/08/09(月) 21:22:05 ID:L1oQFIkS0
BREGEXP.ahkのLoadLibraryとFreeLibraryの繰り返しを無くそうと思って試してみたら
メモリ使用量がどんどん上がっていってうわーと思ったのですが、
DllCall("BREGEXP.DLL\BRegFree",Int,pRExp)

DllCall("BREGEXP.DLL\BRegfree",Int,pRExp)
とFreeでは無くfreeとFを小文字ににしたらうまくいくようになりました。

54 :名無しさん@お腹いっぱい。:2010/08/09(月) 23:48:36 ID:5nQelkET0
if(flag) func1() ←ダメ
else func2()  ←OK

なんなのこれぇ

55 :名無しさん@お腹いっぱい。:2010/08/10(火) 01:38:40 ID:T9NAOBvp0
ahkで複数行のDOSコマンドを実行することは可能でしょうか?

56 :名無しさん@お腹いっぱい。:2010/08/11(水) 10:46:57 ID:lC1eENfji
>>55
バッチファイルを起動するのが簡単・確実かと。
ただ、多くのケースでahkのコマンド群で置き換えが可能なはず。
リダイレクト、パイプを使うならバッチのままがいいけど。

57 :名無しさん@お腹いっぱい。:2010/08/12(木) 12:53:39 ID:jCmOCBci0
AHK で "文字列タイピング中" という状態をフックし、その時にだけ一部のキー定義を変更したいと考えています。
1. Windows にタイピング状態を同定する機能はありますか? その場合はどのような Dll を用いればよいのでしょうか?
2. 自分で定義するとしたら、どのような方法があるでしょうか?

どなたかアドバイスをいただければ幸いです。

58 :名無しさん@お腹いっぱい。:2010/08/12(木) 13:10:41 ID:XWlXU4kH0
お、やっと規制解除されたか。

>>57
(1) "文字列タイピング中"ってのをどう定義すんの?って話だとおもうけど。

■ 文字キーを押してから指定時間以内
~a::
~b::
 :
~z::
~0::
~1::
 :
~9::
 typing := True
 SetTimer, TypingOff, 1000
 Return
TypingOff:
 typing := False
 Return

■ キャレット(文字入力カーソル)が表示されているかどうかで判断するなら
http://pc12.2ch.net/test/read.cgi/software/1265518996/53


(2) (1)で判断したのを使って AHKL の #If 使えば楽。
 以下だと、グローバル変数 typing の真偽値でホットキーが有効かどうかを判断。
#If (typing)
F1::Send, Hoge
F2::SomeFunction()
#If

59 :名無しさん@お腹いっぱい。:2010/08/13(金) 08:34:06 ID:rBSM7S8O0
>>58 ありがとうございます。
最初の例がヒントになりました。
これをベースにやってみようと思います。

60 :名無しさん@お腹いっぱい。:2010/08/13(金) 09:56:25 ID:WLbyInsx0
str = hoge
if(str == hoge){
Msgbox, true`n %str% == hoge
}else{
Msgbox, false`n %str% != hoge
}

これが何故かfalse hoge != hogeになってしまって困った。
str = hogeの場合は"を付けなくていいが==で比較する場合は付けないとダメなんだな。
Perlを嫌っている奴の気持ちが分かった気がした。

61 :名無しさん@お腹いっぱい。:2010/08/13(金) 14:09:50 ID:lCisbYU10
>>60
var = literal
var := expr
if (expr)
Perl関係なくね?

62 :名無しさん@お腹いっぱい。:2010/08/13(金) 16:26:58 ID:6zEgbGxa0
リテラルを引用符無しで記述できるバッチの仕様を引き摺りすぎてるからなぁ
まぁ、Lexikos曰く、リテラルの方が処理的に速いらしいけど

>>60だと、If (〜) とした段階で式を使ってるものとして処理が動いてる。

たとえば、

str = hoge piyo ; str := "hoge piyo"
If (str == hoge piyo)

としたら、

If (str == hoge . piyo)

という様に二つの変数を結合したものとの比較を行ってることになって
hoge と piyo 二つの未定義のグローバル変数が変数一覧に出てくる。

63 :名無しさん@お腹いっぱい。:2010/08/14(土) 00:04:04 ID:g1cPPVB90
TrackWheelってwindows7(32bit)で動かないのかな。
起動させてもプログラムが停止しましたってなっちゃうな。

64 :名無しさん@お腹いっぱい。:2010/08/14(土) 08:06:19 ID:seaXUFJTP
自分で答え書いてるじゃん

65 :名無しさん@お腹いっぱい。:2010/08/14(土) 09:04:46 ID:ktkxi1E40
>>63
中の人っす。実機がないんでよく分からないっす。
秋頃にPCを新調する予定なんでそれくらいになら対応できるかも。

66 :名無しさん@お腹いっぱい。:2010/08/15(日) 16:47:42 ID:+3mGXcL00
runコマンドで、hideオプションをつけて起動したコマンドラインツールのコンソールを、
あとから表示させる方法って、ないでしょうか。

コンソールコマンドの中で、通常の処理であれば正常に終わるように作っていますが、
まれにイレギュラーな対話メッセージが出た際、hideをつけていると操作を続行できず、
ウインドウがないので何が原因で止まっているかも判断できず、行き詰ってしまいます。

イレギュラーな場面のためにminオプションで起動させると、タスクバーの余白で
コマンドプロンプトのタスクがチラチラ出てしまい、これもまた目障りです。


いまは、settimerで、コマンドの実行時間を監視し、一定時間を経過しても終了しない場合は
対話でひっかかっていると判断させるようにしました。

が、問題が起きたまではわかるものの、コマンドコンソールを表示させる方法が思い浮かびません。
hideで起動させたウインドウを表示させる、うまい方法は、ないでしょうか。

67 :名無しさん@お腹いっぱい。:2010/08/15(日) 17:08:23 ID:zPLp0lVT0
show

68 :名無しさん@お腹いっぱい。:2010/08/15(日) 19:07:20 ID:uIR+EQMw0
Run, cmd.exe,, Hide, pid
MsgBox
WinShow, ahk_pid %pid%

69 :名無しさん@お腹いっぱい。:2010/08/15(日) 20:00:36 ID:+3mGXcL00
>>67 >>68
できました、ありがとうございます。

70 :名無しさん@お腹いっぱい。:2010/08/15(日) 21:29:30 ID:uIR+EQMw0
更新きた

Revision 54 - August 15, 2010
Fixed: RunAs in Unicode build. [jackieku]
Fixed: RegisterCallback in x64 build. [fincs]
Fixed: Executables failing to run on Win2k and WinXP prior to SP2. Win2k requires SP4 and updates (probably KB 816542). XP not tested.
Fixed: Dialogs such as MsgBox became unresponsive when interrupted by another script thread. Message filter/workaround added in L45 had to be removed. [Bug report]
Fixed: Multi-byte characters in default ANSI codepage; this was also causing a memory leak. [Bug report]
Fixed: ComObject now allows purely numeric property/method names. [Bug report]
Enhanced usability and capabilities of FileOpen/File object.
* FileOpen's Flags parameter accepts a human-readable string of flags.
* FileOpen's "update" mode has been renamed "read/write" and now creates the file if it didn't already exist.
* FileOpen sets A_LastError as appropriate.
* File := FileOpen(handle,"h") wraps an existing file handle in an object.
* File.Seek(n) defaults to SEEK_END when n is negative.
* File.Pos (or File.Position) can be used in place of Tell and Seek.
* File.Pos, File.Length, File.AtEOF and File.__Handle can be used without empty parentheses().
* File.Length can be set, as in File.Length:=n.
* File.ReadNum() and File.WriteNum(n) read or write a number, where Num is a NumGet-compatible type name.
* File.WriteLine(s) is equivalent to File.Write(s "`n"), for symmetry with File.ReadLine().
* File.Read() reads and returns the remainder of the file when used without parameters.
* File object now returns "" for unrecognized methods and invalid syntax rather than the numeric address of "".
(続く)

71 :名無しさん@お腹いっぱい。:2010/08/15(日) 21:30:46 ID:uIR+EQMw0
(続き)

Changed: GroupAdd's Label parameter now applies to the whole group. [Discussion]
Changed: GroupActivate sets ErrorLevel on success/failure. (Same thread as above.)
Changed: */ at the beginning of a line is ignored if there was no /*. [Discussion]
Removed ToCodePage and FromCodePage subcommands of Transform.

>>51 は治ったかな。
個人的には From/ToCodePage 廃止で色々書き直しだw

72 :名無しさん@お腹いっぱい。:2010/08/15(日) 22:02:40 ID:ZDKKr+GM0
インストーラにUnicode版とANSI版を同梱するなら、x64版も同梱すればいいのに
大して容量変わらないじゃん…

73 :名無しさん@お腹いっぱい。:2010/08/15(日) 22:07:54 ID:mi2wQMh6P
RegisterCallbackは直ったけどなんかGUI怪しくない?
付箋のスクリプト動かしたらフリーズする

74 :28:2010/08/16(月) 06:53:54 ID:I066VLbw0
懲りずに >>28-30 の AHKL_x64 ポート化を試みています (まだ動いていません)。
>>31 さんのコメントを参考にバッファの取り扱い方法を書きかえてみました。
また原作者のコメントとメーカーのサンプルコードも参照しました。
http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1146398137/63-67

; Synaptics 製タッチパッド情報取得
VarSetCapacity(IBuf, A_PtrSize * 4)
VarSetCapacity(OBuf, A_PtrSize * 2)
NumPut(0x01000000 | 10 , &IBuf) ; TP_DeviceHandle
NumPut(0x01000000 | 729, &IBuf + A_PtrSize) ; TP_PacketFingerInfo
NumPut(0x00000000, &IBuf + A_PtrSize * 2) ; TP_StartData
NumPut(0xFFFFFFFE, &IBuf + A_PtrSize * 3)
hSynTP := DllCall("CreateFile", "Str", "\\.\SYNTP", "UInt", 0xC0000000, "UInt", 3, "UInt", 0, "UInt", 3, "UInt", 80, "UInt", 0, "Ptr")
DllCall("DeviceIoControl", "Ptr", hSynTP, "UInt", 0x80006004, "Ptr", &IBuf, "UInt", A_PtrSize * 4, "Ptr", &OBuf, "UInt", A_PtrSize * 2, "UInt", 0, "UInt", 0, "Ptr")
DllCall("CloseHandle", "Ptr", hSynTP, "Ptr")
MsgBox % hSynTP "`n" A_PtrSize "`n" NumGet(&OBuf) "`n" NumGet(&OBuf + A_PtrSize)

x64 でもハンドルは取れているので、次の DeviceIoControl が動作していないようです。
バッファサイズ変更は効果ありませんでした。
これを x64 で動かすには、どのような情報が必要で何を試みたら良いでしょうか。

75 :名無しさん@お腹いっぱい。:2010/08/16(月) 06:55:58 ID:I066VLbw0
AHKL_x86 では NumGet(&OBuf + A_PtrSize) がタッチパッド状態を反映します。

76 :名無しさん@お腹いっぱい。:2010/08/17(火) 00:52:27 ID:NHeek7OJ0
本家のフォーラムでも質問してみようと思います。
ひきつづき、何かヒントらしきものがありましたら教えて下さい。

77 :名無しさん@お腹いっぱい。:2010/08/17(火) 16:56:35 ID:/diIoqjP0
ドキュメント日本語化追いつかねぇ

78 :名無しさん@お腹いっぱい。:2010/08/17(火) 17:02:29 ID:qrUFtLJWP
英語読めないから助かる

79 :名無しさん@お腹いっぱい。:2010/08/17(火) 17:43:30 ID:/diIoqjP0
俺が読めるくらいだから、英語自体は平易なんだけどさ、
プログラミングの素人なんで、COMの辺りの知識がないからどう訳していいものやら・・・

80 :名無しさん@お腹いっぱい。:2010/08/19(木) 15:38:09 ID:TJw3lxMz0
Revision 55 - August 19, 2010

Fixed: GroupActivate not setting ErrorLevel=1 if no Label was specified.
Fixed: Tab controls in x64 build.
Fixed: String-copy mode of StrPut when length is omitted; broken by L53.
Fixed: Data-alignment issues in x64 builds.
Changed: Set A_LastError for more File* commands to assist debugging.
Includes FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version and FileSetAttrib/Time.
Excludes FileCopyDir, FileRecycle, FileMoveDir, FileRemoveDir, FileRecycleEmpty, FileCreateDir and FileInstall as the APIs used do not consistently set or return a Win32 error code.

81 :名無しさん@お腹いっぱい。:2010/08/21(土) 17:49:24 ID:LHqwtwThP
関数で、渡したいパラメータは1つで、そこで処理させて、返却したいデータが複数(5個くらい)で、
もらったデータのうち、次の処理で必要なものが、その時々で異なる関数があります。

場合によっては、関数を呼び出すだけで、もらうデータが全く不要なときもあります。

このような場合、関数を呼び出すときにbyrefで全パラメータを毎回指定する以外に、
なにか別の受け渡し方法は、ないでしょうか。

いまは、関数内で、出すべきデータをグローバル変数に書き出しておいて、
関数を抜けた後に、その変数を読むという、裏ルートの送受信をさせていますが、
他所からの不意な書き換え事故を考えると、もっとよい方法が無いかなと。

82 :名無しさん@お腹いっぱい。:2010/08/21(土) 19:03:33 ID:ccGQQVvm0
その文章だと関数設計がおかしく感じるけど…

戻り値で不特定数を返す時はオブジェクトを利用すると楽。

ret := HogeFunc("あああ")
MsgBox, % ret.value1

HogeFunc(param1) {
; 〜何か〜
retValue := Object()
retValue.value1 := "あいうえお"
retValue.value2 := 100
Return retValue
}



83 :名無しさん@お腹いっぱい。:2010/08/21(土) 21:10:54 ID:LHqwtwThP
>>82
ありがとうございます。まさにそれが必要としていたものでした。

AutoHotkey_Lでのみ使える機能のようですね。
AHKを_Lに乗り変えて、ちぐはぐな設計で進めてしまった関数を見直すことにします。

84 :名無しさん@お腹いっぱい。:2010/08/27(金) 23:36:55 ID:VYFDDX400
なんか派生バージョンがいろいろあるけど
どれ入れたらいい?
windows7 64bit なんで autohotkey_L の 64bit版いれようとしたけど、
インストーラーがないよ。

85 :名無しさん@お腹いっぱい。:2010/08/28(土) 00:15:58 ID:2vpQQNqx0
ないからどうしたの?

86 :名無しさん@お腹いっぱい。:2010/08/28(土) 00:38:30 ID:RyaOMqig0
インストーラーなしのでいいじゃん

87 :名無しさん@お腹いっぱい。:2010/08/28(土) 00:39:58 ID:OOl+TLHv0
インストーラーなんていらね。
色々厄介な事になりやすい

88 :名無しさん@お腹いっぱい。:2010/08/28(土) 00:55:26 ID:L+vqbGxt0
TheGood > Are you also going to make an installer for the 64-bit build?
Lexikos > I'm a bit reluctant to do that since compiling x64-based scripts isn't possible yet.
       We need to replace the library which is used to embed the script into the exe file.
64bit版のインストーラを作るのに色々問題があるんだとさ。

利用する上でインストーラ無くても利用には全然問題はない。
「AutoHotkey.ahk」ってテキストファイルをAutoHotkey.exeと同じフォルダに作って、
AutoHotkey.exeをダブルクリックすりゃおk。

関連付けはフォルダオプションで簡単にできる(アイコンはexeの中に入っている)。

89 :名無しさん@お腹いっぱい。:2010/08/30(月) 12:06:03 ID:d9zUkDoY0
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/ 更新。

Revision 56 - August 29, 2010

Added support for x64 compiled scripts. Requires Ahk2Exe_L and x64 AutoHotkeySC.bin.
Fixed: Deref operator (*addr) rejected addresses outside 32-bit range.
Fixed: #If expression memory allocation error on x64.
Fixed: Custom hotstring end chars with code points greater than U+00FF.
Fixed: Special characters being sent out of sequence by SendInput/Play.
Fixed: */ being discarded in continuation sections (see L54).

90 :名無しさん@お腹いっぱい。:2010/08/30(月) 12:09:16 ID:d9zUkDoY0
Lexikos > I've added a 64-bit option to the installer, enabled only if you're on a 64-bit system.

とのことなので x64 もインストーラでイケるようになったみたい。


91 :名無しさん@お腹いっぱい。:2010/09/04(土) 14:30:19 ID:ZIpAVQUt0
MouseGenture.ahk の相談はここでいいの?

92 :名無しさん@お腹いっぱい。:2010/09/04(土) 16:58:03 ID:TlzoJX8wP
おk

93 :名無しさん@お腹いっぱい。:2010/09/04(土) 23:58:47 ID:uTvDAlp20
何かキテルー

Revision 57 - September 4, 2010
Fixed Str*, WStr* and AStr* DllCall return types on x64.
Added functionality to InStr to bring it in line with StringGetPos:
* If StartingPos is negative, the search is conducted right-to-left beginning at that offset from the end.
* An additional parameter is available to specify which occurrence of the string to find.
Added #include <LibName> for explicitly including a script from a function library folder.
Added functionality to IniRead and IniWrite allowing an entire section to be read or written.
Added functionality to IniRead allowing a list of section names to be retrieved.
Added support for custom verbs to Run/RunWait: Run *verb file.
Made improvements to the way Run/RunWait extracts the action and its parameters from the Target parameter.
Changed NumGet/NumPut to allow Offset to be omitted entirely since Type is always non-numeric.
Removed the restriction that a label can't point to the end of a block.

94 :名無しさん@お腹いっぱい。:2010/09/05(日) 17:18:59 ID:GLHR6bhm0
最小化状態のFirefoxをWinActivateでアクティブ化すると、
ウィンドウは元に戻るんですがFirefoxがキー入力を受け付けない変な状態になります
どうにか対策方法とかないでしょうか? Firefox側の問題じゃないかとは思うんですが

95 :名無しさん@お腹いっぱい。:2010/09/05(日) 17:56:00 ID:m6I/5iFo0
タスクトレイアイコンをマウスオーバーしたときにツールチップ?として出てくるテキストを
取得することってこのソフトでできますか?

96 :名無しさん@お腹いっぱい。:2010/09/05(日) 18:05:16 ID:KFv0gG8x0
出来るけど、コマンド1つでは出来ない。

97 :名無しさん@お腹いっぱい。:2010/09/05(日) 18:50:39 ID:NvhQsR8q0
>>95
http://www.autohotkey.com/forum/topic24234.html
※上記ページからacc.ahkとcom.ahkをDLしてAutohotkeyのLibフォルダに入れ、下記スクリプトを実行する。
※これはAutohotkey本家用

F1::ChildUnderCursor()

ChildUnderCursor() {
ACC_Init()
CoordMode, Mouse, Screen
MouseGetPos, x, y
pacc := Acc_AccessibleObjectFromPoint(x, y, _idChild_)
If paccChild:=acc_Child(pacc, _idChild_)
sResult := "Name:`t`t" . acc_Name(paccChild) . "`n"
. "(l,t,w,h):`t`t" . acc_Location(paccChild) . "`n"
, COM_Release(paccChild)
Else sResult := "Name:`t`t" . acc_Name(pacc, _idChild_) . "`n"
. "(l,t,w,h):`t`t" . acc_Location(pacc, _idChild_) . "`n"
COM_Release(pacc)
MsgBox, % sResult
ACC_Term()
}

98 :名無しさん@お腹いっぱい。:2010/09/05(日) 19:39:33 ID:m6I/5iFo0
>>96-97
ありがとうございます。
こういう関数結構あるみたいですね。
Lだと
http://www.autohotkey.net/~majkinetor/Tray/Tray.html

99 :名無しさん@お腹いっぱい。:2010/09/07(火) 22:26:43 ID:nAVBDwuS0
Revision 58 - September 5, 2010
Added: static var := expression

ふむ。これは地味だが便利だ。

100 :名無しさん@お腹いっぱい。:2010/09/07(火) 23:10:22 ID:sUMdgTS6P
やっと静的変数に式代入できるようになったか
何度エラーで弾かれたことか

101 :名無しさん@お腹いっぱい。:2010/09/08(水) 05:18:11 ID:6k+yxaz30
Win7で、全体のボリュームコントロールをいじりたいのですが、
うまくできません。

XPでSoundSetコマンドでMasterを指定すると上げ下げできていましたが、
Win7以降だと、AHKの実行しているプロセスの音量だけが変わってしまいます。

Win7で、全体の音量を制御する方法って、ないでしょうか。

102 :名無しさん@お腹いっぱい。:2010/09/08(水) 07:24:47 ID:H/2J7Uq00
>>101
どうにも上手くいかないから
Volume_Up、Volume_Downキー送ってる

103 :名無しさん@お腹いっぱい。:2010/09/08(水) 07:44:18 ID:6k+yxaz30
>>102
おお、それは盲点でした。おかげさまで音量の操作ができました。

音量変更後に現在の音量値の取得を画面に表示していたのですが、
現在値の取得ができず、完全な移植にはまだまだ遠いようです。

104 :名無しさん@お腹いっぱい。:2010/09/08(水) 10:09:58 ID:8OHW3hlN0
これじゃアカンの?

Vista Audio Control Functions v2.0
http://www.autohotkey.com/forum/topic23792.html

105 :名無しさん@お腹いっぱい。:2010/09/08(水) 10:14:01 ID:8BWMvBiW0
>>101-103
こんなのもある。
ttp://www.autohotkey.com/forum/topic23792.html
とりあえずマスターボリュームを5ずつ上下させるとかはできた。

106 :名無しさん@お腹いっぱい。:2010/09/08(水) 11:41:07 ID:QBr5t/WC0
MouseGenture
ATOKの入力モードに反応させないようにできませんか

107 :名無しさん@お腹いっぱい。:2010/09/08(水) 14:45:46 ID:S/7Cvc9AO
MouseGesture.ahk で、
中ボタンを WinMinimize に設定しているのですが、
中+右ボタンや、中+各方向ドラッグ の後で中ボタンを
押した時にも発動してしまいます。
他の動作をした場合には中ボタン単体を無効にする方法はありませんか?

108 :名無しさん@お腹いっぱい。:2010/09/08(水) 14:56:59 ID:lAduna1y0
説明書読め

109 :名無しさん@お腹いっぱい。:2010/09/08(水) 21:59:36 ID:LyMV39xS0
AHK64のコンパイラが欲しかったのですがzip版には同梱されていなかったので
インストーラ版を入れたところ.ahkの関連付けがAHKLに変更されました。今まで
使っていたスクリプトが一部動かなくなったので関連付けを戻そうと.ahkファイル
右クリ→プログラムから開く→ahkを選択してみても、ahklと実行ファイル名が同
じからなのか、うまく設定できませんでした。ahklのコンパイラフォルダだけコピー
してアンインスコし、再度ahkに関連付けました。うまく関連付けられましたが、今
度はアイコンがおかしくなりました。.ahkファイルのアイコンが紙の中にahk.exeの
アイコンが描かれているアイコンになりました。なのでahkをインスコし直しました。
すると元の環境に戻せました。おしまい。

110 :名無しさん@お腹いっぱい。:2010/09/08(水) 22:22:03 ID:8OHW3hlN0
日記かよw
インストーラは Uninstall Information とか使うと解凍できるぞ。

111 :名無しさん@お腹いっぱい。:2010/09/08(水) 22:23:13 ID:8OHW3hlN0
隣のフォルダ名コピってたw
Universal Extractor な

112 :名無しさん@お腹いっぱい。:2010/09/08(水) 22:52:29 ID:6k+yxaz30
>>104-105
ありがとうございます。これで全部解決できそうです。

113 :名無しさん@お腹いっぱい。:2010/09/09(木) 00:56:06 ID:s6czYEFU0
誰かAHKL最新版で使えるmigemo検索のサンプルスクリプトをおくれ。
流行らせるページのやつ全然動かなかった。

114 :名無しさん@お腹いっぱい。:2010/09/09(木) 16:46:26 ID:bxRMK4yrO
MouseGesture.ahk で、
中ボタンを WinMinimize に設定しているのですが、
中+右ボタンや、中+各方向ドラッグ の後で中ボタンを
押した時にも発動してしまいます。
他の動作をした場合には中ボタン単体を無効にする方法はありませんか?

流行らせるページやmouseGesture.ahkのマニュアルや解説サイトを見たが見つかりませんでした。

115 :名無しさん@お腹いっぱい。:2010/09/09(木) 18:02:15 ID:9DOorRwvP
アルファベットのA〜Zをループで処理したいのですが何かいい方法ってないでしょうか?
取りあえずは
alphabet1=A
...
alphabet26=Z

Loop, 26
{
MsgBox, % alphabet%A_Index%
}
という感じで間に合わせているのですが他に何か方法ってないでしょうか?


116 :名無しさん@お腹いっぱい。:2010/09/09(木) 18:18:24 ID:aMuCAznK0
alphabet = A|B|…|Z
Loop, Parse, alphabet, `|
{
MsgBox, %A_LoopField%
}

117 :名無しさん@お腹いっぱい。:2010/09/09(木) 19:32:06 ID:pRAMZm790
>>115
CharStart = A
CharEnd = Z
Loop, % Asc(CharEnd) -Asc(CharStart) + 1
  MsgBox, % Chr(Asc(CharStart) + A_Index - 1)


118 :名無しさん@お腹いっぱい。:2010/09/09(木) 19:38:32 ID:pRAMZm790
>>113

以下の"migemo.ahk" をライブラリフォルダに保存。ちなみに c/migemo 1.2 用(つまり32bit用)。
これは文字から正規表現パターンを作るだけなので、あとは普通に正規表現で検索する。
migemo インスタンスは最初に作ってグローバル変数か何かに入れておく。

migemo:=Migemo_Open("C:\Program Files\cmigemo-1.2-dll\dict\migemo-dict")
str = 米日露西伯中韓仏蘭独
If RegExMatch(str, migemo.Query("amerika"), $)
  msgbox, % $

; ---- migemo.ahk ----
Migemo_Open(dict) {
  static base := Object("__Delete", "Migemo_ObjDelete", "Query", "Migemo_ObjQuery", "hModule", DllCall("LoadLibrary", "Str", "migemo.dll", "Ptr"))
  Return Object("base", base, "hMigemo", DllCall("migemo.dll\migemo_open", "AStr", dict, "Ptr"))
}
Migemo_ObjDelete(self) {
  If DllCall("migemo.dll\migemo_close", "Ptr", self.hMigemo)
    self.Remove("hMigemo")
}
Migemo_ObjQuery(self, word) {
  Return DllCall("migemo.dll\migemo_query", "Ptr", self.hMigemo, "AStr", word, "AStr")
}




119 :名無しさん@お腹いっぱい。:2010/09/09(木) 20:20:32 ID:s6czYEFU0
>>118
おお、できた!ありがとう!

120 :名無しさん@お腹いっぱい。:2010/09/09(木) 20:56:37 ID:9DOorRwvP
>>116,117
ありがとうございました!
二つともとても参考になりました

121 :名無しさん@お腹いっぱい。:2010/09/10(金) 14:33:44 ID:p9QDLVxs0
>>94わかるかたどなたかお助けを…

122 :名無しさん@お腹いっぱい。:2010/09/10(金) 18:09:35 ID:NLRyA43v0
強制的にフォーカス変えてやればなんとかなるね

#SingleInstance, force
#UseHook
^Space::
 SetTitleMatchMode, 2
 IfWinExist, - Mozilla Firefox ahk_class MozillaUIWindowClass
 {
  WinGet, MinMax, MinMax
  WinActivate
  If (MinMax=-1)
   ControlFocus, MozillaWindowClass1
 }
 Return

123 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:16:36 ID:Qrfx82VL0
zzz()が何千回と繰り返し利用される関数な場合
ptrn000〜ptrn111への変数の代入は、どこにどうやって書くのが
パフォーマンス的に優れてるとか分かる人いますか?

zzz(){
ptrn000=a
ptrn001=b
ptrn010=c
ptrn011=d
ptrn100=e
ptrn101=f
ptrn110=g
ptrn111=h

abc:=CheckA() CheckB() CheckC()
Return ptrn%abc%
}

124 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:19:47 ID:HWyeVSxk0
ptrn000=a
ptrn001=b
ptrn010=c
ptrn011=d
ptrn100=e
ptrn101=f
ptrn110=g
ptrn111=h

zzz(){
abc:=CheckA() CheckB() CheckC()
Return ptrn%abc%
}


125 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:22:41 ID:Qrfx82VL0
それとも、単純にIFで場合分けした方が良いのでしょうか
こっちは使いにくすぎてやりたくないけどw
zzz(){
  If(CheckA){
    If(CheckB){
      If(CheckC){
        Return h
      }Else Return g
    }Else If(CheckC){
      Return f
    }Else Return e
  }Else If(CheckB){
    If(CheckC){
      Return d
    }Else Return c
  }Else If(CheckC){
    Return b
  }Else Return a
}


126 :名無しさん@お腹いっぱい。:2010/09/10(金) 19:52:36 ID:NLRyA43v0
意味がよく分からんけど、比較式の回数が少なくなるようにIfを組んだ方が速いのは確か。
>>8のQA1 にもあるけど、Ifのネストよりは論理和・論理積を使った方が速い。

AHKに限らず一般的なことだけど、式を論理演算子で並べる順序でも差が出る。
論理和では真、論理積では偽を、左側に置いた方が1個目の評価で式を抜ける可能性が高くなる。

多分、三項演算子と論理演算子を使うのが一番速いとは思う。

127 :名無しさん@お腹いっぱい。:2010/09/11(土) 21:31:43 ID:IwJc94rqP
質問です

コマンドプロンプトでCtrl+Vを押したら、クリップボードでコピペできるようにしたいのですが、
Spyで見て ahk_class が ConsoleWindowClass とわかったため、

#IfWinActive ahk_class ConsoleWindowClass
^v::Send,!{Space}ep
^c::Send,unko ; test
#IfWinActive

というように書いてみたのですが、Ctrl+Vで^Vがそのままコマンドプロンプトに送られてしまいます。
(Ctrl+Cもテストで書きましたがこちらも送られませんでした)

試しに^c::Send,unko とだけ書いてCtrl+Cすると、
ちゃんと他のアプリでunkoに贈られるのでAutoHotKey自体は動作しているようです。

Key history and info で表示してみたところ、確かに設定したキーが送られていないようでした。

以前は動いていたような気がするのですが、今になって何故か動かない状況です

128 :名無しさん@お腹いっぱい。:2010/09/11(土) 21:39:31 ID:wTBLOOWg0
オプションで「簡易編集」にチェックが入っているかどうかを確認。

あと、Send, {RButton} でもおk。

129 :名無しさん@お腹いっぱい。:2010/09/11(土) 22:18:40 ID:9qTkeMmx0
^v::SendInput, {Raw}%clipboard%

130 :名無しさん@お腹いっぱい。:2010/09/11(土) 22:20:52 ID:VH8Xeow80
>>127
その記述自体はそれで合ってるから、別の場所がおかしいんじゃないの。
たとえば、その記述の前で不適切なコメントアウトしてるとか。

違うかもしれないけど失敗しやすい問題から一応書いておくと、
/*と*/はそれぞれ行頭に書かないとコメントアウトにならない。
以下のようなのはコメントが閉じられてないと解釈される。
/*〜*/
/***
hoge
***/
あと何か書いてある行での;は、中身とくっついてるとコメントにならない。
#IfWinActive ahk_class ConsoleWindowClass;プロンプト
こんなのは動作しない。

131 :名無しさん@お腹いっぱい。:2010/09/11(土) 23:34:59 ID:El0rBh4T0
>>127
俺Vista使ってるけど、管理者権限でAHKを起動しないと、
コマンドプロンプトでホットキーが動作しなくなったことがある。
コマンドプロンプトは一般権限で起動しているのに。
再起動したら直ったので原因不明。

132 :名無しさん@お腹いっぱい。:2010/09/12(日) 09:23:11 ID:hFe7w6e00
なんかよくわからないけどAHKきかなくなることはある
Win7でInternetExplorerとかMouseGesture.ahkのジェスチャまったくきかない

133 :名無しさん@お腹いっぱい。:2010/09/12(日) 09:24:26 ID:hFe7w6e00
↑ユーザーアカウント制御どうたらこうたらってでたアプリからの起動でってぬけてた

134 :名無しさん@お腹いっぱい。:2010/09/12(日) 13:47:56 ID:XZfOs3RC0
管理者権限で動いてるアプリには効かない。
AHKも管理者権限で動かせば聞くようになる。

135 :名無しさん@お腹いっぱい。:2010/09/12(日) 20:40:07 ID:hGZO2mS20
>>122
ありがとうございます。遅くなってすみません
その方法でもうまく行きませんでした
というかAHKに限らず、Alt+Tab、タスクバーのクリックなど以外の殆んどの方法でうまくアクティブ化できないみたいです
もうFirefoxやめてChromeにでもしようかと

136 :名無しさん@お腹いっぱい。:2010/09/12(日) 23:26:47 ID:/5B09T1v0
Revision 59 - September 12, 2010

Fixed: #If expression should now evaluate each expression at most once per keypress in all cases.
Changed: SplashImage uses common image-loading routines; now supports PNG and similar, but results may differ from before for icon files.
Added: For x,y in z.
Added: Loop .. Until expression, usable with any Loop or For-loop.
Added: Named loops; continue outer_loop, break 2, etc.
Debugger: Encode stdout and stderr packets as UTF-8.
Debugger: Allow user to Abort, Retry or Ignore when the initial connection fails.
Debugger: Allow attaching a debugger client by sending the script a registered window message.
Debugger: Allow detaching debugger client by sending the "detach" DBGp command.

ふむ。ループ関連で色々追加か。

こういうのは地味に便利だな
For key,value in Object(1, "あああ", 2, "いいい", 3, "ううう")
 MsgBox, % key " = " value


137 :名無しさん@お腹いっぱい。:2010/09/13(月) 00:12:32 ID:ogaimglM0
enumオブジェクト涙目

138 :名無しさん@お腹いっぱい。:2010/09/13(月) 00:46:49 ID:MngYOI9N0
そろそろ仕様を固めてほしいわ

139 :名無しさん@お腹いっぱい。:2010/09/13(月) 05:50:39 ID:UQiZZW3K0
質問なのですが、AutoHotkeyでSandSを実現するコードってのが、あるじゃないですか。
こういうの。
Space Up:: Send, % "{Shift Up}" (A_TimeSincePriorHotkey < 130 ? " " : "")
+Space:: Send, +{Space}
>+Space:: Return
Space:: RShift

このコードの一行目の%って、どういう意味なんですか?

140 :名無しさん@お腹いっぱい。:2010/09/13(月) 06:01:55 ID:bpPcPXR70
AHK本家バージョンをWin7で使ってるものだけど、
スタンバイから回復した瞬間に、たまにアプリエラーで死んでしまう。

はやらせるページのCPU使用率とメモリ使用量を知るためのdllを入れてるが、
ほかにとくに目立った処理はしていない。

こんな変な症状で困ってるのは俺だけかな。
どうやって診断すればいいんだろうか?

141 :名無しさん@お腹いっぱい。:2010/09/13(月) 07:38:26 ID:8oWcPn2M0
ヘルプより
Force an expression:
An expression can be used in a parameter that does not directly support it by preceding the expression with a percent sign and a space or tab.

142 :名無しさん@お腹いっぱい。:2010/09/13(月) 15:25:38 ID:g6OmHOf00
これ凄く難しいね
C言語ちょろっとかじっただけだけど、全然わかんね
USBテンキーを識別して、個別にリマップするのは可能ですか?

143 :名無しさん@お腹いっぱい。:2010/09/13(月) 16:01:21 ID:dE5gyF1iP
>>142
USB接続のテンキーが押されたかどうかは、このソフトだけでは識別できない。

HIDのデバイスごとに識別できる外部ツールを使えば出来たはずだが、
やり方は忘れた。過去ログにあるはず。

あるいは、テンキーそのもの(フルキーの右側のキー)と共通して反応してもよければ、

NumpadAdd::
 msgbox,テンキーのプラスが押された
 return

みたいに記述することは可能

144 :名無しさん@お腹いっぱい。:2010/09/13(月) 16:57:39 ID:g6OmHOf00
>>143
ありがとうございます。
その辺が良くわからなかったので勉強になりました。
右側テンキーは数字入力の為に出来れば残したいと思っていましたが、
アプリ毎に切り替える形で対応しようと思っています。

145 :名無しさん@お腹いっぱい。:2010/09/13(月) 17:50:14 ID:zNoAbLLW0
他の言語を使ったことがないのでよくわからないのですが
IfEqual, A, foo, SetEnv, B, bar

SetEnv, B, % A = foo ? bar : ""
ならどちらの方が処理が速いのでしょうか
>>8からすると前者のほうが速いのでしょうか?

146 :名無しさん@お腹いっぱい。:2010/09/13(月) 18:04:18 ID:zNoAbLLW0
書き込んだあとに自分で確かれれば良いことに気づいた
10万回ループさせても気になるほどの速度の差はないのですね
式を書き間違えた上に板を汚して申し訳ないです

147 :名無しさん@お腹いっぱい。:2010/09/13(月) 18:36:13 ID:oIa5T8Q/0
>>118
これでmigemo.dllのパスもdictと同じように指定するにはどうしたらいいんでしょうか。
Migemo_Open(dll,dict) {
みたいにしようと思ったんですが、"migemo.dll"をdllで置き換えたら
空文字が返ってくるようになるだけでした。


148 :名無しさん@お腹いっぱい。:2010/09/13(月) 22:51:27 ID:ygAoD+jc0
>>147 こんなんでどうじゃろ?
; ---- migemo.ahk ----
Migemo_Open(dict, dll="migemo.dll") {
  static base := Object("__Delete", "Migemo_ObjDelete", "Query", "Migemo_ObjQuery", "hModule", 0)
  If (!base.hModule) {
    If (hModule := DllCall("LoadLibrary", "Str", dll, "Ptr")) {
      base.hModule := hModule
      base.func_close := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "migemo_close", "Ptr")
      base.func_query := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "migemo_query", "Ptr")
    } else {
      MsgBox, 65, Warning, Failed to initialize Migemo.dll`nContinue?
      IfMsgBox, Cancel
        Exit
    }
  }
  Return Object("base", base, "hMigemo", DllCall("migemo.dll\migemo_open", "AStr", dict, "Ptr"))
}
Migemo_ObjDelete(self) {
  If DllCall(self.base.func_close, "Ptr", self.hMigemo)
    self.Remove("hMigemo") := 0
}
Migemo_ObjQuery(self, word) {
  Return DllCall(self.base.func_query, "Ptr", self.hMigemo, "AStr", word, "AStr")
}

149 :名無しさん@お腹いっぱい。:2010/09/13(月) 23:55:10 ID:Mf5787bW0
>>142
ぶっちゃけAutoHotKeyの言語仕様が普及している高級言語と比べて(C言語は今や中級かも知れないけど)
かなり異質なので既存の言語経験者にも慣れにくいと思う

どうしてこうなった?みたいな言語仕様だからなw

似たような用途のAutoItは互換性捨ててバージョン3からふつーの言語っぽくなってC言語経験者なら書きやすいと思うよ
日本語情報は少ないけどね

150 :名無しさん@お腹いっぱい。:2010/09/14(火) 00:36:49 ID:0t8RRXrH0
AutoIt はホットキーをがしがし使いたいと思うならちょっと不利かも。
たしか以前はホットキー定義に数の制限があったような。

151 :名無しさん@お腹いっぱい。:2010/09/14(火) 18:13:05 ID:4mkZ8V+x0
>>149
AutoHotKeyはAutoIt ver2を元にした言語仕様だから

152 :名無しさん@お腹いっぱい。:2010/09/15(水) 10:17:54 ID:bNT4JkPw0
A_LineFileに対してA_LineDirって無いよね?
今まではSplitPathでフォルダパス取得してたんだけど、
なんかA_LineFile . "\..\hoge.xyz"で同階層のファイルパス取得できた。
「ファイル名\..\ファイル名」って相対パスとして問題あるかな?

153 :名無しさん@お腹いっぱい。:2010/09/15(水) 16:37:28 ID:iTlL7tEk0
>>10
このテンプレおかしいな
ReplaceStr.txtとかで置換されちゃってるっぽい感じだけど

> %http://www1.axfc.net/uploader/A/so/
> alert .= (%http://www1.axfc.net/uploader/A/so/

の部分正しくは↓

%A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%
alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > alertDur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : ""


A_ とかを片っ端から斧のアドレスに置換してるんだろうか・・・

154 :名無しさん@お腹いっぱい。:2010/09/15(水) 16:43:34 ID:iTlL7tEk0
>>13もおかしいな

> #1::Talk("<NUMK VAL=http://www1.axfc.net/uploader/A/so/



#1::Talk("<NUMK VAL=" A_Hour ">じ/<NUMK VAL=" A_Min " COUNTER=ふん>")


スレ違いだけど自分のJaneStyleのReplaceStr.txtはこうしてる

<rx2>(?<![!-')-=?-Z\\-~])(Sc|He|Ne|H|Li|N|Si|C|O|Al|S|P|Ar|B|K|F|Be|Na|Ca|Mg|Cl|Img|Flv|Flash|File)_(\d+)(?![!-(*--/:;=-\\^-~]) <font color=gray>[URL化]</font> http://www1.axfc.net/uploader/$1/so/$2 msg

155 :名無しさん@お腹いっぱい。:2010/09/15(水) 20:20:02 ID:o22lD/5M0
ホントだw いつも同じだろうという感じでよく読んで無かったわ

156 :127:2010/09/16(木) 00:09:51 ID:rgwZW5mqP
>>128-129
ありがとうございます。

なんということでしょう、マシンを再起動したら問題なく動きました orz

しかし、他にもそんな手があるんですね、すごい・・・

157 :名無しさん@お腹いっぱい。:2010/09/21(火) 16:33:22 ID:2zEfBL3u0
autohotkeyでcapslockを入れ替えられないのは
autohotkeyのバグなのでしょうか?

158 :名無しさん@お腹いっぱい。:2010/09/21(火) 16:36:09 ID:UVFUFRK90
入れ替えって、具体的にどういうこと?

159 :名無しさん@お腹いっぱい。:2010/09/21(火) 16:43:29 ID:1iHcliyr0
>>157
>>4

160 :名無しさん@お腹いっぱい。:2010/09/21(火) 23:37:23 ID:EZZTxzxq0
ホイール上下で常にマウスカーソルのあるコントロールを操作できるようにすべく
下記のように入力したのですが上だけが効果がありません。
間違いを修正していただけないでしょうか。

[ホイール↑]
CoordMode,Mouse,Screen
MouseGetPos,x,y,hwnd,ctrl,3
wp:=0x00780000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6
lp:=y<<16|x
IfWinExist,ahk_id %hwnd% {
SendMessage,0x84,0,%lp%,,ahk_id %ctrl%
If ErrorLevel=4294967295
MouseGetPos,,,,ctrl,2
ctrl := !ctrl ? hwnd : ctrl
Loop,%A_EventInfo%
PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl%
}

[ホイール↓]
CoordMode,Mouse,Screen
MouseGetPos,x,y,hwnd,ctrl,3
wp:=0xFF880000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6
lp:=y<<16|x
IfWinExist,ahk_id %hwnd% {
SendMessage,0x84,0,%lp%,,ahk_id %ctrl%
If ErrorLevel=4294967295
MouseGetPos,,,,ctrl,2
ctrl := !ctrl ? hwnd : ctrl
Loop,%A_EventInfo%
PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl%
}

161 :名無しさん@お腹いっぱい。:2010/09/22(水) 00:54:06 ID:0PF8kK/50
明らかにおかしいのは
IfWinExist,ahk_id %hwnd% {
コピペなんだろうけど無理に変えようとしなきゃいいのに

162 :名無しさん@お腹いっぱい。:2010/09/22(水) 00:55:10 ID:KjsfamAG0
冗長だけど、処理としてはいいんじゃないの? 単にRetrun が抜けてるのかも知れんけど。
俺ならこうするけど。

WheelUp::
WheelDown::
CoordMode,Mouse,Screen
MouseGetPos, x, y
PostMessage, WM_MOUSEWHEEL:=0x020A
, 120 * (InStr(A_ThisHotkey, "Up") ? 1 : -1) * (A_EventInfo ? A_EventInfo : 1) << 16
| GetKeyState("LButton") | GetKeyState("RButton")<<1 | GetKeyState("Shift")<<2 | GetKeyState("Ctrl")<<3 | GetKeyState("MButton")<<4 | GetKeyState("XButton1")<<5 | GetKeyState("XButton2")<<6
, x | y<<16
,, % "ahk_id " DllCall("WindowFromPoint", "Int",x, "Int", y, "Ptr")
Return

163 :名無しさん@お腹いっぱい。:2010/09/22(水) 00:58:13 ID:GpWbe7BW0
可読性って大事だな、と思った

164 :名無しさん@お腹いっぱい。:2010/09/22(水) 09:26:05 ID:rTjPB2Jq0
? や | 演算子で1行まとめにしてコンパクトにするのもいいけど
動かないときはいったん分解してわかりやすい形に書き直したほうがいい
その過程でtypoなどの間違いを見つけやすくなるし
人からもらったもののコピペなどでも自力で解読しようとする努力は必要
最終的に質問するにしてもはコード追いやすくしといたほうが答えてもらえる確率高くなる

165 :名無しさん@お腹いっぱい。:2010/09/22(水) 22:56:31 ID:1Oe7LKkO0
という先輩の有り難いお言葉だ、感謝しろ>>160

166 :名無しさん@お腹いっぱい。:2010/09/24(金) 13:31:24 ID:sutlVDhd0
何時間間隔とかで実行したいときは、SetTimerを使うようですが、
1日1回13時に実行とか、0:30 1:30 〜 23:30 とか時間を指定して実行したいときはどうすればいいですか?

167 :名無しさん@お腹いっぱい。:2010/09/24(金) 13:37:39 ID:1cwmGOJQP
>>166
if A_Hour=13
 {
 msgbox,本日13時処理分
 }

これをsettimerで1時間なり1分間隔でまわす
あるいはifの中に実行済みフラグを付けて実行済みかどうか判別させる

168 :名無しさん@お腹いっぱい。:2010/09/25(土) 15:51:08 ID:mGiGP7FJ0
Compile_AHK IIだとUPS圧縮せずにコンパイルできますが、
最近のAHK_Lには対応していない様です。
新しいAHK_L用のコンパイラでmpress圧縮せずに
コンパイルする方法ってありますでしょうか?

169 :名無しさん@お腹いっぱい。:2010/09/25(土) 15:52:36 ID:mGiGP7FJ0
UPS → UPX です

170 :名無しさん@お腹いっぱい。:2010/09/25(土) 16:16:33 ID:0E4EGhFa0
MouseGesture.ahkを使い始めたのですが
ジェスチャーの条件定義で全てのアプリ(ウィンドウ)に適用させる
条件定義ってどう設定したら良いんでしょうか?
分かる方いましたら教えてください。

171 :名無しさん@お腹いっぱい。:2010/09/25(土) 16:21:21 ID:g1E8I3WA0
>>170
>>108

172 :名無しさん@お腹いっぱい。:2010/09/25(土) 17:04:26 ID:0E4EGhFa0
>>171
出来ました。ありがとござます。

173 :名無しさん@お腹いっぱい。:2010/09/25(土) 21:06:51 ID:AE9eVbN40
Space::Send,{Joy2} とかジョイスティックのキーイベント発生させようとしても動作してくれないね
AHKって基本的にジョイスティックの入力を監視は出来るけど乗っ取れないって理解で良いのかな

Sendmode弄ってみたけどInputでもPlayでもダメみたい、Timerでパッドボタン連射させようと思ったんだけど・・・

174 :名無しさん@お腹いっぱい。:2010/09/25(土) 23:40:30 ID:yf5nDDog0
そう。できない。>>6 だとちと分かりにくいかもしれんな。

175 :名無しさん@お腹いっぱい。:2010/09/26(日) 00:47:21 ID:nkRDvKD10
AutoHotkey_L でMsgbox を使って出力すると文字化けします。どうすれば解決しますか?

176 :名無しさん@お腹いっぱい。:2010/09/26(日) 01:05:54 ID:Q01KCdZZ0
>>175
スクリプトファイルをUTF-8で保存する。

177 :名無しさん@お腹いっぱい。:2010/09/26(日) 03:55:08 ID:qHniXqZL0
IEキャッシュフォルダ内のファイルを削除したいのですができますか?
FileDelete,C:\Users\owner\AppData\Local\Microsoft\Windows\Temporary Internet Files\*

こう書けばできるかなと思ったんですが削除できませんでした。

178 :名無しさん@お腹いっぱい。:2010/09/26(日) 06:54:22 ID:nkRDvKD10
ありがとうございました。

179 :名無しさん@お腹いっぱい。:2010/09/26(日) 23:55:01 ID:npQ7FQgg0
AutoHotkey_L 更新

Revision 60 - September 24, 2010

Added: File.Encoding for changing or retrieving the codepage in use by a File object.
Added: Variadic functions and function-calls and indirect mode for callbacks.
Added: Object.Clone()
Changed: ByRef parameters no longer require the caller to supply a variable.
Changed: Obj.foo := "" now frees foo's contents as originally intended (but still doesn't remove the field).
Changed: OnMessage functions now tolerate optional and ByRef parameters.
Changed: RegisterCallback now enables execute access on callbacks in 32-bit builds (already did in 64-bit builds).
Changed: RegisterCallback now treats explicit ParamCount="" as omitted.
Fixed: For-loop was treating non-expression "0" as true for scripted enumerators.
Fixed: ComEvent (ComObjConnect) not working on the ANSI build.
Fixed: ComEvent (ComObjConnect) not correctly backing up/restoring local vars when calling a function which is already running.
Fixed: Buffer overflow in A_EndChar when there is no end char.
Fixed: Func->mNextFunc not inititialized to NULL (used only by LowLevel scripts).
Debugger: Added the capability to retrieve an object's contents (with a supported debugger client).
Debugger: Fixed a few bugs.

----
可変長引数は便利そうだ。
DllCallの引数に配列オブジェクトを渡すことが出来たみたいで、
可変長引数との連携でDLLの関数のインポートが簡単にできそうでフォーラムが盛り上がっとる。

180 :名無しさん@お腹いっぱい。:2010/09/27(月) 00:03:23 ID:5TbViGzm0
なるほど、ふむふむ
ほうほうなるほどねーなるほど、うん、なるほどね


すみません英語わかりません

181 :名無しさん@お腹いっぱい。:2010/09/27(月) 00:38:35 ID:7U+YabrZ0
Cdecl には便利だなぁ

Random, value, 0, 999
MsgBox,% sprintf("%d = 0x%08x", "Int", value, "Int", value)

sprintf(format, params*) {
 VarSetCapacity(buff, 1024) ; バッファ長は適当
 params.Insert(1, "msvcrt\" . (A_IsUnicode ? "swprintf" : "sprintf"))
 params.Insert(2, "Ptr"), params.Insert(3, &buff)
 params.Insert(4, "Str"), params.Insert(5, format)
 params.Insert("Cdecl Int")
 If DllCall(params*)
  Return buff
}

182 :名無しさん@お腹いっぱい。:2010/09/27(月) 16:10:50 ID:LQAeJ7X/0
IMEがONになっているときだけ、
A & $B::などのコンビネーションキーを有効にするには、
どうすればいいでしょうか?

IMEがOFFのときには、A押しっぱでAのキーリピートを発生させたいです。
当方、WinXP、AutoHotkey_L使用。IME.ahk導入済みです。

以下、うまくいかなかった残骸。
Hotkey,If,(IME_Get() == 0)
Hotkey,a & $b, Off
Return

Hotkey,If,(IME_Get() == 1)
Hotkey,a & $b,LabelA
Return

LabelA:
Send,{Blind}@
Return

183 :名無しさん@お腹いっぱい。:2010/09/27(月) 18:12:37 ID:MKGzi6kB0
> Hotkey,If,(IME_Get() == 0)
AutoHotkey_Lは使ってないので文法に違いがあるのかも知れんけど
こういう書き方ってできるんだっけ?

あと、IME_Get() はLoopかSetTimerで定期的に見てやらんといかんのでは?

184 :名無しさん@お腹いっぱい。:2010/09/27(月) 19:12:21 ID:WJ6+ZZnJ0
>>182
>>9に書いてあるけど、AHK_Lならこんな感じでできる。
#If (IME_GET() == 1)
a & $b::Send,{Blind}@
#If


185 :名無しさん@お腹いっぱい。:2010/09/27(月) 20:35:00 ID:T8of1KY90
コマンドラインで受け取ったときの%1%とかを関数の中で使う場合
p1 = %1%
IF( p1 ){
って使うしかない?

あとLにするデメリットって何かあるっけ?
2バイト文字を1文字あたり2文字として扱ってるスクリプトがたくさんあると
移行がめんどくさそうだけど

186 :名無しさん@お腹いっぱい。:2010/09/27(月) 22:14:52 ID:7U+YabrZ0
> p1 = %1%
ってのは、しょうがないとおもって諦めて同じようにやってる。

それ以外のデメリットというか、非互換はDllCall系かな。
ANSI版の関数を決め打ちで呼んでいるスクリプトは修正が必要。
旧流行らせるページのものは殆どこれに該当。
ユニコード版の場合、そこの ActiveX は使わないのが吉。ComObjCreate() を使うべし。

187 :名無しさん@お腹いっぱい。:2010/09/28(火) 13:55:48 ID:VotiS8pN0
autohotkey_lの話が出ているので便乗して質問します。
ime.ahkを使っています。
goolge日本語入力で、sendで漢字を表示しようとすると文字化けします。
ユニコードでソースを保存しているのですが、なぜかそうなってしまいます。
microsoft imeとatokでは問題ありません。
google日本語入力とautohotkey_lの相性問題でしょうか?

188 :名無しさん@お腹いっぱい。:2010/09/29(水) 00:35:58 ID:bWv2wkfB0
簡単な再起呼び出し自体はなんとなくわかるのですが
RegExでの再起呼び出しの仕方がよく分かりません
どなたか例を書いていただけないでしょうか

189 :名無しさん@お腹いっぱい。:2010/09/29(水) 02:10:37 ID:FDn4qtCl0
; 後方参照 : マッチした語句を参照
Haystack = キュウリキャベツトマト
Pattern = ([ア-ン])[ア-ン]\1
MsgBox, % RegExMatch(Haystack, pattern, $) ? $ :

; 再帰 : パターンの再利用
Haystack = キュウリキャベツトマト
Pattern = ([ア-ン])(?1)(?1)
MsgBox, % RegExMatch(Haystack, pattern, $) ? $ :

190 :182:2010/09/29(水) 12:45:50 ID:UMOsfPx00
>>184
ありがとうございます。
ずいぶんシンプルな記述ができるのですね。

昨日、遠回りな記述を発見しまして、それでずっと書いていましたが、これで少しは楽できそうです。
↓遠回りな記述
$b::
If(IME_Get() == 0)
{
Send,b
}Else
{
If(GetKeyState("a","P") == 1)
{
Send,{Blind}@
}Else
{
Send,b
}
}
Return

191 :名無しさん@お腹いっぱい。:2010/09/29(水) 18:04:59 ID:bWv2wkfB0
>>189
ありがとうございます
今後利用させていただきます

192 :名無しさん@お腹いっぱい。:2010/09/30(木) 15:48:01 ID:VH7s/lU20
AutoHotkeyで文字列を置換したいのですが…わかりません。
RegExReplace() を使って正規表現による置換をすれば、できるようなのですが難しくてわかりません。
やりたいことは、文字列中のアットマーク以降の文字だけに置換したいのです。

"あいうえお@かきくけこ" → "かきくけこ"
"abcd@efgh" → "efgh"
"0123456@789" → "789"
文字数は決まっていません。

エクセルとかだと、ワイルドカードを使って「*@」を取ってしまえばできるのに。
教えてください。お願いします。

193 :名無しさん@お腹いっぱい。:2010/09/30(木) 16:01:14 ID:EZTOI8wM0
これつかって、アクティブウインドウを中央に配置 できる?

194 :名無しさん@お腹いっぱい。:2010/09/30(木) 16:11:35 ID:4NVtvZdn0
WinMoveでできるよ

195 :名無しさん@お腹いっぱい。:2010/09/30(木) 16:18:28 ID:TR4zMDWK0
>>192
RegExReplaceでやりたいなら

unko =
(
あいうえお@かきくけこ
abcd@efgh
0123456@789
)
unko := RegExReplace(unko,"`n).*?@(.*?)",$1)
msgbox,% unko

196 :名無しさん@お腹いっぱい。:2010/09/30(木) 16:29:05 ID:VH7s/lU20
>>195
出来ました。

.*? を使えばエクセルのワイルドカード*と同じように使えるのですね。

ありがとうございます。
正規表現って難しいですね。
その代わりいろんなことができるのでしょうけど。

197 :名無しさん@お腹いっぱい。:2010/09/30(木) 18:54:12 ID:5DqLBhFu0
AutoHotkey_LのUnicode版で標準入出力ってどうすればいいですか?
>>11だと文字コードをどう変換してもうまく動作してくれないです。

198 :197:2010/10/01(金) 08:02:15 ID:/Nakdzh+0
ここにあるUnicode版AutoHotkey_L用の関数で出来ました
http://www.autohotkey.com/forum/topic16823-90.html&sid=e351cf2ee922bfdc51737d40e44b2124

199 :名無しさん@お腹いっぱい。:2010/10/03(日) 18:23:46 ID:HDrPojWh0
Revision 61 - October 3, 2010

Added: ObjClone(Object), forgotten when Object.Clone() was implemented.
Added: Support for RegEx Unicode properties in Unicode builds. Also upgraded PCRE to 8.10.
Added: Object.Remove(int, "") removes Object[int] without affecting other keys.
Changed: ComObj.xyz() is now always treated as a method-call.
Changed: Var := 123 is now left as an expression, for consistency.
 This makes Var := 123 and Var := (123) equivalent, whereas previously the former assigned only a string
 and the latter assigned both a string and a cached binary integer.
 In particular, this avoids some confusing type mismatch errors with COM objects.
Fixed: Dynamic variadic calls to functions with mandatory parameters.
Fixed: The final parameter of an assume-global variadic function had to be explicitly declared local.
Fixed: Static initializers interfering with setting of breakpoints.
Fixed: More pointer size-related errors with PCRE callouts on x64 builds.
Fixed: Input with 'M' option treated Ctrl-M (`r) as Ctrl-J (`n).
Fixed: Object.Remove(n) returned 0 (not "") if Object[n] didn't exist.

200 :名無しさん@お腹いっぱい。:2010/10/04(月) 14:26:26 ID:9MmDvLON0
>>199のうち分からないのが2つあります

>Changed: Var := 123 is now left as an expression, for consistency.

>Fixed: Input with 'M' option treated Ctrl-M (`r) as Ctrl-J (`n).
です。

前の方は、"left as an expression, for consistency"が意味不明です。
説明文は分かるのですが…

後の方は "'M' option" ということば自体が分かりません。
はやらせるページにこんな記述はなかったと思います。

201 :名無しさん@お腹いっぱい。:2010/10/04(月) 14:51:56 ID:kBE0cxgz0
>>200
前者は続く文読めばわかるよね。
後者は公式のドキュメントに書いてあるよね↓
Input [, OutputVar, Options, EndKeys, MatchList]
Options
M: Modified keystrokes such as Control-A through Control-Z are
recognized and transcribed if they correspond to real ASCII characters.
Consider this example, which recognizes Control-C:

202 :名無しさん@お腹いっぱい。:2010/10/04(月) 15:21:38 ID:yKgJ7klQ0
履歴書の習得言語にAutoHotkeyと書きかけたw

203 :名無しさん@お腹いっぱい。:2010/10/04(月) 15:36:23 ID:UJOD4LlF0
>>200
前者の件。

書いてあるとおりだけど、以前までのRevでは数値で書いてあっても文字として格納していて、
今Revからは式の結果が格納される。

例) 以下を実行した結果。

Rev.61    : 256
以前のもの : 0x100

; ---- test.ahk ----
; SetFormat, IntegerFast, d
MsgBox, % Func()
Func() {
 static value := 0x100
 Return value
}


204 :名無しさん@お腹いっぱい。:2010/10/04(月) 20:53:06 ID:UJOD4LlF0
ふむ。おもろいな。

param1 := Object("x", 100, "y", 200, "z", "hoge")
param2 := Object(1, 100, 2, 200, 3, 300, 4, 400, 5, 500)

Func1(param1*)
Func2(param1*)
Func3(param2*)
Func4(param2*)

Func1(x, y) {
  MsgBox, % "x + y = " (x + y)
}

Func2(z) {
  MsgBox, % "Hello, " z "!"
}

Func3(p1, p2, p3) {
  MsgBox, % "p1 = " p1 "`np2 = " p2
}

Func4(params*) {
  num := 0
  For k, v in params
    num += v
  MsgBox, % "total = " num
}

205 :名無しさん@お腹いっぱい。:2010/10/05(火) 09:40:14 ID:4UkphArqP
AutoHotkeyjp新機能説明も追加してくれてるのか
最近の更新に全くついていけてないからありがてえ

206 :200:2010/10/05(火) 12:49:12 ID:UVi77zYS0
みなさんありがとうございます。
具体的に分かりました。

207 :名無しさん@お腹いっぱい。:2010/10/05(火) 15:08:06 ID:oDxpYZL70
ラベルの動的生成ってできるでしょうか?
Menuの動的生成しようとして機能にラベルしか割り当てられなくて詰まった・・・

208 :名無しさん@お腹いっぱい。:2010/10/05(火) 15:22:40 ID:LeJtXyaf0
ラベルはハードコーディングするしかないよ。
メニューの動的生成なら、固定ラベルに飛ばして、
  A_ThisMenu, A_ThisMenuItem, A_ThisMenuItemPos
で分岐すりゃいいだけかと。

Loop, %A_MyDocuments%\*.*
{
File%A_Index% := A_LoopFileFullPath
Menu, Menu1, Add, %A_LoopFileName%, Label1
}
Menu, Menu1, Show
Return

Label1:
MsgBox, % "Your select is : """ File%A_ThisMenuItemPos% """"
Return


209 :名無しさん@お腹いっぱい。:2010/10/05(火) 15:28:09 ID:oDxpYZL70
>>208
特殊変数気付きませんでした
それで自分のやりたいことはできます。ありがとうございました

210 :名無しさん@お腹いっぱい。:2010/10/07(木) 01:52:49 ID:iPOq7eSA0
autohotkeyjpにヒアドキュメントの説明を掲載して下さいませんか
流行らせるページにあった簡単な説明で構いませんので(http://ahk.xrea.jp/Scripts.htmlの「ヒアドキュメント」)
もしも既に説明があったら済みません

211 :名無しさん@お腹いっぱい。:2010/10/07(木) 03:13:12 ID:l69mXxdt0
乗ってなかったのか。かなりやっつけ気味に書いたw
http://sites.google.com/site/autohotkeyjp/reference/Scripts#heredocument

イントロダクション と スクリプト仕様 と 関数 あたりは内容がグチャグチャなんで
いったん整理したいとは思ってる。
というか、AHKLのヘルプ準拠でいいんだろうけど、ヘルプ自体が流行らせるページと違う部分が結構あって
リンク切れ(とくにページ内アンカー)のチェックが面倒そうで、手を付けずにいる。


212 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:30:10 ID:k5uIxNSi0
Autohotokeyで生成されたGuiでなく
通常のコンテキストメニューを対象にしたいのですがどのようにすればよいのでしょうか

213 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:34:59 ID:jgByoxEp0
>「通常のコンテキストメニューを対象にしたいのですが」

対象をどうしたいのかがよくわからない。

表示中の項目を抜き取って、別の項目に差し替えて処理をさせるとかは
AHKでは、かなり難しいレベルだと思う。

214 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:48:21 ID:k5uIxNSi0
>>213
透過処理をさせたいのですが

215 :名無しさん@お腹いっぱい。:2010/10/07(木) 11:51:38 ID:jgByoxEp0
ますます意味がわからない。ゆとり世代なの?

216 :名無しさん@お腹いっぱい。:2010/10/07(木) 12:04:01 ID:k5uIxNSi0
コンテキストメニューを半透明にしたい
WinSetでコンテキストメニューを透過させようとした
タイトルの指定方法がわからない
WinSetで可能なのかあるいは他の方法があるのか
どなたかわかる方いらっしゃいませんか?

217 :名無しさん@お腹いっぱい。:2010/10/07(木) 13:44:00 ID:eLnaLlly0
>>216
ahk_class #32768
過去スレでマウスカーソル上の
ウインドウタイトルやクラスの取り方を見た気がする

218 :名無しさん@お腹いっぱい。:2010/10/07(木) 14:01:25 ID:k5uIxNSi0
>>217
AU3_Spy.exeで取得できなかったので出来ないものだと思っておりました
ありがとうございます

219 :名無しさん@お腹いっぱい。:2010/10/07(木) 16:08:25 ID:g9/BQ1pa0
質問です、
AutoHotkey はキーボードkey押しで監視対象ソフトへのショートカット押しぐらいしか使ったことがないのですが、
質問内容は2種類です。

1.他の動作に悪影響を出しにくい高速な文字列の受け渡しとその手法。
 自作ソフト(非表示常駐もする)から作成される文字列をAHKで高速で受け取れるようにって出来るものでしょうか?
 300 バイト/秒(1000 ms) 〜 30 バイト/100 ms ぐらいの可変バイト数/速度

 受け取れれば、AHK から他のソフトへ送信できるようにしたい。
 やりたい事は特定ハードウェアから情報(18 ms )を受け取れる自作ソフトからデータを他で簡単に利用できるようにしておきたい。

 悪影響の例 ) 他のソフトとの文字列受け渡し用にクリップボードを使うとその文字列に占有されて
    他でコピー&ペースト作業に支障がでる。

2.他のソフトをコントロールする為に自作ソフトからイベント発行するのに効率的な方法。
 仮想キーコードの出力は出来るので、AHK で囲い込み出来ると良いのですが、、、、、

 悪影響の例? ) 自作ソフト↑仮想キー発行でさせたい処理以外に
     一般キーボード入力と間違われて他の割り当てで重複処理されると困る。

上記の2点が可能なら、自作ソフトの特定動作やデータに対してAHK 経由で他のソフトを自由にコントロールできて便利なのです。
御教示お願いします。

AutoHotkeyを流行らせるページなどで入手したマニュアルや AHK の C++ ソースをざっと眺めてみたのですがよく解らない。


220 :名無しさん@お腹いっぱい。:2010/10/07(木) 16:37:56 ID:sSYr464w0
1. 透明GUIにEditBox作って自作ソフト側から文字列ドロップとかSendとか
文字コード制限出ちゃうかもだけど

2.簡単にやりたいなら[F13]〜[F20]あたりのキーボードにないキーコード使う
ロジのマウスみたいにドライバで発行可能なハードもあるので注意が必要かも

確かRegisterCallback()やOnMessage()でイベント通知できたような
外部とのやりとりに使えるかどうかはわかんないけど
Message飛ばせれば1,2 ともに解決しそうではあるね

221 :名無しさん@お腹いっぱい。:2010/10/07(木) 16:54:15 ID:l69mXxdt0
イベント通知はSendMessageで行う。AHK側はOnMessageで待ち受けする。

自作アプリ側でAHKのプロセス内に VirtualAllocEx でメモリ確保して文字列書き込んで、
SendMessage でそのアドレスを通知する。

AHK側はメッセージを受けとったら、該当アドレスのデータをコピーしてを変数に格納(AHKLのStrGetだと楽)。
成功コードを返す。

SendMessageの戻りを受けて、メモリを解放。

222 :210:2010/10/07(木) 20:50:06 ID:iPOq7eSA0
>>211
ありがとうございます!

223 :名無しさん@お腹いっぱい。:2010/10/07(木) 21:05:51 ID:g9/BQ1pa0
>>220-221
お早い返答で恐れ入ります。

RegisterCallback() 関数はAHK の関数ですね、速度は出せなさそうなのでキー監視用途でしょうか?

Win32API の SendMessage 関数
LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
ですか、

http://wisdom.sakura.ne.jp/system/winapi/win32/win52.html
戻り値待ちで停止する訳にはいかないので、送りっぱなしの非同期の
PostMessage() が都合が良いかなぁ

EditBox やテキストBox を自作ソフトに設置すると簡単な文字列は AHK で拾えるということでしょうか?
それだと楽で良い、、、
それとも透明GUIはAHK 側?
なにぶん AHK の解説文が難解でして

224 :名無しさん@お腹いっぱい。:2010/10/07(木) 21:23:59 ID:l69mXxdt0
返答待ちっていっても数10ms位だと思うけど。

225 :名無しさん@お腹いっぱい。:2010/10/07(木) 22:13:56 ID:sSYr464w0
>EditBox やテキストBox を自作ソフトに設置すると

逆かな、AHK側にGUIでウィンドウ作って自作ソフト側から投げてやる
でも221の方法でMessage投げた方が負荷は軽いしスマートだと思う

226 :名無しさん@お腹いっぱい。:2010/10/07(木) 23:20:42 ID:nVbOIDnb0
RegExReplaceで「"」を「あ」に置換する場合エラーが出るんですが
RegExReplaceで「"」のエスケープはどうすればよいのでしょうか?

227 :名無しさん@お腹いっぱい。:2010/10/07(木) 23:42:17 ID:k5uIxNSi0
Hoge = "hogehoge"
MsgBox, % RegExReplace( Hoge, """", "あ")
MsgBox, % RegExReplace( Hoge, "\x22", "あ")
MsgBox, % RegExReplace( Hoge, Chr(34), "あ")

228 :名無しさん@お腹いっぱい。:2010/10/07(木) 23:51:30 ID:nVbOIDnb0
おーサンクス!!!
助かりました。

229 :名無しさん@お腹いっぱい。:2010/10/08(金) 10:12:36 ID://1JnWBT0
アッー!

230 :名無しさん@お腹いっぱい。:2010/10/08(金) 15:41:22 ID:5WHkkVUH0
FileDelete, atwiki.html
word = おーとほっときー
url = http://www1.atwiki.jp/test/?cmd=search&keyword=%word%
Run, %url% ;←Firefoxで開くと正常
URLDownloadToFile, %url%, atwiki.html ;←「おーとほっときー」が文字化け・・

@wikiの検索結果ページを保存したいんだけど、URNDownloadToFile使うとすごい文字化けしてしまう
どうにかして文字化けさせずファイルに保存できませんか?

231 :名無しさん@お腹いっぱい。:2010/10/08(金) 16:38:34 ID:5v4rxvwM0
http://orera.g.hatena.ne.jp/misttrap/20070214/p1

232 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:30:24 ID:7oKYknjD0
>>230
URLEncode関数で、エンコードしてから渡せば、うまくいくはず。
検索ワードの間のスペースとかも、適宜加工する必要がある。

Firefoxで開けるのは、それをFirefox側でやってくれてるからじゃない?

233 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:35:58 ID:5WHkkVUH0
>>231
ありがとう
AutoHotkey_Lではできなかったから普通の方でやったら動いたんだけど、
#$%&てstー、オートホットキー といれてみたら
?E?E??E??E??E???E?t?E、オート?EチE??キー になってしまっててちょっと使えそうにないかも・・

234 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:37:08 ID:5WHkkVUH0
>>232
URLEncode関数なんてあったんですか
ちょっと調べてみます、ありがとう

235 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:38:53 ID:g179rdT00
word := UrlEncode("おーとほっときー")
   ↑ 式での代入なので注意

; AHKL用超簡易版。enc には UTF-16, UTF-8, CP932(=Shift_JIS), CP50220(=JIS) が利用可。EUCは無理。
; URL全体には使わず、エンコードしたい部分だけに使うこと。
UrlEncode(str, enc="UTF-8") {
 hex := "00", func := "msvcrt\" . (A_IsUnicode ? "swprintf" : "sprintf")
 VarSetCapacity(buff, size:=StrPut(str, enc)), StrPut(str, &buff, enc)
 While (code := NumGet(buff, A_Index - 1, "UChar")) && DllCall(func, "Str", hex, "Str", "%%%02X", "UChar", code, "Cdecl")
  encoded .= hex
 Return encoded
}


236 :名無しさん@お腹いっぱい。:2010/10/08(金) 17:43:10 ID:5WHkkVUH0
>>235
おお、AHK_L最新でばっちり動きました!
自分じゃどうやってもできなかったので本当に助かりました
皆さんありがとうございました

237 :名無しさん@お腹いっぱい。:2010/10/08(金) 19:56:18 ID:i7+Z9MYnP
1年くらい前にここでいろいろ教えてもらったものですが

やっとここで教えてもらったことをまとめられましたので報告します。

お題はパソコン学習リモコン「PC-OP-RS1」をAutoHotkey_Lで操作するです。

スクリプト自体はかなり前から出来ていたんですけどね

このたびHPにしてみました。

ttp://xbmc.inpane.com/main/rc/autohotkey.php

AutoHotkey_Lと学習リモコンの組み合わせはいろいろできそうです。

いろんな赤外線の信号をデータベース化しちゃおうかな


238 :名無しさん@お腹いっぱい。:2010/10/08(金) 20:31:07 ID:1OfUT/JmP
なんか面白そうなことやってんな
とりあえず乙

239 :名無しさん@お腹いっぱい。:2010/10/08(金) 20:47:20 ID:g179rdT00
ほぅ、http://pc12.2ch.net/test/read.cgi/software/1253888736/321,323 の頃の人か。
色々と乙。

240 :237:2010/10/09(土) 20:19:44 ID:Wj3h9FRbP
とりあえず実際に動かしてるところをビデオに撮ってようつべに上げました。

http://xbmc.inpane.com/



241 :名無しさん@お腹いっぱい。:2010/10/09(土) 22:56:56 ID:lnxF+yoC0
こういう説明動画はいいね
AutoHotkey を使ってどう動かすか、という様を伝えるには
文字よりもわかりやすそう

242 :名無しさん@お腹いっぱい。:2010/10/10(日) 00:33:56 ID:q9exBTyQ0
Ahk2Exe_Lについて質問です

autohotkey_lのサイトの下の方にAhk2Exe_Lと書いてますが
この実行ファイル版は無いのでしょうか?

インストール先のcompilerフォルダを見ても、Ahk2Exe_LではなくAhk2Exeしかありません
それか、Ahk2Exeが実際にはAhk2Exe_Lなのでしょうか
この点が分かりません

243 :名無しさん@お腹いっぱい。:2010/10/10(日) 11:36:01 ID:lz6M9l8S0
>>235
これCP50220だけ出来なくない?

244 :名無しさん@お腹いっぱい。:2010/10/10(日) 12:14:00 ID:Oad5IvFI0
推薦エディタのSciTE4を使ってるんですが
新規作成する場合、デフォルトで文字コードをUTF-8にすることはできませんか?

245 :名無しさん@お腹いっぱい。:2010/10/10(日) 13:05:16 ID:LwCFr4mc0
>>243
エスケープシーケンスが付いてんじゃないの?

http://euc.jp/i18n/charcode.ja.html#chap1
> ・JISコード
> ASCIIと半角カタカナを基本とし、漢字が追加されています。 ASCIIと漢字のコード範囲が重複するため、
> 以下のようなエスケープシーケンスによって切り替えます
>  漢字の開始
>    ESC $ @ または ESC $ B
>  ASCIIの開始
>    ESC ( B または ESC ( J

246 :名無しさん@お腹いっぱい。:2010/10/10(日) 14:43:11 ID:ASYSCNp+0
中古で買ったWindowsMobileにAutohotkeyforPocketPC入れてみた。
調べたら更新されててユニコード版もあった。
ほんとに動くんだな。感動したわ。
それにしてもPocketPC版についての日本語の情報はないねw 誰もつかってねえのかな?

247 :名無しさん@お腹いっぱい。:2010/10/10(日) 17:02:10 ID:kjM2+W8l0
If( !IsOjbect( objHoge := Object() ) )
  MsgBox, えらー!
If( !objHoge.Insert( "HoGe" ) )
  MsgBox, えらー!
If( !objHoge.Remove() )
  MsgBox, えらー!

・・・ってエラーチェックってすべき?
視認性も悪くなるし何よりもめんどくさくなってきた

248 :名無しさん@お腹いっぱい。:2010/10/10(日) 19:55:06 ID:jwThGami0
AHKってテキスト読み込みと追加書き込みはできるけど
消したり書き換えはできないよね?
行削除したいときとかってどうやって対処してますか?


>>242
たしかAhk_Lと一緒にあるAhk2ExeがL版だった気がするから置き換えればおk
プロパティのバージョン確認して、本体と2exeが同じバージョンなら大丈夫
あと蛇足かもだが、.ahkのエンコードをUTF-8(BOM付き)にしないといかん

249 :242:2010/10/10(日) 20:24:03 ID:q9exBTyQ0
>>248
そうでしたか。ありがとうございます。

250 :名無しさん@お腹いっぱい。:2010/10/10(日) 21:50:50 ID:LwCFr4mc0
>>247
エラーチェックするのって、自分以外にアクセスする場合でだけいいんでないの?
(ファイル、ネットワーク、別プロセスetc)
引数が足りなくて、オブジェクト作れないとかはスクリプトをきちんと書けばどうにかなるもんだし。
( obj := Object(params*) は厄介そうだが・・・ )


----


ところで、URLDownloadToFile がXPだと動かないバグがあって最ビルドしたやつを配布してるから、
思い当たる人はバイナリを更新した方がいいね。
※ x86 Unicode だとファイルサイズは同じだけどハッシュ値は違ってきちんと中身が変わってる

251 :名無しさん@お腹いっぱい。:2010/10/10(日) 21:56:48 ID:6FE7Ljpd0
>>248
自分はファイルの内容を全部読み込んで、必要なところを編集させて、
ファイルを消去して、新規書き込みしてる

252 :名無しさん@お腹いっぱい。:2010/10/10(日) 22:03:04 ID:EA29JKlO0
>>248
やったことないけど Loop,READ を使えばできるんじゃない

253 :名無しさん@お腹いっぱい。:2010/10/11(月) 20:36:40 ID:ObivaGrB0
>>250
ちらほらフォーラムでも言われてたのに自分は動いてるからってさんざん無視してたが
やっとLexikos謝罪か。うーん

254 :名無しさん@お腹いっぱい。:2010/10/11(月) 21:08:49 ID:FuEjTDPk0
まぁ、フォーラムも、愉快な仲間達からのツッコミと、
ユニコード版に関する混乱で「互換性のページ見ろ」で解決するやつ
で埋まってるからなぁ

255 :名無しさん@お腹いっぱい。:2010/10/12(火) 23:12:18 ID:DhLMtFuv0
>>251
だよねやっぱそれしかないか
消すのに成功して書くのに失敗した場合は
対象ファイルが消えてしまうと思うとちょっと不安なんだよね

>>252
読み込みは色々できるけど、書き込みはFileAppendしかないんだ
iniの形式なら消したりできるから、普通のでもできないかなーというところ

256 :名無しさん@お腹いっぱい。:2010/10/12(火) 23:16:14 ID:B3cvA+9e0
心配なら元ファイルとは別に新ファイル作って
書き込み終了後に元ファイルを削除、新ファイルをリネームとか

257 :251:2010/10/12(火) 23:34:43 ID:SesNTd6o0
自分はテスト用スクリプトは Dropbox 対応フォルダの中で走らせていて、
バックアップの面ではかなり大丈夫

258 :名無しさん@お腹いっぱい。:2010/10/12(火) 23:44:33 ID:DhLMtFuv0
>>256
そだねそうするサンクス

259 :名無しさん@お腹いっぱい。:2010/10/13(水) 02:38:22 ID:zJmxcNc50
すごく初歩的な質問かもしれませんが、申し訳ありません。
右コントロールキーを使って、2ストロークキーを実現させたいのですが、どうすればいいでしょうか?

右Ctrlを押したあと、離してから、次のキー(たとえばJやKやL)をおすと、
特定の入出力をするというものです。

右Ctrlとの順押し2ストロークで動作を発生させたいのですが、
同時押し(本来のシフト操作)では本来のCtrlの動作をさせるのを残しておきたいのです。
(本来のCtrl動作の後に押したキーも、順押しの動作ではなく、本来の動作をさせる。)

つまりCtrlを押してから何もキーを押さずにそのままコントロールキーを離したときだけ、2ストロークキーの始まりにしたいのです。
これはどうすればいいでしょうか?

260 :名無しさん@お腹いっぱい。:2010/10/13(水) 06:23:10 ID:Dj6mLgWp0
~RCtrl Up::
 Input, char, L1 T1
 If char = j
  Send, JJJJJJJJJJJ
 Else if char = k
  Send, KKKKKKKKKKKKKK
 Else If char = l
  Send, LLLLLLLLLLLL
 Return

こんなんでいいんじゃないのかね。

> つまりCtrlを押してから何もキーを押さずにそのままコントロールキーを離したときだけ、
ってのは厳密じゃないけど。
どうしても厳密にやりたいなら、LLフック か RwwInput を DllCall で仕込んでチェックかなぁ

261 :名無しさん@お腹いっぱい。:2010/10/13(水) 06:49:41 ID:Al71sdssP
本家の開発が止まってたのは、就職したりして忙しくなったとかではなく、単に飽きただけみたいだね
ttp://www.autohotkey.com/forum/topic63474.html&sid=a25a0d0e7a8e4484b308f1aec8d6e895

262 :名無しさん@お腹いっぱい。:2010/10/13(水) 08:56:25 ID:ACL8Lyat0
>>261
AutoHotkey Download
http://www.autohotkey.com/download/

ほんとだ
AutoHotkeyのインストーラーの配布ページでAutoHotkey_Lのインストーラーが配布されるようになってる

263 :名無しさん@お腹いっぱい。:2010/10/13(水) 09:53:50 ID:SmyqTYqd0
_Lの人が精力的に頑張ってくれるようになって、
別に自分がやらんでもいいやみたいな気になっちゃったんだろうな

264 :名無しさん@お腹いっぱい。:2010/10/13(水) 13:12:43 ID:XUXsd83X0
AutoHotKey_L Version v1.0.48.05.L61
を使用しています。

以下のスクリプトで、ResultSet変数にWQLのクエリの結果が
入っていると思うのですが、値の参照の仕方が分かりません。

http://sites.google.com/site/autohotkeyjp/reference/AutoHotkey_L/Objects
上記サイトのオブジェクトのページも読みました。

VBScriptだと
--code--
Set objWMIService = GetObject("winmgmts:")
Set ResultSet = objWMIService.ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
For Each I in ResultSet
MsgBox I.deviceID
Next
--code--

のような形で取得できるのですが、AutoHotKey_Lではどうすれば
取得できますでしょうか?

--code--
;WMIを利用
wmi := ComObjGet("winmgmts:")

;WQLでCドライブのディスク番号とパーティション番号を取得する
ResultSet := wmi.ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
--code--

よろしくお願い致します。

265 :名無しさん@お腹いっぱい。:2010/10/13(水) 19:17:28 ID:w5gzQaBY0
AutoHotkey_Lでタスクの一覧を表示するスクリプトを組んでいるのですが、
その際にプロセスIDから実行ファイルのフルパスを調べて、
Menu,Icon で実行ファイルのアイコンもついでに表示させたいと考えています。
通常はこれで問題無いのですが、実行ファイルがアイコンを持っていなかった場合は
Menu,Icon でメニュー登録をしようとすると、エラーでスクリプトが停止してしまいます。
事前に場合分けしてアイコンが存在しないケースでは、処理をスキップさせるしか無いみたいなのですが
実行ファイルにがアイコンリソースを含むかどうかを判別する方法が思いつきません。
どなたか、いいアイデアはありませんでしょうか?

266 :名無しさん@お腹いっぱい。:2010/10/13(水) 20:36:24 ID:Dj6mLgWp0
ちょっと面倒だけど

hIL := IL_Create()
Loop, {
FileSelectFile, filePath, 1, %A_WinDir%, Select File, executable(*.exe)
 If (ErrorLevel)
  Break
 ret := IL_Add(hIL, filePath)
 MsgBox, % """" filePath """ has " (ret = 0 ? "no icon" : "icon(s)")
}
IL_Destroy(hIL)

267 :名無しさん@お腹いっぱい。:2010/10/13(水) 21:07:16 ID:w5gzQaBY0
>>266
おおっ、ありがとうございます
ret := IL_Add(hIL, filePath)を組み込む事で見事に場合分けすることができました。
この行が何を意味してるのかはさっぱり理解できませんが…orz
まあ、これから勉強していきたいと思います、本当に助かりました。

268 :名無しさん@お腹いっぱい。:2010/10/13(水) 21:40:43 ID:+33RXyl/P
ListViewで使うイメージリスト関数か
こんな使い方あったのね、参考になります

269 :名無しさん@お腹いっぱい。:2010/10/14(木) 02:00:11 ID:quItkztc0
AutoIt
 ↓
AutoIt 2 ┐@
 |    ↓
  :  AutoHotkey1.0┐
  :    |      ↓
  :    |   AHKL (1.0ベース) ┐
  :    ├←Aーー┤       ↓
  :    |      .│     AutoHotkeyU (Unicode化)
  :    |      .├←ーーーー┤
  :    |      .↓      開発終了
  :    |   AHKL(ANSI , Uni)ーーーー┬ーーーーーーーーー┐
  :    |      .│             ↓ B           |
  :    |      .│       AutoHotkey64(x64とCOM対応).|
 ↓.    |      .├←ーーーーーーー┤             ↓C
AutoIt3  |      .↓          開発終了     AutoHotkey_N(マルチスレッド、モジュール化etc)
  E.   ↓   AHKL(ANSI & Uni32 & Uni64)              :
    やる気なし.   |
        D     (現在)

@ AutoIt のホットキー機能が貧弱で改善提案だしたが受け入れられず。AutoIt2を元に作成。
A 独自版を作る一方、各種機能改善・追加が本家に取り入れられている
B COM機能は COM.ahk の機能がほぼそのまま取り込まれた。
C かなりプログラマー向きな拡張。他のプログラム言語からAHKスクリプトを実行したりできる。
D 非プログラマー向きのツールが理想で、Ahk2を予定していたが協力者が集まらないため。
  またプログラマー向きな方向性を持つ派生版が人気なのも萎えさせる一因に。
E 余談だが、文法をガラリと変えてかなりスマートな感じに。


まぁ、Crisお疲れってところかな。
Lexikosは最近は色々あってイッパイイッパイかもしれんね。

270 :名無しさん@お腹いっぱい。:2010/10/14(木) 02:09:26 ID:puF4FM590
>非プログラマー向きのツールが理想で、Ahk2を予定していたが協力者が集まらないため

プログラマ向きの関数や機能は、必要ない人はつかわなければいい、
という考え方ではダメだったのかな。

あと後半は、ahk2で具体的にどう改善するつもりだったの?

271 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:04:31 ID:quItkztc0
適当翻訳(1/2)

■ 僕の今の状況とウェブサイトの変更について by Cris(AHK作者)

AHKプロジェクトを始めたのは、非プログラマを含む利用者にホットキーや自動化の利便性を
提供したかったからなんだ。僕はスクリプト言語は簡易で柔軟であるべきだと思っている。
だから本格的なプログラム言語にすべきじゃないと思ってた。

何年か経つと、ユーザコミュニティは、少なくとも最もアクティブなメンバーは、AutoHotkeyに
対してプログラム的な機能--配列やオブジェクトなど--を求めているのがはっきりしてきた。
それは僕の望む方向じゃなかった。今思うとその頃から興味を失いかけていたのかも知れない。

コミュニティメンバはユニコードとx64対応に関心が向いていた。自分も多少はそれに関心はあったけど、
もっと簡単な文法で、かつ以前との互換性がなるべく保たれるようなAHK V2を作ろうと思ってた。
でも、自分自身としてはその方向性に自信もモチベも持てないんで、開発者用のプライベート
フォーラムに議題を挙げたんだ。1年半ほど頃かな、AHKの新機能について議論を始めて、
共通バージョンを策定しそれを作成しようとした。
でもしばらく立つ頃には、V2が果たして正しい方向性なのかと疑念を抱くようになったんだ。

その中で、時間が足りなかったり、V2あるいは共通バージョンに対する興味が失われているように感じたんだ。
でもそれはよくわかるよ、誰だって時間的制約や優先順位があるわけだしね。

272 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:05:26 ID:quItkztc0
適当翻訳(2/2)

そんな感じで感心と活動が鈍ったけど、Lexikos, fincs, Sean, jackiku, Micha 達が
AutoHotkeyが有用であると思い、新たな機能を追加してくれたんだ。
こういうかんじで、なんとなく機は熟したと思ったから、WebサイトをAHKLに委譲したんだ。
(中でも、ダウンロードのページが一番大事になる)

時間が経てば、サイトの統計(つまり何がダウンロードされたか)が、
サイトの構成をAHKLに梶を切るかどうかの判断材料になるはず。
AHKがどのバージョンあっても、フォーラム全体の利用に当たって不自由が無いことを願うよ。

サイトの維持に関しては僕が続けるつもりだよ。
それが出来なくなりそうなら、他の信頼の置けそうな個人なり団体なりが管理するところへ
引っ越しができるであろう十分な期間をもってアナウンスをするつもりだよ。

何年にもわたって色々と支持してくれたみんなに、ありがとう!

273 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:31:07 ID:onjPNxeD0

細かいことを言うとCrisじゃなくてChrisだね

274 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:31:24 ID:puF4FM590
おお、翻訳ありがとう!そしてCrisさん、いままで乙でした。
中の人も、派生版の人も、いろいろと悩みを抱えてるんだね。

275 :名無しさん@お腹いっぱい。:2010/10/14(木) 03:37:19 ID:quItkztc0
>>273
俺はずっと勘違いしてたっぽいな。

文中のjackiekuもミスってる。
文もおかしな所もあるが、まぁわかるっしょ。

>>274
釣られたなw

276 :名無しさん@お腹いっぱい。:2010/10/14(木) 09:56:59 ID:E+9KqY/i0
>>264 お願いします・・・。

277 :名無しさん@お腹いっぱい。:2010/10/14(木) 10:08:37 ID:RiUip3vI0
プログラマー向きの機能で非プログラマーでも使えるのを作ってくれよ
AHKLなんかもうわけわからん

278 :名無しさん@お腹いっぱい。:2010/10/14(木) 12:24:29 ID:H++N/xQW0
たしかにAHKLはわけわからん

279 :名無しさん@お腹いっぱい。:2010/10/14(木) 14:19:48 ID:quItkztc0
>>264
バグだと思う。Lexkos か Sean のどっちかはわからんけど。
http://www.autohotkey.com/forum/post-388357.html#388357
http://www.autohotkey.com/forum/post-388985.html#388985

作者は了解してるんで、バグが治るまでは、以下のように対処かな。

enum := ComObjGet("winmgmts:")
 .ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
 ._NewEnum ; 本来は _NewEnum() なはずで、 For item in 〜 でいいんだが…
While enum[item]
 MsgBox, % item.deviceID


280 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:17:08 ID:Gjs8+rbi0
こういうCOMオブジェクトってどこで調べるの?
検索してもExcellとかしか出てこない・・

281 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:18:24 ID:gbYybpeS0
>>277
>非プログラマー
なら内部わかる必要あるの?

282 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:21:26 ID:dtQmkR2H0
おれなんてDllCallすらわからないんだぜ

283 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:24:28 ID:2AvKXCJt0
おれもdllは、全く理解できない。

ここで教えてもらったものをブラックボックス関数として
コピペして、ツギハギして結果を受け取るだけ。

でも、なんとか希望通りに動いてくれてる。

284 :名無しさん@お腹いっぱい。:2010/10/14(木) 19:27:03 ID:K054jbq10
オリジナルはプログラマーとかいう以前にunicode未対応なのが厳しい

285 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:31:09 ID:Glm+BKcC0
Lで分からんところってObjectだけだろ?
本家でもDllCall(), NumGet(), NumPut(), RegisterCallback()あたりは分からんだろ
おれも、各々の分野を学ぶ気にはならんから使えなくても仕方ないと割り切ってる

286 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:47:18 ID:Gjs8+rbi0
どれも公式とかで解説してくれるし分かりやすくない?

287 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:52:13 ID:RiUip3vI0
あと文法がJavaScriptとかVBScriptぽい?のがなあ・・・>Object
元のAHKのと違いすぎて混乱する

288 :名無しさん@お腹いっぱい。:2010/10/14(木) 20:58:38 ID:1MktXJ/A0
オブジェクトってよくわからないけど
ahkってダウンロード機能が弱いから
vbsでつかってるwinhttpを使えたらなとよく思うんだけど
もしかしてそういうことも可能なの?

289 :名無しさん@お腹いっぱい。:2010/10/14(木) 21:10:55 ID:onjPNxeD0
autohotkeyjpの人がdllcallについて丁寧な解説記事を書いていた気がする
ところで、AHKLで機能が強化されているcomについて誰か例題を沢山書いてくれないかなあ

290 :sage:2010/10/14(木) 21:21:37 ID:yPX1n0WZ0
>>269
AutoHotkey_N じゃなくて AutoHotkey_Hかな?

>>272
>AHKLに委譲
細かいようだけど移譲はしてないね。ページを書き換えただけみたいよ。272は結構はしょってオブラートにしてるけど、Chrisの原文の文章から読める雰囲気は結構暗いかも。
fincsが負けた感が滲み出ててちょっと複雑って発言してるね。

多分 Chris は Lexikos にライバル意識みたいなのがあったんじゃないかな。一方LexikosはChrisに認めてもらおうと頑張っててそれが裏目に出た。

なんにせよChrisは人をまとめて動かす力がなかったみたいね。

291 :名無しさん@お腹いっぱい。:2010/10/14(木) 23:12:43 ID:onjPNxeD0
↓からAutoHotkey_Lのドキュメントにリンクが張られているね

AutoHotkey Documentation
ttp://www.autohotkey.com/docs/

気づいたのは、このページの日本語訳リンクが流行らせるページのままってこと

292 :264:2010/10/15(金) 00:35:19 ID:leOgQaRc0
>>279
どうもありがとうございます!
確かに動作しました。

もう全く動かなかったので諦めて、VBScript(wmi.vbs)でWQLの結果を生成して、それを .txt ファイルに吐き出す
スクリプトを書いて、AHKから
RunWait, wmi.vbs
みたいな感じに呼び出して、吐き出した .txt ファイル(disk.txt)を
FileReadLine, val, disk.txt, 1
みたいに val 変数に読み込んで、その後
FileDelete, disk.txt
で消す、みたいな超面倒な手順で実装してしまいましたよ・・・。
こんなくだらないコード書いて感じたのは、AHKって標準入出力も扱えないのか?ということ・・・。
DllCallとかさっぱり分からないのでどうにも対応方法がありませんでした・・。

もう一回書き直そうかな、解決策教えて頂きましたし・・・。

本当にありがとうございます

293 :名無しさん@お腹いっぱい。:2010/10/15(金) 02:17:32 ID:srMctwi10
ScriptControlが使えるからJscriptやVbscript使える人は、そっちで処理してもいいんじゃないかな?
ttp://www.autohotkey.com/forum/topic61509.html

oSC := ComObjCreate("ScriptControl")
oSC.Language := "JScript"
script =
(
oshl=new ActiveXObject('WScript.Shell');
oshl.popup('autohotkeyL でScriptControl WScriptオブジェクトは使えない。Unicodeで保存。');
;//WScript.Echo(2000);WScript.Echo(1); / * ←これは使えない * /;
)
oSC.ExecuteStatement(script)
oSC.Eval(script)

294 :名無しさん@お腹いっぱい。:2010/10/15(金) 06:28:36 ID:1vxiNqrO0
>>293
紹介ありがとう。これは良いリファレンススレ

295 :名無しさん@お腹いっぱい。:2010/10/15(金) 14:18:46 ID:C9kOUIXjP
例えばこんなGUIを作ったとして、
TreeViewとEditBoxのあいだの点線をドラッグして双方の表示領域を変えることってできない?
Janeでいうボードビューとスレッドビューみたいな

┌──────────┐

│  TreeView

├--------------------┤
│               
│  Edit


└──────────┘

296 :名無しさん@お腹いっぱい。:2010/10/15(金) 14:43:23 ID:srMctwi10
;// >>291 ややこしいことはJscriptでさっさと処理してAHKで値を受け取ってしまおう。
oSC := ComObjCreate("ScriptControl")
oSC.Language := "JScript"
script =
(
main=function(sAAA,sBBB,sCCC){ ;
if(typeof(sAAA) == 'undefined'){sAAA = '///' ;} ;
if(typeof(sBBB) == 'undefined'){sBBB = '###' ;} ;
if(typeof(sCCC) == 'undefined'){sCCC = '$$$' ;} ;
sAAA = sAAA + '---' + sAAA ;
sBBB = sBBB + '---' + sBBB ;
sCCC = sCCC + '---' + sCCC ;
oshl = new ActiveXObject('WScript.Shell') ;
oshl.popup('sAAA=' + sAAA + "\n\n" + 'sBBB=' + sBBB + ' sCCC=' + sCCC) ;
return(sAAA.length + ' '+sBBB.length +' '+ sCCC.length) ;
} ;
)
oSc.addCode(script) ;

stestA := "Ahogehoge_AutohotkeyLで実行_ユニコードで保存" ;
stestB := "Bhogehoge" ;
scommand = main("%stestA%", "%stestB%")
sret := oSC.eval( scommand )
msgbox, %sret%

297 :名無しさん@お腹いっぱい。:2010/10/15(金) 23:47:37 ID:jrTZWDfs0
>>295
出来なくはないよ。かなりの力業になると思うけど。

OnMessage で WM_LBUTTONUP/DOWN と WM_MOUSEMOVE 拾うようにする。
境界領域でボタン押下拾ったら、マウス移動トラックするようにして、
移動差分を算出して、GUIコンポーネントを移動する。
ボタンが離されたらトラッキングを停止。

298 :名無しさん@お腹いっぱい。:2010/10/15(金) 23:58:02 ID:9sO5EohQ0
GUIプログラムをそこまで低レイヤーのことまで自分で用意してやるより、
VisualStudio無料版で.NET使ってやった方が汎用的でかつ楽だよなぁ。

299 :名無しさん@お腹いっぱい。:2010/10/16(土) 00:07:41 ID:Gltw26EkP
>>297
ありがとう
確かにここまでするのは大変そうだ・・
今のところサイズ変更しなくては使えないってレベルではないし、しばらくはこのままで使ってみる

300 :名無しさん@お腹いっぱい。:2010/10/16(土) 00:57:50 ID:wZOd2aJuP
AutoHotKeyはウインドウやコントロール検出してキー送ったり、そういう自動化はすごく向いているし、
プログラマーでなくてもコピペで切り貼りで使えるのは素晴らしいけど、
GUIは弱いよね。

.NETやDelphi並に簡単にGUI作れればいいんだけどね

.NET Framework依存はともかく.NET使うと起動は遅くなるだろうし、
AutoHotKeyの利点なくなるだろうけど


AutoItはGUIビルダーのようなツールがあるみたいだな
実験記録 No.02:AutoItで簡単GUI作成
http://blog.livedoor.jp/blackcode/archives/1480018.html


301 :名無しさん@お腹いっぱい。:2010/10/16(土) 01:02:50 ID:wZOd2aJuP
> .NET Framework依存はともかく.NET使うと起動は遅くなるだろうし、
> AutoHotKeyの利点なくなるだろうけど

.NET Frameworkを間接的に使うとか、そういう話が抜けてた
非.netアプリから.netのライブラリが使えるかしらんけど。


ついでだけど、DelphiはGUIライブラリだけDLL化して他の言語から使う方法あったと思うけど、
AutoHotKeyから使うなら一皮かぶせる必要あると思うし、
Unicode対応したDelphiがフリーで手に入らないからちょっとな

302 :名無しさん@お腹いっぱい。:2010/10/16(土) 01:16:14 ID:q0WnMUrJ0
本格的なGUIには向いてないのは確かだな。でも以下のような用途なら十分戦力になる

・コマンドライン用ツール(ffmpegとか)のフロントエンドにして、
雑多なオプションをGUIで手軽に選べるようにする。一度作ればマニュアル要らず。
(携帯電話変換君があるからこの例はあまり訳にたたんがw)

・コマンドライン引数に対応してなくて、いちいちGUIでファイル選ぶようなアプリで、
その代わりに引数貰って起動して、引数書き込んでボタン自動で押す

--

元々はこういうのを AutoIt や 本家AHKの目指していたところなんだろうけどさ。

303 :名無しさん@お腹いっぱい。:2010/10/16(土) 21:06:37 ID:WdTgeglV0
aaa.ahkに
#Include test\bbb.ahk
bbb.ahkに
#Include %A_ScriptDir%\ccc.ahk
って書いてある場合
test\ccc.ahkじゃなくてaaa.ahkと同じフォルダのccc.ahkが読まれる?

304 :名無しさん@お腹いっぱい。:2010/10/16(土) 21:44:43 ID:uHvrFFE00
読まれる?

って書く前に、試した結果はどうだったの?

305 :名無しさん@お腹いっぱい。:2010/10/16(土) 22:04:00 ID:e3BI4te10
aaa.ahkから起動した場合は
aaa.ahkと同じフォルダのccc.ahkが読まれる

aaa.ahkすっとばして直接bbb.ahkを起動した場合は
bbb.ahkと同じフォルダのccc.ahkが読まれる

自分(bbb.ahk)のパスはA_LineFileで取れるけど #includeでは使えないね
なにげにめんどくさいところだ

306 :名無しさん@お腹いっぱい。:2010/10/16(土) 22:19:28 ID:q0WnMUrJ0
関数ライブラリスクリプトの場合は挙動がちょっと違うので注意。

%A_Desktop%
 + main.ahk
 + xxx.ahk
%A_MyDocuments%\\AutoHotkey\Lib
 + sub.ahk
 + xxx.ahk

---- main.ahk ----
sub()
---- sub.ahk ----
#Include, xxx.ahk ; ★
sub() {
 Gosub, XXX
}
---- xxx.ahk (両方とも) ---
XXX:
 MsgBox, %A_LineFile%
 Return
----------------

結果は
 %A_MyDocuments%\AutoHotkey\Lib\xxx.ahk

★を「%A_ScriptDir%\xxx.ahk」にすると
 %A_Desktop%\xxx.ahk
になる

307 :名無しさん@お腹いっぱい。:2010/10/16(土) 23:10:12 ID:WdTgeglV0
>>304
聞き方が悪かった
試した結果が>>303だったんだけどこの理解で合ってるかと思って。
自分で一からスクリプト書くなら注意して書けばなんとかなりそうだけど
他人が作ったスクリプトが複数で構成されてる時に
autohotkey.ahkからincludeして使うとき不便だから何か解決方法はないものかと。

>>305-306
ありがとう。
ファイルごちゃごちゃになるのは諦めて1つのフォルダに全部置く事にした。

308 :名無しさん@お腹いっぱい。:2010/10/16(土) 23:38:45 ID:vMHLbBIc0
ある画面、あるソフトが最前面のときのみ
あるキーを別のキーに入れ替える、っていうのはどう書けばいいかな?

プロセスが存在していたら、っていうのは出来るけど、
あくまで最前面の時のみキーリマップ変更っていうのをやりたい。

309 :名無しさん@お腹いっぱい。:2010/10/16(土) 23:47:10 ID:e3BI4te10
#IfWinActive

310 :名無しさん@お腹いっぱい。:2010/10/17(日) 00:45:22 ID:Shh2ZxdQ0
おお、これかサンクス

311 :名無しさん@お腹いっぱい。:2010/10/17(日) 00:46:13 ID:ed/MdHIJ0
>>1のサイトもろくに見ないで質問とか氏ねよ

312 :名無しさん@お腹いっぱい。:2010/10/17(日) 00:56:11 ID:CO3MN1HK0
>>311
ごめんなさい

313 :名無しさん@お腹いっぱい。:2010/10/17(日) 01:01:43 ID:+CcgaRcH0
AutoHotkeyJpの左ペインを見てみたら
AutoHotkey_L 専用セクションが出来ているね
ありがとう>管理人さん

314 :名無しさん@お腹いっぱい。:2010/10/17(日) 13:40:22 ID:uoK1rgtV0
画面のある特定範囲内にあるウィンドウの中で、最前面のものを取得する…という処理は
どう作ればいいのでしょうか?
デュアルディスプレイでマウスポインタを各モニタ間で移動させた時に、その画面内の
最前面ウィンドウを自動的にアクティブにする、という用途で使いたいんですが…

315 :名無しさん@お腹いっぱい。:2010/10/17(日) 20:24:26 ID:34XClcZ70
WinGet, list, List ; 条件無し
でリスト取ると、重なりで上から順に並んでるから、Loopして順に座標調べて、
該当画面内にあれば、WinActivate して Break でいいんじゃね?

316 :名無しさん@お腹いっぱい。:2010/10/17(日) 23:45:56 ID:YCDwRoRL0
ここの
http://www.autohotkey.com/forum/viewtopic.php?t=22975&highlight=compiler+gui

No UPX オプションってつけてもつけなくても生成される実行ファイルの容量が同じなんだけど・・・
バグ?

317 :名無しさん@お腹いっぱい。:2010/10/17(日) 23:47:38 ID:YCDwRoRL0
ああ、使用したのはこれ

http://www.autohotkey.net/~ladiko/Compile_AHK/Compile_AHK_Setup.exe

318 :314:2010/10/18(月) 03:48:53 ID:rYM4Bbm40
>>315
うまくできました! ありがとうございます

319 :名無しさん@お腹いっぱい。:2010/10/18(月) 11:02:34 ID:hXI/IUBx0
192で質問して、教えていただいた者です。正規表現ビギナーです。
正規表現による置換を使って
@以前の文字列を削除したり
@以降の文字列を削除したり
したいのですが、@以降の文字列を削除するのがうまくできません。

Ans1 :=RegExReplace("あいうえお@かきくけこ",".*?@","")
Ans2 :=RegExReplace("あいうえお@かきくけこ","@.*?","")
msgbox,
(
".*?@"での答え→%Ans1%
"@.*?"での答え→%Ans2%
)

上のスクリプトでやってみたのですが、結果は
 かきくけこ
 あいうえおかきくけこ
となってしまいました。
Ans2は"@.*?"で置換すると、どうして「あいうえお」になってくれないのですか?
どのようにしたら、@以降の文字列を削除できますか?

320 :名無しさん@お腹いっぱい。:2010/10/18(月) 12:02:20 ID:X6FZx8eL0
正規表現に置ける*の意味と?の意味を再確認しる

321 :名無しさん@お腹いっぱい。:2010/10/18(月) 12:55:36 ID:+5VT7jw90
ahkの質問じゃないなw

322 :名無しさん@お腹いっぱい。:2010/10/18(月) 13:25:15 ID:hXI/IUBx0
>>319
自己解決しました。
"@.*"で置換をやったらうまくいきました。

なぜ「?」が要らないのかまだよくわかりませんので
「サルにもわかる正規表現入門」をよく読んで理解したいと思います。

>>320さんアリガトウ。
ついでに
>>321さん
悪うございました(謝)。

323 :名無しさん@お腹いっぱい。:2010/10/18(月) 17:15:59 ID:WRrlGkD90
A_TickCountを○時間○分○秒って感じのフォーマットにしたいんですが
どう一般的にどう計算させればよいのでしょうか?
知恵を下さい。

324 :名無しさん@お腹いっぱい。:2010/10/18(月) 17:18:01 ID:+h0+g2gt0
A_Tickcountを1000で割ると、稼働時間の 秒 になる。
それを60で割ると、分になる
それを60で(ry

って感じでやってるよ、俺は。

325 :314:2010/10/18(月) 19:43:56 ID:rYM4Bbm40
すみません、>>314に追加で質問
>>315のやり方で大体うまくいってるんですが、
バルーンヒントを除外する方法って何かないでしょうか?

326 :名無しさん@お腹いっぱい。:2010/10/18(月) 20:32:46 ID:OPgIQC8u0
ウィンドウの情報は、座標以外にも、タイトルやらクラスやらスタイルやら取れるんで、
それらで判断すりゃいいかと。

ウィンドウクラスかウィンドウスタイルで除外するのが楽だと思うけど。

327 :314=325:2010/10/19(火) 02:45:19 ID:ba8WQ+zq0
>>326
ありがとうございますー
タイトルやクラスは他にも空白のものがあるかもしれないので、
とりあえずツールチップやバルーンのウィンドウスタイル頭4文字"0x94"を判別して
除外するようにしてみました。これでうまくいくかな?

328 :名無しさん@お腹いっぱい。:2010/10/19(火) 06:30:37 ID:01h8Ctb10
タスクマネージャーとかで表示されているすべてのプロセスのリストを取得する関数とか
有りませんか?

329 :名無しさん@お腹いっぱい。:2010/10/19(火) 09:19:30 ID:YeXINLz50
DetectHiddenWindows, On してから >315
全ユーザーのプロセスまで取れるかどうかはわからん

330 :名無しさん@お腹いっぱい。:2010/10/19(火) 11:52:27 ID:clvatLXW0
流行らせるページのDragDrop関数
http://www.autohotkey.com/forum/topic45041.html

これをAutohotkeyLのユニコード版で使うにはどうすればいいんでしょう。
DllCallの中のStrをAStrに変えただけではうまく動作しません。
上記のフォーラムの中で出てきたDragFileA関数も動作しませんでした。

Numputのあたりをいじるようなのですが、DllCallはさっぱりなので宜しければご教授下さい。

331 :330:2010/10/19(火) 12:56:58 ID:clvatLXW0
自己解決しました。

NumputではなくStrLenでした。全角も1文字と数えるので、全角文字=2文字となる補正すればOKでした。
Dropするファイルのパスを一文字ずつ分解して、正規表現で半角以外だったら補正値+1、
とすることで、かなり力業ですが解決しました。

まったくスマートではないのですが、取り敢えず動きました。

332 :名無しさん@お腹いっぱい。:2010/10/19(火) 13:24:17 ID:cCnrDLPW0
個人的に移植したやつ。
hwnd : 対象窓, files : 対象ファイル(`n区切り), ptX&ptY : 落とす座標, fNC: 真なら絶対座標/偽なら相対

DropFiles(hwnd, files, ptX=0, ptY=0, fNC=False) {
 static char_type:= A_IsUnicode ? "UShort" : "UChar"
  , char_size := A_IsUnicode ? 2 : 1
  , isUnicode := A_IsUnicode ? 1 : 0
 files := RTrim(files, "`r`n`t ") . "`n`n"
 byte_length := StrLen(files) * char_size
 Loop, Parse, files
  If (A_LoopField = "`n")
   NumPut(0x00, files, (A_Index-1) * char_size, char_type)
 hDrop := DllCall("GlobalAlloc", "UInt", 0x42, "UInt",20 + byte_length, "Ptr")
 p := DllCall("GlobalLock", "Ptr", hDrop)
 NumPut(20 , p + 00, "Int") ; offset
 NumPut(ptX , p + 04, "Int") ; pt.x
 NumPut(ptY , p + 08, "Int") ; pt.y
 NumPut(fNC , p + 12, "Int") ; fNC
 NumPut(isUnicode, p + 16, "Int") ; fWide
 DllCall("RtlMoveMemory", "Ptr", p + 20, "Str", files, "UInt", byte_length)
 DllCall("GlobalUnlock", "Ptr", hDrop)
 PostMessage, WM_DROPFILES := 0x233, hDrop , 0, , ahk_id %hwnd%
}

利用例)
IfWinNotExist, ahk_class Notepad
{
 Run, Notepad
 WinWait, ahk_class Notepad
}
DropFiles(WinExist(), A_ScriptFullPath)

333 :名無しさん@お腹いっぱい。:2010/10/19(火) 21:54:05 ID:eAGKNIWv0
ttp://www.autohotkey.com/forum/topic18550.html
このトピックにある、GetModuleFileNameEx()って関数なんですが
これまでは返された値を StrGet(&戻り値, "CP932") して利用していたのですが
このままだと戻り値に"è"とか"é"の文字が入っていた場合、
勝手に"e"などの文字に変換されうまく動作していません。
適当にいろいろ弄っていたら
CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
の行の GetModuleFileNameExA を GetModuleFileNameEx にしたら偶然動いてしまいました。
DllCallをどう扱えばいいのかの根本が理解できてない段階なので、
これで本当に問題がないのか教えて頂けないでしょうか?

AutoHotkey_L Revision 61のUnicode x64版を利用してます。

334 :名無しさん@お腹いっぱい。:2010/10/19(火) 22:56:57 ID:GBRE3Jqp0
Unicode版ならGetModuleFileNameExは、GetModuleFileNameExWを呼び出すから問題ないよ。
ただ、そのコード自体はUnicodeとx64を考慮してないから、ちょっと変更する必要がある。

FileNameSize := 260
...
CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)

static size_of_char := A_IsUnicode ? 2 : 1
FileNameSize := 260 * size_of_char
...
CallResult := DllCall("Psapi.dll\GetModuleFileNameEx", "Ptr", hProcess, "Ptr", 0, "Str", ModuleFileName, "UInt", FileNameSize)

335 :名無しさん@お腹いっぱい。:2010/10/19(火) 23:27:02 ID:eAGKNIWv0
>>334
ありがとうございます
そうか、Unicodeは1文字でANSIの倍のバイト数を消費するから2倍する必要があるんですね。
UInt とかこの辺は、今のところ自分の場合とりあえず総当たりで動作するまで他のに変えてみる、
全種類試して動かない場合は素直に諦めるっていう、ひどい有様ですがw

336 :名無しさん@お腹いっぱい。:2010/10/19(火) 23:48:06 ID:cCnrDLPW0
ハンドルやポインタはは全部 Ptr だとおもっていい。(UINT_PTRを除く)

337 :名無しさん@お腹いっぱい。:2010/10/20(水) 09:08:26 ID:NjUDFAPD0
>>323
こんな感じでどう?

msgbox % formatseconds(A_Tickcount // 1000)
Return

FormatSeconds(NumberOfSeconds) ; Convert the specified number of seconds to hh:mm:ss format.
{
time = 19990101 ; *Midnight* of an arbitrary date.
time += %NumberOfSeconds%, seconds
FormatTime, mmss, %time%, mm:ss
return NumberOfSeconds//3600 ":" mmss ; This method is used to support more than 24 hours worth of sections.
}

338 :名無しさん@お腹いっぱい。:2010/10/20(水) 10:26:45 ID:zB/sYauR0
Vimのようなモード切替の概念をAutoHotkeyで実現したいのですが、可能でしょうか?

例えば、Ctrl + Shift + mで、特殊モードになって、h j k lがそれぞれ←↓↑→のカーソル移動になり、
Escを押すと特殊モードを終了して本来の入力に戻る、みたいな。

339 :名無しさん@お腹いっぱい。:2010/10/20(水) 10:27:45 ID:x2HpyfEu0
>>9

340 :名無しさん@お腹いっぱい。:2010/10/20(水) 11:14:36 ID:zB/sYauR0
>>339
そんなところにあったとは(節穴)。ありがとうございます。助かりました。

ところで、AHKの変数って、:=代入が同時に宣言にあたるのですか?
誰かの書いたスクリプトを見ていると、急に見たこともない変数が普通に使われていたりして困惑することが多々あるのですが。

341 :名無しさん@お腹いっぱい。:2010/10/20(水) 11:57:47 ID:mHgGqDF50
変数宣言は必要ない。というかできない。まぁ、すぐ慣れるよ。typoはどうしようもないけどw

342 :名無しさん@お腹いっぱい。:2010/10/20(水) 12:30:19 ID:q9pQEdrn0
>>2のAutohotkey_Lのリンク先にあるダウンロードからUnicode x86のzipを落としたのですが、
#Includeのパスに日本語が入っていると起動時にエラーではじかれます。
ANSI x86の方だと問題ないのですが、こういう物なんでしょうか。
Unicodeの方が2バイト文字も問題なく扱えると思っていたのですが。

343 :名無しさん@お腹いっぱい。:2010/10/20(水) 12:35:03 ID:hbTixXqR0
Unicodeで書いてないだけだろ

344 :名無しさん@お腹いっぱい。:2010/10/20(水) 12:50:47 ID:q9pQEdrn0
>>343
Shift-JISのスクリプトそのまま使ってました…。失礼しました。
ありがとうございます。

345 :名無しさん@お腹いっぱい。:2010/10/20(水) 17:40:59 ID:VvhskSdR0
実行中の指令を止める方法はありませんでしょうか?
例えば、1秒おきに、1 2 3 4...と、100まで入力していくスクリプトがあったとして、
これを実行途中に、指定したボタンを押すと、そのスクリプトを無効にしてインプットを止めたいのですが。

346 :名無しさん@お腹いっぱい。:2010/10/20(水) 17:55:23 ID:ct87hXx/0
>>345
1から100までループしているスクリプトのループの中で、

if stopflag=1
break

みたいのを入れて、

a::
stopflag=1
return

って感じでグローバル変数でフラグつくればいいんじゃない?

347 :名無しさん@お腹いっぱい。:2010/10/20(水) 18:05:02 ID:s6eZehnaP
それか1秒おきって決まってるなら
SetTimer, Label, 1000 して
SetTimer, Label, OFF するとか

Label:
count++
Tolltip, count
return

348 :名無しさん@お腹いっぱい。:2010/10/20(水) 19:04:42 ID:VvhskSdR0
>>346
>>347
お返事いただき有難うございます。
とても参考になりました。
有難うございました。

349 :名無しさん@お腹いっぱい。:2010/10/21(木) 00:11:53 ID:aNV54UWl0
AutoHotkey_L 64bitでなんかMouseGesture.ahkのMG_GetFocus()が失敗してるなと思ったら64bitに対応したコードじゃないのね

MG_GetFocus(){
VarSetCapacity(tmp, A_PtrSize == 8 ? 72 : 48)
NumPut(A_PtrSize == 8 ? 72 : 48,tmp,0)
return DllCall("user32.dll\GetGUIThreadInfo","UInt",0,"Str",tmp) ? NumGet(tmp,A_PtrSize == 8 ? 16 : 12) : 0
}

に書き換えたら問題なく動いた

350 :名無しさん@お腹いっぱい。:2010/10/21(木) 00:14:52 ID:cXEiBx8C0
まぁ、多少なりともDllCallいじれるなら、互換性のページ読めばすぐ直せるしな

351 :名無しさん@お腹いっぱい。:2010/10/21(木) 18:22:06 ID:3tOe/dQz0
ちょっとお尋ねしますが、右クリックすると
"1"キー入力
10ms待機
"1"キー入力
5ms待機
"右クリック"
という動作をさせられますか?

352 :名無しさん@お腹いっぱい。:2010/10/21(木) 18:31:22 ID:gUxLo4te0
可能

353 :名無しさん@お腹いっぱい。:2010/10/21(木) 18:40:41 ID:2PDVKZdYP
させられますか?

って、そのまま作ればいいだけじゃん

354 :名無しさん@お腹いっぱい。:2010/10/21(木) 20:39:44 ID:cXEiBx8C0
>>351
書いていることの各行に相応するコマンドがあるんで、
日本語→AHK語に変えるだけでおk

355 :名無しさん@お腹いっぱい。:2010/10/22(金) 17:46:41 ID:ao/w/zK70
ahkファイルをダブルクリックして動かしてたら。
自分の書いたスクリプトに誤りがあって、暴走してしまった。

こんな時(暴走してしまっているような状態のとき)
ahkを止める方法はないですか?

356 :名無しさん@お腹いっぱい。:2010/10/22(金) 17:57:23 ID:0cuX34DW0
タスクマネージャー(Ctrl+Alt+Del)を開き、
「プロセス」タブを選択し、(マウスが効かない場合はCtrl+Tabで「プロセス」タブにする)
AutoHotkey.exeを終了させる(ahkスクリプトが複数実行されていればその数だけ終了させる)

357 :名無しさん@お腹いっぱい。:2010/10/22(金) 18:06:55 ID:ao/w/zK70
>>356
なるぼど、そうか
無理やり閉じるんだから
そういう方法しかないんですね。

昔、キーバットっていう記録再生ソフトを使ってたもので、
キーバットではctrl+pauseで止めれたそのイメージがあったものですから。
サンキュウ。

358 :名無しさん@お腹いっぱい。:2010/10/22(金) 18:28:16 ID:jGCCfdL30
おぉ、キーバット。あれは地味に良いソフトだ。俺も昔使っていた。
AHKの処理を中止するコマンドか。ありそうだけど。知らないけど。

359 :名無しさん@お腹いっぱい。:2010/10/22(金) 18:36:20 ID:SKMh60FCP
単純に、タスクトレイで右クリックして「PAUSE」じゃダメなの?
俺もよく暴走させるけど、これでほとんど用が足りてる。

どうしても、いつでもホットキーでやめたいならば、

esc::
exitapp

とか書いておけばいい。

360 :名無しさん@お腹いっぱい。:2010/10/22(金) 21:28:05 ID:oGf2dSuK0
このソフトってキーボード二つ用意して肩っぽのaキーだけ
ホットキー割り当てて処理できたりします?

361 :名無しさん@お腹いっぱい。:2010/10/22(金) 22:39:31 ID:Cbrbclyv0
そういう機能はない。

無理矢理出来なくもないかもしれない。
ウチのマシンでは動くけどよその環境じゃ分からん。

362 :名無しさん@お腹いっぱい。:2010/10/22(金) 23:08:54 ID:oGf2dSuK0
専用のキーボードみたいなの買おうと思ってたんですが出来ないんですか・・・
ありがとうございます。

363 :名無しさん@お腹いっぱい。:2010/10/23(土) 00:24:06 ID:PT5Z6/Zz0
>>362
場合によってはできるよ。
USBテンキーを独自のキーに置き換えられるドライバもあったはず。
ジョイパッドのキー出力できるのもあったような

補助デバイスを使う人の専用スレ(CG用だが)があるから、そちらも参考にしたほうがいいと思う。
CG用補助入力総合part5 【G13 n52te スマスク】
http://hibari.2ch.net/test/read.cgi/cg/1269804442/

364 :名無しさん@お腹いっぱい。:2010/10/23(土) 00:33:41 ID:/sdQrnk60
>専用キーコード
「お気に入りキーボード」みたいなのなら独自のキーコード吐いてるだろうから可能じゃね?

つか360の時点の話しだと汎用キーボード二つ並べて使う前提にしか読めんのだが
専用キーコード前提なら最初からそう書け

365 :名無しさん@お腹いっぱい。:2010/10/23(土) 01:57:57 ID:eBQypco/0
専用キーコードを吐けるキーボードを使うという話ではなく汎用キーボードを
何か特定の用途専用のキーボードとして扱いたいという話だと思う。

キーの吐き出し元が特定のキーボードかどうかを判別して
挙動を変えるということを力技でやっていた人が昔いたようだけど、
俺には難しくてよく分からなかった。>>35あたり参考。

366 :名無しさん@お腹いっぱい。:2010/10/23(土) 04:24:39 ID:6vOfCCU70
毎度の如く情報の少ない書き込みから余計な妄想を働かせて文句を垂れつつ
自分話をしたがる奴の多いこと多いこと
わからねえなら口をはさむな

367 :名無しさん@お腹いっぱい。:2010/10/23(土) 05:11:35 ID:PT5Z6/Zz0
>>365
http://pc12.2ch.net/test/read.cgi/software/1265518996/795
これか、おもしろいな。WindowsのAPIでできるのか。

実際の入力機器のユーティリティソフトはどうやってるんだろうね
IDが接続ごとに変わる問題は、別に情報を取得して自動的に識別して解消しているんだろうか



368 :名無しさん@お腹いっぱい。:2010/10/23(土) 12:01:10 ID:8txqJSlX0

AHKで記述されたタイリング型ウィンドウマネージャーで
bug.n見つけたんだが、これって既出?

joten @ AutoHotkey
http://www.autohotkey.net/~joten/


369 :名無しさん@お腹いっぱい。:2010/10/24(日) 00:19:37 ID:4ShEmsCf0
昔Xでionとか使ってたな。懐かしい。

370 :名無しさん@お腹いっぱい。:2010/10/24(日) 01:22:55 ID:xCaS4YDR0
>>314で質問した者なんですが改めて
画面のある特定範囲内にあるウィンドウの中で、最前面のものを判定するには
どう組んだらいいんでしょうか?

デュアルディスプレイの片方の画面に少しでもかかってるウィンドウを判定したいんです。
WinGet, List_id, list, , ,
Loop, %List_id%
{
WinGetPos, Xpos, Ypos, Width, Height, ahk_id %this_id%

こんなかんじで上から順にウィンドウの座標を取得し、
四隅の座標をひとつひとつ画面範囲内入っているかどうかを判定していたのですが、
ウィンドウのサイズを最大化すると四隅の座標が全て画面より4ピクセル大きくなってしまい
全て判定から外れてしまって…

371 :名無しさん@お腹いっぱい。:2010/10/24(日) 01:32:25 ID:Mkh5TRub0
いくらでもやりようがあると思うけど

WinGet, MinMax, Minmax やって最大化してたら、ウィンドウの中央が
どの画面に入っているか、でみりゃいいんじゃね?

SysGet とかでウィンドウ枠の幅を得て計算したり、とかでもいいとは思うけど

372 :名無しさん@お腹いっぱい。:2010/10/24(日) 02:43:52 ID:iVl4hFq3P
>>368
予想どおりだが、終了してもマルチモニタ気にしてなくてウインドウ配置ぐちゃぐちゃになってワロタww
ウインドウ配置もどすツールくらいあるから実害はなかったけどw

でも、これおもしろね。
仮想デスクトップ込みのシンプルなウインドウマネージャか。

Windowsからフルスクリーンにした1つのターミナルソフトでunixにつなげて、
コマンドライン中の画面を何分割にもして使っている人を思い出した。

373 :名無しさん@お腹いっぱい。:2010/10/24(日) 03:30:27 ID:xCaS4YDR0
>>371
ありがとうございます! ウィンドウの中心座標で判定するようにしました

374 :名無しさん@お腹いっぱい。:2010/10/24(日) 17:21:31 ID:rUerIEXj0
ちょいと質問。AHK_L(公式から取れる最新のX64のやつ)を使って
a::
Hotkey,d,Empty,On
return

b::
Hotkey,d,Empty,Off
return

d::
Msgbox,s
return

Empty:
return

見たいにして簡単なテストをしてるんだがaを押してもbを押しても
dを押したときに何も変わらないんだ…。はやらせるページとか見て
なんか変なミスしてんのかなーと思って見直してみても
わからない…。だ、だれかHotkeyの使い方教えてくれまいか。

375 :名無しさん@お腹いっぱい。:2010/10/24(日) 17:59:29 ID:Mkh5TRub0
>>374 の挙動は、
・ 起動直後は[D]押下で[s]出力
・ [A] 押下で [D] 押下時のに「何もしない」ようにする。
 もともとのホットキー定義は上書きされる。
・ [B] 押下で [D] 押下時の挙動をオフにする
 元々のものはEmptyに上書きした上でオフ、[A] で定義したものはオフに
となると思うけど、それが意図したものだろうか?

個人的意見を言うと、Hotkeyコマンドで切り替えるのは凄く分かりづらいので、
#If で条件を明示した方がいいと思ってる。

376 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:12:38 ID:9F09eDFy0
>>374
こういう動作が希望?

a::flag=1

b::flag=0

$d::
if flag=1
Msgbox,s
else
send, d
return

377 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:20:44 ID:rUerIEXj0
最終的に、
>>376
みたいのが希望だったんっだけど、なんかですね、
俺がやったとおりにすると
>>375のいうようになるのかと思ったらならないんだよ。
だからHotkeyのコマンドって調べたところにのってたのと
違うのかなーと思って聞いたのでした。
ただ、聞いてみると確かにHotkeyでやるより#Ifでやったほうがよさそうだ。
答えてくれた人、ありがとう。

378 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:28:13 ID:9F09eDFy0
>>377
んじゃ、こういうのが希望?
面倒くさそうだけど。

a::Hotkey,d,Empty,On

b::Hotkey,d,d,On

d::
Msgbox,s
return

Empty:
return

379 :名無しさん@お腹いっぱい。:2010/10/24(日) 19:35:45 ID:5wnKBkRmP
こういう場合、>>376の例みたいに、フラグで機能割り当ての管理をしたほうがラクだよね。

うちでは、フラグの変数を、押すたびにインクリメントして、
機能の割り当てをローテーションで変えたりして使ってる。


380 :名無しさん@お腹いっぱい。:2010/10/25(月) 13:45:11 ID:TOpAYAMo0
質問です。宜しくお願いします。

Win+Prtscnが押されたら
1.画面コピー
2.ペイントの起動
3.プリントスクリーンの貼付
の動作を一気にしたいのです。

-----
MsgBox,今後、Win+PrtScnでペイントを起動し画面を貼付ますヨ。
#PrintScreen::
Run,mspaint.exe
Sleep 100
!hvp
return
-----
を作りましたが、ペイント起動後何も起こりません。貼付迄動作しません。

質問1
この場合、>Run,mspaint.exe の前にPrintScreenキーを押す(ハードコピー)記述は必要なのでしょうか?
Prtscnキーを押す動作なので PrintScreen と記述したらエラーになっちゃいましたけど・・・
質問2
>!hvp の部分はプルダウンメニューから貼付を選択してるつもりです。こういう記述で良いんでしょうか?
Alt+H、V、P のつもりです。 http://iup.2ch-library.com/i/i0175925-1287981773.jpg

因みに、昨日からAHK弄ってるレベルです。

381 :名無しさん@お腹いっぱい。:2010/10/25(月) 13:52:32 ID:A0xR5fqgP
検証してないけど

>Sleep 100

いくらなんでも短すぎる気がする
2000くらいで始めて、徐々に縮めていったほうがいい

>!hvp

これ何?
sendコマンド付いてないじゃん

あと、いっきにコマンド流しても反応しないことがあるので、
altHを送った後にメニューが出てるか確認して、
出ていたら次のコマンド送るようにするとか、
いろいろ細かい細工をする必要がある。

382 :名無しさん@お腹いっぱい。:2010/10/25(月) 13:59:30 ID:4wvx/zaY0
>>380
ホットキーの修飾シンボルとSendlコマンドのキーを参照されたし

http://sites.google.com/site/autohotkeyjp/reference/Hotkeys
http://sites.google.com/site/autohotkeyjp/reference/commands/Send

383 :名無しさん@お腹いっぱい。:2010/10/25(月) 14:18:42 ID:Xu8cPlUE0
autohotkeyでまずマスターしたいのは
sendの使い方だよね

384 :380:2010/10/25(月) 14:25:39 ID:TOpAYAMo0
MsgBox,今後、Win+PrtScnでペイントを起動し画面を貼付ますヨ。
#PrintScreen::
Run,mspaint.exe
Sleep 2000

;ALT+Hキーを押してプルダウンメニューの表示
{
  Send {ALT down}
  Sleep 60
  Send {H down}
  Sleep 30
}
Send {ALT up}
Send {H up}

;貼付けを選択
Sleep 1000
{
  Send {V down}
  Sleep 30
}
Send {V up}

;クリップボードからの貼付けを選ぶ
Sleep 1000
{
  Send {P down}
  Sleep 30
}
Send {P up}

return

385 :380:2010/10/25(月) 14:33:41 ID:TOpAYAMo0
>>384
に修正して今動きました!

仰るとおりsendの使い方が理解出来てなかったです。
別のキーに入れ替える時のみ使うのかと思ってました。

http://sites.google.com/site/autohotkeyjp/reference/commands/Send の
>Loop 20
>{
> Send {Tab down} ; キーリピートをキー押下としてキーを送る
> Sleep 30 ; キーリピート間隔を30msとする(またはSetKeyDelayを使う)
>}
>Send {Tab up} ; キー押下を解除する
で使い方が分かりました。

あと >Sleep 100 も全体的に桁を上げてスローにしたら動きが見れました。

今後微調整してみます。 

>>381 様 >>382 様 >>383 様 ありがとうございました。

386 :名無しさん@お腹いっぱい。:2010/10/25(月) 14:51:48 ID:N0z/tjG0i
ペイントを起動して張り付けれられるのを待つのは、
Sleepでもいいけど、WinWaitActive を使う方がいい。
ウィンドウの指定の「お作法」を知る必要があるけど、
せっかくAHK使い始めたんだし覚えて損はないぞ。

387 :名無しさん@お腹いっぱい。:2010/10/25(月) 14:58:00 ID:4XJMmLcR0
; pushを作ってみたよ

rrrpush(byref o,sss){
if(o.length == ""){
o.length := 0 ;
} ;
o.Insert(o.length,sss) ;
o.length:= o.length + 1 ;
return o ;
} ;

ooo := object() ;

rrrpush(ooo,"プッシュ0") ;
rrrpush(ooo,"プッシュ1") ;

sss := " ooo[0] = " ooo[0] "`n ooo[1] = " ooo[1] "`n ooo.length = " ooo.length
msgbox,%sss%

sss := " ooo.0 = " ooo.0 "`n ooo.1 = " ooo.1 "`n ooo.length = " ooo.length
msgbox,%sss%

388 :名無しさん@お腹いっぱい。:2010/10/25(月) 15:25:58 ID:dQSDWczY0
なにそれ?

389 :380:2010/10/25(月) 15:33:50 ID:TOpAYAMo0
>>386
あーこういうものあったんですね。
>指定したウィンドウがアクティブになるまでスクリプトの実行を一時停止します。
あとで改造してみます。

390 :名無しさん@お腹いっぱい。:2010/10/25(月) 16:01:19 ID:7Y23PrHpi
>>387
push/pop みたいな LIFO(Last in, first out)は、
arr.Insert(itemToPush)
popedItem := arr.Remove(arr.MaxIndex())
でいけるっしょ。
index = 1 を使えば、shift/unshift も可能。

FIFO なら、
arr.Insert(itemToAdd)
item := arr.Remove(1)
でいいし。

391 :名無しさん@お腹いっぱい。:2010/10/26(火) 20:36:44 ID:q65iTCV2i

>>246
亀だが、昔随分前に使って、こりゃダメだ、と思ってた。
#If も使えるし、AHKLw相当だな。
画面の向きを何とか検知できれば、
融通の利かない SortInchkey を捨てられそうだ。

392 :名無しさん@お腹いっぱい。:2010/10/26(火) 21:47:29 ID:bvWup9giP
Run, foobar2000.exe /comand:Next
でAHKからfoobarをコントロールしているのですが、
曲が切り替わったあとに最速で曲名を取得するにはどうすればいいでしょうか?

切り替わる直前にタイトルバーが一瞬foobar2000になるので、
Loop
 WinGetTitle, sTitle, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Until sTitle != foobar2000
で取得しようとしたのですが、切り替わる前の現在のタイトルが取得されてしまいました
今は長めにSleepしてからWinGetTitleで切り替わったあとのタイトルバーの文字列を取得していますが、
このSleep部分を自動化することはできないでしょうか

393 :名無しさん@お腹いっぱい。:2010/10/26(火) 22:19:00 ID:0xoVxpsw0
>>391
PocketPC版のAutohotokeyはWin32用とは違ってキーカスタマイズに使うわけじゃないけど、
ちょっとしたことさせるには結構いいと思うわ。
AHKだけでフルスクリーンにする方法がよくわからんので、
手前のアプリをフルスクリーンにするExeをRunして誤魔化してるがw
GUIで大きなボタンが使えて、ファイル操作が出来て、Win32版とほぼ同じコードが動かせるインタープリタはほかにあるのかな?

394 :392:2010/10/26(火) 22:30:51 ID:bvWup9giP
自己解決しました

Run, foobar2000.exe /comand:Next
WinWait, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
WinWaitClose, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
WinGetTitle, sWinTitle, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}

で取得できました

395 :名無しさん@お腹いっぱい。:2010/10/26(火) 23:41:50 ID:R8VjGMqH0
>>394
3rd Party製のCOMを使うと色々便利だよ

COM Automation Server for 0.9, Public technology preview
http://www.hydrogenaudio.org/forums/index.php?showtopic=39946

// auto execute
fb2k := ComObjCreate("Foobar2000.Application.0.7")
fb2k_playback := fb2k.Playback
ComObjConnect(fb2k_playback, "Fb2kPlayback_")
return

#n::fb2k_playback.Next() ; 次の曲
#p::fb2k_playback.Previous() ; 前の曲

Fb2kPlayback_TrackChanged(bLocationChanged)
{
global fb2k_playback
MsgBox, % fb2k_playback.FormatTitle("%artist% - %title% - %album%"); foobarのタイトルフォーマティング
return
}

インターフェイスや関数は、インスコされたフォルダにあるfoobar2000.idlを参考に

396 :392:2010/10/26(火) 23:57:17 ID:bvWup9giP
>>395
うおお、これはすごい・・!
ありがとうございます、こちら使ってみます

397 :392:2010/10/27(水) 00:28:26 ID:dzE2OZRCP
すみません、ComObjCreate("Foobar2000.Application.0.7")でfoobarが起動してしまうのは仕様でしょうか?
MouseGesture.ahkに組み込んでいるので、Windows起動時に毎回foobarが起動してしまうと少し面倒です
またスクリプト終了時にfoobarが存在しないとRPC サーバーを利用できません。というエラーが表示されるのですが、どういう意味でしょうか?

398 :名無しさん@お腹いっぱい。:2010/10/27(水) 00:41:03 ID:8b70FoXC0
AutoHotKeyを初めて使ってみようと思って公式サイトからダウンロードしたんですが、
カスペルスキー先生にTrojan-GameThief.Win32.OnLineGames.xfzpだって怒られてしまいました。

これは誤検知ってことで良いんでしょうか?

399 :名無しさん@お腹いっぱい。:2010/10/27(水) 01:41:29 ID:dzE2OZRCP
foobar見つけたらComObj生成、存在しなくなったらComObj破棄というタイマーを500msで回すことで解決しました
ありがとうございました

400 :名無しさん@お腹いっぱい。:2010/10/27(水) 01:45:32 ID:21uFL+Ds0
>>398
たぶんね。
AHKはキー入力の監視・乗っ取りなどスパイ的な事ができるんで、
その辺がトロイなどと認識されているかもしれない。
あるいは、実行ファイルが圧縮されているんだけど、それが誤検出の元だったりもする。

401 :名無しさん@お腹いっぱい。:2010/10/27(水) 08:49:34 ID:8b70FoXC0
>>400
やっぱりそうですか。それに少し安心しつつ、ちょっと使ってみようと思います。
ありがとうございます!

402 :名無しさん@お腹いっぱい。:2010/10/27(水) 11:23:11 ID:C3BMn1dN0
>>399ごめんあれからすぐ寝てた。タイマーでもおkだけとヘルパを使う手もあるみたい
fb2k_helper := ComObjCreate("Foobar2000.ApplicationHelper.0.7") ;Foobarの起動状態を監視するヘルパ(COMServer2Helper.exe)
ComObjConnect(fb2k_helper, "Fb2kHelper_") ;Foobar起動時/終了時に呼び出されるイベント
return
Fb2kHelper_ServerStateChanged(bRunning) { ;bRunning: false(終了時), true(起動時)
global
if bRunning
fb2k := ComObjCreate("Foobar2000.Application.0.7"), fb2k_playback := fb2k.Playback, ComObjConnect(fb2k_playback, "Fb2kPlayback_")
else ; この時点で恐らくFoobar(サーバ)が死んでるので、RPCなんちゃらエラーが出る。ComObjErrorで回避…
ComObjError(false), fb2k_playback := "", fb2k := "", ComObjError(true) ;特別な開放処理は必要ない…と思う
return
}
;Fb2kPlayback_TrackChanged上記と同じなので省略
長くなりそうだったので詰めた。読みづらくてスマソ

403 :名無しさん@お腹いっぱい。:2010/10/27(水) 11:47:00 ID:uy+2ap1C0
autohotkeyの派生はautohotkey_lだけかと思っていたら
autohotket_hやautohotkey_nもあるのね
こんがらがってきた

404 :402:2010/10/27(水) 12:48:46 ID:C3BMn1dN0
あ、もしWindows終了時とかCOMServer2Helperが先に終了してエラー出るなら、
Auto-executeでComObjError(false)やっちゃうのがいいかも。必要なときは(true)/(false)で囲む形で

405 :名無しさん@お腹いっぱい。:2010/10/27(水) 23:35:56 ID:dzE2OZRCP
>>402
教えていただいた方法で書き直しました
こちらのほうが無駄がなくていいですね
本当に助かりました、ありがとうございます

406 :名無しさん@お腹いっぱい。:2010/10/28(木) 02:56:50 ID:5gI82XJE0
皆さんのところでは、Win 7 x64 + AHK_L x86 rev 61 で SoundPlay は動いてますか?

407 :名無しさん@お腹いっぱい。:2010/10/28(木) 12:01:42 ID:iIplMjyG0
なんで64で32使ってるの?
Win7 32bitでAhk_L 32bit Unicodeだとちゃんと音鳴るぞ

408 :名無しさん@お腹いっぱい。:2010/10/28(木) 15:27:45 ID:up4g96kpP
そろそろ_L版に乗り換えなきゃなぁと思ってるのだけど、うちも64機で、
以前から使い続けている32bitのAHK本家がそのまま動いたから
それをそのままつかってる。soundplayも、問題なく動いてる。

64bitマシンで64bit対応AHKをつかうと、どんな恩恵があるの?

409 :406:2010/10/28(木) 21:07:19 ID:jJZO3LXf0
>>407
DllCall でドライバー直接たたいてる部分が AHK_L x64 で動んのですよ。
ポインターサイズやバッファーサイズの変更だけではどうにもならなかったので
諦めて x86 ビルドを使ってます。それ以外のスクリプトは x64 ビルドでいいんだけどね。

>>408
そうですか、じゃあ自分ちだけの問題みたいですね。なんだろ?

410 :名無しさん@お腹いっぱい。:2010/10/28(木) 22:11:08 ID:85I2/olr0
エスパーしてみると、裏で排他モードで何か鳴らしてるとか。

411 :名無しさん@お腹いっぱい。:2010/10/31(日) 00:07:32 ID:H5Svzd9O0
質問
Ctrl + Shift + C を操作してクリップボードにコピー →クリップボード内の=以降を正規表現で抽出(ファイル名)
→Googleディスクトップ検索 迄を一気にしてるつもりなんですが・・・

キー操作の Ctrl+C を Ctrl + Shift + C に置換えてるつもりですが、
Ctrl + Shift + C を押してもクリップボードへのコピーが出来てないようです。
従って、前にCtrl+C でコピーした内容がクリップボードに残ってて、検索される様なのですが?何が悪いのでしょうか?
-----
MsgBox,Ctrl + Shift + C で文字列の最後の=以降(ファイル名)をgoogleデスクトップで検索。
^+C::
;Ctrl+Cキーを送信して、クリップボードにコピー
Send,^c
;クリップボードにテキストが格納されるまで待機
ClipWait
;1行文字列の置換。
ClipBoard := RegExReplace( ClipBoard, "^.*=(.+?)$", "$1" )
;複数行文字列の置換。
;ClipBoard := RegExReplace( ClipBoard, "\A.*=(.+?)$", "$1" )
;置換えられたクリップボード(抽出されたファイル名)をGoogleディスクトップで検索します。
Run,http://127.0.0.1:4664/search&s=P6EiCVVf5KnXpjFRh9HLxn61WY8?q=%ClipBoard%
Return
-----
宜しくお願いします。

412 :411:2010/10/31(日) 00:11:24 ID:dGqZc2fG0
自己解決しました。

413 :411:2010/10/31(日) 00:23:45 ID:H5Svzd9O0
ガセです。継続してレス希望してます!

414 :名無しさん@お腹いっぱい。:2010/10/31(日) 00:40:39 ID:jpbTvmw/P
ディスクトップって・・・いままで生きてて、おかしいと思ったことはないの?

415 :411:2010/10/31(日) 00:48:52 ID:H5Svzd9O0
ああ分かってたのにデスクトップの間違いでやんす。

416 :名無しさん@お腹いっぱい。:2010/10/31(日) 00:54:48 ID:jpbTvmw/P
とりあえず、最初の Send,^c の前に、

sleep,1000

を入れてみて、様子を見てみたら?
物理キー入力と、キー送りが近すぎると、
動かないことが多い。

417 :名無しさん@お腹いっぱい。:2010/10/31(日) 01:04:36 ID:G3btguv00
>>411
少なくともウチでは動くなぁ。

でも、その処理だとClipWaitで無限に待ったりしてないのかね?
いったんクリップボードを空にして、
タイムアウトを0.2秒くらいに設定してErrorLevel で変更されたかどうか見た方がいい。

^+C::
Clipboard =
Send, ^c
ClipWait, 0.2
If (ErrorLevel = 0)
{
 q := RegExReplace( ClipBoard, 〜〜, 〜〜)
 Run, http://127.0.0.1:4664/search?s=〜〜&q=%q%
}

ところで、
・正規表現置換後の文字列は普通の変数使った方がいいと思う
・それとURLのパラメタの並びおかしくね?
・コマンドの説明そのままのコメントは見にくくなるだけで要らない感じ

418 :411:2010/10/31(日) 01:24:20 ID:H5Svzd9O0
>>416 >>417
あ〜ホントだ。待機時間入れたら思ってた通りに動きましたわ。

ErrorLevel/変数/パラメタ/コメントの修正は、寝て起きてシャキットした頭で再度してみます。

>>416 様 >>417 様
夜分遅くお手数お掛けしました。ありがとうございます。

419 :名無しさん@お腹いっぱい。:2010/10/31(日) 01:34:05 ID:G3btguv00
あ、コメントの件だけど、スレに貼る時のことね。

> ;Ctrl+Cキーを送信して、クリップボードにコピー
> ;クリップボードにテキストが格納されるまで待機

こういうのはコマンド見りゃわかるし、分からなきゃマニュアル読めばいいだけだしな。



420 :名無しさん@お腹いっぱい。:2010/11/01(月) 15:44:28 ID:+4nWtFOd0
RegExReplace()で置換後文字列にTABを設定したいのですが
どうしたらよいでしょうか?
"\t"とするとそのままの文字が表示されてしまいます

421 :名無しさん@お腹いっぱい。:2010/11/01(月) 15:57:00 ID:adGfZotN0
MsgBox, % RegExReplace("hageTABhageTABhogeTABhoge","TAB",A_Tab)

422 :名無しさん@お腹いっぱい。:2010/11/01(月) 16:15:09 ID:x+9fRJzj0
MsgBox, % RegExReplace("abcdeABCDE", "i)b", "`t")

分かりづらいんだけど、
・ 正規表現パターンの部分は正規表現のルールでエスケープする
・ 置換文字列の部分はAHKのルールでエスケープする

正規表現エンジン自体には置換機能は無く、マッチング機能のマッチ情報を元に
AHK側で実装しているためにこうなっている。

※ ちなみに、正規表現エンジンはUTF-8で動かしているので
  UTF16←→UTF-16 の置換を数度繰り返すため、
  置換が遅いという報告がフォーラムに上がってる

423 :名無しさん@お腹いっぱい。:2010/11/01(月) 16:16:12 ID:x+9fRJzj0
間違っとるw
 UTF-8 ←→ UTF-16


424 :名無しさん@お腹いっぱい。:2010/11/01(月) 16:35:27 ID:+4nWtFOd0
>>421,422
どうもありがとうございました


425 :名無しさん@お腹いっぱい。:2010/11/01(月) 23:16:41 ID:Te9KDCJV0
; このスレ参考にして、DLLの呼び出しのところを弄ったらAutohotkeyLでもFmod.dllが動きました。感謝!fmodce.dllはまだうまくいってないけどw
; http://www.autohotkey.com/forum/topic53012.html

AudioFile =%A_WinDir%\Media\tada.wav
; AudioFile =%A_ScriptDir%\test.wma
; AudioFile =%A_ScriptDir%\てすと.wma
msgbox,%AudioFile%
fMod := DllCall("LoadLibrary", "Str","FMOD.DLL")
DllCall( "FMOD.DLL\_FSOUND_Init@12", "UInt" ,44100, "UInt" ,32, "UInt" ,0x2)
fStream := DllCall("FMOD.DLL\_FSOUND_Stream_Open@16", "AStr",AudioFile, "UInt" , 0x20000, "UInt" ,0, "UInt" ,0 )
Channel := DllCall("FMOD.DLL\_FSOUND_Stream_Play@8", "UInt" ,-1, "Uint" , fStream )
Sleep 5000

DllCall( "FMOD.DLL\_FSOUND_Stream_Stop@4", "Uint" ,fStream )
DllCall( "FMOD.DLL\_FSOUND_Stream_Close@4", "Uint" ,fStream )
ExitApp

426 :名無しさん@お腹いっぱい。:2010/11/02(火) 16:44:10 ID:AEcR182R0
テンキーレスキーボードを購入したはいいもののやはりテンキーが欲しくなり、
scrolllockONでmjkluio789キーをnumpad0〜9に置き換える機能を作りたく

m::
getkeystate, state, scrolllock, T
if state = D
send {numpad0}
return

(scrolllockON時にmをnumpad0にリマップ)
というものを書いてみたのですが、
これではscrolllockオフ時にmの反応がなくなってしまいます

何かうまい方法はないものでしょうか

427 :名無しさん@お腹いっぱい。:2010/11/02(火) 17:01:17 ID:CxeSsQv20
いやいやいや

428 :名無しさん@お腹いっぱい。:2010/11/02(火) 17:03:15 ID:unkGM94V0
>>426
$m::
getkeystate, state, scrolllock, T
if(state = "D") {
send,{numpad0}
return
}
else {
send,m
return
}
return

うちではこれでうまくいった
ただ素直にNumLock使えばいいと思うけど

429 :名無しさん@お腹いっぱい。:2010/11/02(火) 17:50:27 ID:smp1qdhQ0
AHKL使おうぜ

#If GetKeyState("ScrollLock", "T")
M::Send, {Blind}{Numpad0}
J::Send, {Blind}{Numpad1}
K::Send, {Blind}{Numpad2}
L::Send, {Blind}{Numpad3}
U::Send, {Blind}{Numpad4}
I::Send, {Blind}{Numpad5}
O::Send, {Blind}{Numpad6}
7::Send, {Blind}{Numpad7}
8::Send, {Blind}{Numpad8}
9::Send, {Blind}{Numpad9}
#If

430 :名無しさん@お腹いっぱい。:2010/11/02(火) 23:55:24 ID:Ydh/XJv00
以前からahkで作ってexe化したラッパーに画像を関連付けしていまして、
実行時のX1ボタンやX2ボタンの押下状態で実際に実行するアプリを変えられる様にしていたのですが、
最近になってMouseGesture2を導入してからこの動作に問題が出てきました。
実行ファイルをダブルクリックの際に同時にX1やX2ボタンを押していても実行自体がされません。
「動作割り当て」にX1+左クリックやX2+左クリックを一部のアプリで登録しており、
その設定が干渉しているんだなとは分かるのですが、回避することが出来ません。
上記動作で「Default」条件にMG_Abort()とかを定義してみてダメでした。
MG_Abort()を設定した後で、試しに下の様なスクリプトでテストすると
X1やX2を押しながらダブルクリックしても、どちらも0にしかなりません。
a := GetKeyState("XButton1", "P")
b := GetKeyState("XButton2", "P")
Msgbox, X1=%a% X2=%b%
Return

なにか上手い方法はありませんでしょうか?

431 :名無しさん@お腹いっぱい。:2010/11/03(水) 00:18:21 ID:c2w1QMMF0
「なにか上手い方法」ってフレーズはやってんの?

432 :名無しさん@お腹いっぱい。:2010/11/03(水) 00:33:06 ID:Dhc2CwaSP
解決するために、自分では考えられない方法や手順に関して、
いろんな方法があるから、そう書くんじゃね?べつに嫌な気分にはならないけど。

>>430
さきに実行されたスクリプトが、キー入力を吸い取ってしまう。
だから、あとから起動されたスクリプトの入力に降りてこなくなる。

キー入力を吸い取らないように、キー定義の前に ~ をつけるとか、
同時に稼動しても問題ないように、双方を改造するしかない

これをやると、キーの2度押しコードの1回目とかで、無効にすべきキーが平常時のように
流れてしまうなどの弊害も出るので個別に面倒を見る必要がある。

433 :名無しさん@お腹いっぱい。:2010/11/03(水) 00:37:37 ID:NuRYJlWP0
>>430
そのジェスチャツールがボタン押下メッセージ奪って捨てちまうんで、
他のアプリとってはボタンが押されているのは気付きようがない。

でも、まぁ出来なくは無いかも知れない。
ボタン押下を検知できるのは常駐側だけなんで、そいつにお伺いたてればいいんじゃないのかね。
ラッパーExeから常駐スクリプトにSendMessageして、常駐側がGetKeyStateの結果を返す、とか。


434 :名無しさん@お腹いっぱい。:2010/11/03(水) 02:37:13 ID:aLD3JVtQ0
>>428-429
出来ました!
私のキーボードにはnumlockがついてなかったので重宝しそうです

435 :名無しさん@お腹いっぱい。:2010/11/03(水) 09:12:12 ID:dU79cjgJ0
クリップボード文字列の英数を全角→半角に置き換えたい場合に
1文字ごとに1行のスクリプトを書いているのですが
これをまとめて記述する方法はないでしょうか

436 :名無しさん@お腹いっぱい。:2010/11/03(水) 10:48:43 ID:NuRYJlWP0
文字コードでやりゃいいんじゃないのかね。

ToHankakuNumAlpha(str, target="A 1") {
 alpha := RegExMatch(target, "[A-Za-z]")
 num := RegExMatch(target, "\d")
 Loop, Parse, str
 {
  code := Asc(A_LoopField)
  If (alpha) && (code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A)
   out .= Chr( 0x41 + (code - 0xFF21) )
  Else If (num) && (code >= 0xFF10 && code <= 0xFF19)
   out .= Chr( 0x30 + (code - 0xFF10) )
  Else
   out .= A_LoopField
 }
 Return out
}

437 :名無しさん@お腹いっぱい。:2010/11/03(水) 10:52:42 ID:NuRYJlWP0
カッコ間違ってるw

> If (alpha) && ((code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A))

ちなみにAHKLユニコード版でないと動かない。


あと、記号類とかも一気にやりたいならNKF使うといいよ。

438 :名無しさん@お腹いっぱい。:2010/11/03(水) 13:40:20 ID:oeFsMo3E0
((code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A))
このORの右側って左側に含まれてるように見えるんだけどなんで?

439 :名無しさん@お腹いっぱい。:2010/11/03(水) 13:53:29 ID:NuRYJlWP0
うひゃー。左側は (code >= 0xFF21 && code <= 0xFF3A) だな
                  Chr("A")       Chr("Z")

0xFF3B〜0xFF40( [\]^_` )の誤爆があるんで、
A〜Z(0xFF21〜0xFF3A) と a〜z(0xFF41〜0xFF5A)を分けたつもりだったんだが…orz

440 :名無しさん@お腹いっぱい。:2010/11/03(水) 15:13:27 ID:oeFsMo3E0
6文字だけ記号が入ってるのか…意味わかんねw

>>435 まとめて記述、強引に書いてみた

;tarの並び順の通りに、対応して置き換える文字をrepに並べる
tar=ABCabc/¥()123
rep=ABCabc/\()123
Loop, Parse, rep
{
rep%A_Index% := A_LoopField
}

str = ABCDEF/¥(aaazzz)
Loop, Parse, str
{
order := RegExMatch( tar, A_LoopField )
If( order )
out .= rep%order%
Else
out .= A_LoopField
}

MsgBox, %out%

441 :名無しさん@お腹いっぱい。:2010/11/03(水) 21:12:35 ID:n2DwmTc50
>>432,433
アドバイスありがとうございます
SendMessageでスクリプト間の通信は、ちょっと自分には難しそうなので断念しましたw

MouseGesture2で実行中も、X1・X2を押下したままジェスチャのタイムアウトまで
時間を待ってダブルクリックを実施すれば、X1・X2押下の状態がラッパーまで
通知されていたので、試しにスクリプト中の「移動中にタイムアウト」と
コメントが入っている部分をまるっと拝借してX1+左クリックやX2+左クリックの
押下時にMouseGesture.ahk側で実行するようにしたところ、期待通りの動作になりました。

Critical
SetMouseDelay,-1
MG_TimedOut=1
BlockInput,On
Loop,Parse,MG_CurTriggers,_
 If A_LoopField<>
  GoSub,MG_%A_LoopField%_Down
BlockInput,Off
Critical,Off
MouseClick, left

上記がそうなんですが、流行らせるページの管理人さんのスクリプトが高度すぎて
いまいちどうして上手く動作出来ているのかは理解できてません。
ほぼMouseGesture.ahkの956行あたりからそのまんまですが、
MouseMoveの行を削って、最後にMouseClick, leftを追加しました。
(MouseClick, leftを追加しないとトリプルクリックが必要だったので)

お恥ずかしい話ですが、これ何で上手く動いてるのでしょうか?
なんとなくですが、タイムアウトしたらトリガー押下を後からエミュレートしてる?とか考えてますが…

442 :435:2010/11/04(木) 05:00:57 ID:KIq6zHjp0
すみませんがもう1件質問させていただきます
複数行のクリップボード文字列を上下逆順に並べ替えたいのですが
どのようにしたらよいでしょうか

例)
A………
B………
C………
  ↓
C………

B………
A………
行数は可変です
(行数固定なら単純にマッチさせて逆順で置き換えればいいと思うのですが)


>>436 .>>440
ありがとうございました。申し訳ないのですが自分の現在の理解度では
うまくクリップボード文字列に応用させられなかったので
全角半角置換についてはとりあえず今まで通りで行く事にします

443 :442:2010/11/04(木) 05:02:32 ID:KIq6zHjp0
>C………
のあと1行開いてるのはただの打ちミスです。スミマセン

444 :名無しさん@お腹いっぱい。:2010/11/04(木) 05:53:25 ID:0LVLrsnY0
>>442
ttp://sites.google.com/site/autohotkeyjp/reference/commands/Sort

445 :名無しさん@お腹いっぱい。:2010/11/04(木) 14:19:59 ID:xHKLIkA10
command = run,c:\windows\system32\
%command%

こんな感じで、変数の中に命令を代入したいのですが無理なんでしょうか。
別の設定ファイルの条件にしたがって分岐したいのですが、If 〜Elseが何十個も並ぶのが見にくいので変数でまとめてしまいたいんです。

446 :名無しさん@お腹いっぱい。:2010/11/04(木) 14:46:35 ID:H3jxOr4k0
文字列として変数に格納されているコマンドを実行するのは無理。
コマンドに渡すパラメタを変数で指定するならOK(1)
もしくは、サブルーチンラベルを格納してそこにジャンプするようにする(2)
あとはDynamic Function Call とかオブジェクトのメソッドにするとか…

ランチャなら殆どは(1)で済む。
分岐で複数命令を実行したいなら(2)。

(1)
command1 = spider.exe
command2 = C:\Progaram Files\Hoge\hoge.exe
Run, %command1%

(2)
Label = ExecCommand1
If IsLabel(Label)
 Gosub, %Label%
(略)

ExecCommand1:
 Run, foo.exe
 Return

ExecCommand2:
 Run, bar.exe
 Return

447 :名無しさん@お腹いっぱい。:2010/11/05(金) 01:46:51 ID:8BMdsHgy0
>>393
WM機でGUI全画面に出来た。DllCall使うとは思わなかったw

#NoTrayIcon
isFull := False
Gui, +LastFound -Caption
Gui, Add, Button,, Close
Gui, Add, Button,, FullScreen
SetFullScreen(isFull)
Gui, Show, , Sample
WinMaximize
Return
ButtonClose:
 ExitApp
ButtonFullScreen:
 SetFullScreen( isFull := !isFull )
 Return
SetFullScreen(isFull, SIP=True) {
 flags := isFull ? 0x02 | 0x20 : 0x01 | 0x10
 flags |= SIP ? 0x04 : 0x08
 yOffset := isFull ? 0 : 26
 DllCall("SHFullScreen", "UInt", WinExist(), "UInt", flags)
 WinMove,,, 0, yOffset, A_ScreenWidth, A_ScreenHeight - yOffset
}

448 :名無しさん@お腹いっぱい。:2010/11/05(金) 08:20:01 ID:BZJhOZrA0
>>444
ありがとうございます
うまくいきました

449 :名無しさん@お腹いっぱい。:2010/11/05(金) 16:20:08 ID:Mk4Ee8z10
右shiftキーの左隣(かなの「ろ」)ってどう記述すればいいんだろ?
キーヒストリーだと半角のバックスラッシュ(\)って表示されるんだけど
メモ帳で書くと「\」になっちゃう
キーコード指定すれば問題なく使えるから困りはしないんだけど

450 :名無しさん@お腹いっぱい。:2010/11/05(金) 18:04:35 ID:5vdoxt/y0
AHKでGUIアプリを作ったのだけど
そのウィンドウがアクティブなときだけ有効なホットキーを設定したいのだけど
どうしたらいいのだろう?

Gui, +LastFound
WinGet, id, ID
#IfWinActive ahk_id %id%
a::b
#IfWinActive

↑こんな感じでやれたらいいのだけど
ウィンドウの指定で変数が使えないみたいなので
今はウィンドウタイトルの一致で設定してるけど
もっと確実な方法はないものかなぁと

なるべくLの機能は使わずにやれたらうれしいです

451 :名無しさん@お腹いっぱい。:2010/11/05(金) 19:16:17 ID:8BMdsHgy0
GroupAdd, MyGui, ahk_id %GuiId%
#IfWinActive, ahk_group MyGui

or

#If WinActive("ahk_id " GuiId)

452 :名無しさん@お腹いっぱい。:2010/11/06(土) 01:00:45 ID:pkR42kMV0
>>449
文字コードは一緒、フォントの違い

453 :450:2010/11/06(土) 14:59:34 ID:anhitfLM0
>>451
上の方のやつでうまく動かすことが出来ました
下の方はLの機能?うちのでは動きませんでした
どうもありがとうございました

454 :名無しさん@お腹いっぱい。:2010/11/06(土) 16:16:44 ID:iaZAJCAC0
すっごい今更なんですけど
1.0.48.04 - September 25, 2009

Added full support for "if % expression". [thanks kenomby]
っていうのは、具体的にどういうものなんでしょうか?
if (expression)とは別物?

455 :名無しさん@お腹いっぱい。:2010/11/06(土) 17:04:41 ID:5TmD6Zsu0
同じだと思う。

これは文法エラー(コマンドタイプ)
If a > 1 {
 MsgBox, Greater
}

これはOK (式タイプは "{" を行末に付けてもOK)
If (a > 1) {
 MsgBox, Greater!
}

これは通るので式タイプと見さされているっぽい
If % a > 1 {
 MsgBox, Greater!
}


456 :名無しさん@お腹いっぱい。:2010/11/06(土) 17:17:38 ID:iaZAJCAC0
>>455
なるほど、%で式だと明示的に書けるようになった、て事だったんですね
ありがとうございました

457 :名無しさん@お腹いっぱい。:2010/11/07(日) 06:41:25 ID:Lz50T94C0
RegExReplace()でマッチさせる文字列に変数を使う方法はあるでしょうか

iniファイルでマッチする文字列を管理したいのですが
RegExReplace()内では変数がきかないみたいです

458 :名無しさん@お腹いっぱい。:2010/11/07(日) 07:18:51 ID:HkajTAj30
きくように書け

459 :名無しさん@お腹いっぱい。:2010/11/07(日) 08:45:18 ID:o2YjkDD60
>>457
変数使いたければ引用符外で

460 :名無しさん@お腹いっぱい。:2010/11/07(日) 08:59:12 ID:Z89TtGAD0
動きません
できません
やれないみたいです
できないみたいです

って書くよりも、その動かないコードを直接貼り付けたほうが、
ここの住人は働くし、働きやすい

461 :名無しさん@お腹いっぱい。:2010/11/07(日) 17:07:33 ID:AnpKSw1I0
RegExMatchで最後の数字列をマッチさせたいんですが、

RegExMatch(URL, "P)(?<=\D)(\d*)(?=[./\b])", Decimals)

これではfoo/bar1.htmとかfoo/bar1/とかはマッチしてもfoo/bar1を逃してしまいます。
どう書き換えたらfoo/bar1までマッチするんでしょうか

462 :名無しさん@お腹いっぱい。:2010/11/07(日) 17:16:39 ID:mMR28S/J0
それだと数字の後に何か文字が無いとマッチしないだろ。
(\d+)(?=\D*)$
でいいんでないのかね。

関連スレ:

正規表現 Part7
http://hibari.2ch.net/test/read.cgi/tech/1268979408/

463 :名無しさん@お腹いっぱい。:2010/11/07(日) 17:18:45 ID:jvoxFRZ70
SQLite3の.dbを読み込んで値を取得したいんだけどそういうライブラリってもうない?
ttp://www.autohotkey.com/forum/topic12752.html&highlight=sql
がそれっぽいんだけどなぜか消されてる

464 :名無しさん@お腹いっぱい。:2010/11/07(日) 18:14:56 ID:AnpKSw1I0
>>462
ありがとうございます。
(\d+)(?=\D*)$とSplitPathを組み合わせたら何とかできそうです。

465 :名無しさん@お腹いっぱい。:2010/11/07(日) 18:35:54 ID:Qcyi9zfm0
>>463
_L限定でよければ、ADOとか。SQLite ODBC Driverが必要だけど

; Janeの画像キャッシュ名からサイズを得てみる
db := ComObjCreate("ADODB.Connection")
com := ComObjCreate("ADODB.Command")
sDriver := "DRIVER=SQLite3 ODBC Driver;Database=Cache.icx" ; Cache.icxのパス

db.Open(sDriver)
com.ActiveConnection := db
com.CommandType := 1
com.CommandText := "SELECT size FROM headerTable WHERE cacheName=?"

sCache := "foo.vch" ; 調べたいキャッシュの名前
VarSetCapacity(n, 8)
rs := com.Execute(n, sCache)
if (!rs.EOF)
MsgBox,% rs.Fields(0).value
rs.Close(), rs := "", com := "", db.Close(), db := ""

466 :名無しさん@お腹いっぱい。:2010/11/07(日) 18:53:08 ID:dsRx6GHh0
まったくプログラムの知識がないのですが
AutoHotkeyを勉強できる方法・サイトなどを
教えてください

467 :名無しさん@お腹いっぱい。:2010/11/07(日) 19:03:44 ID:+GQYTQEA0
>>1見りゃ大体わかる

468 :名無しさん@お腹いっぱい。:2010/11/07(日) 19:37:57 ID:mMR28S/J0
hoppfrosch wrote:
  What about updating the examples within the AHK_L-Manual to be
  unicode compatible (- or AHK-L compatible at all)?
Lexikos:
  Already done, but the downloads and online documentation hadn't been updated.
  There weren't very many ANSI-specific examples, afaict.

ってな具合なんだけど、AutoHotkeyJp の doc は AHKL 用に最適化してもいいかな?
両方の互換性を考慮して旧docと真docの両方を読み直して、
双方の互換性のことを色々記述するのは結構なな手間なんで。
幸いにも旧docのミラーはあるわけだし

469 :名無しさん@お腹いっぱい。:2010/11/07(日) 20:42:43 ID:jvoxFRZ70
>>465
_L愛用してるので全く問題ないです
ありがとうございました!

470 :名無しさん@お腹いっぱい。:2010/11/08(月) 15:16:48 ID:xOom4MwI0
>>441
>SendMessageでスクリプト間の通信は、ちょっと自分には難しそうなので断念しましたw
SendMessageでスクリプト間の通信をするようになれば、
保守管理がかなりやりやすくなるんじゃないかな。
SendMessageの例は一見するとわからないかもしれないけど、
じっくり眺めてみればわかるはず。

>>468
賛成です。
できれば、AHKLのq and a がautohotkeyのforamに立っていたので、
その内容も紹介してほしいです。

471 :名無しさん@お腹いっぱい。:2010/11/08(月) 20:43:35 ID:0FH6VXhx0
すみません質問です。AHK_L使っていて、GetKeyStateを使って#Ifで
条件分岐させようとしてます。aだけならGetKeyState("a","P") = 1
でいいんですが、すべてのキーが押されてないときもしくは押されてるときって
どう書けばいいですかね?"a" "b" "c"とか列挙してけば何とかなると思ったら
長すぎるよってエラーが出てしまいまして。どうすればいいですかね?

472 :名無しさん@お腹いっぱい。:2010/11/08(月) 21:36:07 ID:7mOlVxlJ0
「全てのキー」って何を意味するの?キーボード上の全部のキーを全部押す状況ってあるの?
それとも「任意のキーが押されている/どのキーも押されていない」ってこと?

具体的な条件を書いた方が早いと思う。

473 :名無しさん@お腹いっぱい。:2010/11/08(月) 21:40:23 ID:0FH6VXhx0
すいません補足ありがとうございます、
「任意のキーが押されている/どのキーも押されていない」
ってことです。
ちなみに今は
xを押してるとき、iを押してるとき、xもiも押されてないときって感じでやってます。

474 :名無しさん@お腹いっぱい。:2010/11/08(月) 21:41:24 ID:t1Vut+p+0
キーボード上の全部のキーを全部押してもそれを検出することは不可能だけどな

475 :名無しさん@お腹いっぱい。:2010/11/08(月) 23:23:54 ID:fTbG/ZI50
Inputをタイマーで回せばいんじゃね

476 :名無しさん@お腹いっぱい。:2010/11/09(火) 00:02:34 ID:EafMnpX40
パフォーマンス的にはどうかと思うけど一応。
通常のタイプには向かない。これ使うといかに自分のキータイプがオーバーラップしているかが分かる。

#If CheckOtherKey()
a::
b::
 MsgBox,, [%A_ThisHotkey%], Some key is already pressed
 return
#If
; どのキーも押されていない時のホットキー定義

CheckOtherKey() {
 static keys1:="abcdefghijklmnopqrstuvwxyz012345678-^@[;:],./"
  , keys2:="vkDC|vk1C|vk1D|vkF3|vkF4|Space|Enter|Backspace|Pause|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12" ;足りないなら追加を
 ListLines, Off
 Critical
 SetBatchLines, -1
 thisKey := RegExReplace(A_ThisHotkey, "^\W+|\s.+")
 Loop, Parse, keys1
  If (A_LoopField != thisKey) && GetKeyState(A_LoopField, "P")
   Return True
 Loop, Parse, keys2, |
  If (A_LoopField != thisKey) && GetKeyState(A_LoopField, "P")
   Return True
}

477 :名無しさん@お腹いっぱい。:2010/11/09(火) 06:07:06 ID:BKm/Xh6z0
>>476
うおお、わざわざありがとうございます。
これから試してみます。
それとキーボード上の全部のキーを全部押す状況ってあるの? ってことですが
それをいわれるとそんな状況ってないOTL
あとは自分で考えて試行錯誤してみます。
どうもありがとうございました!

478 :名無しさん@お腹いっぱい。:2010/11/11(木) 08:19:43 ID:r64aaIcu0
PC上で今(どのくらい)音が鳴っているか調べる事ってできる?

479 :名無しさん@お腹いっぱい。:2010/11/11(木) 10:53:32 ID:OEbUF5hy0
Windows上のボリュームを習得・変更はできるけど、鳴ってる音の音量は無理とはいわないけどきびしいんじゃないか。

無茶をするなら、再生リダイレクトで鳴ってる音を拾ってwave編集ツールなりdllなりで何デシベルかを返してもらうとか。

480 :名無しさん@お腹いっぱい。:2010/11/11(木) 14:44:06 ID:XPhmSHbm0
If()、if()、if、If、IF
Loop、While(1)、While(True)
最近他人のコード見るたびにどれで書くか迷うようになった・・・

481 :名無しさん@お腹いっぱい。:2010/11/11(木) 15:56:33 ID:iPVnRxO4P
そろそろSwitch文が欲しい

482 :名無しさん@お腹いっぱい。:2010/11/11(木) 18:53:48 ID:Ju0UA39+0
なあちょっと聞きたいんだが・・・。
皆さ、GetKeyState("LAlt","P")とかで
LAltが押されてることを調べることってできてるか・・・?
俺のマシンはできないというかなんというか。
これで判定文を書いてもうまく動いてないんだ…。
んでちょっと皆に聞いてみたくなったわけだが。
使ってるのは最新のAHK_Lです。

483 :名無しさん@お腹いっぱい。:2010/11/11(木) 19:46:55 ID:XTe92QsE0
うちは動くなぁ

Loop
 Sleep, 1
Until GetKeyState("LAlt", "P")
MsgBox, LAlt detected

484 :名無しさん@お腹いっぱい。:2010/11/11(木) 22:23:24 ID:r64aaIcu0
>>479
別ツールから取得してるんだけどdllか・・・
正直全く分からんけどいじってみるよ。ありがとう

485 :名無しさん@お腹いっぱい。:2010/11/12(金) 19:42:03 ID:6RBVGTCe0
空白しか含まれない文字列の場合〜っていう条件分岐どうやればいいかな?
こんなの考えたけどなんか無駄な気がする

CheckSpaceOnly(str){
 static Space_Zenkaku := " "
 StringReplace, str, str, %A_Tab%,
 StringReplace, str, str, %A_Space%,
 StringReplace, str, str, %Space_Zenkaku%,
 return str == ""
}
str1 := "  "
str2 := "あ いう え お"
MsgBox, % "「" . str1 . "」は" . ( CheckSpaceOnly(str1) ? "空白だけ" : "空白だけじゃない" )
MsgBox, % "「" . str2 . "」は" . ( CheckSpaceOnly(str2) ? "空白だけ" : "空白だけじゃない" )

486 :名無しさん@お腹いっぱい。:2010/11/12(金) 20:21:00 ID:9mzE66cii
非スペースがあるかないかを見た方が処理が早く終わるよ

InputBox, str, Test, Enter some string,,200,110

If RegExMatch(str, "[^\s ]+")
MsgBox,, RegEx, The string has non-space character!!

nonspace:=False
Loop,Parse, str
If A_LoopField Not in %A_Space%,%A_Tab%, 
nonspace:=True
Until (nonspace)
If (nonspace)
MsgBox,, Loop, The string has non-space character!!


487 :名無しさん@お腹いっぱい。:2010/11/12(金) 20:26:42 ID:9mzE66cii
おっと、ターンに + は要らないな。
"[^\s ]"
で。

携帯でスクリプト打つのはムズいのぉ@AhkCE

488 :名無しさん@お腹いっぱい。:2010/11/12(金) 22:04:19 ID:6RBVGTCe0
>>486
見やすいしどう考えても置換するより速いね
どうもありがとう助かりました

489 :名無しさん@お腹いっぱい。:2010/11/13(土) 02:27:57 ID:AZ03NlDy0
AutoHotkey.exeを管理者権限で起動しないとAutoHotkeyが管理者権限で起動されたアプリケーションを操作できない
でも管理者権限で起動してしまうと今度はAutoHotkeyから起動したアプリケーションを管理者権限を持たないアプリケーションが操作できない

ぬおーMouseGesture.ahkで詰んだ
管理者権限AutoHotkeyからウェブブラウザ開くと他アプリがウェブブラウザへURL送れない

490 :名無しさん@お腹いっぱい。:2010/11/13(土) 02:46:03 ID:LcPhG0DX0
>>489 自分も似たような問題で悩んだ
基本的な解としては、通常権限で常駐するラッパーアプリケーションが必要になる
そしてそいつに AHK から命令を送って起動させる

自分とこでは、AHK から "ファイル名を指定して実行" に起動パスを送るって方法で
対処してかれこれ 1 年になります

491 :名無しさん@お腹いっぱい。:2010/11/13(土) 02:47:08 ID:LcPhG0DX0
書き忘れ
AHK は管理者権限で起動しておきます

492 :名無しさん@お腹いっぱい。:2010/11/13(土) 03:22:59 ID:cLRsHERq0
RunAsじゃだめなの?

493 :名無しさん@お腹いっぱい。:2010/11/13(土) 03:32:42 ID:FgHy8IvW0
もう覚えてないんだけど、RunAs で上手くいかない事例があったんだよね

494 :名無しさん@お腹いっぱい。:2010/11/13(土) 04:18:36 ID:AZ03NlDy0
ごめん色々調べてみたんだけれどファイル名を指定して実行に送るがわからなかった
shell32.dllにDllCallみたいなことするの?
AHKからrun, wscript myrun.js %cmd%でJScript呼び出して中でobjShell.Runしてもだめだった

RunAsはいまいち使い方を理解してない・・
管理者権限で実行するためのコマンドだった気がするけど違ったっけ

495 :名無しさん@お腹いっぱい。:2010/11/13(土) 04:39:49 ID:4LfwRh0P0
自分は英語版 OS + ファイル名に日本語は使わないので
日本語環境では適宜調整が必要かも
ファイル名を指定して実行、基本的な仕組みは以下のとおり

----
Run, shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
WinActivate, Run ahk_class #32770 ; 日本語 OS なら "Run" を変えなきゃかも
Send, ここの文字列が送られる
----

RunAs はユーザーを変更して起動するコマンドです
詳しくはヘルプをどうぞ

http://www.autohotkey.com/docs/commands/RunAs.htm

496 :名無しさん@お腹いっぱい。:2010/11/13(土) 06:13:25 ID:4LfwRh0P0
>>492 理由を思いだした
RunAs はログオン用パスワードが必須なので、
複数のコンピューター/アカウントで使いまわす汎用スクリプト用には使いづらかった

497 :名無しさん@お腹いっぱい。:2010/11/13(土) 08:27:14 ID:20s0PxK60
起動時に username/password を InutBox とかで入力させて変数に入れておけばいいんでないのかね

498 :名無しさん@お腹いっぱい。:2010/11/13(土) 09:04:18 ID:FgHy8IvW0
>>497 うーん、自分はいいけど他人にやらせるのが面倒くさい

499 :名無しさん@お腹いっぱい。:2010/11/13(土) 14:30:10 ID:JY/EQTs6P
manifestで uiAccess="true" を付けて
デジタル署名を付ければOKです。

500 :名無しさん@お腹いっぱい。:2010/11/13(土) 18:38:21 ID:2gUxJxsb0
64bit版と32bit版の二つを動かせば。。

501 :名無しさん@お腹いっぱい。:2010/11/13(土) 19:46:06 ID:+JgI8frP0
質問です。以下のスクリプトは正常に動くのですが、

WinGetActiveTitle, Title
If Title =Add Bookmark
{
処理A
}else{
処理B
}

2行目を
If Title =ブックマークに追加
とすると、ウィンドウタイトルが「ブックマークに追加」でも処理Bに分岐してしまいます。
日本語の扱いの問題と思うんですが、どう回避したらいいんでしょうか。

502 :名無しさん@お腹いっぱい。:2010/11/13(土) 19:57:55 ID:QzR0MBJC0
>>7

503 :489:2010/11/13(土) 21:24:46 ID:AZ03NlDy0
みんなどうもありがとう
結局いろいろ試してみた結果、外部スクリプトでサーバー書いて元スクリプトからメッセージ送って操作する方法で落ち着いた

鯖スクリプトAhkCmdSvr.ahk
#Persistent
WM_USER_GOOGLESEARCH := DllCall( "RegisterWindowMessage", "Str", "WM_USER_GOOGLESEARCH", "UInt" )
Gui, Add, Text, , AhkCmdSvr
OnMessage( WM_USER_GOOGLESEARCH, "AhkCmdSvr" )
return

AhkCmdSvr( wp, lp, msg, hWnd ){
  global WM_USER_GOOGLESEARCH, WM_USER_OPENPATH
  If( msg == WM_USER_GOOGLESEARCH )
    /* ほにゃらら〜 */
}

〜〜〜〜〜〜〜〜〜〜〜〜

元スクリプトMG_User.ahk
GoogleSearch:
  Msg := DllCall( "RegisterWindowMessage", "Str", "WM_USER_GOOGLESEARCH", "UInt" )
  DetectHiddenWindows, On
  PostMessage, %Msg%, , , , % "ahk_id" WinExist( "AhkCmdSvr.ahk ahk_class AutoHotkeyGUI" )
  DetectHiddenWindows, Off
  return

みたいな
常駐スクリプト増えちゃうしメンテが大変だけど


504 :名無しさん@お腹いっぱい。:2010/11/13(土) 21:36:16 ID:20s0PxK60
どっちにしろプロセス分けなきゃいけないし、メッセージ毎に関数分かれてるから
メンテもそれほどじゃないっしょ。

あと、メッセージ番号はユニーク(なはず)なんで、ブロードキャストしちゃってもいいんじゃないのかね

PostMessage, DllCall("RegisterWindowMessage", "Str", "RemoteFunction", "UInt")
 , wParam, lParam
 ,, ahk_id 0xFFFF

505 :501:2010/11/13(土) 22:10:17 ID:+JgI8frP0
>>502
どうもありがとうございます。
AutoHotkey_Lに乗り換えることで解決しました。
MouseGesture.ahkの書き換えがちょっと手間でしたけど、これで快適になりました。

506 :489:2010/11/13(土) 22:26:25 ID:AZ03NlDy0
>>504
たしかに一斉にPostした方が簡素でいいですね
ありがとう

507 :名無しさん@お腹いっぱい。:2010/11/14(日) 11:56:16 ID:Lm9CuBw40
うちの環境で(AHKとAHK_L両方でやってみたんだが)
a::
While GetKeyState("a","P") = 1
{
 If GetKeyState("NumpadLeft","P") = 1 ;
 {
   ToolTip,4
 }
}
return
ってやってaを押しっぱなしにしてNumpadLeftを押すと4が表示されるのはいいんだが
Leftを押したときにも表示されちゃうんだよね。これって皆のところでもそうなのかな。
というか実は仕様だったりするのか?
(英語のフォーラムのバグレポートに下手な文章で書いては見たんだけど、
まずここで聞けばよかった・・・)

508 :名無しさん@お腹いっぱい。:2010/11/14(日) 14:13:19 ID:dGM1bnQ20
Shift+DeleteをDeleteだけにするスクリプトと、
その逆のDeleteをShift+Deleteにするスクリプトを教えて・・・

509 :名無しさん@お腹いっぱい。:2010/11/14(日) 14:17:45 ID:V1AI1Nqz0
>>1

510 :名無しさん@お腹いっぱい。:2010/11/14(日) 14:26:09 ID:RDc+Ku8b0
<わからない9大理由>
1.読まない …参考書などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。

★教えて君五大要素★

1 読まない             (文盲)
2 調べない             (能なし)
3 試さない (発想力欠如のアホ)
4 理解力が足りない        (馬鹿)
5 人を利用することしか頭にない (死ね)

511 :名無しさん@お腹いっぱい。:2010/11/14(日) 16:47:29 ID:rFeDZJnW0
読まないって読んでもないから文盲とは言わないよね

512 :名無しさん@お腹いっぱい。:2010/11/14(日) 18:03:18 ID:w6u4qqYX0
マニュアル類は全体的な整合性で記述してある。
そんなんもの積み上げれば積み上げるだけ、どこから取り付いて良いかさえ分からないのが初心者。

全部読めてしまったら聞く必要もないし。 表現されていないことは聞く必要があるけど。
マニュアルでことが済むようになるのはある程度少し知るようになってからだね。
有り難いのは魅力的な表現力で適切な知識のあるところに誘ってくれる人。

513 :名無しさん@お腹いっぱい。:2010/11/14(日) 21:50:59 ID:JeEPmY310
普通なら、>>1の日本語解説のイントロダクションと使用例を読んでるはずで
キーの指定法の確認として、マニュアルのホットキーの項目を見て目的達成
3〜4ページ読むだけなんだから、通常の人間ならここで質問するまでもないな

514 :名無しさん@お腹いっぱい。:2010/11/14(日) 22:03:39 ID:I0qf8Li00
どっから手をつけたらいいのかわからないからとっかかりを教えて
つーならまあいいんだけど
イントロダクションにすら辿り着けない初心者の人も多そうだし

だが理解する気ゼロのスクリプトクレクレはスルーでいいだろ
この手合いは誘導したって読みゃしないよ

515 :名無しさん@お腹いっぱい。:2010/11/14(日) 23:22:27 ID:YdfLj1Lf0
イントロのページなんだけど、ほぼ流行らせるページのままなんでかなり不親切なんだよな。
本家の現在のチュートリアル( ttp://www.autohotkey.com/docs/Tutorial.htm ) のほうが全然マシなんで、
いつか訳して差し替えてやろうと思ってるけど、「暇な時でいいや」って感じで怠ってる。

そのまま訳すのもどうかとは思ってるんだけど、日本のサイトでのこういう解説って
インストーラのどのボタンを押すとかを手取り足取りスクリーンショット付きで解説してるけど、
あそこまでやるのもどうかと。
多分ほとんど直訳で済ましちゃうんだろうけど。

516 :名無しさん@お腹いっぱい。:2010/11/15(月) 00:11:49 ID:Ncq3tjiq0
解説サイトをはじめから読む気がない人とか
今の解説サイトは不親切だとか、難しくて理解できないとか言う人は
いくら最初に背中を押してやっても、その後まともに使いこなせるようになるとは思えない

517 :名無しさん@お腹いっぱい。:2010/11/16(火) 07:14:27 ID:OycmIebG0
イントロダクションのページより英語のままでも本家のチュートリアル読んだほうが
まずは何をやったらいいのかがわかると思う。


518 :名無しさん@お腹いっぱい。:2010/11/16(火) 17:07:07 ID:MqY3zrOv0
初めてスクリプト書く人には取っ掛かりにくいとは思うから…

1)インストール
2).ahkを新規作成して下3行記入して保存
Space::
MsgBox, Hello
Return
3)実行してスペース押す

この次にイントロダクション、使用例、使用方法を読むって流れがいいと思う

519 :名無しさん@お腹いっぱい。:2010/11/16(火) 17:25:47 ID:MlhI4BWN0
流行らせるページが消えたのは残念なことだ
管理人氏も消すこたあないのになあ


520 :名無しさん@お腹いっぱい。:2010/11/16(火) 17:36:23 ID:IoAFb8q00
nilのほうに人が来ないからね。しょうがないでしょ。

521 :名無しさん@お腹いっぱい。:2010/11/16(火) 18:03:54 ID:GzcWjA+B0
消したところで、はたしてnilを盛り上げるだけの効果はあったのかな?
なんか、全然話題になってないけど。

522 :名無しさん@お腹いっぱい。:2010/11/16(火) 18:22:06 ID:+Bdiu3hH0
nilはあのライセンスじゃ使う気もおこらない

523 :名無しさん@お腹いっぱい。:2010/11/16(火) 18:32:49 ID:X5qMVW8I0
別に盛り上がる必要はなく、バグ報告してくれる報告者だけ確保できればいいってスタンスらしい
AHKページあるとそういう人すら呼び込めなくなる可能性があるので消すってな趣旨のことを書いてた

524 :名無しさん@お腹いっぱい。:2010/11/16(火) 20:47:17 ID:9oiSGtsYP
ウザい要望厨が湧くくらいには周知されたみたいだよ。
跡地のHTMLを書いてFTPで更新しただけにしては上出来だね。

525 :名無しさん@お腹いっぱい。:2010/11/16(火) 21:24:09 ID:xc789aCZ0
>>522
今見てきたけど、何あのギャグみたいなの
マジであのライセンスなのか

526 :名無しさん@お腹いっぱい。:2010/11/16(火) 22:12:22 ID:WUCY9iMX0
Nilのライセンスってどういう文面なん?

527 :名無しさん@お腹いっぱい。:2010/11/16(火) 23:05:27 ID:9oiSGtsYP
AHKを流行らせる協会のようなジョークじゃないの

528 :名無しさん@お腹いっぱい。:2010/11/16(火) 23:08:28 ID:ZG6Jqg0+0
スレ・板違いも程々にな

529 :名無しさん@お腹いっぱい。:2010/11/17(水) 19:12:35 ID:gEJMTsRQ0
PCスタンバイからの復帰後に自動でスクリプト再起動(reload)するにはどうすればいいでしょうか

530 :名無しさん@お腹いっぱい。:2010/11/17(水) 19:20:58 ID:fC7J6xdH0
はやらせるスクリプトで、電源環境の変化を検出するやつがあるから、
それで復帰を検出して、reloadすればいいんじゃね?

余談だが、俺はこれをつかってノーパソでスタンバイ復帰後、
俺しか知らない特定の操作をしてるかどうかのフラグを設けている。

その条件が満たされない場合、第三者が勝手に触ってるとみなして、
強制シャットダウンさせるようにしている。(再起動後はドライブがロックされる)

531 :名無しさん@お腹いっぱい。:2010/11/17(水) 20:11:41 ID:CIQIIh4tP
WM_POWERBROADCAST

532 :名無しさん@お腹いっぱい。:2010/11/17(水) 20:18:11 ID:D4sxjFsA0
http://pc11.2ch.net/test/read.cgi/software/1219130051/971
過去ログはAutoHotkeyJpで手に入る

533 :529:2010/11/17(水) 20:37:55 ID:gEJMTsRQ0
過去ログの電源メッセージ掴む方法で再起動できました
みなさんありがとうございました

534 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:25:53 ID:cqLZPQMy0
解像度を変更するにはどうすればいいのでしょうか

535 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:33:27 ID:0GDKj7/k0
その質問を書く前に、何を試したの?

536 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:53:36 ID:cqLZPQMy0
AutoHotkeyJp で検索かけたところ
取得する方法は書いてありましたが
どの関数で変更すればいいかは見つけることができませんでしたが・・・

537 :名無しさん@お腹いっぱい。:2010/11/18(木) 22:57:06 ID:cqLZPQMy0
Remarkの欄にありましたー
お騒がせしました^^

538 :名無しさん@お腹いっぱい。:2010/11/20(土) 19:25:20 ID:j8B7xYBE0
何か挙動が変なときがある。
FireFoxの XUL/migemo みたいな検索がしたくて、アルファベット押したら検索ボックスにキー入力させるやつ。
(KeyWait しているのは意図的にキーちょっと長めに押した時のみ反応させるため)

#If (Janeのスレビューにフォーカスがある) && (キャレットが表示されていない)
a::
b::
(中略)
z::
 KeyWait, %A_ThisHotkey%, T0.2
 If (ErrorLevel) {
  IME_Set(0)
  BlockInput, On
  Send, ^f
  Send, %A_ThisHotkey%
  KeyWait, %A_ThisHotkey%
  BlockInput, Off
 }
 Return

で、普通なら押したアルファベットが入力されるだけなんだけど、
たまに %A_ThisHotkey% の中身がおかしいのか、
「?hk_id XXXXXXX」
と出力される時がある。? は押下中のキー、XXXXXは数値。

検索文字を消して再入力すればいいだけなんで、あまり実害はないんだけど気持ちが悪い。

環境は XP Pro SP3, Lw61 32bit

539 :名無しさん@お腹いっぱい。:2010/11/20(土) 19:45:01 ID:ETr0zHeM0
漏れ本家AHK使っててAHKLの機能は何も必要ないけど
もう更新されないしセキュリティ的にそろそろAHKLに移行する頃?

540 :名無しさん@お腹いっぱい。:2010/11/20(土) 19:47:50 ID:WaDCz3vl0
逆に本家使い続けるメリットって何かなって思ってみたり

541 :名無しさん@お腹いっぱい。:2010/11/20(土) 20:57:59 ID:PS6yr00q0
メリットってのとは違うけど
歌詞サイトから取得した歌詞をDAPで見栄え良く表示させるために
文字列を整形するスクリプト書いたときのことだけど、
L版だとStrLen()でバイト数じゃなく文字数返されるので困ったことがあった。
んで、オレの知識じゃわからんので結局本家で作ったってのがあったな


542 :名無しさん@お腹いっぱい。:2010/11/20(土) 22:53:42 ID:j8B7xYBE0
ANSI(シフトJIS)でのバイト長を得るだけなら、以下のようにすれば出来るよ。

str = あいうえお
MsgBox, % length := StrPut(str, "CP932") - 1

最後の -1 は終端のヌル文字(0x00)の分

543 :541:2010/11/20(土) 23:30:11 ID:xeNOkRtD0
>>542
ありがとう。
今度似たようなスクリプト書くときそれでやってみます。

544 :名無しさん@お腹いっぱい。:2010/11/23(火) 22:00:49 ID:IXfByVvb0
英語版キーボードでShiftなど + CapsLock をCapsLock押下に割り当てたいのですが
漢字ひらがななどの変換になってしまいうまくいきません。
うまくいった人はいますか?
(CapsLockはESCにしました)
日本語入力での直接入力とひらがなの切り替えは
F1::Send !{sc029}
でやっています

545 :544:2010/11/23(火) 22:54:37 ID:IXfByVvb0
入力言語が日本語の時も英語のときも挙動がおかしいんです


546 :名無しさん@お腹いっぱい。:2010/11/23(火) 22:59:06 ID:PzNDc9ba0
>>544
>4

547 :544:2010/11/23(火) 23:02:15 ID:IXfByVvb0
#CapsLock::CapsLock
で出来ました。日本語英語とも動きます。ありがとうございました。

Winキーは便利ですね。ロック系の組み合わせは
Winキーとだと安定するんでしょうか。


548 :544:2010/11/23(火) 23:10:44 ID:IXfByVvb0
そういえば
+Capslock::Capslock

は英語入力だとちゃんと動きました誤解があるといけないので

549 :名無しさん@お腹いっぱい。:2010/11/24(水) 05:44:17 ID:EXKrqrVJ0
     _人人人人人人人人人人人人人人人_
     >      すごくどうでもいい      <
      ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^^Y^ ̄

               ヘ(^o^)ヘ 
                  |∧   
                 /

550 :名無しさん@お腹いっぱい。:2010/11/24(水) 10:15:12 ID:clQYYJ2Y0
Lock系キーの動作は環境(キーボードやBIOS等)で変動するので他の人の参考にはならない
報告したいならPCやマザボの機種とか細かく環境書かないとほぼ無意味

551 :名無しさん@お腹いっぱい。:2010/11/24(水) 12:09:05 ID:3GvsOHmq0
NumLock状態をデバイス側で管理(?)するトリッキーなのもあったりするしな

あと、OSのロケールとドライバの種類も大事だな

552 :名無しさん@お腹いっぱい。:2010/11/24(水) 12:23:04 ID:qFybzQSQ0
imeの処理を質問します。 変換中の文字列を取得しようと思い、
過去ログで出ていたahk.imeを改変して関数を作りましたが、 うまく動きません。
dllcallを使うために↓のページを利用しました。
http://msdn.microsoft.com/ja-jp/library/cc447983.aspx
http://msdn.microsoft.com/en-us/library/ms905973.aspx
どこを修正すればよいのでしょうか。

IME_ConposStr_GET(WinTitle="A") {
VarSetCapacity(stGTI, 48, 0)
NumPut(48, stGTI, 0, "UInt") ; DWORD cbSize;
hwndFocus := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
? NumGet(stGTI,12,"UInt") : WinExist(WinTitle)

VarSetCapacity(st2GTI, 4000, 0)
NumPut(4000, st2GTI, 0, "UInt") ; DWORD cbSize;

DllCall("SendMessage"
, UInt, DllCall("imm32\ImmGetCompositionString"
, Uint,hwndFocus
, Uint,"GCS_COMPSTR"
, Uint,&st2GTI
, Uint, 4000)
, UInt, 0x0283 ;Message : WM_IME_CONTROL
, Int, 0x0005 ;wParam : IMC_GETOPENSTATUS
, Int, 0) ;lParam : 0

return stGTI
}


553 :名無しさん@お腹いっぱい。:2010/11/24(水) 12:50:01 ID:3GvsOHmq0
結論から言うと無理。
IMEを使ってるプロセス以外からは入力コンテキストのハンドル(hIIMC)が取れていない。

というか色々間違ってる。動くわけがない。

・SendMessage の投げ先の HWND がおかしい、
 というかImmGetCompositionString の戻り値はバッファ長で HWND ではない。
・ImmGetCompositionString の第1引数は hIMC
・UINT型なのに文字列渡して意味ない ( GCS_COMPSTR := 0x8 )

554 :名無しさん@お腹いっぱい。:2010/11/24(水) 15:46:41 ID:qFybzQSQ0
そうですか、そもそも無理でしたか。。。
スレ汚し失礼しました。

555 :名無しさん@お腹いっぱい。:2010/11/25(木) 02:26:07 ID:rn8lHsHU0
時間ごとにクリックさせていく自動化をしたいんですが、
初心者にはAHKかUWSCどっちがオススメですか?
AHKのほうが、軽い気がするし、拡張性あるのでよさそうに見えるのですが
英語できない人間にはコードを知ったりするのが難しそう。
おしえてください。

556 :名無しさん@お腹いっぱい。:2010/11/25(木) 03:37:46 ID:B3EUHNYZ0
時間ごとにフリスク食べさせていく自動化をしたいんですが、
初心者にはWindowsかMacどっちがオススメですか?
Linuxのほうが、軽い気がするし、拡張性あるのでよさそうに見えるのですが
程度低い人間には教えたところで使ったりするのが難しそう。
おしえてください。

557 :名無しさん@お腹いっぱい。:2010/11/25(木) 07:36:13 ID:y2EVuGP90
その程度なら、重い/軽いってのを気にする程のもんじゃないな。
習うより慣れろで、拡張性云々よりも自分の手に馴染むかどうかだよ。
どっちもネットで落としたらすぐ使えるんだし、とにかく試して決めればいいだけかと。

558 :名無しさん@お腹いっぱい。:2010/11/25(木) 13:45:03 ID:b/Fe70Ol0
UWSCだと、動作記録→スクリプト保存→改変がすごくスムーズ
一からスクリプトを書くより、この流れのが初心者には楽
ヘルプが完全日本語
Loop処理の命令がいろいろあるが、初心者には1つだけの方がいいかもしれない


AHKはコマンドの引数に要求されるのが変数と文字列の両方あるので、混乱するかも
メッセージボックスはUWSCに比べてすごく書きやすい
ホットキーでの再生/一時停止/再開が格段に使いやすい
AHKのほうが軽い気がする
繰り返し何かさせるにはTimerがものすごく便利

559 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:18:07 ID:upNaKri80
一行にに命令は無理ですか?

560 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:25:16 ID:upNaKri80
二個の命令ということです

561 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:27:34 ID:GS7QIIVh0
それは、なんのために?

562 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:35:03 ID:upNaKri80
dvorak を全部autohotkey で実現することにしたので
大文字小文字の命令なでは一行にまとめたいのです
見やすそうなので

563 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:37:35 ID:upNaKri80
すいません
dvorakでひら仮名入力するのは久しぶりなので
誤字がひどいです

564 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:39:11 ID:y2EVuGP90
このスレの住人が作ってるAHK製の DvorakJ ってのがあるよ

565 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:40:38 ID:upNaKri80
Jじゃないdvorak を使う予定なのと
キーアサインを個人的にもう少しいじるので

566 :名無しさん@お腹いっぱい。:2010/11/25(木) 16:42:45 ID:upNaKri80
dvorakJ を参考にして書けそうですありがとうございました

567 :名無しさん@お腹いっぱい。:2010/11/25(木) 21:51:43 ID:/ePGl0Rw0
超初心者の俺にはAutoMouseが最強
誰かwin7でも使えるようにしてくれw

568 :名無しさん@お腹いっぱい。:2010/11/26(金) 00:38:07 ID:QMspvyb80
>>558
レスどもです。こうやってみると
UWSCのほうが初心者にはいいみたいですね。
AHKは一時停止とかもできるのか、いいなぁ

569 :名無しさん@お腹いっぱい。:2010/11/26(金) 10:33:39 ID:9n4Aw3tm0
(ネタ) 個人的に気になった公式フォーラムのトピック

http://www.autohotkey.com/forum/topic61379.html
 スクリプト生成ツール(主にホットキー)。SS:http://img25.imageshack.us/img25/9767/scwinc4yz0htdrt.png
http://www.autohotkey.com/forum/topic58183.html
 簡易WinSockライブラリ(L用あり)
http://www.autohotkey.com/forum/topic63813.html
 Aeroライブラリ(GUIのαブレンド表示etc)
http://www.autohotkey.com/forum/topic63844.html
 正規表現テスター。SS:  http://www.autohotkey.net/~DerRaphael/screenshots/simple_regex_tester-0-2-0.png
http://www.autohotkey.com/forum/topic32238.html
 GDI+ライブラリ。GUIで図形描画画像加工。図形の画像ファイル化も可。
http://www.autohotkey.com/forum/topic63817.html
 [AHKL] AHKLのFAQ集
http://www.autohotkey.com/forum/topic59581.html
 [AHKL] 構造体を簡単に使えるように
http://www.autohotkey.com/forum/topic64303.html
 [AHKL] クラス定義ファイルからコード自動生成。メソッド内はAHKの文法が使える。↓は例。
  class Person
   Name := "unknown"
   construcor(uname){
   this.Name := uname
  }
  endclass
http://www.autohotkey.com/forum/topic59336.html
 MIDI制御しようぜ!
http://www.autohotkey.com/forum/topic61120.html
 [AHKH] 3キー以上のコンビネーションキー

570 :名無しさん@お腹いっぱい。:2010/11/26(金) 22:55:52 ID:QMspvyb80
http://www.autohotkey.com/forum/topic61120.html
 [AHKH] 3キー以上のコンビネーションキー

これ、非常にやりたいです。だれかおしえてください。
英語読めない。ファイル落としてもAHK_Hみたいなファイルないし。
実行ファイルを入れ替えるだけでできるかとおもったんですが。

571 :名無しさん@お腹いっぱい。:2010/11/27(土) 00:29:26 ID:ob+MxG6x0
>>510

572 :名無しさん@お腹いっぱい。:2010/11/27(土) 01:16:20 ID:W7SkcZM30
3キー以上ってストロークのが使いやすくね?
1&2&3&4より1&2-3-4のが。
それよりも1&2でMenu出して選ぶのが好みだけど

573 :名無しさん@お腹いっぱい。:2010/11/27(土) 01:17:32 ID:2w5sBfUa0
正規表現テスター使ってみようかな?どうしようかな?どきどき

574 :名無しさん@お腹いっぱい。:2010/11/27(土) 07:55:18 ID:3/D/v94v0
>>567
AutoMouseは最強だが最弱でもある

575 :名無しさん@お腹いっぱい。:2010/11/27(土) 10:04:11 ID:pD5RvHK90
かなり初心者の質問です

常時有効にしたいキー群Aと、SuspendコマンドでOn/Off切り替えしたいホットキー群Bを
2つのファイルに分けて常駐させているのですが
ひとつのファイルにホットキーをまとめるにはどう書くとスマートですか?

576 :名無しさん@お腹いっぱい。:2010/11/27(土) 10:09:45 ID:Uf+ZWNJH0
Lの#if

577 :名無しさん@お腹いっぱい。:2010/11/27(土) 10:39:16 ID:pD5RvHK90
>>576
まとめられました!
すばやい御回答に感謝です

578 :名無しさん@お腹いっぱい。:2010/11/27(土) 13:45:26 ID:W7SkcZM30
main.ahkスクリプトで、
sub.ahkのサスペンドやポーズなどを制御するには、どうするのが確実ですか?
1つだけならsubにサスペンドのホットーキー書いておいてmainでSendすればいいのですが
複数同時にしようとすると上手く切り変わらなかったりshift押しっぱなどの症状がでます


あとexe化したスクリプトaaa.exeが常駐している状態で
aaa.exe -sをコマンドラインで実行した場合、
引数「-s」を取り扱う方法はありますか?

579 :名無しさん@お腹いっぱい。:2010/11/27(土) 14:09:15 ID:WBxcGV1Q0
>>578
ホットキーの待ちうけがあるスクリプトを複数連携させると、いろいろ面倒なことになるから、
メインスクリプトでキーの待ちを全部書いておき、必要に応じてホットキー無しのサブを
起動させるほうが安定すると思う。

連携のコツは、ファイルのINIやレジストリなどで管理情報を書いておき、
どのプロセスがいつ読んでも今の状況を外部から把握できるようにする。

引数は %1% %2% とかで読める。
引数の数は %0%

580 :名無しさん@お腹いっぱい。:2010/11/27(土) 15:12:32 ID:zpDfRvWa0
>>578
前者:
SendMessage と OnMessage 使うのが確実。>>503-504 あたりも参照

DetectHideenWindows,On と WinMenuSelectItem 使ってもいいがトグルしかできない。
(頑張れば出来なくもないけど、SendMessageのほうが遙かに楽)

後者:
#SingleInstance, Ignore を指定してやらんといけないんで結構面倒。
自分と同じパスのAHKのプロセス探して、無い場合は自分が常駐して、
ある場合はそいつに引数を通知するって処理を自分で実装する必要がある。

引数(文字列)の受け渡しは面倒かも。>>220-221 あたりを参照。
スイッチ・フラグみたいなのを通知するだけなら Send/PostMessageだけでいい。

581 :名無しさん@お腹いっぱい。:2010/11/27(土) 16:43:46 ID:W7SkcZM30
>>579, 580 ありがとうございます
WinMenuSelectItemは盲点でした
トグルだけでいいので目的は達成できそうです
SendMessage…いい加減手を出そうかな


あと>>185 今さら自己解決。常識かもしれないけど。
IfGreater, 1, 0, MsgBox, True
とか
If 1 < 1
{
MsgBox, False
}
のコマンド型だとそのまま使えた

582 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:39:06 ID:Qeh4ib5M0
どの命令が実行されても
一緒に実行される命令ってかけますか?
他の命令に手を加えずに

583 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:42:31 ID:Yagn/8sw0
言葉が足りなすぎ、やり直し

584 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:50:21 ID:Qeh4ib5M0
a::x
b::y
c::z
.
.
.
とあるときに
どっかに書きくわえる形で
a,b,c, が押されるたびにMsgBox 2 
が実行されるようにすることは可能ですか?

585 :名無しさん@お腹いっぱい。:2010/11/28(日) 00:57:44 ID:dagFP8IG0
できるけど、リマップのままじゃ無理。

586 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:05:15 ID:Qeh4ib5M0
a::Send x
ならどうでしょうか

587 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:10:34 ID:dagFP8IG0
色々やり方はあるけど、共通関数噛ますとかすりゃいいだけ。

a::MySend("x")
b::MySend("y")
c::MySend("z")

MySend(key) {
 ; ここに共通前処理
 Send, %key%
 ; ここに共通後処理
}


588 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:17:24 ID:Qeh4ib5M0
a::Send xはいじりたくないんですけど…

589 :名無しさん@お腹いっぱい。:2010/11/28(日) 01:27:59 ID:dagFP8IG0
じゃあこれ。説明はめんどいからしない。

OnMessage(0x8000, "MsgListener")

#If Aspect()
a::x
b::y
c::z
#If

Aspect() {
 DllCall("PostMessage", "Ptr", 0, "UInt", 0x8000, "UPtr", 0, "UPtr", Object(Object("key", A_ThisHotkey)))
 Return True
}

MsgListener(wParam, lParam) {
 obj := Object(lParam),keyName:=obj.key,ObjRelease(obj),obj:=""
 Tooltip, % keyName
}



590 :名無しさん@お腹いっぱい。:2010/11/28(日) 12:45:04 ID:zhsZ/e2N0
説明は欲しいんですけど…

591 :582:2010/11/28(日) 13:19:30 ID:Qeh4ib5M0
僕は説明要りません。DllCallは昔だいぶ使ったので大体わかります。

592 :名無しさん@お腹いっぱい。:2010/11/28(日) 13:36:07 ID:TB9SoGj60
大体なのかよ

593 :582:2010/11/28(日) 13:45:53 ID:Qeh4ib5M0
それは各命令を調べれば完全にわかるだろう、ということです
>>589様、ともかくありがとうございました


594 :名無しさん@お腹いっぱい。:2010/11/28(日) 14:17:36 ID:dagFP8IG0
ま、一応。
Postしてるのは #If の処理時間を短くかつ非同期にするため。
hwnd=0x0 の窓に投げると自スレッドのキューにメッセージ溜められるんだけど、
コマンドのPostMessageだと窓が見つからなくて動作しないから DllCall にしてる。
lParamでキー名を格納したオブジェクトのポインタを渡して、後で復元。参照回数は適宜操作。

595 :名無しさん@お腹いっぱい。:2010/11/28(日) 16:21:50 ID:TB9SoGj60
1.0.90.00 - November 27, 2010

Fixed: UrlDownloadToFile in Unicode builds on Windows < 7.
Fixed: Upper-ANSI characters were sent as Alt+0 in ANSI build.
Fixed: File.Pos was incorrect after attempting to read past EOF.
Fixed: Escape sequences in #If expressions and static initializers.
Fixed: ClipboardAll sometimes crashed the script with certain formats.
Fixed: Transform HTML calculated length incorrectly for &#NNN; entities.
Fixed: VarSetCapacity now correctly ignores #MaxMem for ByRef variables.
Fixed: FileAppend,,file.txt set ErrorLevel=1 even on success.
Fixed: Match length was miscalculated for RegEx callouts with the P) option.
Integrated Sean's improvements to number handling in COM interop.
Optimized RegExReplace and RegExMatch in Unicode builds.

596 :名無しさん@お腹いっぱい。:2010/11/28(日) 17:29:38 ID:cklndLbS0
本家が久々の更新か、と思ったらL


597 :名無しさん@お腹いっぱい。:2010/11/28(日) 19:48:54 ID:dagFP8IG0
ロードマップがでてるな。
>>264,279 は v1.0 まで据え置きのようだ。

その他 v1.0 では
JSON をサポートするように
obj[key] .= "hoge" が利用できるように
etc.

v1.1では
SplitStr() : 割結果を配列オブジェクトで返す
RegExMatch() : 拡張してサブマッチをオブジェクトの配列で返すように
etc.

http://www.autohotkey.com/misc/AutoHotkey-v2.htm
v2.0 では
互換性を捨てて多くの改善を行う方針。
If の評価式は*必ず*括弧でくくるように
= 演算子は常に評価のみで、代入は := のみに
→ IfEqual, IfGreater, EnvSet, EnvAdd などは廃止、汎用の「式」を使え
その他少なくない数ののコマンドが廃止・非推奨となるので、関数版を使え
#ifWinActive, などは存続

なんだか AutoIt v3 に近くなる印象。
でも何だか中途半端な気もする。

598 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:05:23 ID:w6mdWw0S0
どなたかpythonからCOM経由でautohotkey.dllを操作なさっていませんか。
フォーラムを見るとCOMを経由せずに使っている人はいるみたいなのですが
COMの方を勉強として操作してみたいです
AutoHotKey.dll with python
http://www.autohotkey.com/forum/post-397787.html
COM経由で使っている方がいらっしゃったら、できれば簡単なguiを作成するソースを見せて下さいませんか。
お願いします。

599 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:21:17 ID:qIqsfbVy0
python 使いじゃないので JScriptで。

Dllのパスをカレントにしてから(もしくはフルパス指定で)COM登録しておく
> regsvr32.exe AutoHotkey.dll

[test.js]
var ahk = new ActiveXObject("AutoHotkey.Script");
ahk.AHKtextDll("Gui,Add,Text,,This is test script\nGui,Show,,Test\nExit\nGuiClose:\nExitApp");
while (ahk.ahkReady()) {WScript.Sleep(100);continue;}

600 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:50:55 ID:iduOQBml0
>>599
ありがとうございます。
ですが、うまく動きません

regsvr32.exe AutoHotkey.dllを実行し
(http://www.autohotkey.net/~tinku99/ahkdll/ のHotkeyIt提供Win32wのバイナリを使いました)
test.jsにvar ahk以下の3行を保存して
test.jsを実行したら、

エラー「文字が正しくありません。」
コード「800A03F6」
ソース「Microsoft JScript コンパイル エラー」と表示されました

test.jsからautohotkey.dllを呼び出すときの設定が違うということなのでしょうか

601 :名無しさん@お腹いっぱい。:2010/11/29(月) 00:58:59 ID:iduOQBml0
書き忘れてました。
test.jsをutf-8 BOM で保存してます。
utf-8 non BOM だと「オートメーションサーバーはオブジェクトを……」というエラーメッセージが表示されます

602 :名無しさん@お腹いっぱい。:2010/11/29(月) 01:26:20 ID:yDa054Vi0
>If の評価式は*必ず*括弧でくくるように
この間全部括弧なしに書き直すか迷ってた
マジで書きなおさなくてよかった・・・

>= 演算子は常に評価のみで、代入は := のみに
これは良いね
使ってていつもすごい違和感があった

603 :名無しさん@お腹いっぱい。:2010/11/29(月) 01:37:32 ID:qIqsfbVy0
wscript/cscript エンコードの自動判別は無い。デフォルトはANSIで、"/u"付けると UTF-16LEでもいける。
wsf形式にすればxml文書なんでBOM付きUTF-8でも平気。

というかもうスレ違いだな。
http://msdn.microsoft.com/ja-jp/library/cc364501.aspx
お前ら、wsh使ってますか? Part7
http://hibari.2ch.net/test/read.cgi/win/1190548945/

604 :名無しさん@お腹いっぱい。:2010/11/29(月) 01:51:51 ID:iduOQBml0
>>603
やはりautohotkey.dllを呼び出す前の問題ですね
調べてみます
ありがとうございました

605 :名無しさん@お腹いっぱい。:2010/11/30(火) 02:26:28 ID:KflSdiS50
v2では定数定義が欲しいなぁ。
プリプロセッサみたいな機構はあるんだし、出来なく無いだろうけど。
ロード時に文字列置換するだけでもいいんでどうにかならんかなぁ。

#Const WM_MOUSEMOVE 0x200
とか
#Alias Convert vk1Csc079
#Alias NonConvert vk1Dsc07B

606 :名無しさん@お腹いっぱい。:2010/11/30(火) 02:57:35 ID:3CxBAMPr0
はやく v2 でないかなぁ。変態言語仕様が少なくなるのは多少残念ではあるけど。

607 :名無しさん@お腹いっぱい。:2010/11/30(火) 16:32:57 ID:iK+6tuOn0
今のペースだと3年ぐらい先じゃね?

608 :名無しさん@お腹いっぱい。:2010/12/01(水) 18:34:55 ID:NDFf6KsK0
現状でもやはり
^!F4::send,
みたいなモディファイアキーを二つ含んだ
ショートカットキーは無理なのでしょうか?

609 :名無しさん@お腹いっぱい。:2010/12/01(水) 18:58:42 ID:0fD5HQmh0
煽る気は全くないが、
その程度ならすまんが解説よむなり自分で試すなりしてくれ。

610 :名無しさん@お腹いっぱい。:2010/12/01(水) 19:21:32 ID:NDFf6KsK0
すいません

611 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:44:21 ID:SmAml2Jb0
コマンドラインから検索ワードとして文字列を渡して検索結果をGUIのEditに文字列で表示するスクリプトつくっているのですが
既にスクリプトSearch.ahkが起動している場合、どうやって引数を渡せばいいんでしょうか?

612 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:49:04 ID:0fD5HQmh0
>>578,580と似てるけど、GUI持ってるなら #SingleInstance, Off にして
起動済みのGUI窓にControlSetText して自分は終了でいいんでないの。
場合によっては検索ボタンとかも押してやる。

613 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:50:42 ID:wAyzbnAk0
>>611
search.ahkの重複起動をOKにする

search.ahk起動時、search.ahkがタスクリストにいるか、process,existなどで確認する
 いたら、前から起動してるほうへ情報を転送し、自分は何も処理しないで終了する
 いなければ、普通に処理実行

614 :名無しさん@お腹いっぱい。:2010/12/01(水) 20:54:45 ID:SmAml2Jb0
>>611,613
なるほど!
起動時にIfWinExistでそのスクリプトのGUIが存在したらControlSetTextして終了させる方法でやってみます
ありがとうございました

615 :名無しさん@お腹いっぱい。:2010/12/02(木) 00:35:04 ID:Rh2fuBic0
マウスカーソル(矢印ポインタ)を上下左右に動かすのって出来ますか?
文字カーソルはできるみたいなのですが、
矢印のポインタを簡単でも(飛び飛びでも)いいので
動かせられればと思っているのですができません。
ESC & I::MouseGetPos, imamousexpos, imamouseypos
MouseMove, %imamousexpos%, %imamouseypos% +30, 50
return
こんなんじゃやっぱだめですね



616 :名無しさん@お腹いっぱい。:2010/12/02(木) 00:53:14 ID:i/61lWiF0
そのコマンドは引数に 式 が使えるから % は要らない

というか、式では %〜% は使わない

617 :名無しさん@お腹いっぱい。:2010/12/02(木) 01:09:14 ID:UAjdpY5y0
ESC & I::
MouseGetPos, imamousexpos, imamouseypos
MouseMove, %imamousexpos%, % imamouseypos +30, 50
return

こうしたら動く
複数行の場合は「::」の後すぐ改行する
MouseMoveの引数には文字型が要求されてるので、「% 」で変数型にする
ちなみに第4引数にRを指定すれば色々いらなくなって1行で書ける

Esc & i::MouseMove, 0, 30, 50, R

618 :名無しさん@お腹いっぱい。:2010/12/02(木) 01:15:00 ID:UAjdpY5y0
と思ったら式でもいけるのか
さすがahkって感じの仕様だなw

>>612
これは良ヒントになりました
見えないGUIコントロール作ってそれで引数を扱えば楽そうだ

619 :名無しさん@お腹いっぱい。:2010/12/02(木) 03:14:23 ID:Rh2fuBic0
>>616
レスありがとうです。いまだに%の意味わからなかったりしますが
>>617
レスありがとうです。
ちゃんと動きました。そしてちゃんとマニュアルのmousemoveのところに
第4引数ちゃんと書いてありますね。。。見落としてました。
結局まだ"% imamouseypos +30"の意味わからないけど、どうして片方サイドは%いらないのか

620 :名無しさん@お腹いっぱい。:2010/12/02(木) 03:21:37 ID:i/61lWiF0
https://sites.google.com/site/autohotkeyjp/reference/Expression

621 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:30:14 ID:lMBihXac0
a=5
b=20
c=a*b
の3つの変数があったとして(cは文字列)
cの見た目通りの数式を変数zに代入することはできますか?

z:=a*b の代入を何らかの方法で実現して、
MsgBox, %z%
で100とさせたい
四則演算、括弧、乗数の数式に対応したいです

622 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:36:01 ID:lMBihXac0
やりたいこと書いた方がいいかな。
簡易のテキスト形式の電卓を作ろうと思ってます

メモ帳とかで下の用に書いてあったとき
cの値をMsgBoxに表示するようなもの
a=5
b=20
c=a*b

623 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:44:22 ID:HuepG7kf0
Eval のある言語使っちまえばいい

a=5
b=20
c=a*b

sc := ComObjCreate("ScriptControl")
sc.Language := "JScript"
script = var a = %a%;var b = %b%;
sc.ExecuteStatement("var a=" . a . ",b=" . b)
MsgBox, % sc.Eval(c)

624 :名無しさん@お腹いっぱい。:2010/12/03(金) 02:55:37 ID:lMBihXac0
>>623
なんぞwww
全く分からんけど、どう見ても危険ではないのでとりあえず実行した
これがオブジェクトの力か…ありがとう

625 :名無しさん@お腹いっぱい。:2010/12/03(金) 08:59:54 ID:5Gc2iTLq0
AHK書いてる人はエディターって何使ってる?
最近入力ミス多いから強調表示や自動補完使いたくなってきた
あとラベル/関数の折りたたみとか・・

626 :名無しさん@お腹いっぱい。:2010/12/03(金) 10:36:02 ID:XpcRAbsy0
SciTE4AutoHotkeyを使いなさい

627 :名無しさん@お腹いっぱい。:2010/12/03(金) 15:03:38 ID:5OU/dmDK0
Vimでautohotkeyのsyntax使うとか

628 :名無しさん@お腹いっぱい。:2010/12/03(金) 16:34:27 ID:dp0e8QIV0
Extrasフォルダの中身を
秀丸とかemeditorとかの強調表示や入力補完に
自動で変換してくれるスクリプトが過去スレにあったはず

629 :名無しさん@お腹いっぱい。:2010/12/05(日) 05:57:42 ID:apuWTJGbP
現在カーソルが合っているファイル名を取得して
Everythingという検索ソフトに渡すスクリプトを書きたいのですが
いきなり詰まってしまったので質問させて下さい
カーソル位置のファイル名を取得するにはどのようにしたらよいでしょうか?

630 :名無しさん@お腹いっぱい。:2010/12/05(日) 07:51:29 ID:xmV0cvJD0
カーソルって何?
何にせよ、とりあえずコピーしてクリップボードを使うのをまず考える。
具体的でないので話はここまでしかできん。

631 :名無しさん@お腹いっぱい。:2010/12/05(日) 11:59:04 ID:vNjl5PbN0
>>625
xyzzyに↓のAutohotkey-modeを入れて
http://www1.bbiq.jp/rohinomiya/products/index2.html#xyzzy
自分の使いやすいように改造(LispよくわからんのでWiki等を参考になんちゃって改造)と
キーワード追加して使ってる。

それと↓を参考にカーソルがある単語のヘルプページ(autohotkey.chm)を開くようにしたりとか。
http://www7a.biglobe.ne.jp/~hat/xyzzy/reference.html
ちなみにF1で>>1の Autohotkey日本語ヘルプ(chmファイル)、
Ctrl+F1 で Autohotkey付属のヘルプ(英語) が開くようにしてる。

632 :629:2010/12/06(月) 06:44:42 ID:hnUEFu2IP
>>630
わかりにくくてすみません
マウスカーソルがあっている
あるいはエクスプローラ上でフォーカスが当たってるファイルという意味で書きました


上記と関係なくもうひとつ別な質問なのですが
zip版とインストーラ版のAutoHotkey_Lって動作が違うのでしょうか?
クリップボード文字列をRegExReplaceで置き換えるスクリプトを書いたのですが
zip版では思ったとおりの挙動になるのですが
インストーラ版だとクリップボードが複数行の場合におかしな挙動になります

633 :名無しさん@お腹いっぱい。:2010/12/06(月) 12:12:49 ID:fZb/YarP0
マイナーバグのアップデートならアナウンスすらしないでZIP版を差し替えることはよくある。

ってかね。アンタ毎回情報少なすぎ。
必要な情報を書かなきゃ意味ないよ

・不具合があると思われる双方のバージョンやファイルサイズ、
・不具合のあるスクリプト(の一部)

とかが何も書いてないじゃん。再現出来なきゃ何の意味もないわけ。

634 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:31:56 ID:EymQ4/t20
>>625にちょっと関連してるのですが
エディタの入力補完などの動作を
ahkのスクリプトを書く用に、ahkで実現してる人っていますか?
できたら晒して欲しいのですが。

635 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:43:20 ID:EymQ4/t20
あ、あともう1件お願いします
ahkの変数名に使えない文字は
!"#$%&'()=^~|\/.,<>?[]{}`:;+-*
だけだと思うのですが、これで合ってますか?

でこれを除外しようと下の様に正規表現を記述した場合にエラーになるのですが
どのように記述すれば除外できるでしょうか
MsgBox,% RegExMatch( "dummy", "^[^!""#\$%&'\(\)=^~|\\/\.,<>?[\]\{\}`:;\+-*]*$" )

636 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:55:25 ID:4Oq7NvUg0
Intelisense (Auto-Complete)
http://www.autohotkey.com/forum/topic65804.html

変数に @ と $ は使える。制御記号(0x01〜0x1f, 0x7f)やANSI以外の文字は使えない。
正規表現はもっと勉強しろ。デバッグを人任せにするなよ。
てか、使える文字の補集合でやった方がいいよ。

637 :名無しさん@お腹いっぱい。:2010/12/06(月) 19:58:48 ID:4Oq7NvUg0
ちなみに俺はEmEditorで、登録したキーワードと単語( [a-z_]+ )が候補に挙がるようにしてる。
パラメタを忘れがちな SplitPath などはスニペットを利用。

638 :名無しさん@お腹いっぱい。:2010/12/07(火) 10:39:12 ID:zvvcqx8v0
Windowsキーと組み合わせて動く動作(Win + Tabや、Win + f、Win + bなど)を発行したいのですが、うまくいきません。
これは不可能なことなのでしょうか?
;;右Winキーに#{tab}や#b
>#h::
>#l::
Send,#{tab}
Return

RWin & vkE2::Send,#b

639 :名無しさん@お腹いっぱい。:2010/12/08(水) 01:38:47 ID:SmSQysPC0
ウチでは無問題

640 :名無しさん@お腹いっぱい。:2010/12/08(水) 12:09:22 ID:VcOlgpGs0
capslockのオン・オフを一つのキーで切り替えることはできるのでしょうか?
send,+{capslock}と書くと、capslockが有効なままになってしまい、オフにできません。
日本語配列のキーボードを使っています。
方法があればご教示ください。

641 :名無しさん@お腹いっぱい。:2010/12/08(水) 12:56:07 ID:SmSQysPC0
GetKeyState("CapsLock", "T")
SetCapsLockState

642 :名無しさん@お腹いっぱい。:2010/12/08(水) 18:35:25 ID:Rl2PxqqE0
>>641
ありがとうございます!

643 :名無しさん@お腹いっぱい。:2010/12/10(金) 07:06:35 ID:wMKLk7qO0
>>10って、#InstallKeybdHook 入れりゃすむんじゃね?
少なくともうちの環境だと今のところ問題ないみたい
(WindowsXP、SetPointあり、その他の>>10のツールは入っていない)

644 :名無しさん@お腹いっぱい。:2010/12/10(金) 13:24:36 ID:xUq+0fTHP
>>643
もう2年以上この問題で戦ってるが、それ入れても出てるよ。

最近気づいたことは、XPだと頻繁に出るが、
Win7-64bitで32bit版AHKだと、ほとんど出ない気がする

645 :名無しさん@お腹いっぱい。:2010/12/10(金) 18:09:40 ID:0KP6m/KB0
キー発行するツールをAHKに一本化したら全く発生しなくなった。

646 :名無しさん@お腹いっぱい。:2010/12/11(土) 04:39:28 ID:PnojymHCP
過去ログになんかあった気がしたけど見つけた

AutoHotkey スレッド part9
http://pc12.2ch.net/test/read.cgi/software/1253888736/477

477 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/11/29(日) 04:49:46 ID:JxrO7rna0
使い始めたばかりでテンプレにある症状と同じかはわかりませんが
Ctrlキーが押しっぱなしになる原因が自分の場合ですがわかりました

~RCtrl:: a ;文字は特に何でも良い
~Ctrl:: a

上のどちらかををキーマップをしてるときに
外部のアプリケーションからCtrlキーが送られるとCtrlキーが押しっぱなしになるみたいです
自分の場合では、マウ筋からウィドウを閉じるCtrl+Wキーを送ったり
CLCLからCtrl+Vでの貼り付けを行うと必ず再現します
RCtrlキーを押すと直ります


647 :643:2010/12/11(土) 06:18:39 ID:jpHQD/GQ0
>>644
そうなんだ…それは残念。XPと比べると、Vistaや7は負荷処理とかシステムまわりがしっかりしてるってわかるよね。

>>645
できればそれが理想なんだけど…。

>>646
それが>>10に反映されているのではないかと。


実は>>10より先にAHKの本家のフォーラムで下のスレを見つけて、
ttp://www.autohotkey.com/forum/topic202.html

#HotkeyModifierTimeout の説明を見てきたのだけど(見てきたのは英語版)、
http://sites.google.com/site/autohotkeyjp/reference/commands/-HotkeyModifierTimeout

実はキーボードフック使えばいいってことがわかって、
http://sites.google.com/site/autohotkeyjp/reference/commands/-InstallKeybdHook

#InstallKeybdHook を試したらすっぱり収まったので、>>10にも書いてないから報告しに来た次第。>>643

上の本家AHKのフォーラムには他の解決策も書いてあるので、参考にしてみてくだちい。

648 :名無しさん@お腹いっぱい。:2010/12/13(月) 01:56:49 ID:Es4TJgvU0
つまり、AHKが原因の場合はフック使えばOKってことか。
ただ、全部が全部AHKのせいって訳でもないでしょ。

こんなもんかなぁ。なんだか解説ページ丸写しのような感じになってしまった。
誰か修正してくれ。

Q:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A: AHKが原因の場合とそうでないときがある
 ○AHKが原因の場合
  AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
  一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
  しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
  物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
   例) ^W::Send, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
  これを回避するためには、以下の方法をとればよい:
   ・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
   ・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
   ・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
     #HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
  なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
  発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。

 ○AHK以外が原因の場合:
  環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
  ・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)
  ・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている


649 :名無しさん@お腹いっぱい。:2010/12/13(月) 02:52:51 ID:ZbF5xdwX0
例) ^W::Send, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

これしばらく試してみたけど、全然押しっぱにならない

650 :名無しさん@お腹いっぱい。:2010/12/13(月) 03:01:21 ID:/fTKrGtDP
ttp://sites.google.com/site/autohotkeyjp/reference/commands/Send
なんのためのリファレンスか

651 :名無しさん@お腹いっぱい。:2010/12/13(月) 11:38:58 ID:7SYbC0/l0
いつのまに流行らせるページに代わるリファレンスがっ!

652 :名無しさん@お腹いっぱい。:2010/12/13(月) 20:29:46 ID:8AC0xyIUP
>>651
>>1

653 :名無しさん@お腹いっぱい。:2010/12/14(火) 00:41:01 ID:LF4MqoFR0
誘導してもらってきました。

ふつうお絵かきソフトって↓こういうのがあるんだけど
http://up3.viploader.net/ippan/src/vlippan174622.jpg
今使ってるソフトはそういうのがなくて
ショートカットキーで操作するようになっているんです。
こういうのはAUTOHOTKEYで作りたいので誘導してもらったんですが
何をどうすればいいですか?

とりあえずSmartGUI Creatorをインストールして
好きなボタンやテキストを張り付けれる所までは分かったのですが
この先はなにをすればいいですか???


654 :名無しさん@お腹いっぱい。:2010/12/14(火) 00:48:32 ID:mE3nMEcW0
ツールが吐きだしたスクリプトを編集して、ボタン工藤時のイベントを記述する。
具体的には Gui,Add の G オプションで呼ばれるサブルーチンを変更して、
キーを送るようにする。

GUIツールで処理内容を自動で作ってくれるようなツールは無く、
テキストエディタでスクリプトを編集することになる。

655 :名無しさん@お腹いっぱい。:2010/12/14(火) 01:20:57 ID:LF4MqoFR0
ありがとうございます。
たとえばノートパッドをお絵かきソフトだと仮定して
ノートパッドが起動中、作ったウィンドウが
ノートパッドの上にあって
消しゴムのボタンをクリックするとeキーを押したのと同じに
したいんですが
「ノートパッドが起動中、作ったウィンドウが
ノートパッドの上にあって」っていうのはどういうスクリプトになりますか?
以下を作ってみたんですがノートパッドにeキーが入力されませんでしたOTL

Run,C:\Windows\System32\notepad.exe

#IfWinActive ahk_class Notepad
Gui, Add, Button,gEkey x2 y1 w30 h30 +Center, 消しゴム
Gui, Add, Button,gZkey x32 y1 w30 h30 , 元に戻す
Gui, Add, Button,gSkey x2 y31 w30 h30 , 筆大
Gui, Add, Button,gDkey x32 y31 w30 h30 , 筆小
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h65 w113, New GUI Window

return

Ekey:
send, e
return

#IfWinActive

656 :名無しさん@お腹いっぱい。:2010/12/14(火) 01:43:55 ID:mE3nMEcW0
意図がよく分からんな。
> 具体的には Gui,Add の G オプションで呼ばれるサブルーチンを変更して、
をきちんと理解汁。

適当なサンプル作ったんで、リファレンスと格闘してくれ。寝る。
※ 全角空白はタブに置換すること

Run, NotePad.exe,,,pid
GroupAdd, NotePad, ahk_pid %pid%

Gui, +ToolWindow +AlwaysOnTop
Gui, Add, Button, gButton1, 消しゴム
Gui, Add, Picture, gButton2, %A_WinDir%\System32\main.cpl
Gui, Show,, ツールバー

WinWait, ahk_group NotePad
WinWaitClose
ExitApp

Button1:
 WinActivate, ahk_group NotePad
 Send, Button1 Action
 Return
Button2:
 WinActivate, ahk_group NotePad
 Send, Button2 Action
 Return
GuiClose:
 ExitApp

657 :名無しさん@お腹いっぱい。:2010/12/14(火) 02:02:28 ID:LF4MqoFR0
>>656
ふぉおおおおおありがとうございます!!!

658 :名無しさん@お腹いっぱい。:2010/12/14(火) 02:33:33 ID:CoT/vCy00
すみません
指定したフォルダ内のファイルやフォルダをすべて別フォルダにコピーさせたいです
autohotkeyjpのFileCopyDirとFileCopyのサンプルがやりたいことに近いのですが、
できれば、コピーできなかったフォルダ名だけじゃなくて、ファイル名も表示させるようにしたいです
どうすればいいでしょうか

659 :名無しさん@お腹いっぱい。:2010/12/14(火) 20:11:20 ID:hXUKQlMc0
ワイルドカードでコピーするんじゃなくてLoop回して1個ずつコピーして失敗したら変数に追記格納って感じだな

660 :名無しさん@お腹いっぱい。:2010/12/14(火) 21:15:43 ID:LF4MqoFR0
あるソフトをautohotkeyで操作して
そのソフトのsave画面を表示させて
その後手入力で任意のファイル名で保存後
その保存したファイル名と場所を
AutoHotkeyで使いたい場合どうすればいいでしょうか?

661 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:28:14 ID:GTQHc5deP
あるソフトをautohotkeyで操作して
そのソフトのsave画面を表示させて
その後手入力で任意のファイル名で保存後
その保存したファイル名と場所を
AutoHotkeyで使えるようにコーディングすればよい。


自分で手を動かさない丸投げ思考なやつに教えるものはない。

662 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:29:37 ID:A3pwe1vg0
なら黙ってればいいのに

663 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:35:41 ID:CoT/vCy00
>>660
>>661が言っているように、>>660の発言を逐一autohotkeyの処理に置き換えればいい
>>1のautohotkeyjpのすぺてのページに目を通せば、どれもクリアできることが分かるはず

664 :名無しさん@お腹いっぱい。:2010/12/14(火) 23:36:34 ID:CoT/vCy00
>>659
地道にそうするのがよさそうですね。そうします。

665 :660:2010/12/14(火) 23:56:50 ID:LF4MqoFR0
最初考えたのは一旦あるソフト上で保存したファイルを
一番新しいファイルとして検索して見つけて
場所と名前を取得するというのだったけど
それじゃあ検索範囲が広すぎかなっと思ったんです。
すいませんでした。

666 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:44:13 ID:Kt8/zhW60
保存用のダイアログを作ってみたんですが
保存用ダイアログに任意の名前を入力後(実際にはまだ存在しないファイル)
その名前が取得できたかMsgBoxでfilenameを表示してみると
ファイルの名前じゃなくて「filename」と表示されてしまいました・・・
どうすれば任意の名前が取得できるのでしょうか?

FileSelectFile, filename , s 18, %A_Desktop%, 保存, *.psd
MsgBox, filename

667 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:47:07 ID:2PALRNNI0
ワロタ

668 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:53:55 ID:Kt8/zhW60
うわあああああ
ごめんなさい、じこかiketusimasita
変数を%で括るんですねOTL
お騒がせしてすいませんでしたOTLOTL

669 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:54:13 ID:yMWXaAcw0
MsgBox, %filename% でどうよ

670 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:57:42 ID:Kt8/zhW60
>>669
ありがとうございますOTL
ほんとうにすいませんすいませんOTL

671 :名無しさん@お腹いっぱい。:2010/12/15(水) 01:58:20 ID:QiBc/8qO0
>>668
落ち着けw

672 :名無しさん@お腹いっぱい。:2010/12/15(水) 04:50:48 ID:uDZWl52i0
俺が読解力がないのかなぁ。
>>660 は 手取り足取り教えてくれって意味じゃなくて
SaveAs のダイアログで表示されているフォルダパスと、
自分が入力したファイル名をどうやって取得すればよいのか?
って事なのかと思った。

ファイル名は Edit の値をループでとり続ければ何とかなりそうだけど、
フォルダパスは COM の Shell.Application でも列挙されないし、
お手上げだなぁと思ってレスしなかったけど、

673 :名無しさん@お腹いっぱい。:2010/12/15(水) 10:12:24 ID:K7ifDNQ20
>>672
save画面に直接入力せずに、
一旦autohotkeyのguiを経由して入力するよう
ワンクッションをかませればいいんじゃないかな

674 :名無しさん@お腹いっぱい。:2010/12/15(水) 12:53:20 ID:UTAZpm2d0
>>672
本人が何を考えてるかまでは、外部の人間はわからんからな。
やりたいことだけ列記して、途中経過をまるで提示しなかったのが、敗因だろう。

このスレって、コードを途中まで書いておけば添削してくれる人は多いじゃん。
添削するほうも、相手のやりたいことがコードを見ればある程度わかるから
添削もやりやすいし。

一番だめなのが「あるソフトを使って・・・」「あるダイアログが出るのを判別して・・・」
みたいな、具体的に書かないやつ。

ソフトによって、判別方法や抜き取る方法もいろいろあるから、
その書き方だと、一般論でしかアドバイスできない。
で、一般論なら>>1に全部書いてあるから、それを読めって話になる。

675 :名無しさん@お腹いっぱい。:2010/12/15(水) 13:39:26 ID:9dk3tbX90
ぼかすのは多分、汎用性のない質問は「そんなソフト知らねーよ」で
よけられてしまうかもって認識があるからだろうね
実際はこのスレの場合は具体的に書いた方が回答得られやすいんだけど

676 :名無しさん@お腹いっぱい。:2010/12/15(水) 13:49:40 ID:hSLBzqwE0
たぶんID:LF4MqoFR0 = ID:Kt8/zhW60だから、
ahkの保存ダイアログで保存名を入力させて名前とフォルダを取得してから
あるソフト上のsave画面で取得した名前で保存する方針にしたんだろう

さすがにMsgBoxはもう間違えないけど
文字列要求のとこに変数直書きはよくやるな

677 :名無しさん@お腹いっぱい。:2010/12/16(木) 01:24:07 ID:QxRhxRqQ0
>>676
そうですそうです。
ID:LF4MqoFR0 = ID:Kt8/zhW60です。
どうもすいませんでした。
お陰様で653っぽい物が出来て
凄く嬉しいです。
ありがとうございました。

678 :名無しさん@お腹いっぱい。:2010/12/16(木) 01:40:50 ID:G6HskWsx0
まぁ思い通りにいって何よりだ。
言っちゃあ何だが、レスの書き方の割には、こういうツールが「あう」人なんかな。

679 :名無しさん@お腹いっぱい。:2010/12/17(金) 02:30:37 ID:mZ6sTKIl0
配列変更(月配列みたいな)にAHKを使っているのですが、
プレフィクスシフト(前置きシフト)にInputコマンドを利用していると、
素早く入力したときにInputコマンドが無視されてしまいます
(Inputを発生させるキーを押した後間髪入れずに次のキーを押すと、本来シフトがかかるべき字が無シフトで出力される)。
こんな感じ
Input,cha,L1 T1
If cha = q
Send,ぁ
Else If cha =w
Send,ひ
Return


高速入力に耐えうるプレフィクスシフトを実現させるには、どうすればいいと思いますか?

680 :名無しさん@お腹いっぱい。:2010/12/17(金) 03:02:53 ID:wC0+uF2B0
簡略化するにしても最低限動くコードをのせるべき

681 :名無しさん@お腹いっぱい。:2010/12/17(金) 10:26:58 ID:5cCJOUOx0
配列ってバッファのことじゃなくて親指シフトみたいなキーボード配列のことか
シフトッつってんのに何で << とか >> とか使ってないのかひとしきり悩んでしまったわ

682 :名無しさん@お腹いっぱい。:2010/12/17(金) 11:04:50 ID:hx3s6Lm70
>>679
SetBatchLines, -1
これはすでに試した?

683 :名無しさん@お腹いっぱい。:2010/12/17(金) 17:39:29 ID:P5lecqAA0
キーボードのLを左クリックと全く同じ動作にしたいんですが
押しっぱなしにすると連射してしまいます。

本家のマニュアルにあった prevent auto repeat feature 云々のも
うまくいきません。
どうすればよいでしょうか

684 :名無しさん@お腹いっぱい。:2010/12/17(金) 21:22:15 ID:KwFTZzW10
>>683
>>674


685 :名無しさん@お腹いっぱい。:2010/12/17(金) 21:30:22 ID:cgOLXu8V0
プレフィクスシフトって要は2ストロークキーだよな。それならホットストリングでどうにかならんもんなの?
自前で実装するにしても、Inputはあまり使わない方がいいんじゃないかなl・・・

興味本位で作ってみた。実用に値するかは分からんけど。
コードはかなり圧縮したんで明日になったらもう分からないと思うw

KeyMap := Object()
KeyMap["A", "B", "C"] := "あ"
KeyMap["B"] := "い"
KeyMap["C", "B"] := "う"

#If MultiStroke(A_ThisHotkey, KeyMap)
a::
b::
c::
d::
; 0〜9, A〜Z, 記号類とかも列挙するのがいいけど割愛
 MultiStroke()
 Return
MultiStroke(p*) {
 static @, $ := Object()
 If ( p.MaxIndex()==2 ) {
  $.Insert(p[1]) ,@:=p[2][$*]
  Return IsObject(@) ? True : (@!="" || $.MaxIndex()>1) ? $.Remove(1,999) :
 }
 Send, %@%
}

686 :名無しさん@お腹いっぱい。:2010/12/17(金) 21:53:30 ID:b5jwzq1x0
l::
send, {lbutton down}
keywait, l
send, {lbutton up}
return

687 :名無しさん@お腹いっぱい。:2010/12/17(金) 22:16:33 ID:P5lecqAA0
>>686
ありがとうございます


688 :名無しさん@お腹いっぱい。:2010/12/17(金) 22:29:28 ID:P5lecqAA0
>>686
それがうまくいかなくて今やり直したら出来ました
別の部分が干渉してしまって意図通り動かなかったようです
ご迷惑をおかけしました

キーボードでトラックポイントの代用にするのが目標です

689 :名無しさん@お腹いっぱい。:2010/12/18(土) 00:12:34 ID:H5XJeDzh0
過去ログに同じようなネタがなかったか?
てか1スレ中に1回くらい同じようなのが出てきてる気がする

690 :名無しさん@お腹いっぱい。:2010/12/18(土) 00:17:16 ID:0ch6r2JY0
スレ住人ってね、代謝するんだよ。
一所に澱んでる人にはわからないのかもしれないけど。

691 :名無しさん@お腹いっぱい。:2010/12/18(土) 00:22:23 ID:02zrIcbq0
キーボードのキーをマウス代わりにするっつーことは、
キー押下でマウス移動やクリック・ホイール等を発行するんだろうけど、

複数のホットキーで KeyWait 等のスレッド止まる系を使ってて
それらのキーを同時押ししちまうと「擬似マルチスレッド」の問題が出るわな(>>8)
稀な状況でなく、ドラッグ&ドロップとかの通常操作で起きうる。

キー状態見て発行すりゃスレッドは止まらない

L::Send, % !GetKeyState("LButton") ? "{LButton Down}" :
L Up::Send, % GetKeyState("LButton") ? "{LButton Up}" :


692 :名無しさん@お腹いっぱい。:2010/12/18(土) 01:10:51 ID:H5XJeDzh0
>>690
車輪の再発明をしたいのならそれでいいけど
そうじゃないのなら、過去ログとかフォーラムを見れば、て事なんだが
なんでそうひねれくれるんだかねぇw

693 :名無しさん@お腹いっぱい。:2010/12/18(土) 03:08:41 ID:I9lLbkYX0
スクリプト系スレだと車輪の再発明という言葉が頻発するけど、
練習の手段としてなら他人がすでに別のプログラムで実現させていることを自分でコードを書いて動かしてみるのありだと思うんだよ
言語の習得のためなら、車輪の再発明大いに結構。
他人のコードを最小限に改良して最短距離で目的を達するというのも、上級者の姿勢としては正しいとは思うのだが。

694 :名無しさん@お腹いっぱい。:2010/12/18(土) 03:40:36 ID:YRq3DcX80
質問者に言ったんでしょ

695 :名無しさん@お腹いっぱい。:2010/12/18(土) 11:17:35 ID:fDb9jWB20
自分は見覚えある質問だと思ったら過去ログコピペするなり誘導するなりしてる

同じ質問に繰り返し答えるのはたしかに無駄だが
ご新規さんに質問前に過去ログ全部当たってこいってのは難しいっしょ、dat落してるし

696 :名無しさん@お腹いっぱい。:2010/12/18(土) 12:02:18 ID:DOiq4BEN0
あるキーを単独で押したときと、他のキーと組み合わせたときで
挙動を変えることはできますか?

たとえばコントロールキーを単独で押したときにはIME切り替え、
他のキーと組み合わせたときは通常のコントロールキーとして
使う場合です。

697 :名無しさん@お腹いっぱい。:2010/12/18(土) 12:07:59 ID:02zrIcbq0
できる。>>1 の解説サイトの「ホットキー」のページを熟読汁

698 :名無しさん@お腹いっぱい。:2010/12/18(土) 12:54:39 ID:H5XJeDzh0
過去ログ > AutoHotkeyJp の ファイル置き場

699 :名無しさん@お腹いっぱい。:2010/12/19(日) 23:34:11 ID:YdlzniqV0
AutoHotkey_LでMouseGesture2動かないのね。。。

700 :名無しさん@お腹いっぱい。:2010/12/19(日) 23:47:19 ID:YdlzniqV0
ごめん、文字コードの問題だった。

701 :名無しさん@お腹いっぱい。:2010/12/22(水) 12:28:51 ID:PASuoIfi0
>>648
亀だけどテンプレ作成してくれてありがとう

702 :名無しさん@お腹いっぱい。:2010/12/22(水) 12:52:37 ID:mSgH4AEH0
NGワード 「wたくさん」 で見落としてた・・・

703 :名無しさん@お腹いっぱい。:2010/12/22(水) 13:26:00 ID:AyqCA+yg0
Send, {w 20} とかに変えようぜ

704 :名無しさん@お腹いっぱい。:2010/12/23(木) 11:22:01 ID:rc9kDE7x0
vk1Dsc07B & `;::
は出来るんだけど
vk1Dsc07B & `:::
は失敗する…

セミコロンってただエスケープするだけじゃだめなの?

705 :名無しさん@お腹いっぱい。:2010/12/23(木) 12:03:47 ID:FyuAHgHk0
>>704
正攻法かしらないけどコロン(:)もvkBAsc028って書き換えてみては。
効かなかったらKeyHistoryで確認。

706 :名無しさん@お腹いっぱい。:2010/12/23(木) 12:27:14 ID:pS+FmOIa0
AutoHotkeyLでWindowsキーを無効化したいのですが, どうも安定しません

以前は
LWin::return
で単独押下のみ無効になり, Win+Rのような修飾キーとしては機能していたと思うのですが,
試してみたところWinキー自体が無効になり, Rが素通りして押されてしまいます

LWin::return
LWin & r::Send,#r
とすると, Win+Rだけでなくその他(Win+Eなど)のショートカットも有効になってしまいます

2つめのやり方で最初の予定通りの動作をするとはいえ, 記述通りの動作でないのはどうも気持ちが悪いです
なんとか記述通りに動作するようにできないでしょうか

スクリプトは上記のみで試しに動かしました
またWinきーだけでなく, ctrl, alt, shiftでも同じ挙動になりました

707 :名無しさん@お腹いっぱい。:2010/12/23(木) 16:34:56 ID:YEZz5tUt0
URLDownloadToFileでタイムアウトの時間指定できませんか?

708 :名無しさん@お腹いっぱい。:2010/12/23(木) 18:04:38 ID:8U7e0FmW0
>>706
手元のLのv1.0,90.00と本家のv1.0.48.05 では同じ挙動だけど。
Lなんで以下のようにすればいいんでないのかね。

LWin::Return
#If GetKeyState("LWin", "P")
c::
d::
e::
f::
l::
r::
Send, #%A_ThisHotkey%
Return


>>707
できない。
L使ってるなら、COMオブジェクトのWinHttpRequest使えばいい。
http://www.autohotkey.com/forum/viewtopic.php?p=377651#377651
WinHttpRequestオブジェクトに SetTimeout メソッドがある。
http://msdn.microsoft.com/en-us/library/aa384106.aspx

709 :名無しさん@お腹いっぱい。:2010/12/23(木) 19:18:02 ID:SAQo2ylQ0
LWin::
IfWinExist, ahk_class CabinetWClass
WinMove, 0,0
return

これでエクスプローラー一つだけ動かせるのですが、他のも二つ…三つと動かせないでしょうか?
class一緒だと無理ですかね
ご教授お願いします



710 :名無しさん@お腹いっぱい。:2010/12/23(木) 20:00:36 ID:8U7e0FmW0
WinGet, 〜, List でマッチするクラスのウィンドウリストを取得して、
Loopでリストの全部に対して操作する

711 :名無しさん@お腹いっぱい。:2010/12/23(木) 20:22:46 ID:SAQo2ylQ0
>>710
エクスプローラーのみなのですが、一個一個別々の指定することも可能でしょうか?

712 :名無しさん@お腹いっぱい。:2010/12/23(木) 21:32:16 ID:8U7e0FmW0
「別々」なのをきちんと識別出来るならなんでも出来る

713 :706:2010/12/23(木) 23:29:29 ID:pS+FmOIa0
>>708
無事期待通りに動かすことができるようになりました
ありがとうございます

714 :名無しさん@お腹いっぱい。:2010/12/24(金) 07:23:57 ID:wTht2qDt0
おいーっす

1.0.91.01 - December 24, 2010
Fixed: Unexpected results with File.Write(Str) after text-reading.
Fixed: UTF BOM check caused unexpected results in files without a BOM.
Fixed (ANSI): Parsing loops and File.ReadLine() treated Chr(255) as EOF.
Fixed (Unicode): RegExReplace errors where the UTF-8 and UTF-16 lengths differed.
Fixed: Disabling the last hook hotkey breaks Input.
Added: Simple optimization for RegExMatch/Replace.

715 :名無しさん@お腹いっぱい。:2010/12/24(金) 07:41:45 ID:wTht2qDt0
1.0.91.00 - December 21, 2010 >>2
All changes in this release are COM-related.
Added: ComObjError now returns the previous setting.
Added: ComObjType(co) and ComObjValue(co).
Added: ComObjMissing().
Added: ComObjArray() and basic SAFEARRAY support.
Added: "Take ownership" parameter for ComObjParameter().
Changed: Values passed to COM functions via ComObjParameter are no longer freed in the process of calling the function.
Changed: ComObj.x() now falls back to PROPERTYGET if member 'x' is not found. This fixes for-loops for some objects.
Changed: Wrap unhandled variant types in an object rather than returning integer value.
Changed: Manage VT_UNKNOWN/VT_ARRAY lifetime automatically, by default.


716 :名無しさん@お腹いっぱい。:2010/12/24(金) 17:51:24 ID:54jsSI2o0
>>Added: Simple optimization for RegExMatch/Replace.
これはどういう事なんだぜ?
パフォーマンス上がったよ!ってこと?

717 :名無しさん@お腹いっぱい。:2010/12/24(金) 20:36:09 ID:oxnd8wbr0
うん

718 :名無しさん@お腹いっぱい。:2010/12/26(日) 13:22:20 ID:EkDm87BS0
おいーっす >>2
1.0.91.02 - December 26, 2010
COM: Added protection against NULL IDispatch/IUnknown pointers.
COM: Skip QueryInterface for IDispatch if VT_DISPATCH is passed explicitly.
Minor fix for maintainability: obj.field := var now correctly yields SYM_STRING, not SYM_OPERAND.

719 :名無しさん@お腹いっぱい。:2010/12/26(日) 15:12:23 ID:6hOGDCCX0
なんかいっぱい来てる。訳してるけど意味分かんないやw

720 :名無しさん@お腹いっぱい。:2010/12/26(日) 17:21:43 ID:F0U6I1I70
もう一から作り直してほしいわ
ロードマップができてるんだから、さっさとやってほしい・・・

721 :名無しさん@お腹いっぱい。:2010/12/26(日) 17:49:23 ID:qXdh5l150
何様w

722 :名無しさん@お腹いっぱい。:2010/12/26(日) 17:54:24 ID:WOMl3rAf0
しばらくうp様子見だなこりゃ

723 :名無しさん@お腹いっぱい。:2010/12/28(火) 08:48:12 ID:KFswdrIui
そういえば >>264,279 が治ってるな
._NewEnum() が通るようになったんで For ループで回せる。

724 :名無しさん@お腹いっぱい。:2010/12/28(火) 12:12:46 ID:+dIE31QE0
質問させてください。WinXP(SP4)を使ってます。
WinGet, t , Transparent, A
Msgbox, t = %t%
で不透明度を表示しようと思ったんですが、どのウィンドウも初期値はカラッポなんですが
そういうものなんでしょうか?、
Winsetで一度不透明度を変更すると、その後は数値が入ったままになってくれるんですが…

725 :名無しさん@お腹いっぱい。:2010/12/28(火) 12:40:57 ID:Az9PJ5Wa0
>>1のドキュメントくらい読もうな
>Transparent
> ウィンドウの不透明度。
> 0が完全に不可視、255が完全に不透明。
> 半透明でないときは空になる。

726 :名無しさん@お腹いっぱい。:2010/12/28(火) 13:49:15 ID:+dIE31QE0
>>725
すみません、なんとなく理解できてきました
上の例だとtの値が空の時はOFF(完全に不透明)って認識でいいんでしょうか

727 :名無しさん@お腹いっぱい。:2010/12/28(火) 17:07:00 ID:QOm1KSMYi
そう
ってか、説明文の繰り返し以上のことはないよ

728 :名無しさん@お腹いっぱい。:2010/12/28(火) 21:51:04 ID:BjqNOkmn0
>WinXP(SP4)
いつでたんだよ

729 :名無しさん@お腹いっぱい。:2010/12/28(火) 22:11:27 ID:Ncy9EMdP0
AutoHotkey_L
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

warningっていうのが来てる

730 :名無しさん@お腹いっぱい。:2010/12/28(火) 23:40:32 ID:uuWro9y80
流行らせるページの管理人さんがつくってくれた
ファイルランチャーFileLaunch.ahk
みたいなので新しいのありませんか?

2006年の6月で開発おわっちゃったみたいだし。
こういうコマンド入力型のランチャーほしい。
今はCraftlaunchつかってるけど。
だれかおしえて

731 :名無しさん@お腹いっぱい。:2010/12/28(火) 23:43:35 ID:gn+zc+S70
散々既出だけど、質問が後を絶たないからでしょ。
きちんと読まないのが悪い。

732 :名無しさん@お腹いっぱい。:2010/12/28(火) 23:44:07 ID:S6rq6GAKP
あるならそのまま使えばいい話では?

追加の機能が欲しいなら、自分で実装するか、
やり方をこのスレで聞くかすればいい。ただし丸投げは禁止。

733 :名無しさん@お腹いっぱい。:2010/12/29(水) 00:07:12 ID:ySt2TvF70
AHK_Lで実行ファイル化するとき、マニフェストファイルを埋め込むように
管理者権限つきの状態で実行ファイル化することはできないでしょうか?

734 :名無しさん@お腹いっぱい。:2010/12/29(水) 04:03:32 ID:2Ry+MeKa0
1.0.91.03 - December 27, 2010
Fixed: RegEx callout subpattern vars - broken by v1.0.90.00.

735 :名無しさん@お腹いっぱい。:2010/12/29(水) 04:35:22 ID:2Ry+MeKa0
COM便利すぎワロス
コマンドラインも引数付きで取得できる。

Gui, Add, ListView, x2 y0 w400 h500 grid, Process PID|Name|Command Line
For process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
LV_Add("", process.ProcessId, process.Name, process.CommandLine)
Gui, Show,, Process List

736 :名無しさん@お腹いっぱい。:2010/12/29(水) 07:44:32 ID:QCC1ySsS0
FileLaunch.ahkが難しくて使えない。
/scanall でエンター押してもうんともすんとも言わない。
scan.txtにF:\^ ってしてるんだけど。
最初つまづいて打開できないぐらいなら、止めたほうが
いいんだろうけど、フォルダ検索とかかなり便利そうで使いたい。

737 :名無しさん@お腹いっぱい。:2010/12/29(水) 12:38:26 ID:ohwA7N190
指定のファイルをazpaintで開いて上書き保存して閉じるという
ものを作ってみたのですが
Send,,^sの実行が間に合わないままウィンドウが閉じられてしまいます
どうしたらよいのでしょうか?
(ウィンドウが閉じている間にSend,,^sが実行されたと思われるピンっという音がする)


#WinActivateForce
Process, Exist,AzPainter2.exe
azpid = %ErrorLevel%
if azpid = 0
{
;azpaintの場所を書く
 Run,C:\Users\ユーザー名\Desktop\azpt209\AzPainter2.exe %A_ScriptDir%\ttt.psd,,,azpid
}
WinWaitActive,ahk_pid %azpid%
;azpaintでの上書き保存のショートカットキー
Send,,^s
;ショートカットキーを押したら保存中のウィンドウが出るので
;そのウィンドウが閉じて元のウィンドウが出るまで待つ
WinWaitActive, ahk_pid %azpid%
Process, Close,%azpid%
WinWaitClose, ahk_pid %azpid%
ExitApp

738 :名無しさん@お腹いっぱい。:2010/12/29(水) 12:56:53 ID:/ITbnX2a0
>>737
sleepを使ったらどう?

739 :名無しさん@お腹いっぱい。:2010/12/29(水) 13:00:55 ID:2Ry+MeKa0
Process, Close は強制終了だから、 WinClose でいいならそれを使う。

740 :名無しさん@お腹いっぱい。:2010/12/29(水) 15:00:59 ID:QCC1ySsS0
FileLaunch.ahkのウインドウ上では、AHKのホットキー機能利かないんですね。
下カーソルキー(↓)を無変換とkに割り当てたいのですが、出来ないです。
自分のGUIだから無理なのかな。

#IfWinActive,ahk_class AutoHotkeyGUI
vk1Dsc07B & k:: Send,{Blind}{Down}

741 :737:2010/12/29(水) 15:30:02 ID:ohwA7N190
こんな感じで出来ました
ありがとうございます!

#WinActivateForce
Process, Exist,AzPainter2.exe
azpid = %ErrorLevel%
if azpid = 0
{
 ;azpaintの場所を書く
 Run,C:\Users\ユーザー名\Desktop\azpt209\AzPainter2.exe %A_ScriptDir%\ttt.psd,,,azpid
}

WinWaitActive,ahk_pid %azpid%
sleep 1000
;azpaintでの上書き保存のショートカットキー
Send,^s
WinWaitActive, 処理中
WinWaitClose, 処理中

WinWaitActive, ahk_pid %azpid%

WinClose, ahk_pid %azpid%
WinWaitClose, ahk_pid %azpid%
Exit

742 :名無しさん@お腹いっぱい。:2010/12/29(水) 15:50:48 ID:RVNOjEHr0
礼はいいとしてその程度の例はいらないというわがまま意見

743 :名無しさん@お腹いっぱい。:2010/12/29(水) 16:03:58 ID:6IFl/zQ40
使い始めて一週間経ってない俺には必要というわがまま意見

744 :名無しさん@お腹いっぱい。:2010/12/29(水) 22:30:15 ID:mOvzup2b0
本体めちゃでかくなっちょる

>>735
ここら辺ってJavaScriptのクラスとかオブジェクトの文法とほぼ同じ?
_Lの拡張っぷりがすごすぎてAHKに無限の可能性を感じてきた
まあ実行速度がry

つかほんと、プログラミング経験ゼロのahk初心者から
ScriptControlでVBもJScriptも使いこなせる玄人までの
幅広い人たちの集うスレだな

745 :名無しさん@お腹いっぱい。:2010/12/29(水) 23:25:39 ID:2Ry+MeKa0
>ここら辺ってJavaScriptのクラスとかオブジェクトの文法とほぼ同じ?
COMオブジェクトをAHKのオブジェクトで包んだラッパーだから使い方は一緒。
ただ、引数や戻り値として使える型に制限がある。
今回の更新はそれを解消するために、COMで使える配列型など(のラッパー)を用意したって感じ。

746 :名無しさん@お腹いっぱい。:2010/12/30(木) 01:04:31 ID:enFEWUZM0
>>733
Compile_AHK使って、Vista UACを変更すればいいんじゃないの
つか「管理者として実行」またはプロパティで「管理者としてこのプログラムを実行」にチェックとか
そういった解決方法はだめなのか

747 :名無しさん@お腹いっぱい。:2010/12/30(木) 01:22:20 ID:87znPY+y0
なんとかしてcomを使って普通の標準出力を使えないものでしょうか
コマンドプロンプトからコンパイル済のプログラムを呼び出して、その結果を取得したいです

748 :名無しさん@お腹いっぱい。:2010/12/30(木) 01:48:33 ID:z8jYOUam0
COMは万能じゃないよ。
ってかファイルオブジェクトで出来るだろ。

749 :名無しさん@お腹いっぱい。:2010/12/30(木) 10:00:45 ID:xlzBzIA90
他ランチャーから、Autohotkey.iniに書かれている複数行に渡るスクリプトを呼び出して
動かしたいのですがどうやればできますか?

exe代わりに、ahk拡張子のファイルを作って実行しようと思ったのですが、
そのままコピペしても動かないし、余分にひとつAHKが常駐してしまうので、
目的を達せられないのです。教えてください。

750 :名無しさん@お腹いっぱい。:2010/12/30(木) 10:24:06 ID:xlzBzIA90
使用方法
http://ahk.xrea.jp/Usage.html
かぁ〜・・・

751 :名無しさん@お腹いっぱい。:2010/12/30(木) 10:48:08 ID:haWpaHiK0
これを参考にランチャーからスクリプトA(下記例のsender.ahk)を実行して、
常駐スクリプトB(下記例のreceiver.ahk)に値を渡し
スクリプトAを終了させればいいんじゃないかな


AutoHotkey スレッド part8
290 名前:名無しさん@お腹いっぱい。 [sage] 投稿日:2009/06/21(日) 18:58:11 ID:16cGC6mhP (p2)
まあ、人それぞれだから好きにすればいい
一応OnMessageだってahkのコマンドだし、覚えるのが大変なのはGUI絡みだって同じだと思うけどね
文字列の受け渡しになるとちょいと面倒になるけど、数値の受け渡しならこの程度で済む

--- receiver.ahk ---
OnMessage(0x5555,"MsgHandler")
MsgHandler(wParam, lParam, msg)
{
TrayTip,Receiver,Message %msg% arrived:`nWPARAM: %wParam%`nLPARAM: %lParam%
}

--- sender.ahk ---
F12::
SetTitleMatchMode 2
DetectHiddenWindows On
PostMessage, 0x5555, 11, 22, , receiver.ahk ahk_class AutoHotkey
return

752 :名無しさん@お腹いっぱい。:2010/12/30(木) 10:55:16 ID:pw49wB/30
1.0.91.04 - December 29, 2010 >>2
Fixed (Unicode): RegExReplace omitted all text up to StartingPosition (broken by v1.0.90.00).

753 :名無しさん@お腹いっぱい。:2010/12/30(木) 12:57:46 ID:vEIz1Xxc0
SciTE_beta4って日本語がぁだめだねぇ...

754 :名無しさん@お腹いっぱい。:2010/12/30(木) 15:06:15 ID:ignuWjNv0
文字列受け渡し

;--- sender.ahk --- 受け手のEditを書き換えて、メッセージで通知する。改行はLF(`n)になるので注意
DetectHiddenWindows, On
ControlSetText, Edit1, %Clipboard%, getmojiretsuGUI ahk_class AutoHotkeyGUI
SendMessage, 5555, 0, 0, , getmojiretsuGUI ahk_class AutoHotkeyGUI


;--- receiver.ahk --- メッセージを受け取ったらサブルーチンを実行する
OnMessage( 5555, "getmojiretsuFnc" )
getmojiretsuFnc(){
GoSub, getmojiretsuSub
}

;Editを作成、コントロールハンドルを取得しておく
Gui, Add, Edit, Multi
Gui, Show, Hide, getmojiretsuGUI
If A_DetectHiddenWindows = Off
{
DetectHiddenWindows, On
WinGet, getmojiretsuCtrlHWND, ControlListHWND, getmojiretsuGUI
DetectHiddenWindows, Off
}
Else WinGet, getmojiretsuCtrlHWND, ControlListHWND, getmojiretsuGUI

Return

;受け取ったときのサブルーチン
getmojiretsuSub:
ControlGetText, mojiretsu, , ahk_ID %getmojiretsuCtrlHWND%
MsgBox, %mojiretsu%
Return

755 :名無しさん@お腹いっぱい。:2010/12/30(木) 16:44:12 ID:z8jYOUam0
GUI使って文字列やりとりするなら、メインウィンドウのEditに書いちまえばいいじゃん。

送り手:
DetectHiddenWindows, On
SetTitleMatchMode, 2
IfWinExist \serv.ahk ahk_class AutoHotkey
{
 ControlSetText, Edit1, ほげほげ
 PostMessage, 0x8001
}
受け手:
OnMessage(0x8001, "MsgListener")
MsgListener() {
 DetectHiddenWindows, On
 ControlGetText, value, Edit1, %A_ScriptFullPath% ahk_class AutoHotkey
 MsgBox, % value
}

756 :名無しさん@お腹いっぱい。:2010/12/30(木) 21:05:04 ID:xlzBzIA90
749です。
ご回答ありがとうございます。
ただ提示された文字式が高度すぎてまったく分かりませんが。

当初自分がやろうと思っていたことは出来るようになりました。
ただ単にやりたい複数行のスクリプトを空のahk拡張子ファイルに
コピペして、それを実行することで、思うことが実行できました。

なぜ前にテストしたときはまったく動かなかった&AHKアイコンが
余分にひとつタスクトレイに残ることになったのか分かりませんが。

ただやはりちょっと実行時重く感じますし、すぐ壁に当たるでしょうから
ご掲示されたsenderとreceiverのやつ試してみます。片方は本体の
autohotkey.iniに書いちゃっていいのかな。

とにもかくにもありがとうございました。

757 :名無しさん@お腹いっぱい。:2010/12/30(木) 21:28:30 ID:z8jYOUam0
常駐スクリプトで保持している情報(変数)がが必須な処理をする必要がある場合、
常駐スクリプトに何らかのメッセージを送って機能を呼び出してやらないといけない。

そうでないなら、単体スクリプトをランチャーから呼び出すだけでいいはず。
常駐スクリプトと単体スクリプトで同じ機能を持たいだけならば、
関数やサブルーチンに分割した別ファイルをインクルードすればいいだけのこと。

前者のケースってあまりなさそうだけど。

758 :名無しさん@お腹いっぱい。:2010/12/30(木) 23:23:40 ID:ignuWjNv0
メインのexeを実行。並行して複数のサブexeも実行
サブが先に終わり、結果をメインに投げる
受けとったものをメインが利用、とか

複数の結果を同時に利用する場合はサブだけじゃ難しい
まあ文字列はiniとかtxtのが楽そうだけど

>>755
このEdit1てのはどこに存在してるの?
普段は何も書いてないみたいだし、exe化してもあるし

759 :名無しさん@お腹いっぱい。:2010/12/31(金) 01:22:13 ID:r/Rfa40Z0
AutoHotkeyの本体。トレイアイコンから呼べるやつ。
ListVars や ListLines で各種情報を表示するところ。

760 :名無しさん@お腹いっぱい。:2010/12/31(金) 10:22:22 ID:VRpOUwFL0
exeを実行したらAutoHotKeyのインストールフォルダにあるiniを自動で読み込んでくれない
どうするの?これ。
 マイドキュメントに設定ファイル置くのが嫌なので悶絶するけど
一生変わらんのだが

久々にアップデートしようと思って、AutoHotkey_Lのインストーラーを落として
実行してインストールしたのに。

>AutoHotKey.ahkの拡張子を.iniに変更し、インストールフォルダ(AutoHotkey.exeが存在するフォルダ)に置いておくと、
>マイドキュメントフォルダにAutoHotKey.ahkがなくても、インストールフォルダにあるiniを読み込む

ってのググルとでてくるけど、何度やっても無理だ。なにもうこれ

761 :名無しさん@お腹いっぱい。:2010/12/31(金) 10:53:39 ID:VRpOUwFL0
AutoHotkey.ahkを拡張子変えずにインストールフォルダに置いたら、
いままでと同じように起動してくれた。
ドキュメントにahkファイル置かなくても。

.iniに変えてインストールフォルダに置いたら
マイドキュメントにかならずつくろうとする。

ほかのページやAutoHotkeyJpにもiniに変えると
前のように出来るみたいに書いてるけど、
オレの場合違うんだが。

あーしんど、英語読めないのはやっぱり致命的だわ

762 :名無しさん@お腹いっぱい。:2010/12/31(金) 11:20:55 ID:lES3dB0a0
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ


Revision 51 - April 11, 2010
* Changed: Use <EXENAME>.ahk instead of AutoHotkey.ini or AutoHotkey.ahk.

763 :名無しさん@お腹いっぱい。:2010/12/31(金) 17:15:02 ID:VRpOUwFL0
>>762
ありがとうございます。ほんとだ。デフォの名前に限らずEXEファイルの名前と
ahkファイルの名前を同じにすれば、きちんと動くw
すごい改善。こうなればいいなーって書いてた掲示板あったけど
そのとおりになったのか。
分かりやすいところにどっか書いてて欲しかった。
おれが英語読めないだけだけど。

このスレに来たのは今年のはじめでした。
お世話になりました。
みなさま良いお年を。

764 :名無しさん@お腹いっぱい。:2010/12/31(金) 17:36:29 ID:mEa1Uvb70
https://sites.google.com/site/autohotkeyjp/reference/AutoHotkey_L/Compatibility#TOC-5
これな

765 :名無しさん@お腹いっぱい。:2010/12/31(金) 20:34:13 ID:eDM92Iot0
フルスクリーンで動作するソフト(ゲーム等)でAutoHotkeyでさらに前面にテキスト表示する方法を考えてます。
見当も付かないのでヒントだけでもお願いします。
ゲームのFPSを計るソフトのように表示したいのです。


766 :名無しさん@お腹いっぱい。:2010/12/31(金) 23:13:09 ID:+6h9CfsS0
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ

767 :名無しさん@お腹いっぱい。:2010/12/31(金) 23:25:30 ID:Obui5VOp0
>>765
まず、GUIを作って文字を表示する((これが基本)
WinSet, で最前面化が可能。
同じく、WinSet で特定色を透過させられるので背景色を透過させる。
アンチエイリアスが掛かって汚いなら、Gui, Font でアンチエイリアスを抑制する。
GUIにはタイトルバーを無しで、ツールウィンドウにすると良い。
表示する時は非アクティブで表示させるようにする。

以上でできる。

だ が し か し 、ゲームのように DirectX で描画している場合、
ちらついたり一瞬で消えたりと、うまいこと表示されないこともある。
これはどうしようもない。


>>766
どう質問すれば答えが出やすいとか、もうちょっと建設的にアドバイスしてやれよ。

768 :名無しさん@お腹いっぱい。:2010/12/31(金) 23:40:39 ID:TDqMZpOx0
>>765
ツールチップ使うとか
http://sites.google.com/site/autohotkeyjp/reference/commands/ToolTip
表示させる場所はウィンドウから頑張って取ってくる
http://sites.google.com/site/autohotkeyjp/reference/commands/index_window

769 :名無しさん@お腹いっぱい。:2011/01/01(土) 01:54:10 ID:dvo0YW1l0
>>767
ヒント(?)だっけ。ツールチップ(?)だっけで
文字表示するのはむりか

770 :名無しさん@お腹いっぱい。:2011/01/01(土) 23:47:01 ID:AhzmuHuU0
1.0.91.05 - January 1, 2011

Fixed: Cleanup code in COM method calls was freeing the wrong parameters.
Fixed (ANSI): DllCall set incorrect length for wstr parameters on output.
Fixed: Variadic function calls were unstable when param object was empty.


そろそろバグも出尽くす頃かなぁ。
バージョンは表記は以前のリビジョンよりは分かりやすいな。

771 :名無しさん@お腹いっぱい。:2011/01/02(日) 01:41:57 ID:m4Lo8jjX0
autohotkey_l unicodeの質問です。
autohotkeyで無名関数を実現したいです。

フォーラムに情報はないものかと探し回っていたら、autohotkey_l製作者lexikosのそれらしき書き込みを見つけました。
LowLevel & dynamic code
http://www.autohotkey.com/forum/post-241575.html#241575

ですが、autohotkey_l最新版だとサンプルコードが動きません。それと、これは一昨年の情報でした。
最終的にはjavascriptのlambdaみたいなものを使いたいのですが、
無理なのでしょうか。

772 :名無しさん@お腹いっぱい。:2011/01/02(日) 12:20:48 ID:oZFXXDv40
本日から14日前の日にちを出したいです。
どうするのが一番簡単ですか?

773 :名無しさん@お腹いっぱい。:2011/01/02(日) 13:43:19 ID:QmETgrie0
>>771
処理をその場にインライン化したいだけって意味の無名関数なら言語仕様的に無理でしょ。
というか、無名関数がなきゃ実現できないことなんかい?

>>772
タイムスタンプ形式のデータを格納した変数に対して、必要な日数(過去ならマイナス値)を単位指定して「加算」する。

774 :名無しさん@お腹いっぱい。:2011/01/02(日) 15:05:36 ID:w8CmlM6s0
MouseGenture.ahkで、Aeroのタイトルバーの条件式ってどうやんの?
hittestじゃ反応しないぞ。なんかsendmassageとか使えば出来るとか?

775 :名無しさん@お腹いっぱい。:2011/01/02(日) 15:20:02 ID:mzOLMhkM0
#SingleInstance FORCE

で使ってるスクリプトで、何らかの原因(ネットワーク越しのfilereadで読み込み中に失敗など)
でスクリプトが半死のとき、定期間隔でsettimerを回して半死を判別しています。

それで、死んでると判断したときに、自分自身をreloadするようにしています。
reloadの際に、今動作中のスクリプトが応答しないと、新スクリプトの開始時に

 「前回のスクリプトが居残っていますが、少し待ちますか?YES/NO」

のダイアログが出ますよね。
このダイアログに返答しないと、次のスクリプトが動いてくれず、
無人PCでの自動運転だと、ここで稼動しなくなってしまいます。

このダイアログを出さなくする、あるいは、自動でYESにするような
方法ってありますか?

776 :名無しさん@お腹いっぱい。:2011/01/02(日) 17:05:07 ID:DH+uOCnxP
MouseGenture.ahkを使ってみているのですが、
特定のウインドウをアクティブにしたい時に処理内容にWinActivateを書いています。

これをタイトルで正規表現でマッチングしたいと思い
SetTitleMatchMode, RegExをどこか初期化時に書けばいいというのはわかりましたが、
MG_User.ahkの ;;;;;;;;↓↓初期化処理↓↓;;;;;;;;;; の下に書けばよいのでしょうか?

グローバルな設定なため他に致命的な影響がでないものかな、と思いまして。
単独で使っています

MouseGenture2 ver 2008/10/07です。
http://lukewarm.s101.xrea.com/myscripts/mousegesture/index.html

777 :名無しさん@お腹いっぱい。:2011/01/02(日) 17:20:46 ID:QmETgrie0
>>775
死んでる場合や応答が極端に遅い場合、OnExitで終了しない場合は
該当ダイアログで Yes を選んでも、再度同じダイアログが出るだけ。
別プロセス(別スクリプト)で該当スクリプトのプロセスを殺して、再度起動って感じになるかも。

コマンドの Reload の部分を 「Run, Reloader.ahk %A_ScriptFullPath%」みたく変えるとかで対応かな。

-- Reloader.ahk --
DetectHiddenWindows, On
IfWinExist, %1% ahk_class AutoHotkey
{
 WinGet, pid, PID
 Process, Close, %pid%
 Run, %1%
}

ただ、プロセスの強制終了なんでタスクトレイアイコンは残って、エラい事になる。
WinMenuSelectItem で殺せなかったらなどの処理をした方がいいかもしれない。

778 :名無しさん@お腹いっぱい。:2011/01/02(日) 18:32:46 ID:w8CmlM6s0
なんだこれeuc-jpにurlエンコードできないんか。Perlスクリプト書くか。。

779 :名無しさん@お腹いっぱい。:2011/01/02(日) 19:01:52 ID:oZFXXDv40
>>773
ありがとうございました。

780 :名無しさん@お腹いっぱい。:2011/01/02(日) 22:11:48 ID:w8CmlM6s0
StdIO.ahkでPerlとかRubyのコマンド使えるヤツ、AutoHotKey_Lじゃ使えないの?
使えている人いる?

781 :名無しさん@お腹いっぱい。:2011/01/02(日) 23:47:14 ID:w8CmlM6s0
WheelRedirect.ahk導入したらFirefoxでスクロールできないぞ

782 :名無しさん@お腹いっぱい。:2011/01/03(月) 00:07:39 ID:VZbNyFbm0
馬鹿自慢大会

783 :名無しさん@お腹いっぱい。:2011/01/03(月) 00:33:55 ID:8M5/6GqL0
なんで日記スレになってんのw

784 :名無しさん@お腹いっぱい。:2011/01/03(月) 02:08:49 ID:HoibdZ3M0
WheelAccel.ahk入れると秀丸で↑スクロールしても↓スクロールになるし、Firefoxでスクロールできない。

785 :名無しさん@お腹いっぱい。:2011/01/03(月) 04:08:36 ID:krobop8i0
二つのファイルが同一ファイルか調べたいんですが専用の関数とかありますか?

786 :名無しさん@お腹いっぱい。:2011/01/03(月) 04:46:45 ID:V4MIS6jw0
>>777
ありがとうございます。外から仕留めるのが確実っぽいですね。
その方法で対策してみます。

787 :名無しさん@お腹いっぱい。:2011/01/03(月) 05:21:55 ID:HQWXyqVC0
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ

788 :名無しさん@お腹いっぱい。:2011/01/03(月) 12:17:52 ID:VZbNyFbm0
初心者じゃないだろ、教えてちゃんだろ>>510

762 :名無しさん@お腹いっぱい。[sage] :2010/12/31(金) 11:20:55 ID:lES3dB0a0 (PC)
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ


Revision 51 - April 11, 2010
* Changed: Use <EXENAME>.ahk instead of AutoHotkey.ini or AutoHotkey.ahk.

766 :名無しさん@お腹いっぱい。[sage] :2010/12/31(金) 23:13:09 ID:+6h9CfsS0 (PC)
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ

787 :名無しさん@お腹いっぱい。[sage] :2011/01/03(月) 05:21:55 ID:HQWXyqVC0 (PC)
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ

789 :名無しさん@お腹いっぱい。:2011/01/04(火) 01:19:32 ID:SueU/Ypi0
わざわざ抽出する馬鹿自慢大会でした。

790 :名無しさん@お腹いっぱい。:2011/01/04(火) 02:50:27 ID:tL9DF7ZZ0
JaneとかJTrimみたいなDelphi製アプリケーションで最小化させるにはどうすればいいの?
Alt+Space+Nで大体大丈夫だけど、反応しないヤツもあるし。

791 :名無しさん@お腹いっぱい。:2011/01/04(火) 07:05:37 ID:7ZUH0CfQ0
WinMinimize の解説をもう一度読むんだ

792 :名無しさん@お腹いっぱい。:2011/01/05(水) 15:29:02 ID:JNyNcWfG0
aキーを押しっぱなしにするためのスクリプトは作成可能でしょうか?

Send {a down}

のみだと一回しか押されませんでした。
よろしくお願いします。

793 :名無しさん@お腹いっぱい。:2011/01/05(水) 16:16:56 ID:wabdbi9W0
キーリピートを発生させるにはループかタイマーで定期的にキー発行する
その際は {a DownTemp} のほうがいい。

794 :名無しさん@お腹いっぱい。:2011/01/05(水) 18:32:02 ID:JNyNcWfG0
ありがとう。やってみます。(・v・)

795 :名無しさん@お腹いっぱい。:2011/01/06(木) 14:46:31 ID:HNXsnreo0
初心者な質問で済みません。

AutoHotkey_L(64bit)を使って、
IfWinActive, ○○○ - Mozilla Firefox
のようにFirefoxのページタイトルを指定したいのですが、全角文字が含まれるとうまく働きません。

どのようにすれば解決できるでしょうか?どうか、ご教示ください。

796 :名無しさん@お腹いっぱい。:2011/01/06(木) 14:55:08 ID:wwCcAAvB0
スクリプトをutf8で保存

797 :名無しさん@お腹いっぱい。:2011/01/06(木) 14:56:58 ID:8K4JXP430
スクリプトをUTF-8で保存

798 :名無しさん@お腹いっぱい。:2011/01/06(木) 15:26:01 ID:HNXsnreo0
>>796,797
おお、即レスありがとうございます!

やってみたら無事できました。保存形式だとは全然気付かなかったので、
分からないままになるところでした。教えて頂いてありがとうございます!

799 :名無しさん@お腹いっぱい。:2011/01/08(土) 02:49:38 ID://XNXGBg0
Saiというお絵かきソフト上で、aキーを押した時に特定の座標をクリックしたくて
(座標にはレイヤーパレットがあって、特定のレイヤーを選択させる予定)
以下のようなスクリプトを組んだんですが
a::
BlockInput, on
MouseClick, L,xpos,ypos,1,0
BlockInput, off
return
このソフトはペンタブレットを使用していると独自にその座標を取得しちゃうみたいで、
BlockInputを入れてもマウス(ペンタブ)の入力が無効化されず、ペンの位置にカーソルが
留まってしまいxpos,yposの座標をクリックできないんです
何かいい方法はないものでしょうか?

800 :名無しさん@お腹いっぱい。:2011/01/08(土) 02:58:57 ID:9/2+uYJH0
MouseMove と Send, {LButton} で解決できたら・・・いいね

801 :名無しさん@お腹いっぱい。:2011/01/08(土) 03:50:02 ID://XNXGBg0
>>800
残念、タブペンが指すキャンパス部分に点が打たれてしまいました・・・

802 :名無しさん@お腹いっぱい。:2011/01/08(土) 05:01:33 ID:ddJYqX7B0
マウスポインタの数を増やすソフトってのがいくつかあるんだけど
中にはSAIの統制が及ばないものがあるかもしれない

803 :名無しさん@お腹いっぱい。:2011/01/08(土) 05:09:06 ID:cLvYcFk00
>>801
WindowsXP SP3 + 旧Bamboo(CTEシリーズ) + Bamboo最新Driver
という環境だけど、ペンタブでBlockinputが効く。
旧Driverだと効かない。
環境が書かれてないのでなんとも言えないけど、ペンタブのドライバーを更新してみては?

804 :名無しさん@お腹いっぱい。:2011/01/08(土) 09:16:08 ID:9/2+uYJH0
該当環境ならドライバの更新だな

そうでないなら、WM_LBUTTONDOWN(0x201) と WM_LBUTTONUP(0x202) を
PostMessage するとか。効かないかもしれないけど。

805 :名無しさん@お腹いっぱい。:2011/01/08(土) 12:31:33 ID:t0Dne9pX0
>>799
これ流用すれ
ttp://www3.atwiki.jp/sai/pages/255.html

806 :名無しさん@お腹いっぱい。:2011/01/08(土) 12:57:26 ID:Ou/2Ef/N0
わたしもUWSCでSaiを操作しようとしてSaiのMouse情報取得が独自なせいでUWSCでの操作がいろいろできず困ったわさ

807 :799:2011/01/08(土) 14:38:06 ID://XNXGBg0
>>802-806
ありがとうございました!
>>805の中身を流用して、これを入れることでレイヤーの選択を実現できました
ControlGet, layCtrlHwnd,Hwnd,, sfl_window_class29, レイヤー
saiLayerClickX := xpos 
saiLayerClickY := ypos
clickLParam := saiLayerClickX | (saiLayerClickY << 16)
SendMessage, 0x201, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd%
SendMessage, 0x202, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd%

プログラミング素人なんで、いまいちSendMessageコマンドが何をしているのか
理解できてないままなんですが…「0x201」とか「<< 16」とかどういう意味なのかさっぱり

808 :名無しさん@お腹いっぱい。:2011/01/08(土) 15:02:26 ID:9/2+uYJH0
ウィンドウメッセージで、知っとくと奥の手として使える。

MouseClickDrag や MouseClick などのコマンドはマウスを動かしたりクリックしたりすることを
実際にマウスが動いたようにエミュレートする。

いっぽう、ウィンドウメッセージは対象のウィンドウ(ウィンドウ内の部品も子ウィンドウな)に
色々と通知してやる方法。まぁ偽のメッセージで騙しているようなもん。

今回だと「座標○○でボタン押下があったぞ」ってメッセージを直接送るもので、
実際にマウスカーソルが動く事はない。
メッセージにはそれぞれ約束事があって、今回のやつだと渡すパラメタに座標を含ませる必要があって
それを << の演算子とかで計算してから渡してやってる。

http://www.winapi-database.com/Message/WM/WM_LBUTTONDOWN.html
http://www.winapi-database.com/Message/WM/WM_LBUTTONUP.html

809 :名無しさん@お腹いっぱい。:2011/01/08(土) 15:03:00 ID:t0Dne9pX0
ア、アンタの為に私が作った訳じゃないんだからね!
>>766

810 :名無しさん@お腹いっぱい。:2011/01/08(土) 15:23:55 ID://XNXGBg0
>>808
勉強になります! 今までカーソルを直接動かす方法しか知らなかったのですごく便利そう

811 :名無しさん@お腹いっぱい。:2011/01/08(土) 19:57:40 ID:OsKZ1uDY0
autohotokey_lで複数のahkファイルを起動させるのってどうやるの?
今、ショートカットに引数でスクリプトネーム記述してるんだけど2番目、3番目のファイル読み込んでくれない

812 :名無しさん@お腹いっぱい。:2011/01/08(土) 20:06:36 ID:OsKZ1uDY0
すみません、
引数にAutoHotkey.iniを指定したらできました

813 :名無しさん@お腹いっぱい。:2011/01/08(土) 20:19:00 ID:9/2+uYJH0
ショートカットのコマンド欄に以下のように記述しているなら間違い。
 "〜\AutoHotkey.exe" script1.ahk script2.ahk script3.ahk ...

というか、ファイルリストをパラメタで指定したらそれらを全部開くってのは、
メディアプレイヤーとかの挙動ではありがちだけど、一般的かというと微妙。

面倒かもしれないけど起動させたいだけの exe を呼んでやらなきゃならない。
 "〜\AutoHotkey.exe" script1.ahk
 "〜\AutoHotkey.exe" script2.ahk
 "〜\AutoHotkey.exe" script3.ahk
    :

つまりショートカットじゃ実現できないんで、まとめて起動させる手法が必要
バッチでもいいし、AHKで
  Ru, 〜\Script1.ahk
  Ru, 〜\Script2.ahk
  Ru, 〜\Script3.ahk
などとスクリプト書いてやってそいつを呼べばいい。

814 :名無しさん@お腹いっぱい。:2011/01/08(土) 20:19:59 ID:9/2+uYJH0
うはw エスパー間違ってるw
というか exe リネームしなくてもいいんだぜ。

815 :名無しさん@お腹いっぱい。:2011/01/09(日) 01:26:17 ID:807ueA1k0
ファイルの場所を変数に入力して
一番最後の実行ファイルの名前だけ取り出す
コマンドはありますか?
c:\AAA\BBB\ccc\ddd.exe

右から\マークの位置を調べてその文字数で取りだすしかないですか??

816 :名無しさん@お腹いっぱい。:2011/01/09(日) 01:41:26 ID:2vCkV7Kv0
http://sites.google.com/site/autohotkeyjp/reference/commands/index_file

817 :名無しさん@お腹いっぱい。:2011/01/09(日) 01:57:57 ID:qdltjA6SP
話題を進めたいなら、リンクだけじゃなくて最低限の内容も貼ってくれよ。

http://blog-imgs-29.fc2.com/s/e/p/sepicaelab/20100117181156581.jpg

これの1N4007が保護になるってことか。
入出力の電位差が増えすぎると壊れるってことなのだろうか。

たしかに、たまに製品を分解すると、このダイオードが入ってるものを見るけど、
なぜ入れてるのか気にしたことなかった。

818 :名無しさん@お腹いっぱい。:2011/01/09(日) 02:00:18 ID:qdltjA6SP
おっとすまん誤爆

819 :名無しさん@お腹いっぱい。:2011/01/09(日) 02:31:51 ID:807ueA1k0
>816
SplitPathですね、ありがとうございます!!

820 :799:2011/01/09(日) 15:28:31 ID:VqTecAm80
すみません、再度質問させてください
a::Lay_Select(0);一つ下のレイヤーを選択
s::Lay_Select(1);一つ上のレイヤーを選択
Lay_Select(x){
CoordMode, Pixel, Screen
WinGetPos, layX, layY, layW, layH, レイヤー ahk_class sfl_window_class;レイヤーウィンドウ位置取得
ControlGet, layCtrlHwnd,Hwnd,, sfl_window_class29, レイヤー
ControlGetPos, layCtrlX, layCtrlY, layCtrlW, layCtrlH, sfl_window_class29, レイヤー
PixelSearch, SellayX, SellayY, layX + layW - 28, layY + layCtrlY, layX + layW - 28, layY + layH -28, 0xdb5e6f , Variation, Fast ;レイヤーパレット右端ピクセルの色から選択中レイヤーを検索
if ErrorLevel = 1 ;PixelSearchのエラーレベル:0…完了 1…失敗
return
if ( x = 0 )
if SellayY - layY - layCtrlY + 44 < layCtrlH ;レイヤー下限位置判定
saiLayerClickY := SellayY - layY - layCtrlY + 44
else
return
else
if SellayY - layY - layCtrlY - 6 > 0 ;レイヤー上限位置判定
saiLayerClickY := SellayY - layY - layCtrlY - 6
else
return
saiLayerClickX := SellayX - layX - layCtrlX
clickLParam := saiLayerClickX | (saiLayerClickY << 16)
SendMessage, 0x201, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd%
SendMessage, 0x202, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd%
return
}
Saiで、aキーで一つ下、sキーで一つ上のレイヤーを選択するスクリプトを組んだのですが、
aとsを素早く交互に押すと、片方の選択処理が終わる前にもう片方の処理がカブってしまい
結果、同じレイヤーダブルクリックしてしまう現象が起きてしまいました
(レイヤーをダブルクリックするとレイヤー名変更ダイアログが出てしまう)
それを回避する方法をご教示いただけませんでしょうか…

821 :名無しさん@お腹いっぱい。:2011/01/09(日) 16:09:35 ID:y5oyy7BS0
甘えてんじゃねえぞ

822 :名無しさん@お腹いっぱい。:2011/01/09(日) 16:35:19 ID:Jr+5a3au0
処理が終わる前に、次の操作が始まってしまう。
それなら、処理が終わるまで待つといいよ。

823 :名無しさん@お腹いっぱい。:2011/01/09(日) 18:16:42 ID:tU6F1gI/0
流行らせるページのスクリプトで、コピーかカットの状態でクリップボードに格納するやつを
AHK_Lに移植しようとしてるんだけどできない
文字の長さは倍にしたし、型はStr以外全部UIntだし、何がダメなのか分からんちん
これどうしたら上手くいくんでしょうか?

ps=C:\test.txt
ClipboardSetFiles(ps)

824 :名無しさん@お腹いっぱい。:2011/01/09(日) 18:17:51 ID:tU6F1gI/0
;続き。filesをクリップボードにセットする関数。fMoveが0でコピー、1で移動
ClipboardSetFiles(files,fMove=0){

DllCall("OpenClipboard",UInt,0)

size:=20+StrLen(files)*2+4
hData:=DllCall("GlobalAlloc","UInt",0x2042,"UInt",size)
p:=DllCall("GlobalLock","UInt",hData,"UInt")
NumPut(20 ,p+0) ;offset
NumPut(0 ,p+4) ;pt.x
NumPut(0 ,p+8) ;pt.y
NumPut(0 ,p+12) ;fNC
NumPut(0 ,p+16) ;fWide
DllCall("RtlMoveMemory", "UInt",p+20,"Str",files,"UInt",StrLen(files)*2)

DllCall("EmptyClipboard")
DllCall("SetClipboardData","UInt",15,"UInt",hData)
DllCall("GlobalUnlock","UInt",hData)

hData:=DllCall("GlobalAlloc","UInt",0x2042,"UInt",4)
p:=DllCall("GlobalLock","UInt",hData,"UInt")
NumPut(fMove ? 2 : 1 , p+0)
pde := DllCall("RegisterClipboardFormat","Str","Preferred DropEffect")
DllCall("SetClipboardData","UInt",pde,"UInt",hData)
DllCall("GlobalUnlock","UInt",hData)

DllCall("CloseClipboard")
}

825 :名無しさん@お腹いっぱい。:2011/01/09(日) 18:51:02 ID:2vCkV7Kv0
>>820
上で出てるとおり、イベント割り込みの関係だな。>>8 も参照のこと。
凡例(☆:開始、★:終了、→:処理、…:中断、×:破棄、・:バッファ中)

十分に期間が長い、あるいは単独押下のときは、普通に終了する。
A  ☆→→→→★

Aの処理が終わる前にBが押されると、Bの処理が割り込み優先して実行される。
A  ☆→→……………→→★
B     ☆→→→→★

Aを素早く2連打したときは、同一ホットキーに割当て可能なスレッドはデフォルトで1個なので
処理完了以前に連打した場合は破棄される。
A1  ☆→→→→★
A2   ×

Critical を使うと割り込みが抑制され、処理はバッファされ後回しにできる。
A  ☆→→→→★
B      ・・・・・・☆→→→→★


>>823
アドレス・ハンドルにはPtr型を使う。とくに x64 なら必須

826 :名無しさん@お腹いっぱい。:2011/01/09(日) 20:50:24 ID:tU6F1gI/0
>>825 さんくす!
ほぼ全パターン変えて試してみたけどできなかったから
潔く諦めて外部ツールに処理してもらうことにしたぜ! ..orz

827 :名無しさん@お腹いっぱい。:2011/01/09(日) 21:03:26 ID:OusmzoXr0
>>826
関数の開始時に、グローバル変数で、適当なフラグをたてて、
関数の終わりで、フラグを寝かす。

関数開始時に、そのフラグがたってるかチェック。
立ってたら、フラグが変化するまで処理を中断すればいいんじゃない?

俺は普段そうやってるけど。

828 :名無しさん@お腹いっぱい。:2011/01/09(日) 21:15:29 ID:DAkQQGwM0
>>826はその人と違う人だよw

829 :名無しさん@お腹いっぱい。:2011/01/09(日) 21:20:45 ID:OusmzoXr0
あ、ほんとだw

830 :名無しさん@お腹いっぱい。:2011/01/09(日) 21:36:51 ID:2vCkV7Kv0
>>826=823
そういえば、クリップボードにセットするデータはヌル文字で区切って、
最後にヌル文字を二つ並べるって約束らしいけどそれやってるかい?
★はヌル文字で、Unicodeだと 0x00 0x00 の2バイトになる。

  ファイル文字列★ファイル文字列★・・・ファイル文字列★★

この件だと >>332 が参考になると思う。

831 :820:2011/01/09(日) 22:09:26 ID:VqTecAm80
>>825
ありがとうございます! ただ、Criticalを入れても改善できませんでした
>>820のスクリプトのSendMessage直前に
tooltip, %clickLParam%
を入れて監視してみたんですが、clickLParamの数値は正しく変更されてるのに
クリックするポイントは一つ前の処理と同じになってしまうみたいです
これはどうなってるんでしょうか…?
処理がかぶっての現象、って認識から間違ってるのかも

すみません、プログラミング素人が手探りでやってるので
トンチンカンな事言ってるかもしれません ご容赦願います…

832 :名無しさん@お腹いっぱい。:2011/01/09(日) 23:56:46 ID:807ueA1k0
すいません、改行ってどうすればいいか教えて下さい。
/nか::か\nか'nかと思ったんですがうまくいきません。
Gui, Add, Text, x20 y125 w350 h20 , 設定1(ここで改行したい)*注意・・・・

833 :名無しさん@お腹いっぱい。:2011/01/10(月) 00:02:39 ID:jSs3cUq10
http://sites.google.com/site/autohotkeyjp/reference/Scripts#escape

834 :名無しさん@お腹いっぱい。:2011/01/10(月) 00:04:25 ID:OusmzoXr0
>>832
Gui, Add, Text, x20 y125 w350 h20 , 設定1`n*注意・・・・

>>833
気持ちはわかるが、正解をとっとと書いたほうが早い場合もある

835 :832:2011/01/10(月) 00:14:15 ID:nVHB/T9/0
有難うございます ' じゃなくて ` だったんですね・・・。

836 :名無しさん@お腹いっぱい。:2011/01/10(月) 01:17:48 ID:nVHB/T9/0
こんなの作ったんですが
3行目のvOutの所でエラーが出ます。何が違っているのでしょうか???
Gosub,Gui
Gui:
 Gui, Add, Edit, x20 y80 w340 h20 vOut,%Edit1%
 Gui, Add, Button, x370 y80 w90 h20 gSansyou,参照...
 Gui, Add, Button, x260 y230 w100 h30 gSettei,設定
 Gui, Add, Button, x370 y230 w100 h30 gKyanseru, キャンセル
 Gui, Show, x130 y90 h280 w480, Show
 Return

Sansyou:
 FileSelectFile, OutputVar1 , 3, %A_ProgramFiles%, 参照, *.exe
 Edit1 = %OutputVar1%
 GUI, Destroy
 Gosub, Gui
 Return

Settei:
 Gui,Submit,NoHide
 IfNotExist, %Out%
  MsgBox, %Out%は存在しないディレクトリか存在しないファイルです。
  Return
 MsgBox,%Out%は存在します
 ExitApp

Kyanseru:
  ExitApp
GuiClose:
 ExitApp

837 :820:2011/01/10(月) 01:29:39 ID:a+x/+a0P0
すみません、自己解決しました…

単純なミスです
下のレイヤーを選択する際にクリックするポイントと、上のレイヤーを選択する際のポイントが
接近しすぎていたせいで、ダブルクリックとして判断されていただけでした
片方のレイヤー選択の際、クリックするポイントのX座標を13ドットすらす事で解決できました

お騒がせしました  アドバイスださった方々、ありがとうございました

838 :名無しさん@お腹いっぱい。:2011/01/10(月) 01:45:17 ID:8eLAymIs0
>>836
変数内の値を照会するばあいは %〜% とする。
コマンド等で変数を指定する場合は、そのまま書く

839 :名無しさん@お腹いっぱい。:2011/01/10(月) 02:07:25 ID:nVHB/T9/0
3行目をv%Out%にしてみましたが
MsgBox, %Out%は存在しないディレクトリか存在しないファイルです。
の部分で「は存在しないディレクトリか存在しないファイルです。」と表示されたので
Outにはなんの値も入ってないようでしたOTL

http://sites.google.com/site/autohotkeyjp/reference/commands/Gui_Add_Edit
をみると
「Vで変数名を指定し、 GUI, Submitを実行することで、入力内容を取得できる。」
とあるので
3行目はvOutですよね・・・?
うーん・・・

840 :名無しさん@お腹いっぱい。:2011/01/10(月) 02:49:15 ID:nVHB/T9/0
エラーメッセージと翻訳は以下ですOTL
The same variable cannot be used for more than one control.
The current thread will exit. Specifically: vOut

同じ変数が、複数の支配のために使われることができない。
現在のスレッドを表示する。具体的には:vOut


841 :名無しさん@お腹いっぱい。:2011/01/10(月) 04:10:27 ID:L6XvalM+0
>>840
Gosubの後も実行されるから
3行目(以降)が都合2回実行されるんだよ。
一番簡単に修正するには2行目にReturnを入れる。

842 :名無しさん@お腹いっぱい。:2011/01/10(月) 04:45:37 ID:nVHB/T9/0
有難うございます!!!
できましたぁぁぁぁぁぁx!!!

843 :名無しさん@お腹いっぱい。:2011/01/10(月) 05:56:27 ID:nVHB/T9/0
たびたびすいません

basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe
IfInString, %basyo%,Photoshop,

 {
 msgbox %basyo%
 }
ってやるとエラー出ます。
The following variable name contains an illegal character:
"C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe"
文字が不正ですっていうんです・・・。
文字の問題なら
もしかしてInstaller for AutoHotkey_Lを使った方がいいのかと
思って公式からDownload→Installer for AutoHotkey_Lをクリックすると
「これは報告されている安全でない Web サイトです。
www.autohotkey.net 」ってなります。
もうどうしたらいいんですかOTL







844 :名無しさん@お腹いっぱい。:2011/01/10(月) 06:50:19 ID:QCFDy3Io0
あきらめたらいいんじゃないかな

845 :名無しさん@お腹いっぱい。:2011/01/10(月) 06:58:06 ID:nVHB/T9/0
>>844
そうですね・・・別のう回路をかんがえますかな

846 :名無しさん@お腹いっぱい。:2011/01/10(月) 09:30:45 ID:8eLAymIs0
>>845
>>838

847 :名無しさん@お腹いっぱい。:2011/01/10(月) 15:42:15 ID:b3oEGb/I0
wheelredirect系で一番まともなのどれだよ。
大体Firefoxとかでスクロールできなくなるじゃねーか

848 :843:2011/01/10(月) 15:53:32 ID:nVHB/T9/0
>>836を試していたんですがうまくいかなかったんですが
basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe
IfInString, basyo,Photoshop,
 {
 msgbox %basyo%
 }
だと駄目で
basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe
IfInString, basyo,Photoshop,msgbox %basyo%

ってやるとうまくいく事が分かりました。
どうもお騒がせしました。

msgbox部分に沢山命令を入れたい場合はgosubいれといた方がいいんですか?

849 :843:2011/01/10(月) 15:56:17 ID:nVHB/T9/0
ごめんなさい自己解決です
basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe
IfInString, basyo,Photoshop
 {
 msgbox %basyo%
 }
だとうまくいきました。
(Photoshopの後に「,」がつくかつかないか)

本当にお騒がせしました

850 :名無しさん@お腹いっぱい。:2011/01/10(月) 15:58:16 ID:8eLAymIs0
最後のカンマが余計
ex) MsgBox, Hoge,

851 :名無しさん@お腹いっぱい。:2011/01/10(月) 18:31:57 ID:0Vce8mMl0
デスクトップ上の特定の部分を30分おきに
自動でマウスの右か左でクリックしてくれるソフトを探してるんですが
このソフトはそれが出来るソフトですか?
vista32bit

852 :名無しさん@お腹いっぱい。:2011/01/10(月) 18:41:44 ID:krbIAaCZ0
出来ます

853 :名無しさん@お腹いっぱい。:2011/01/10(月) 18:51:47 ID:i4cTF7Dr0
できますよ

854 :名無しさん@お腹いっぱい。:2011/01/10(月) 19:07:53 ID:0Vce8mMl0
出来ますか?
どういうふうにやれば良いんでしょうか?
全くの初心者です

855 :名無しさん@お腹いっぱい。:2011/01/10(月) 19:18:14 ID:MEr2Yo/90
a

856 :名無しさん@お腹いっぱい。:2011/01/10(月) 19:18:28 ID:nVHB/T9/0
初心者ならHiMacroExとかの方がいいと思うよ。

857 :名無しさん@お腹いっぱい。:2011/01/10(月) 21:03:19 ID:b3oEGb/I0
ウィンドウシェードやりたくてwinmoveでリサイズしても、最低ウィンドウサイズがあるやつは小さくならないんだけど、
なんとかならねー?

858 :名無しさん@お腹いっぱい。:2011/01/10(月) 21:52:14 ID:0Vce8mMl0
>>856
それでも出来る上にそっちの方が簡単ならそっちを使います

859 :名無しさん@お腹いっぱい。:2011/01/10(月) 21:54:18 ID:qABfFRFk0
なんでこんなスレになっちゃったんだろ

860 :名無しさん@お腹いっぱい。:2011/01/10(月) 22:06:16 ID:oDe3YBz00
ttp://www.easystep.jp/getImage?planid=31&vc=1&type=0&format=png
これみりゃわかるんじゃねーのー

861 :名無しさん@お腹いっぱい。:2011/01/10(月) 22:12:44 ID:8eLAymIs0
シェード中は元窓は隠してGUIに置き換えちまうって手があるぞ。

862 :名無しさん@お腹いっぱい。:2011/01/10(月) 22:44:46 ID:CciHolGH0
ID:w8CmlM6s0
ID:b3oEGb/I0

こういうのは本当レスする気なくなるわ

863 :名無しさん@お腹いっぱい。:2011/01/10(月) 23:29:56 ID:b3oEGb/I0
>>861
なるほど。やってみる。

あと、Windows 7のメモ帳のタイトルバーがMouseGesture.ahkのMG_HitTest()でnowhereになるのはなんで?
WheelRedirectはマウ筋使えばなんとかなった。それだけのために使うのもあれだが。

864 :名無しさん@お腹いっぱい。:2011/01/10(月) 23:47:01 ID:b3oEGb/I0
あ、単にマルチディスプレイで対象ウィンドウのx座標がマイナスだと取れないのか。>MG_HitTest
駄目じゃん。。。

865 :名無しさん@お腹いっぱい。:2011/01/11(火) 06:19:02 ID:krDj6XF00
ツイッターでやれ

866 :名無しさん@お腹いっぱい。:2011/01/11(火) 13:30:46 ID:RYT4wLHe0
ironAHKのスクリプトはwindows用バイナリとしてコンパイルできるのでしょうか?
http://www.ironahk.net/
Scripts can be compiled into standalone executables
というところのリンクをクリックしたら404でした。

windowsでもlinuxでも同じスクリプトでキーフックできそうなので興味を持ったのですが
バイナリ化して実際に使っている方はいますか?

867 :名無しさん@お腹いっぱい。:2011/01/11(火) 13:45:25 ID:r1fS31dR0
IronAHK.exe /out Example.exe Example.ahk

868 :名無しさん@お腹いっぱい。:2011/01/11(火) 17:34:11 ID:I+5MuC+W0
普段AutoHotKeyを使っていて、MouseGesture2というのを使ってみましたが、
起動してしばらくは上手く動作するのですが、気づくとMouseGesture2での動作がきかなくなっています。

何か疑う所はないでしょうか?

やりたいことは、マウスを画面端に持って行くと特定のウインドウをアクティブにするといったことです。

今のところ初期設定の他にこれだけを設定しています。

・「ジェスチャ定義」で
 定義名「画面下中」 EB2_(画面下端に接触(中央)) を設定
 同様に「画面下右」「画面下左」「画面上中」なども
 画面下端に接触(右)、画面下端に接触(左)などように設定
・「動作割り当て」で
 「画面下中」に対して、条件Default、
 動作は、
WinActivate, ahk_class Chrome_WidgetWin_0

にしてGoogle Chromeのウインドウをアクティブに
同様に、 「画面下右」「画面下左」「画面上中」などもそれぞれ他のアプリを設定


MouseGesture2を再起動したら、同様に設定を保存するとまた動作するようになります


869 :名無しさん@お腹いっぱい。:2011/01/11(火) 19:04:35 ID:9jUeDIFU0
どっかで動作が詰まってるんだと思う。

fileappendでログを吐き出させて、
settimerで60秒ごとに生死判別してみて、
死んでる場所を特定するしかないだろう。

870 :名無しさん@お腹いっぱい。:2011/01/11(火) 19:30:51 ID:kbvoOLHDi
>settimer
スレッドが停滞するような処理記述してたら追い打ちだけどな

871 :名無しさん@お腹いっぱい。:2011/01/11(火) 20:31:09 ID:VdCKLNdK0
相性の問題か、特定のアプリと一緒に使うと
なぜかマウス関連の動作が効かなくなるってのはある

872 :名無しさん@お腹いっぱい。:2011/01/11(火) 20:49:01 ID:vTyZXZLE0
WinActivateを特定のウィンドウやハング寸前のウィンドウに対して行うと
AHKのスレッドが止まっちゃうことがある

873 :名無しさん@お腹いっぱい。:2011/01/11(火) 21:32:16 ID:kbvoOLHDi
そうなると、MaxThredsPerHotkey の関係で
スクリプトを再起動するまで動かないままになるわな

WinActivate って色々な方法でアクティブ化するってあうけど、
お行儀が悪い方法(AttachThreadInput + SetFocus とか)やってんのかね。

874 :868:2011/01/11(火) 23:23:21 ID:I+5MuC+W0
ありがとうございます
いろいろ原因は考えられそうですね

>>871-873
なるほど、それはありそうです
いくつかアクティブにするウインドウの中で、MouseGesture2を使う前からハングしやすいものがあったはずなので

ちょっとWinActivateにするアプリを絞ってみてみます

>>869
こういうときのために他のスクリプト言語にもあるようなlog4なんたらみたいなloggingライブラリがあれば楽そうですね


875 :名無しさん@お腹いっぱい。:2011/01/11(火) 23:52:35 ID:r1fS31dR0
ロガーはこんな感じでやってる。全部使い方は同じ。
ログ自体出したくない時はロガーインスタンス自体作らない。

Logger := Logger_ConsoleImpl()
; Logger := Logger_Default()
; Logger := Logger_FileImpl("hoge.log")

Loop, 10
 Logger.WriteLine("ほげほげ - " A_Index)

MsgBox, Click To Close

; ---- Logger.ahk ----
Logger_ConsoleImpl() {
 Return DllCall("AllocConsole") ? FileOpen(DllCall("GetStdHandle", "int", -11, "ptr"), "h `n") :
}
Logger_FileImpl(logFile, append=true) {
 Return FileOpen(logFile, append ? "W" : "A")
}
Logger_Default() {
 Return Object("WriteLine", "Logger_RedirectToOutputDebug")
}
Logger_RedirectToOutputDebug(text) {
 OutputDebug, %text%`n
}


876 :868:2011/01/12(水) 01:14:01 ID:ZtXTpZDM0
>>875
あれっそんな記法できたっけ、とエラー出て思ったんだけど
テンプレにあるAutoHotKey_Lのobjectsの記法かな?

AutoHotKeyは浦島太郎なんだけど、今はもしかしてAutoHotKey_Lが主流?


877 :868:2011/01/12(水) 01:15:07 ID:ZtXTpZDM0
テンプレ>>9に書いてあった。スマソ
よく読むわ。

878 :名無しさん@お腹いっぱい。:2011/01/14(金) 23:20:41 ID:y9buHMlD0
1.0.92.00 - January 13, 2011

Added support for compound assignments with objects, such as x.y += z.
Improved IniWrite in Unicode builds to prevent an empty line from appearing at the top of each new file.
Improved the parser to be more permissive about what can follow {/}/Else, especially when combined.


---
ふむ。やっぱ楽なのはいいな。

obj := Object("int", 100, "str", "abc")
obj.int += 5
obj.str .= "あいう"
MsgBox, % obj.int "`n" obj.str

879 :名無しさん@お腹いっぱい。:2011/01/14(金) 23:38:12 ID:N3VWm+qrP
あれ、この記述今まではできなかったんだ
気付かなかった

880 :名無しさん@お腹いっぱい。:2011/01/16(日) 10:11:23 ID:QD3bdErO0
ロードマップによると次のv1.0.93.xxで1.0系の機能追加は打ち止めってことになるんかな。
このペースだと2月か3月くらいには出そうな感じだ。

1.1系はまだ仕様が煮詰まって無いみたいだし夏以降かなぁ。
今まで通り、出来そうな所から実装で段階リリースになるかもしれんけど。

個人的にはこの方向性は歓迎なんだけど、
関数型になると途端に訳分からなくなる人って居るからなぁ
でもブラックボックスでも使えるライブラリが作りやすい環境にはなると思う。

881 :名無しさん@お腹いっぱい。:2011/01/16(日) 11:19:20 ID:OW3MNSpvP
てか関数型になったらNilScriptどうすんの
そのためだけに作ったそうじゃん

882 :名無しさん@お腹いっぱい。:2011/01/16(日) 17:13:16 ID:oRQ2+GBW0
>>3を参考にしてジョイスティックのボタン13を短く二回押しした時にCtrl+Cを送るコマンドを作ってみました。

~Joy13::
SetTimer,Joy13_CheckCnt, 200
Joy13_cnt += 1
if(Joy13_cnt == 2)
{
Send,^c
}
return
Joy13_CheckCnt:
Hotkey,~Joy13, Off
SetTimer,Joy13_CheckCnt, Off
Joy13_cnt = 0
Hotkey,~Joy13, On
return

ここまではうまくいったのですが、Ctrl+Cを送る条件の「ボタン13を2回押し」の条件を
「ボタン1を押している最中にボタン13を2回押し」にしたいのですが、条件の追加がどうも上手くいきません

かなり初歩的な質問なのですが、アドバイスいただければ幸いで

883 :名無しさん@お腹いっぱい。:2011/01/16(日) 17:28:26 ID:BzDrWQLP0
関数型で分からなくなる人がって言うから
いきなり関数型言語になるのか!と思ったら
全然違ってた
まぎらわしいよー

884 :名無しさん@お腹いっぱい。:2011/01/16(日) 17:37:18 ID:4hZDJYRx0
オブジェクト指向を関数型って呼び始めたアホは誰だよw

885 :名無しさん@お腹いっぱい。:2011/01/16(日) 17:49:23 ID:MqbBn6UVP
AutoHotkey_L=AutoHotkey LISP

886 :名無しさん@お腹いっぱい。:2011/01/16(日) 18:11:15 ID:QD3bdErO0
>>882
GetKeyStateで判断すりゃいいんじゃないか。
ちなみに JoyNN はどうせボタンイベント捨てられないんで ~ つけても付けなくても同じ気がするが。

AHKL使い始めてからというもの、こういう書き方はもうしなくなったなぁ。
今はこんな感じでやってる。DoubleClick() の名前はアレだが一応汎用。

#If DoubleClick() && GetKeyState("Joy1")
Joy13::Send, ^c

DoubleClick() {
 static LastTime:=Object(), doubleClickTime := DllCall("GetDoubleClickTime", "UInt"), lastX:=-9999, lastY:=-9999
 CoordMode, Mouse, Screen
 If InStr(A_ThisHotkey, "Button")
  MouseGetPos, x, y
 Else
  x := y := 0
 flag := ( A_TickCount - (LastTime.HasKey(A_ThisHotkey) ? LastTime[A_ThisHotkey] : 0) ) < doubleClickTime
  && Abs(x-lastX) < 10 && Abs(y-lastY) < 10
 LastTime[A_ThisHotkey]:=A_TickCount, lastX:=x, lastY:=y
 Return flag
}

>>883
紛らわしくてすまんね。
コマンドはなるべく廃止の方向で、関数に置き換えられるって意味で書いた。

887 :名無しさん@お腹いっぱい。:2011/01/16(日) 18:15:08 ID:fD7YkuxZ0
その言い訳はちょっと無理がある

888 :名無しさん@お腹いっぱい。:2011/01/16(日) 19:00:35 ID:oRQ2+GBW0
>>886
アドバイスありがとうございます
お陰でなんとか解決できました

889 :名無しさん@お腹いっぱい。:2011/01/17(月) 02:35:31 ID:K7DTttRU0
ノートPCにPgUp, Homeとかが欲しくなる
 ↓
コンビネーションも使えるAHKでリマップすることに
 ↓
最前面表示のトグルとか便利だから組み込みコマンドを使い始める
 ↓
InputBoxじゃ不満になってGUIに手を出しAHKに翻弄される
 ↓
一通りAHKを理解し、小物のexeを作りまくる
 ↓
常駐ソフトをすべてAHKで代替するべくSendMessageやDllCallを使い始める
 ↓
オブジェクトを使いこなすためにJavaScriptを学び始める  ←今ここ

890 :名無しさん@お腹いっぱい。:2011/01/17(月) 16:59:42 ID:hEfcEtyV0

情報を求めて2chのこのスレに常駐

知ったばかりの知識をひけらかしたくなり書き込み

くだらない質問に説教

無職  ←今ここ

891 :名無しさん@お腹いっぱい。:2011/01/17(月) 17:22:01 ID:NnfYvIk20
AHKを使えるようになると、周辺機器のユーティリティのUIがクソで不便だとか、
ソフトの設定の煩雑さやダイアログが余計だとか、自動運転とか、
このあたりは自分で工夫さえすれば、どうにでも料理できるね。

最初はマウ筋の代替で使い始めたが、AHKのおかげで、
PCの活用の幅がものすごい広がった。

892 :名無しさん@お腹いっぱい。:2011/01/17(月) 17:24:35 ID:/v5iJjJJ0
TeamViewerっていうリモートデスクトップソフトの切断後に表示される「よければライセンスかってね!」ってダイアログをイベントフックして自動で消してる
ほんとAHKは便利
Avira AntiVirの広告ダイアログも追加しようかな

893 :名無しさん@お腹いっぱい。:2011/01/17(月) 17:36:58 ID:dn0hwoeC0
まぁ"auto"は automation から来てるからな。
ホットキー(キーアサイン)機能だけみるとやや貧弱だが、
キー発行と自動化を組み合わせると他のツール(の単独利用)じゃ出来ないようなことも楽々。

894 :名無しさん@お腹いっぱい。:2011/01/17(月) 18:02:54 ID:NnfYvIk20
>>892

avira_close:
Process, Exist,avnotify.exe
pid=%errorlevel%
if pid!=0
 {
 WinClose,ahk_pid %pid%
 WinWaitClose,ahk_pid %pid%,,1
 closeflag=%errorlevel%
 if closeflag=1
  msg=%A_Now%,PID=%pid%,closeflag=%closeflag%(広告プロセスを検出したがウインドウ出現前。)
 if closeflag=0
  msg=%A_Now%,PID=%pid%,closeflag=%closeflag%(広告表示ウインドウのクローズに成功)
 file=%A_Scriptdir%\avira_close_log.txt
 fileappend,%msg%`n,%file%
 }

1年ほど前に使ってたやつで、これを1秒のsettimerでまわして、とりあえず快適に動いてた。
広告が出ても1秒以内に消える。
細かい例外処理は未検証、aviraをやめてしまったので、今もこれで動くかはわからないけど。

895 :名無しさん@お腹いっぱい。:2011/01/18(火) 16:32:08 ID:dqw59mjL0
>>885の書き込みを見て思いついたのですが、
gaucheとautohotkey_lを連携できるでしょうか。
キーフックと出力はautohotkey_lで行って、
その間の処理はgaucheに行わせたいです。

言い換えますと、押されたキー名とその時間をgaucheに送って、
gaucheの側で処理し、
最終的にはそれをもとにautohotkey_lの側でキーストロークを発行したり
guiを作成したいのです。

↓のような形になると思いますが、
gaucheで処理をしている間、
これではスクリプトが待ってくれない気もします。。

;gaucheと連携させる
with_gauche = 1

#if (with_gauche)
a::
b::
c::
rslt := to_gauche(a_thishotkey,a_tickcount)
ahkl_output(rslt)
return

896 :名無しさん@お腹いっぱい。:2011/01/18(火) 21:38:12 ID:hgwLVvE10
1.0.92.01 - January 18, 2011

Changed: FileCreateDir now sets A_LastError.
Fixed: GuiControl() or similar was sometimes misinterpreted as a command.



>>895
毎回プロセス立ち上げるとか、CGIとして常駐させてAHKとはhttpで話すとか色々あるとおもうけど。

897 :名無しさん@お腹いっぱい。:2011/01/18(火) 21:53:21 ID:F7EHfqzXP
AHKとは離れるかもしれないけど、soundbeepコマンドで
ブザーを鳴らすデバイスが、XPとVista以降で違うんだね。

XPまでは、soundbeepを使うとマザーボードに実装されているブザーが鳴るんだけど、
Vista/Win7は、オーディオ出力からビープ音が出力されて、本体は黙ったまま。

AHKで自動運転させて、異常があったらブザーで通知する使い方をしてたのだけど、
OS変えてから、内蔵ブザーデバイスが使えなくなってしまった。

国内海外でいろいろ検索したけど、
「Vista以降でAUDIO出力からブザーを鳴らさなくする方法」は
沢山出てくるが、本体実装のブザーを鳴らす方法については見つからず。

ブザーを鳴らす回避策、ないでしょうか。
外部ツールを叩く方法でも構いません。

898 :名無しさん@お腹いっぱい。:2011/01/18(火) 23:02:21 ID:BwrUpPWb0
>>895
gaucheってdll呼べないの?
AutoHotKeyを外部アプリから組み込めるdllがあったように思う

899 :名無しさん@お腹いっぱい。:2011/01/19(水) 00:32:40 ID:wauIlVZb0
指定したファイルのアクセスを監視できないでしょうか?
別アプリからのファイルアクセスがあった瞬間で分岐したいのですが
ヒントだけでもお願いします。


900 :名無しさん@お腹いっぱい。:2011/01/19(水) 00:40:24 ID:Zu6yX0cNP
>>899
書き込みが伴うのかとか、最初にファイルが存在しなくてもよいのかとか、
もっと具体的に書かないとアドバイスのしようがない。

901 :名無しさん@お腹いっぱい。:2011/01/19(水) 00:43:28 ID:mIPQvZlp0
1.0.92.02 - January 19, 2011

Fixed a memory leak which occurred when the return value of an object invocation or built-in function was not used, such as file.ReadLine() or SubStr(x,y,z) alone on a line.
Replaced the fix from v1.0.92.01 with a better fix, which also fixes k::MsgBox(),x:=y and doesn't break if().


902 :899:2011/01/19(水) 04:47:51 ID:uBpCdQYM0
>>900
説明不足でした。
既に存在しているファイルへの読み込みのみのアクセスで書き込みは伴いません。


903 :名無しさん@お腹いっぱい。:2011/01/19(水) 08:39:46 ID:5Sh7vnpCi
さて、そろそろ次スレのことでも考える時期か。

本家は事実上の開発停止。Lexkosが一派が本流になる。
ってところか。

賛否両論あると思うが、
個人的にはAHKLのユニコード版をこのスレのオススメに
したほうがいいんじゃないかと思う。
インストーラも整備されたし、ダメ文字とかの制約も無いし。
テンプレ読むような初めて触る人にとって余計なことをしないで済む。



904 :名無しさん@お腹いっぱい。:2011/01/19(水) 09:30:34 ID:Ur+1btCB0
本家用のスクリプトが使えません><
てのがさらに増える

905 :名無しさん@お腹いっぱい。:2011/01/19(水) 09:56:59 ID:5Sh7vnpCi
そうなるのは目に見えてるけど、
中身を見たりいじったりしない人は本家を使い続ければいいだけかと。

「オフィス2000使ってます、新しいオフィスの文書が開けません」
ってのと同じで、その環境でクローズしてて問題ないなら
そこにとどまればいいだけのことかと。
別に排除しようってわけじゃない。

906 :名無しさん@お腹いっぱい。:2011/01/19(水) 10:11:31 ID:Ur+1btCB0
>本家使え
このスレに書かれてるスクリプトが動きません><
てのが返って来る

テンプレに注意点を書いてても
こういう連中は見ないだろうしね

907 :名無しさん@お腹いっぱい。:2011/01/19(水) 10:28:27 ID:mIPQvZlp0
そのためのテンプレで、アンカーで解答、でいいでしょ。

908 :名無しさん@お腹いっぱい。:2011/01/19(水) 12:09:01 ID:3mT5lwCQ0
>>903の意見に賛成するよ。
本家対策をいろいろとテンプレに書くよりも
unicode版だけを薦めて、
必要に応じてunicodeへの書き換えの要点を示せばいいだろうから。

909 :名無しさん@お腹いっぱい。:2011/01/19(水) 12:44:19 ID:GyThNXjM0
>>2を変えてみた。>>1に "L" 使えって書いておくのもいいかもしれない。

オリジナルである、本家 "AutoHotKey" の開発は終了しています。
現在は、そこからフォークした "AutoHotkey_L" が主流になりつつあります。
スクリプトについては、それが本家AHKで動くものであるか、Lであるのか、注意してください。

AutoHotkey_L (内部Unicode、64bitバイナリ、オブジェクト指向、COM対応など)
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

 オリジナルのAHKとの変更点多数。新しい仕様や互換性についてはドキュメントを良く読むこと。
 →http://www.autohotkey.net/~Lexikos/AutoHotkey_L/docs/
 →http://sites.google.com/site/autohotkeyjp/reference/AutoHotkey_L/index

■派生版
ironahk (.NET製、クロスプラットフォーム)

……

910 :名無しさん@お腹いっぱい。:2011/01/19(水) 16:37:54 ID:YEFK6r6v0
>>903
本家やこのスレの流れ知らずにネットでちょっと検索して便利なものがあるな、と思って使い始めると
AHKLじゃなくて本家の方を使い始めて苦労してた俺のような人もいるので、
テンプレに >>909みたいに"L"使えって書いてくださると
助かる人がいるとおもう・・・

911 :名無しさん@お腹いっぱい。:2011/01/19(水) 17:23:59 ID:3xgceX6u0
>>903,910 に同意。
どっかで AHK 本家作者の開発終了宣言があったよね。
本家の ChangeLog にも、AHKL を参照せよとあるし。
http://www.autohotkey.com/changelog/

912 :名無しさん@お腹いっぱい。:2011/01/22(土) 16:23:47 ID:20A6dLpk0
過疎り気味なのでネタでも

AHKLならではの利用サンプル1

■ 標準入出力
; ---- stdout.ahk ----
stdout := FileOpen(DllCall("GetStdHandle", "int", -11, "ptr"), "h `n")
Loop, 10
 stdout.WriteLine(A_Index . "行目")
; ---- stdin.ahk ----
stdin := FileOpen(DllCall("GetStdHandle", "int", -10, "ptr"), "h `n")
While !stdin.AtEOF()
 q .= stdin.ReadLine() ; ここを改変すれば行毎の処理が可能
MsgBox, % q
---------------------

実行例) スクリプトを配置したディレクトリでコマンドプロンプト以下のように実行。
> set ahk="C:\Program Files\AutoHotkey\AutoHotkey.exe"
> %ahk% stdout.ahk | %ahk% stdin.ahk


■ メニューにアイコン表示
Loop, 3 {
 Menu, M1, Add, 項目%A_Index%, Dummy
 Menu, M1, Icon, 項目%A_Index%, %A_WinDir%\Explorer.exe, %A_Index% ; , 32|64
}
Menu, M1, Show
Dummy:

※ コメントを外して 32 や 64 を指定すれば大きいアイコンも可

913 :名無しさん@お腹いっぱい。:2011/01/22(土) 16:24:45 ID:20A6dLpk0
AHKLならではの利用サンプル2

■ エクスプローラで選択中のファイルのフルパスをコピー
  COMをりようしているので、特殊フォルダがあってもOK

SetTitleMatchMode, RegEx
#IfWinActive, ahk_class CabinetWClass|ExploreWClass
#c::
 FileList:=
 For window in ComObjCreate("Shell.Application").Windows
  If ( window.hwnd == WinExist() ){
   For item in window.document.SelectedItems
    FileList .= item.path "`n"
   Break
  }
 Clipboard:=FileList, window:=item:=
 Return

■ アクティブアプリのあるフォルダを開く
OpenProcessでやる方法よりベターかも。

#vkDCsc07D:: ; Win + \
 WinGet, pid, PID, A
 For process in ComObjGet("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId='" pid "'")
  Run, % "explorer.exe /select`,""" . (process.ExecutablePath) . """"
 process =
 Return

914 :名無しさん@お腹いっぱい。:2011/01/22(土) 16:26:15 ID:20A6dLpk0
AHKLならではの利用サンプル3

■ IEの自動運転

ie := ComObjCreate("InternetExplorer.Application")
ie.Visible := True
ie.Navigate("http://www.google.co.jp/")
While ie.Busy()
 Sleep, 50
MsgBox, 読み込み完了`n`nフォームに文字を入力します
form := ie.document.GetElementsByTagName("FORM")[0]
form.q.value := "AutoHotkey"
MsgBox, フォームを送信します
form.submit()
While ie.Busy()
 Sleep, 50
MsgBox, 検索結果が表示されました`n`n終わります
form:=""
ie.Quit() ; 終了させないと iexplore のプロセスが残るので注意

■ AutoHotkey.dllを利用してマルチスレッド
COMを介して利用するので AHKL でも利用可。
事前に AutoHotkey.dll をDLして、モジュール登録をやっておく必要がある。
(DLLのあるディレクトリで「regsvr32.exe AutoHotkey.dll」を実行)

code := "#NoTrayIcon`nMsgBox, Thread #"
Loop, 10 {
 ComObjCreate("AutoHotkey.Script").AhkTextDll(code . A_Index)
 Sleep, 100
}

以上

915 :名無しさん@お腹いっぱい。:2011/01/22(土) 17:02:56 ID:7stRKw2+0
SendMessageとかみんなどうやって調べてるの?

916 :名無しさん@お腹いっぱい。:2011/01/22(土) 18:55:28 ID:hyw7mxp30
>>915
リソースハッカー根気がないと発見できない作業もある



firefox やoperaの検索ウインドウの位置をcontrolGetPos で汎用的に
取得したいんですがこれもリソースハッカーで出来ますか?


917 :名無しさん@お腹いっぱい。:2011/01/23(日) 00:36:49 ID:WXwFVRZD0
オブジェクト使えない身にはサンプルはありがたい
どっかにまとめておける場所が欲しいね


>>915
WinAPI Database for VB Programmerのアルファベット順表示「W」の項あたり
ふつうにウィンドウメッセージで検索すればたくさん出る


>>916
リソースハッカーを勘違いしてね?
~^f::WinGetActiveStats
が汎用的だと思うけど

918 :名無しさん@お腹いっぱい。:2011/01/23(日) 10:36:53 ID:+Jcg/1ky0
リソースハッカー云々は、対象アプリ内のコマンドを直に呼び出したい場合にやるから無関係ではないだろう。

メッセージ番号を調べたいなら先に上がったサイトでもいいが、メッセージが既に分かっているなら
以下のツールを使ってもいいだろう。

Crazy Scripting : List of Win32 CONSTANTS
http://www.autohotkey.com/forum/topic19766.html&highlight=constants


目的達成のためにウィンドウメッセージを使いたいがどんなものが割るか分からないなら、
まずは対象とするコンポーネントを知らなければ話にならない。
そういう場合は、斜め読みでもいいんでMSDN等のマニュアルに目を通した方がいい。

汎用コンポーネントならココを見ればおk
http://msdn.microsoft.com/en-us/library/bb773169%28v=VS.85%29.aspx

919 :名無しさん@お腹いっぱい。:2011/01/23(日) 17:29:58 ID:9kFDZpTa0
メッセージの番号はわかってる前提なのかな
そのへん不明なときは Winspector みたいな Spyツールで調べると楽だよ

920 :名無しさん@お腹いっぱい。:2011/01/23(日) 18:16:14 ID:XAjl03De0
一方Delphi製アプリは毎回番号が変わった

921 :名無しさん@お腹いっぱい。:2011/01/24(月) 17:05:09 ID:7gKriKlQ0
無変換 & F に検索でよくつかうコントロール+Fを割り当てたいのですが
ちゃんと設定しているのに、エラー音がなって失敗します。
どうすれば無変換とFに検索を割り当てられますか?

922 :名無しさん@お腹いっぱい。:2011/01/24(月) 21:22:13 ID:z644oJ9o0
書いたの見せて

923 :名無しさん@お腹いっぱい。:2011/01/24(月) 23:51:51 ID:7gKriKlQ0
vk1Dsc07B & F::send, ^{F} 
です。スペースは半角にしてるしどこが悪いんだろう。

いろいろできたらいいなぁと思うことがあるんです。
・クリップボードに新しくコピーが成功したらなんか音を出す
・クリップボードのなかにある不完全なアドレス(例*ttp)をhttpにする。(*httpになってもよい)

924 :名無しさん@お腹いっぱい。:2011/01/25(火) 00:19:46 ID:uXrK4Kpk0
:: Send, ^f

エラー音て何だろう?

925 :名無しさん@お腹いっぱい。:2011/01/25(火) 00:32:07 ID:IfjFp+6d0
>>923
Sendは大文字=Shift押しながらFキー押したって意味になるはず。
エラー音がなってるのは、多分Ctrl+Shift+Fに割り当てられた機能が
発動できない状況だったからじゃないかな。

926 :名無しさん@お腹いっぱい。:2011/01/25(火) 00:40:42 ID:Ag8yU00Q0
>>923
OnClipboardChangeサブルーチンラベル

927 :名無しさん@お腹いっぱい。:2011/01/25(火) 02:06:17 ID:qD/gBVo/0
レス有難うございました。
:: Send, ^f
でうまくいきました。
sendの項目改めて、見てみ来ました。今度からそうしてみたいです。

OnClipboardChangeサブルーチンラベルの項目もみてきて
一応設定できました。BEEP音鳴らしてます。

httpの補完次やってみます。ありがとうございました。

928 :名無しさん@お腹いっぱい。:2011/01/25(火) 02:14:12 ID:CKKQDY7j0
OnClipboardChangeって、まともに使える?

PCの日常操作で、画像のスクショを取るなどテキスト以外の情報が
クリップボードに入ると、通知無しにいきなりAHKが終了する症状が頻発して、
使うのをやめてしまった。

結局、クリップボードの情報でなにかやりたいときに、
OnClipboardChangeを使わず

 「いまクリップボードに入ってる情報を加工する関数」

を作成して、手動でそれを呼び出して、あれこれ加工するようにしてる。

929 :名無しさん@お腹いっぱい。:2011/01/25(火) 02:34:53 ID:Ag8yU00Q0
A_EventInfo 見てテキストかどうかの分岐をしてそうならしょうがないな

930 :名無しさん@お腹いっぱい。:2011/01/25(火) 02:45:55 ID:CKKQDY7j0
>>929
いま、死蔵させたコードを見直してみたのだけど

OnClipboardChange:
if A_EventInfo=0
 event=空
if A_EventInfo=1
 event=テキスト
if A_EventInfo=2
 event=データ

if event!=テキスト
 return

〜加工処理〜

return


これで、1のときだけ加工処理をやって、ほかはreturnするようにしてたけど、
やっぱりたまに落ちる。どうも、最初のif文にたどり着く前に死んでる気がする。

931 :名無しさん@お腹いっぱい。:2011/01/25(火) 18:08:20 ID:aMrptlve0
WinSet, Trans , 100, A

↑のように半透明にしたいんですが、これが効かないウィンドウがあります
ベクターにある透明化のソフトでは問題なく透明化できました(WindowAlpha・なんでもすけなど)
どうしてもAHKで透明化したいのですがどのようにしたらいいですか?


932 :名無しさん@お腹いっぱい。:2011/01/25(火) 18:22:41 ID:CKKQDY7j0
>これが効かないウィンドウ

これを書かないと誰も判断できない

933 :名無しさん@お腹いっぱい。:2011/01/25(火) 18:38:51 ID:aMrptlve0
失礼しました
株取引のソフトでmanextraderというソフト
これで開くウィンドウすべて透明にできないです
ベクターのフリーソフトではすべてうまくいきましたが・・・
何が原因なんでしょうか・・・

934 :名無しさん@お腹いっぱい。:2011/01/25(火) 21:07:24 ID:aMrptlve0
# They have no effect on a window that lacks a caption (title bar) and lacks the always-on-top property.
For GUI windows, this can be solved by removing the caption only after making the window transparent.
Alternatively, the following properties allow transparency to take effect: Gui -Caption +ToolWindow.

ヘルプにこう書いてあったんですがこれが原因でしょうか
解決方法ありましたら教えてください

935 :名無しさん@お腹いっぱい。:2011/01/25(火) 21:21:19 ID:R279zQ/j0
Aキーを押している間、Sキーの機能が停止するように設定ってできますか?

936 :名無しさん@お腹いっぱい。:2011/01/25(火) 21:49:30 ID:Ag8yU00Q0
>>935
余裕で

937 :名無しさん@お腹いっぱい。:2011/01/25(火) 23:58:03 ID:R279zQ/j0
>>936
#f::
Process,Exist,firefox.exe
if ErrorLevel<>0
A
S
WinActivate,ahk_pid %ErrorLevel%

スクリプトはわかるんですが・・・
これでできないのですが原因わかりませんか?


938 :名無しさん@お腹いっぱい。:2011/01/26(水) 00:32:03 ID:QXoIFxt40
>A
>S

これの意味がわからない。
ってかここでエラーにならないの?

939 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:10:51 ID:SjubXkKP0
>>937
> Aキーを押している間
と書いてあるのに [Win]+[F]のホットキー定義になってる。
Firefoxも唐突だし、その上>>938

やりたい操作や条件をもっと具体的かつ厳密に書いた方が解決が早いと思う。

940 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:23:51 ID:LMG4s4KI0
>>938
スクリプトが違ったのか
ありがとうございます。にわかの友人に聞いたのが間違っていました。
Aキーを押している間、Sキーの機能が停止するスクリプトは難しいですね。
スレの方々でもわからないスクリプトがあるとは・・・


941 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:28:56 ID:LMG4s4KI0
ゲームで使いたいと思いました。
ゲームでは
Qキーで左に移動
Wキーで右に移動
Sキーでジャンプ
Aキーで下に移動
となっています。ジャンプしているときにSキーを離すと同時に下に移動すると高速で降りられます。
このコマンド入力のタイミングが非常にシビアなのでAutoHotkeyを使いたいと思いました。

オフラインゲームなのでAutoHotkeyは使用可です。


すごいしょうもないことですがよろしくお願いします。

942 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:32:01 ID:QXoIFxt40
>>940

>Aキーを押している間、Sキーの機能が停止するスクリプトは難しいですね。

そもそも、なにをやりたいのかわかんないのが問題なんだよ。

process,existで判別するだけじゃ、firefoxが起動されていれば
どこでもコードが発動することになって、まずまともに動かないだろう。

windows+fを押した後、どんなシーンでなにをどう変えたいのか、
具体的に書け。


>スレの方々でもわからないスクリプトがあるとは・・・

お前のレスに情報が足りなすぎるから、わかんないんだよ。
物事を正確に人に伝える技術も身に付けろ。

943 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:36:06 ID:y4OdYZSy0
こいつには正解を教えるべきじゃない

と、俺の経験が言っている

944 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:40:23 ID:QXoIFxt40
緊急性はなさそうなので俺は降りるわ。

ちょっと上でもあったが、質問者は、なんでゲーム名とかアプリ名とかを
具体的に書かないんだろうか。隠す必要はどこにあるんだろうか。

名前さえ書けば、暇な人や、AHKの経験を積むため腕試ししたい人が
勝手に試してコードを書いてくれる可能性があるのに。
書かなきゃその可能性ゼロ。大損だね。

945 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:56:08 ID:IHG9AHdU0
>>931
MButton::
MouseGetPos,,, hWnd
WinSet, Transparent ,200, ahk_id %hWnd%
return

マウスカーソル下のウィンドウを半透明化するスクリプトだけど、
これはどう?

946 :名無しさん@お腹いっぱい。:2011/01/26(水) 01:59:35 ID:SjubXkKP0
>>941
全然難しくないし、数行で実現できる。

何度も書くけど、意図した動作を言葉できちんと記述できないようじゃ、スクリプトも記述できないんだよ。
言葉できちんと条件や動作を説明できるなら、一対一対応でコマンド等に置き換えられるケースが多い。

まぁ、ある程度の慣れは必要なのはしょうがないけどさ。

で、多分だが、
  S と A は同時押下があって、その順序は S → A の順で、
  S 押下中に A を押しても A は発行されずに、
  S 押下解除の直後で、まだ A が押されているなら A の発行を開始する
というようなことなんじゃないかな。

そうなると、特定キーの押下解除を待つってコマンドがあるんで、
そいつを使えば万事解決かと。

947 :名無しさん@お腹いっぱい。:2011/01/26(水) 07:27:40 ID:wuCL86z10
難しそうだが手出してみようと思って過去ログ漁り始めたんだが……

74 :名無しさん@お腹いっぱい。:04/11/03 18:19:35 ID:qnClhCL9
できました!有り難うございました〜

SetTimer, PopUpClose, 250
return

PopUpClose:
IfWinActive, 100% Free Hentai Pics!!
Send, ^W
return

---------------------

いきなり吹いた

948 :名無しさん@お腹いっぱい。:2011/01/26(水) 11:40:36 ID:z7TMcCykP
しばらくAHKを書いていなかったのですが最近やってみたら昔書いたスクリプトが動かないことに気付きました。
下記のようにした場合、2重登録はできませんと言われるのですがifが効いていないかんじなのですが
ifで振り分けたい場合はどうしたらいいのでしょうか?

Var = 0
#a::Var = 1

if Var = 0
#b::MsgBox, 0

if Var = 1
#b::MsgBox, 1

949 :名無しさん@お腹いっぱい。:2011/01/26(水) 11:47:27 ID:z7TMcCykP
あ、なんか思い出してきた・・・
if
#Ifちがうんだっけ

950 :名無しさん@お腹いっぱい。:2011/01/26(水) 11:48:53 ID:z7TMcCykP
すみませんできました

951 :名無しさん@お腹いっぱい。:2011/01/26(水) 12:38:55 ID:IY80MOvP0
>>914のマルチスレッド機能は
dllの普通の読み込みではできないのでしょうか。
comの方が使いやすそうだというのはわかりますが、usbメモリに入れて持ち歩いているので、
スタンドアローンで動く方がいいです。

952 :名無しさん@お腹いっぱい。:2011/01/26(水) 14:12:27 ID:TQqHCHEl0
「特定のウインドウでなおかつ IME が OFF の場合」に限り、ホットストリングを実行させる方法を試行錯誤しているのですが、両方の条件を満たす記述方法がどうしてもわからず、どなたかにお知恵を拝借したく存じます。
OS は Windows 7 で、AutoHotkey_L 最新版(Unicode x86/1.0.92.01)、ime.ahk を使っています。
具体的には、(1)秀丸メールのメール作成画面で、(2)IME が OFF の場合、この二つの条件が満たされた場合に、以下のホットストリングを実行させたいのですが。

::ce::Dear Mr. Clint Eastwood:
::mf::Dear Mr. Morgan Freeman:
::hs::Dear Ms. Hilary Swank:

(1)のみであれば、次のスクリプトでうまくいきました。
#IfWinActive, ahk_class TuruKameOuterView
::ce::Dear Mr. Clint Eastwood:
::mf::Dear Mr. Morgan Freeman:
::hs::Dear Ms. Hilary Swank:
#IfWinActive

また、(2)のみであれば、ime.ahk を使って、次のスクリプトで正しく動作しました。
#If (IME_GET() == 0)
::ce::Dear Mr. Clint Eastwood:
::mf::Dear Mr. Morgan Freeman:
::hs::Dear Ms. Hilary Swank:
#If

(1)と(2)の両方の条件を満たす書き方がわかりません。
>>1 の AutoHotkeyJp と Autohotkey_L のヘルプを読みましたが、例えば以下のように、
#If (IME_GET() == 0)
#IfWinActive, ahk_class TuruKameOuterView
と、条件文を二行続けるとスクリプトの直上のものしか有効にならないことだけはわかりました。
「AutoHotkey_L ime on off」などのキーワードでググってもみたのですがヒットせず。どなたかおわかりでしたら教えて頂きたく存じます。

953 :d:2011/01/26(水) 14:19:41 ID:VFIJyQru0


ロリ乳 ふくらみかけ 12歳 でググれ




954 :名無しさん@お腹いっぱい。:2011/01/26(水) 14:20:08 ID:H0DMm5Xw0
>>952
#If WinActive("ahk_class TuruKameOuterView") and (IME_GET() == 0)
こうじゃね。
ttp://www.autohotkey.net/~Lexikos/AutoHotkey_L/docs/commands/_If.htm
に or の例が出てる

955 :名無しさん@お腹いっぱい。:2011/01/26(水) 14:57:40 ID:TQqHCHEl0
>>954
できました! ありがとうございます!
ご指摘のページは私も既に目を通して、「or のところを and に書き換えればいい」ということはわかったのですが、「or」 のあとの書き方が間違っていたようです。ともあれ助かりました!


956 :名無しさん@お腹いっぱい。:2011/01/26(水) 15:19:22 ID:SjubXkKP0
>>951
できるよ。http://www.autohotkey.net/~HotKeyIt/AutoHotkey/ の一番下に例。

でも、面倒だから AutoHotkey_H 同梱の AhkDllObject.ahk と AhkDllThread.ahk を使った方がいい。
obj := AhkDllObject()
obj.ahkTextDll("MsgBox, Sub")
MsgBox, Main

でも、この方法だとスレッド1個に対してDLL1個を必要とするんで
(別ファイルであればいいのでシンボリックリンクでもOK)
動的にスレッド数を増減させるような構成を考えてるなら面倒。

それに対して、COMはDLL登録してしまえばインスタンスは作り放題なんでかなり楽。

スクリプトの最初で、regsvr32 で登録して、 OnExit で regsvr32 /U で解除するって方法もある。
ただ、登録・解除は管理者権限が必要なので、USBでの運用だと厳しいかも知れない。

957 :名無しさん@お腹いっぱい。:2011/01/27(木) 06:35:48 ID:kJBj9rrj0
mousegesture.ahkをAutoHotkey_Lで使用するために2つのサイトを参考に
何も考えずに以下の事をためしました。OSはwindows7x64です。

とりあえず全ての.ahkを文字コードUTF-8で保存しなおす

MG_Edit.ahkの1572行め1574行目に,UTF-8を加える。

edit.ahkとmousegesture.ahkでnやrの前以外にある全て
の`を消す。

MouseGesture.ahkの187行目にある"GDI32.DLL\TextOutA"からAを抜く。
-------------------------------------------------------
こうすることで文字やタブがちゃんと表示されるようになったんですが、矢印ナビ
だけが表示されません。どうしたら表示されるか分かりますか?

958 :名無しさん@お腹いっぱい。:2011/01/27(木) 19:38:13 ID:ohVqT6+c0
使った事も、中身見た事もないから、上に書いてないことを一般論で、
**ポインタとして使われているUInt型**をPtr型に変える
構造体でポインタとして使われている所のサイズを A_PtrSize にして、オフセットも変える
ANSI文字列しか対応していない関数に AStr 型で渡すか、StrPutでCP932に変換したバッファアドレスを渡す

まぁ、俺は使わないけど、使う人もいるだろうから、出来上がったら
生存期間の長いロダにでも挙げればヨロ込む意図が居るかもしれん。

959 :名無しさん@お腹いっぱい。:2011/01/27(木) 23:11:18 ID:PRifpay2P
>>957
MouseGesture.ahkをAutoHotkey_Lに対応させる - Klein*Klein - Prisoner Princess
ttp://retla.g.hatena.ne.jp/retla/20100228/1267373919

960 :957:2011/01/28(金) 01:37:05 ID:HxIj4fVL0
>>959
参考にして実行したことを>>957に書いたつもりで、そこにのってあることも
全て実行したと思っていて、それでも矢印ナビにチェックいれても表示さ
れないと認識していて質問したんですが、どこらへんが間違っているか
足りないことを教えてくれませんか?


961 :名無しさん@お腹いっぱい。:2011/01/28(金) 01:41:31 ID:HxIj4fVL0
>>958
どうやら足りないのは自分の頭のようで、説明されてる意味がよくわかりません。
誰かがうpるのをまてってのはわかりました。ツールチップでのナビ表示はできて
るのでこれでそれまで我慢しますか。

962 :名無しさん@お腹いっぱい。:2011/01/28(金) 01:50:15 ID:nhxiT7Fw0
その記事にx64とは書いてないから、あくまでAHKL Unicodeへの移植だろう。
だとすると、やっぱポインタのはず。

963 :名無しさん@お腹いっぱい。:2011/01/28(金) 02:26:37 ID:L8uQdRLw0
XPでは>>957の手順で問題なく動くね。うん。そんだけ。
x64とかわかんね

964 :名無しさん@お腹いっぱい。:2011/01/28(金) 11:12:48 ID:D55wJwxY0
どなたか、スクリプト書いていただけませんか?

クリップボード内にある冒頭h抜きのアドレス(複数行)をちゃんと
httpの文字列にするスクリプトが欲しいです。
お願いします。

965 :名無しさん@お腹いっぱい。:2011/01/28(金) 11:56:35 ID:vuzmCtie0
>>960-961
他のスクリプトは一切動いてない状態で試してる?
Guiの番号が被ってると表示できなかったりするけど。

>>964
こんな感じで動くと思う。
#h::
Str := Clipboard
Clipboard := RegExReplace(Str, "(?<!h)ttp://", "http://")
Return

966 :名無しさん@お腹いっぱい。:2011/01/28(金) 12:42:38 ID:D55wJwxY0
>>965
ありがとうございました。動きました。
まさかこんなはやく書いていただける方がでてくるとは。
少し予めぐぐって探していたのですが、なかったんですよね。
近いスクリプトから弄るっていうのも僕できないので
迷っていたのですが。

ttp://がない場合、tp://の処理をするみたいなスクリプトを次
自分でかいてみたいなと思います。

967 :名無しさん@お腹いっぱい。:2011/01/28(金) 12:43:42 ID:7MsjdgIIP
こんにちわ最近やっとn52teを入手しました。

いまさらって感じなんですがこれから設定をしようといろいろネットを見ていたんですが

なんか割り当てできるキーの数が3モード切り替えしかないから全キー×3しかないと嘆いている

ページがいっぱいかかりますがなんでAHKを使わないんだろうと思いました。

それはさておき、n52teでAHK_Lを使用してモード切り替えをこれからやろうと思うのですが

今現在のモードをモード切り替えをした時に画面に出したいと思うのですがなにかよい方法はないでしょうか?

最前面にでかでかと文字が表示されるようなものをイメージしています。

たしかBDRemoteというソフトのモード切り替えの時にもそんなかんじにできたと思うのですが

968 :961:2011/01/28(金) 15:17:48 ID:9GcbxX4S0
>>965
セーフモードで起動して矢印ナビが表示されるかためしましたが、
やはり矢印ナビは表示されませんでした。

969 :名無しさん@お腹いっぱい。:2011/01/28(金) 20:47:57 ID:LkB32x0i0
>>967
Progress, h100 W400 X100 Y100 B1 C00 ZH0 ZW0 ZY2 FM60 WM200 CWFFFFBF , , n52のモード
sleep, 1000
Progress, off

※各オプションは適当

970 :名無しさん@お腹いっぱい。:2011/01/29(土) 05:49:46 ID:E5eiQxsGP
>>969
ありがとうございます。

やってみます

971 :名無しさん@お腹いっぱい。:2011/01/29(土) 08:42:06 ID:E5eiQxsGP
>>969
まさにやりたかったことはこれでした

ありがとうございます

972 :名無しさん@お腹いっぱい。:2011/01/29(土) 15:20:32 ID:E5eiQxsGP
>>969
パラメーターいじってて気づきましたが
これプログレッシブバーの見た目を変えてるんですね

なるほどー

973 :名無しさん@お腹いっぱい。:2011/01/29(土) 17:36:02 ID:UQ9bBTnM0
MouseGesture.ahkって64bitOSだとナビが出ないのはもちろんのこと、
他のビルトインの機能も動かないの多いだろ、これ。
DllCallの引数、ポインタ型のやつに何も考えないでIntとか渡しちゃうってちょっとひどい
直すの面倒くさかったんだから!

974 :名無しさん@お腹いっぱい。:2011/01/29(土) 18:07:16 ID:2wNZwkqh0
アップローダが無いのも不便そうだから適当に作った。次のテンプレにでも入れてくれ。
管理は週一くらいで適当にやる予定。
http://loda.jp/ahk/

975 :名無しさん@お腹いっぱい。:2011/01/29(土) 18:54:19 ID:Gg0j47dF0
>>973
それが開発された当時はx64版なんぞ無いし、Ptr型もサポートされてない。Intで正しかったんだよ。
>>974
乙乙

976 :名無しさん@お腹いっぱい。:2011/01/30(日) 01:08:41 ID:iFs/AIQK0
ahklからluaを使いたいのですが、1.lua の読み込みに失敗し、Error failed to...エラーがでます
どこを直せばいいのでしょうか

; ahklからluaを使う
; http://www.autohotkey.com/forum/post-268666.html#268666
; http://www.autohotkey.com/forum/post-355457.html#355457

#include lua.ahk
#include lua_ahkfunctions.ahk

hDll := lua_loadDll("lua51.dll")

l := luaL_newstate()

if(luaL_loadfile(L,"1.lua") || lua_pcall(L,0,0,0))
msgbox % "Error failed to load " lua_tostring(L,-1)
else
{
lua_getglobal(L,"screenWidth")
screenWidth := lua_tonumber(L,-1)
out := "Screen Width := " screenWidth "`n"

lua_getglobal(L,"appName")
appName := lua_tostring(l, -1)
out := out "Screen Name := " appName

msgbox % out
}

lua_close(L)
lua_UnloadDll(hDll)

977 :名無しさん@お腹いっぱい。:2011/01/30(日) 01:09:26 ID:iFs/AIQK0
1.luaの内容は↓です

appName = "Firefox"
screenWidth = 400

どちらのファイルもutf-8(bom)で保存しています

978 :名無しさん@お腹いっぱい。:2011/01/30(日) 01:32:34 ID:itITJIdo0
既出だったらすまそ
http://www.autohotkey.net/~Lucid_Method/

979 :名無しさん@お腹いっぱい。:2011/01/30(日) 13:42:14 ID:dtPVEYXx0
exe版Age2chでスレの更新確認しているのですがポップアップでの通知機能がないため
Age2chの外部ツールオプションでexe化したAHKスクリプトを起動し代わりにバルーン等の
ポップアップ通知をさせたいと思っています。
外部ツールにブラウザ等を指定しないのはブラウザを閉じて
作業している時に起動されると困るためです。

レスがあったと言うことを通知するだけならば
MsgBox , 4144, 確認時刻, %A_YYYY% %A_MM%/%A_DD% %A_Hour%:%A_Min%
ExitApp
で出来るのですが複数スレが対象となるとどれか分からなくなります。
URLをWM_COPYDATAで送るオプションがありメッセージで送るのだから
URLのみじゃないかもと思いexe化スクリプトと外部プログラムでのメッセージやりとりを
しらべていたのですがうまく作れません

そもそもメッセージにURL以外含まれていなければどうしようもないのですが形としては
スレタイトル
新着レス数(またはレス数)
確認時刻
の様な、せめてスレタイトルだけでも表示できる物が作りたいです。
どなたかお願いできないでしょうか。また、作らなくても要望を満たせるツールが在れば
探すヒントでもいいので教えて欲しいです。
よろしくお願いします。


980 :名無しさん@お腹いっぱい。:2011/01/30(日) 14:13:08 ID:Y+N1ABfO0
MouseGesture.ahkです。
ジェスチャ後にアクティブウインドウを画面中央に移動させたいのですが

WinMove, A, , (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2)

このように記述してもウインドウは中央に移動してくれません・・・
アクティブウインドウを中央に移動させるにはどのように記述すればいいのでしょうか?

981 :名無しさん@お腹いっぱい。:2011/01/30(日) 19:10:30 ID:itITJIdo0
Shift+Spaceで任意の関数実行、Ctrl+Shift+SpaceでShift+Space本来の挙動にするにはどうすればいいですか?

982 :名無しさん@お腹いっぱい。:2011/01/30(日) 19:55:06 ID:+SDppyu30
>>980
wingetpos, , , width, height, A
WinMove, A, , A_ScreenWidth/2-Width/2, A_ScreenHeight/2-Height/2

983 :980:2011/01/30(日) 21:22:19 ID:Y+N1ABfO0
>>982
わぁ、できました!
どもですm(_ _)mペコリ

984 :名無しさん@お腹いっぱい。:2011/01/30(日) 21:35:01 ID:/D168sex0
>>979
WM_COPYDATAで送られてくるデータの内容は、送信元次第なので仕様を確認しろとしか言いようがない。


自前でスレの更新日時を撮りにいくならこんな感じで出来る。要AHKL

url = http://hibari.2ch.net/test/read.cgi/software/1280482227/l50
If RegExMatch(url, "http://(?P<host>\w+\.(?:2ch\.net|bbspink\.com))/test/read.cgi/(?P<board>[^/]+)/(?P<dat>\d+)/?", $) {
 req := ComObjCreate("WinHttp.WinHttpRequest.5.1")
 req.Open("HEAD", "http://" $host "/" $board "/dat/" $dat ".dat")
 req.Send()
 If ("OK" = req.StatusText) {
  If RegExMatch(req.GetAllResponseHeaders(), "Last-Modified:\s(.+)", $)
   MsgBox, % "更新日時: " . $1
 } Else
  MsgBox, % "Error: " req.StatusText
 req :=
}
タイトルと件数は subject.txt を撮りに行けばOK

985 :名無しさん@お腹いっぱい。:2011/01/30(日) 22:11:44 ID:itITJIdo0
AutoHotKey_Lで32bitや64bitのプロセスのpidから実行ファイルのパスを取る方法を教えてください。
winmgmtsを使う物や、getProcessExeNameNTでは取れませんでした。

986 :名無しさん@お腹いっぱい。:2011/01/30(日) 22:22:37 ID:Wb8eDpAJ0
!#z::
>>985
WinGet, pid, PID, A
For process in ComObjGet("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId='" pid "'")
MsgBox, % process.ExecutablePath
return

987 :名無しさん@お腹いっぱい。:2011/01/30(日) 22:54:50 ID:itITJIdo0
>>985
0x80020003 - メンバーが見つかりません。
ってなります。AutoHotKey_Lは32bit版、OSはWindows 7 x64です。

988 :名無しさん@お腹いっぱい。:2011/01/30(日) 23:28:06 ID:/D168sex0
x64版を使わないから

989 :名無しさん@お腹いっぱい。:2011/01/31(月) 00:01:37 ID:sNxLvINW0
DllCall使ってるところが動かなくなってしまうので。。
DllCallの所を直しつつ、64bit版でやってみます。

990 :名無しさん@お腹いっぱい。:2011/01/31(月) 12:56:09 ID:qh3anlvR0
建ててくる

991 :名無しさん@お腹いっぱい。:2011/01/31(月) 13:15:43 ID:qh3anlvR0
AutoHotkey スレッド part12
http://hibari.2ch.net/test/read.cgi/software/1296446228/

ツッコミ処は多々あると思うが、独断と偏見でやってみた。
もたもたしてたら変なのを貼られちまった。スマソ。

992 :530:2011/01/31(月) 14:26:17 ID:EA7pWmp2P
>>969
sleepだと連続切替が効かないのでSetTimerに変更しました。ま、n52teにJoyToKeyを併用しないと服飾キーが押せないみたいですが
n52pf := Object()
n52pf[0] := "SAI"
n52pf[1] := "Photoshop"
#x::
If ( n52 > n52pf.MaxIndex() - 1 ){
n52 = 0
} else {
n52++
}
BlnMsg( n52pf[n52], "1000", "X10 Y10 B1 C00 ZH0 ZW0 ZY2 FM12 WM1 CWFFFFBF" ) ;
return
BlnAct = 0
BlnMsg(Txt, Time, Opt) {
global BlnAct
BlnOffSet()
Progress, %Opt%, , %Txt%
SetTimer, BlnOff, %Time%
BlnAct = 1
return
BlnOff:
BlnOffSet()
return
}
BlnOffSet(){
global BlnAct
If (BlnAct = 1) {
Progress, off
BlnAct = 0
}
}

993 :名無しさん@お腹いっぱい。:2011/01/31(月) 15:11:51 ID:JQU1QPMp0
服飾わろた

994 :名無しさん@お腹いっぱい。:2011/01/31(月) 15:19:10 ID:EtuGOY5s0
突っ込もうと思ったら、すでに突っ込まれててワロタ

995 :名無しさん@お腹いっぱい。:2011/01/31(月) 15:25:19 ID:EA7pWmp2P
装飾キーw

996 :名無しさん@お腹いっぱい。:2011/01/31(月) 16:19:13 ID:qh3anlvR0
いや、それも違うだろw

997 :名無しさん@お腹いっぱい。:2011/01/31(月) 16:32:02 ID:JQU1QPMp0
どんだけオシャレさんなんだw

998 :名無しさん@お腹いっぱい。:2011/01/31(月) 22:12:45 ID:LH5icIBH0
.

999 :名無しさん@お腹いっぱい。:2011/01/31(月) 22:16:24 ID:LH5icIBH0
.

1000 :小倉優子 ◆YUKOH0W58Q :2011/01/31(月) 22:17:08 ID:LH5icIBH0
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

364 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.01.03 2014/02/20 Code Monkey ★
FOX ★ DSO(Dynamic Shared Object)