AutoHotkey スレッド part25 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>477 WinGetでハンドルが取れる WinGetPosでウィンドウのサイズと位置が取れる Guiでウィンドウにかぶさるようなウィンドウを作ったり画像を表示できる WinSetでウィンドウの表示領域や透明度をいじれる こんなとこ? >>480 とってもいいヒントを頂きました。ウインドウに直接描画するのではなく、別のウインドウを作って それにお絵かきして上に載せるということですね。で、WinSetで表示領域を加工するとか ちなみに、AHKのGUIで、ツールチップのようにタイトルとか枠とかのないほんとにプレーンなウインドウって 作れますか >>481 F1:: Gui, Color, 00AA00 Gui, -0x00C00000 +ToolWindow Gui, Show, W300 H200 Return みたいな感じかな あとはマウスイベント透過するとかWindowの切り抜きとか透過率とかはWinsetで指定 さらにWindowの移動やサイズ変更に追従させるとか、非アクティブ時や最小化時にhideするとかの必要があればそれも考慮する必要あるかな >>482 すばらしい。ありがとうございました。これは参考になりました ああ、実際にこれ、動かして試してみましたよ。これをベースにいろいろと考えてみます tooltipの背景色を変えることは出来ますか。その方法を教えてください MGLのジェスチャ表示が色付きだけどあれはツールチップじゃなくてGUIをツールチップっぽくしてるだけなのかな? MGLのソース見てみたら分かるかも 特定のコントロールにマウスオーバーしただけで、そのコントロールにフォーカスを移すことは出来ますか? 教えてエロいひと。 1.MouseGetPosでマウス下のコントロールを取得できる 2.SetTimerで常にマウス下のコントロールを監視 3.取得したコントロールにControlFocus(必要に応じてWinActivateも追加)でフォーカスを移す でどうだろう。スマートではないが。 >>489 ありがとうございます。 本来の目的を達成する方法はあるのですが。。 マウスオーバーはトリガーに出来なさそうですね。。。 再生デバイスを変更して ポップアップに変更した端末名 が出るようなスクリプトを Windows10でやり方教えて いただけないでしょうか? >>488 割りとかんたん。 タイマーでモニターしてマウスオーバーでウィンドクラスを取り続けて変数によけとく 変数内のウィンドクラスとマウスオーバーで取ったクラスが違ったらそのウィンドクラスをアクティベートする 以前作ったけどウィンドの順序が切り替わりまくってボツにした ホットキーをトリガーにするのが嫌ならセットタイマー判定とかWhile判定でええんよって話 Run, explorer `/select`,"%path%" ってやるとQTTabBarで新しいウィンドウが開いてしまうから ファイル名を指定して実行でやってるんです。下記のように。 string = explorer `/select`,"%path%" MGU_ExecuteByFileName(string) MGU_ExecuteByFileName(exeString){ Send, #r WinWaitActive, ファイル名を指定して実行,, 5 MGU_PasteString(exeString) Send, {Enter} Return } MGU_PasteString(string, pasteKeys := "^v"){ Backup := ClipboardAll Clipboard := string Send,%pasteKeys% Sleep, 200 Clipboard := Backup } っていう風にしてるんですけど、これだとたまーーに実行文字列がNullになったり するんで、もっといい方法ないですか? ご教授お願いします。 >>494 OHP 見た感じ COM が使えそうなんだけど、どうだろう http://qttabbar-ja.wikidot.com/scripting qt := ComObjCreate("QTTabBarLib.Scripting") qt.Open(path) >>494 QTTabBarは使ったことないのでいい加減だけど、タブブラウザみたいに 新規ウインドウで開くか新規タブで開くかオプションで設定できないのかな? >>494 です。 >>495 どうも、ファイルを選択してフォルダを開くメソッドが無いみたいなんですが、 どうでしょうか? >>496 shellexecutehookを利用してキャプチャするにチェックをしても、別のプロセスで フォルダーウィンドウを開くのチェックを外しても Run, explorer `/select`,"%path%" とすると、新規ウィンドウで開いてしまうみたいです。 あと報告です。 Clipboard := string の後に Sleep, 100 を入れたらNullになる症状が今のところ出ていません。 >>491 少し脱線するけど俺は「App=Device」というコマンドラインで再生デバイスを変更できるフリーソフトを使用してる AHKとこれを組み合わせてポップアップを表示したりすればお望みのことが出来るんじゃないかな 環境によっては管理者権限で実行する必要がある >>495 qs := ComObjCreate("QTTabBarLib.Scripting") qs.Open("C:\Users\UserName\Documents") aw := qs.ActiveWindow at := aw.ActiveTab at.SelectedItems := "Book2.xlsx" と記述したらできました!ありがとうございました! 解決したみたいだから蛇足だけど起動中のエクスプローラ(qttab)と ahkrun、ファイル名runで管理者権限の有無が統一されてなかったとか? ファイル名runでだけ別プロセスにならない理由がよく分からんね >>494 です。 >>500 試しに RunAs, %USERNAME%, %PASSWORD% Run, explorer `/select`,`"%filePath%`" RunAs とやっていたところを、単に Run, explorer `/select`,`"%filePath%`" と書き換えてみましたが、どちらとも新規ウィンドウで開いてしまいます。 コマンドプロンプトからやってみても同じでした。 ファイル名を指定して実行のexeを見てみたところ、explorer.exeとなっていた のでこれが原因ではないでしょうか? すみません、以下の場合に複数のキーの状態をまとめて指定する事は可能でしょうか?。 If GetKeyState("RButton", "P") msgbox, 押されている else msgbox, 押されていない この部分を If GetKeyState("RButton" "MButton" "XButton1", "P") とか If GetKeyState("RButton" and "MButton" and "XButton1", "P") とか If GetKeyState("RButton" || "MButton" || "XButton1", "P") とか If GetKeyState("RButton" or "MButton" or "XButton1", "P") とか素人なりにやってみましたが、全くダメでした。 宜しくお願いします。 やってないから動くかわかんないけど、普通に考えるなら If( GetKeyState("RButton", "P") or GetKeyState("MButton", "P") or GetKeyState("XButton", "P") ) msgbox Hit とか >>503 キタ━━━━━━(゚∀゚)━━━━━━ !!! キタ━━━━━━(゚∀゚)━━━━━━ !!!!! 顔射感激雨あられぇ! 本当にありがとうございました! >>503 「and」や「||」や「or」を知ってるのに書式が分からないって・・・ wikiとかhelp見ないで適当にやってできないから質問した感がもの凄くあるんだが・・・ >>505 これが素人AHK使いの現実何です。 お察し下さい。 ルールブックがあってもその見方がわからんってレベルだろ でもちょっとやれば、すぐにわかるようになるよ andとorは数学の集合でやるからプログラム素人でもわかるよ。 「かつ」と「または」のことだ。縦線は初めてみたときわからんかったので ヘルプみたが。 >>499 です。 前述した方法で行うとAHK起動後、約5分くらいで下記のエラーが出ます。 Error.File:C:\Apps\MouseGestureL\Config\MG_User.ahk Error.Line:771 Error.Message:0x8013150B - Source: mscorlib Description: オブジェクト '/62092dc6_d0c8_47dd_803a_d87384c15e0f/sqpempia+y4xaa3s532qntda_2.rem' が切断されたか、サーバーに存在しません。 HelpFile: (null) HelpContext: 0 Error.What: Error.Extra: ActiveTab aw := qs.ActiveWindow at := aw.ActiveTab at.SelectedItems := "Book2.xlsx" を下記のように修正したりしましたがエラーが出ます。 qs.ActiveWindow.ActiveTab.SelectedItems := fileName どうもタイムアウトエラーのようなのですが、下記のページの解決策のように AHKで記述する方法がわかりません。 http://bbs.wankuma.com/index.cgi?mode=al2& ;namber=21484&KLOG=41 どなたか解決策をご存知の方、ご教授お願いします。 Dllがよくわかりません。詳しく説明してるサイトとかないですか >>512 VisualStudio VC++とかやらないとその世界は難しいよ winapi関係はほぼVB(A)で覚えたわ あっちもDeclare宣言必要だから型とか調べるのによくVBの解説サイト見に言ってたわ 今だとMSDN直に見たほうが早いんだろうけど Mouseclick left Sleep,aaa mouseclick left Sleep,bbb . . Gosub,A でgosubの処理時間をループするsleepで調整したいのですが Gosubの処理時間を計る方法ありませんか A_TickCountとかA_Nowとか見て処理開始と処理終了で引き算すればいいよ >>517 ; A_TickCount精度10ms StartTime := A_TickCount Sleep 1000 MsgBox % A_TickCount - StartTime " (ms)" ; ナノ秒の精度が欲しいなら高分解能タイマ DllCall("QueryPerformanceCounter", "Int64*", CounterBefore) Sleep 1000 DllCall("QueryPerformanceCounter", "Int64*", CounterAfter) MsgBox % CounterAfter*1000 / CounterBefore " (ms)" return StartTime := A_TickCount Gosub,A ElapsedTime := A_TickCount - StartTime MsgBox, %ElapsedTime% milliseconds have elapsed. これでも可? お二人が答えてくれてました。 ありがとうございます! >>511 ComObjCreate("QTTabBarLib.Scripting") を使って、使う度に毎回インスタンスを取得してますか? グローバル変数に一度取得したあと、使いまわしてたりしませんか >>511 です。 >>522 グローバル変数に代入してません。毎回取得してます。 後、mscorlib.dll ver 5.1.30514.0をダウンロードしSystem32フォルダへ投入した ところ、エラー内容が変わりました。下記のようになります。 --------------------------- Error in #include file "C:\Apps\MouseGestureL\Config\MG_User.ahk": 0x8013150B - Source: mscorlib Description: IPC ポートに接続できません。指定されたファイルが見つかりません。 HelpFile: (null) HelpContext: 0 Specifically: SelectedItems Line# 769: } 770: dirPath := MGU_GetDirFullPath(dirPath) 771: qs := ComObjCreate("QTTabBarLib.Scripting") 772: wnd := qs.ActiveWindow 773: qs.Open(dirPath) 774: if (file = TRUE) 774: { ---> 775: wnd.SelectedItems := fileOrDirPath 776: } 777: ObjRelease(qs) 778: } 780: { 781: Try 781: { 787: if (appName = null) Continue running the script? AHK起動から5分くらいたってから出るエラーって言うところが気になるんですけど どうでしょうか? 私の書いたソースを載せておきます。 MGU_OpenWithQTTabBar(fileOrDirPath, file){ if(file = TRUE){ fileName := MGU_GetFileNameFromPath(fileOrDirPath) dirPath := MGU_GetDirPathFromPath(fileOrDirPath) }else{ dirPath := fileOrDirPath } dirPath := MGU_GetDirFullPath(dirPath) qs := ComObjCreate("QTTabBarLib.Scripting") wnd := qs.ActiveWindow qs.Open(dirPath) if(file = TRUE){ wnd.SelectedItems := fileOrDirPath } ObjRelease(qs) } あと、qs.Open(dirPath)まではエラーなく進むんですけど、 wnd.SelectedItems := fileOrDirPath でエラーが出るんですよね〜。 理由がいまいち分かりません。 Chromeで何十ページも開いて、特定の文字(リンクになってる)をクリックする作業をしてるんですが、自動化したいです 特定の文字をクリックする方法があれば教えてください。 文字の場所はばらばらなので、場所指定のクリックは出来ません。 >>524 です。 結局、その箇所だけjsで対応することにしました。 原因は今も分からずです。 お騒がせしてすいませんでした。 >>525 1、最初に開くページをURLDownloadToFileでローカルにファイルとして落としていく 2、落としたファイルの中をLoop(file)、Loop,Readでループさせ、RegExMatch()で検索する 3、目的の文字列があったらRunでそのURLを開く >>527 自分には難しかったので、URLコピペして文字追加して貼り付ける方法で代用できました。 ありがとうございました。 お知恵拝借したく… getkeystateによってあるキーの押し下げ有無はとれますが そうでなく、「いま押し下げられてるキーを一覧で得る」ような方法はありますか? ホットキーなど使用していると、自分の環境だとわりと発行されたキーがそのまま残ったりします 今まではプログラム的にキー残りがないよう試行錯誤してましたが、単純に「物理的に、残ったそのキーをもう一回押す」と直ることに気づきました ちょうど、今押してるキーやマウスを画面表示させられるkbvというフリーソフトを見つけたので、それで一応対応はできなくはないのですが若干起動が重くて…なのでahk内でどうにか調べられたら良いなと思ったのです Win7です GUIでウインドウをたくさん作ると、左下のタスクバーのAHKのところにカーソルを持っていくと 作っただけのウインドウ数のタイトルがポップアップで出てきてしまいます 邪魔なので、これを出さないようにする方法ってありますか スクリプトは1つなので、1つのスクリプトに1つのポップアップのタイトルで十分だとおもうのですが >>529 実験してみたよ。 AHKのSetTimerでAltキーを監視してON/OFF表示させていて、 ついさっきたまたまAltを離しているのにAlt押しっぱなし状態になった。 しかし、AHKのGetKeyStateではOFF判定だった。 また同じ症状になった。 今度はON判定。 とりあえず、あてにならんわ。 529です、いろいろありがとうです キー押し下げ判定自体も精度アヤシイようだと、ちょっとアレですね 過度にahkでゴチャゴチャやらない方向で運用を見直すようにしてみます すり抜け自体体感してないからすり抜けるすり抜けるってのが何なのかすらわからん フックは?ディレイは?ちゃんとDown Up使ってる?Sleepも無茶な数値入れてない? よくわからんな Photoshopでマウスホイールのみで拡大縮小しようとして Alt Down Scroll Up Alt Up でやると、早くグリグリ回すと拡大しないときが数回に一回発生する。 Sleep入れてもダメ。 これがすり抜け? それそもそもの書き方がまずいんでは Alt押し込んでホイール離すを何度も何度も繰り返してるから操作のエミュレートになってない Alt押し下げた状態でホイール操作を待つっていうスクリプト書かないと >>539 キーやボタンと違ってホイールには押す/離すなんて判定は無いけど ホイール操作の何を待つんだ? wheel操作をalt downとalt upで挟めってこと loopで出来る >Alt押し込んでホイール離すを何度も何度も繰り返してる この文章からして意味不明だし とりあえず続けてもわかってくれそうになさそうだから帰ったらサンプルコード書くわ 「ホイール離すを繰り返す」→そんなことはしてませんよ なぜなら「ホイール離す」なんで動作は存在しないので そもそも質問者が何をやろうとしてるのか分かって無さそうだけど まあ>>538 も端折らずに自分が書いたコードそのまま貼った方がいいと思うけど >>544 的外れなサンプルとか要らんよ 俺は質問者でもなければコードなんて求めてないし ただお前の言う「ホイール離す」とは何のことだ?って聞いただけだし そもそも、Photoshopのオプションに「ホイールスクロールでズーム」という項目があるんだけどな。 AHKのすり抜け問題とは関係ないが Photoshop CS6 環境設定 - 一般 Photoshop CC 環境設定 - ツール にそれぞれ 「スクロールホイールでズーム」って項目あるよ チェック入れとけばAlt押さなくてもホイールだけでズームできる 釣りだったりして。 興味があったんで、541は見たいです。 すみません、538です。 出先なので、コードはうろ覚えなのですが、 実際はシフトとアルトを押しながらホイールを回す動作をしたいです。 Shift Down Alt Down Wheel Up(Down) Shift Up Alt Up で書いています。ゆっくり回す分には動作しますが、早く回すと抜けが発生すします。 >>539 が言うのはホイールを離すじゃなくてホイールを回すの間違いでは? ホイール操作を待つってスクリプトがよくわからないので、サンプルコード待ってます。 >>549 ありがとうございます。 バージョンが違うのでできるかはわかりませんが、それはそれで参考にさせて頂きます。 >>551 だからさ、それはahkのコードじゃないから質問する際にそういう中途半端な書き方は良くないぞって意味な で、本題だけど>>547 のオプション設定で済む話ならそれが一番いいだろうけど 余談になるがShiftやAltなど修飾キーならいちいちDownとかUpとか書かずとも WheelUp::Send, +!{WheelUp} だけでいいんじゃね? それでもすり抜けるならしょうがないね >>539 が言ってた「ホイール離す」は所詮そのレベルの勘違いだろうな 何を待つのかは未だによく分からんけど >>551 Wheel Up(Down) の前後に Sleep,50 を入れたらどうなる? >>552-553 失礼しました。 修飾キーでの記述では、そもそも全く動作しなかった記憶があります。 すり抜けも変な感じで、Shiftだけ押されてAltが押されないままホイールが回る動作をしたりします。 Sleepを入れて色々時間を調整すると、入れない時よりも失敗の頻度は改善されました。が、完全には対策できていません。 いやまぁ、使おうが使わまいが構わないけど、帰ったらサンプル書くよ 言いたいことが伝わってないのは気持ち悪い >>555 使い方がいまいちわからず、使ってませんでした… >>556 >>よろしくお願いしますm(_ _)m #NoEnv #InstallMouseHook ~*WheelDown:: ~*WheelUp:: wheel := A_ThisHotkey loop { If wheel contains ^,+,!,*,~,#,<,>,$ StringTrimLeft, wheel, wheel, 1 else BREAK } GetKeyState, state, LAlt If state = U send,{blind}{LAlt Down} sleep,30 send,{Blind}{{%wheel%} settimer,AltRelease,-200 Return AltRelease: send,{Blind}{LAlt up} Return すまんloop監視使うよりタイマー使ったほうが簡単だった 最初はloopで全体を監視してWheelを監視して回した分だけ変数にためて sendの回数部分に渡す予定だったけどややこしくなりそうだ 言いたかったのはこんな感じで、まずキーボード操作ならAltを押しっぱなしにしたままwheel操作をするはず その間Altは離さないはずなんだ これを簡単に書こうとして send,{LAlt Down}{Wheel up}{LAlt up} なんて書こうもんならログではホイール回すたびにAltキーが連打されることになる あ、ホットキーラベルの~は要らないわ。クセで書いちゃったけど >>562 質問者はサンプル待つつもりで「よろしく」って言ってるのに、横からしつこく揚げ足とりしてるあなたの方が頭冷やすべきでしょ >>564 横からしつこくもなにも俺は最初からその一点についてしか話してない それなのに一人で勝手に興奮してるだけ 間違いなら最初から間違い認めりゃいいだけなのにな キチガイなんだから 無視しとけよw なんでみんなからしつこいって 言われるかわからないんだから 冷やし中華はじめましたから!...冷やし中華はじめましたから!!! ワッチョイもIDも違う複数書き込みを >一人で >顔真っ赤 とか言い出したら要注意な >>558 ありがとうございます。 今外出中で試せないのですが、今夜やってみます。 #NoEnv #InstallMouseHook ; variable EtatWheelDown = 1 EtatWheelUp = 1 Check_EtatWheelDown = 1 Check_EtatWheelUp = 1 Loop, ; ( or SetTimer ) { if EtatWheelDown <> %Check_EtatWheelDown% ; Wheel Down is turn { Tooltip, Wheel Down is turn. Break } if EtatWheelUp <> %Check_EtatWheelUp% ; Wheel Up is turn { Tooltip, Wheel Up is turn. Break } Check_EtatWheelDown = %EtatWheelDown% Check_EtatWheelUp = %EtatWheelUp% } ~*WheelDown:: EtatWheelDown += 1 return ~*WheelUp:: EtatWheelUp += 1 return ちょっと探したらgetkeystateじゃないにしてもホイール回してるか回してないかの取得スクリプトならあった これでホイール離してる状態も取得できるな ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる