1 (изменено: seriousstas, 2018-05-22 23:47:01)

Тема: AHK: [решено]Отправка cmdline из другой программы

Новичек .. ,подскажите ,  вот пример для autoit :

 ControlSend($cmdline[1], "", $cmdline[2], $cmdline[3])


Задача отправлять переменные скрипту через командную строку.
Есть что-то подобное для AutoHotkey ?
Заметил , что AutoHotkey скрипты быстрее стартуют и работают под 7-OS..

2

Re: AHK: [решено]Отправка cmdline из другой программы

А при чём здесь ControlSend? Через командную строку скрипту можно что-то передать при его запуске. Для этого используется команда Run.

3 (изменено: seriousstas, 2018-05-23 00:05:18)

Re: AHK: [решено]Отправка cmdline из другой программы

YMP пишет:

А при чём здесь ControlSend? Через командную строку скрипту можно что-то передать при его запуске. Для этого используется команда Run.

Я ведь написал , что это пример (автоит) ..
Подскажите как тут быть?
Допустим у готового скрипта будет  название SendKey.exe.
Оптавляю скрипту (что выше) команду:

sendkey.exe|"[CLASS:{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}]" "MegaPanelSplitterWindowContainer1" "{NUMPAD8}"

далее получаю NUMPAD8 в нужном окне..
Подскажите мне на этом примере   , как обявить эти три переменные для AutoHotkey?
Спасибо заранее!

4

Re: AHK: [решено]Отправка cmdline из другой программы

Вы хотите обмениваться данными между скриптами?
Тогда тут есть пример:
https://autohotkey.com/docs/commands/OnMessage.htm

5

Re: AHK: [решено]Отправка cmdline из другой программы

Может как-то связано с stdin, stdout?

1.1.17.00 - December 27, 2014
New features:
AutoHotkey.exe * can be used to execute script text piped from another process instead of read from file


[v1.1.17+]: Specify an asterisk (or two) as shown below to open the standard input/output/error stream:

FileOpen("*", "r")   ; for stdin
FileOpen("*", "w")   ; for stdout

6 (изменено: seriousstas, 2018-05-23 00:06:42)

Re: AHK: [решено]Отправка cmdline из другой программы

Вы хотите обмениваться данными между скриптами?

Может как-то связано с stdin, stdout?

Спасибо Вам!
Попробую еще раз пояснить :
Есть программа IcarDS на кнопки которой нужно повесить управление другой программой ( отсылку хоткеев в аудиоплеер)
Что-б не плодить скрипты имеем один с тремя  переменными для  Autoit! (назовем sendkey.exe):

ControlSend($cmdline[1], "", $cmdline[2], $cmdline[3])

Из IcarDS я отправляю разные команды скрипту, что-б тот посылал хоткеи через ControlSend .
В автоит достаточно просто вписать переменные  :
$cmdline[1]
$cmdline[2]
$cmdline[3]
Затем из вне стучим ,к примеру (это команды скрипту Autoit из IcarDS) :
\sendkey.exe|"[CLASS:{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}]" "MegaPanelSplitterWindowContainer1" "{NUMPAD8}"
или
\sendkey.exe|"[CLASS:{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}]" "MegaPanelSplitterWindowContainer1" "{M}"
где $cmdline[1] - это "[CLASS:{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}]"  ,
$cmdline[2] это  "MegaPanelSplitterWindowContainer1" и тд .., а sendkey.exe - это наш скрипт.
Так отправляем разные хоткеи ,но автоит-скрипт  почему-то обрабатывается долго , до 500мс, в отличии от того-же https://autohotkey.com/docs/commands/ControlSend.htm
Поэтому и спросил, как это "повторить" для AutoHotkey ?)
Типа этого :
ControlSend, %cmdline[1]%, %cmdline[3]% , %cmdline[2]%

7

Re: AHK: [решено]Отправка cmdline из другой программы

https://autohotkey.com/docs/Scripts.htm#cmd

8 (изменено: seriousstas, 2018-05-19 22:41:38)

Re: AHK: [решено]Отправка cmdline из другой программы

Malcev
Спасибо еще-раз за октлик,
буду признателен за любой простой пример здесь ..

9

Re: AHK: [решено]Отправка cmdline из другой программы

Тут что-то http://www.script-coding.com/AutoHotkey/AhkParams.html
.. я так понимаю простого пути нет ?
Нужно читать , ститать и извлекать ключи ?

10

Re: AHK: [решено]Отправка cmdline из другой программы

По моей ссылке простой пример обработки параметров:

for n, param in A_Args  ; For each parameter:
{
    MsgBox Parameter number %n% is %param%.
}

11 (изменено: seriousstas, 2018-05-21 01:49:58)

Re: AHK: [решено]Отправка cmdline из другой программы

Malcev пишет:

По моей ссылке простой пример обработки параметров:

for n, param in A_Args  ; For each parameter:
{
    MsgBox Parameter number %n% is %param%.
}

Пробую так :


for n, param in A_Args
{
ControlSend, A_Args[1], A_Args[2] , A_Args[3]
}

Ну и отправляю из TC строку с тремя значениями для проверки:
sendkey.exe /MegaPanelSplitterWindowContainer1 /{1} /ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Где ошибки ?)

12

Re: AHK: [решено]Отправка cmdline из другой программы

Попробуйте-ка с MsgBox сначала, чтобы глупости не писать.

13 (изменено: seriousstas, 2018-05-22 23:43:50)

Re: AHK: [решено]Отправка cmdline из другой программы

stealzy
Выше писал, что новичек .. первые попытки + инглиш на 3-ку).
Вот компилирую :

for n, param in A_Args 
{
    MsgBox Parameter number %n% is %param%.
}

Далее какой вид строки : мне нужны [Switches] ? или сразу вписывать параметры через пробел ?

CompiledScript.exe [Switches] [Script Parameters]

14

Re: AHK: [решено]Отправка cmdline из другой программы

Может, никак не сделаете (или очень сложно будет).
https://autohotkey.com/boards/viewtopic … ec+ComSpec.

15

Re: AHK: [решено]Отправка cmdline из другой программы

seriousstas пишет:

Пробую так :


for n, param in A_Args
{
ControlSend, A_Args[1], A_Args[2] , A_Args[3]
}

Ну и отправляю из TC строку с тремя значениями для проверки:
sendkey.exe /MegaPanelSplitterWindowContainer1 /{1} /ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Где ошибки ?)

Насколько я понял, cmdline в Autoit — это аналог A_Args в АНК. Тогда цикл for вам не нужен здесь. А в командной строке аргументы пишите без /.

16

Re: AHK: [решено]Отправка cmdline из другой программы

seriousstas, компилируете обработчик sendkey.exe:

ControlSend, % A_Args[1], % A_Args[2], % A_Args[3]

После этого запустив команду

sendkey.exe Edit1 test A

в активное окно блокнота отправится слово test.

17 (изменено: seriousstas, 2018-05-21 16:12:41)

Re: AHK: [решено]Отправка cmdline из другой программы

YMP
Ок.!

Malcev
Что-то не так ..
Вместо блокнота "test" возвращается в строку(ну и пробовал конечно в другие окна и коммады отправлять..):

Post's attachments

Снимок экрана (74).png 423.67 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

18

Re: AHK: [решено]Отправка cmdline из другой программы

Вместо "A" впишите имя окна.

19 (изменено: seriousstas, 2018-05-22 23:44:15)

Re: AHK: [решено]Отправка cmdline из другой программы

Malcev
Спасибо ! Заработало).

Для хоткеев оказалось нужны кавычки(был пробел):
sendkey.exe "MegaPanelSplitterWindowContainer1" "{Numpad0}" "ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}"

20

Re: AHK: [решено]Отправка cmdline из другой программы

Не для хоткеев, а для параметров в которых содержится пробел.
Читайте внимательно справку.

21 (изменено: seriousstas, 2018-05-22 23:44:27)

Re: AHK: [решено]Отправка cmdline из другой программы

Malcev
Я понял (до того ,как прочитал))).

22 (изменено: seriousstas, 2018-05-22 17:24:58)

Re: AHK: [решено]Отправка cmdline из другой программы

Есть еще задачи покрутить колесо мышы , еcли есть 4-й аргумент.
Ну и переключать раскладку для отправки англ. символов..
Вопрос - я правильно "считаю" аргументы ? (нашел такой скриптик) :

If %0% ; Выборка аргументов командной строки
{
    args := []
    vCountArgs :=0
    Loop %0%
      {
        args[A_Index] := %A_Index%
        vCountArgs++
      }
}

Ну и он в основном скрипте (% A_Args[4] - крутит колесо мышки):


SetControlDelay ,0
If (A_Args.Length() < 4) {; Исправлено
SendMessage, 0x50,, 0x4090409,, A
ControlSend, % A_Args[1], % A_Args[2], % A_Args[3]
}
else{
if(A_Is64bitOS)
var = {88D33FF9-8199-4332-B69C-6B99D67A24C9}2
else
var = {88D33FF9-8199-4332-B69C-6B99D67A24C9}1
Loop, 2
    ControlClick, %var%, , Analog VU Meter, % A_Args[4]
}

23

Re: AHK: [решено]Отправка cmdline из другой программы

Вы невнимательно читаете справку.
По ссылке из 7 поста всё написано с примерами.

24 (изменено: seriousstas, 2018-05-22 23:45:15)

Re: AHK: [решено]Отправка cmdline из другой программы

Malcev
Читаю , на сколько успеваю изучать инглиш).
Дай-те что-то на русском..

Выборка аргументов командной строки

Условие If (vCountArgs < 4) {
Что выше  - работает - спросил, тк думаю - есть проще способ.
............

if A_Args.Length() < 3

Поправил ..

25

Re: AHK: [решено]Отправка cmdline из другой программы

Читайте в русском переводе:

Gourmet пишет:

Передача скрипту параметров командной строки

Androgen Belkin пишет:

Как передавать скрипту параметры командной строки