1 (изменено: AleksLee, 2012-06-26 03:53:24)

Тема: AHK: запись инфы в файл по команде из полноэкранного приложения

ДОброго времени суток, ко многим знакомым уже приставал с вопросом, посоветовали обратиться сюда, тк язык говорят позволяет такое сделать.
Я честно в этом вообще ничего не понимаю, надеюсь на вашу помощь. Сейчас сижу читаю темы и мануалы, но понимаю, что наверно не осилю сам, поэтому рискну написать мольбу о помощи.
У меня вопрос вот в чем, можно ли чтобы нажимая в полноэкранном приложении (игрушке) клавиши 1, 2 или 3 происходила в фоне замена определенной строки в файле. Т.е. я нажал кнопку 1 в это время в фоне открылся тхт файл и например строка в тегах <target>200</target> заменилась строкой <target>100</target>. По нажатию кнопки 2 - <target>200</target>, по нажатию 3 - <target>300</target>. НАдеюсь написал понятно. Помогите плиз. Ушел дальше читать темы и мануалы.

Само чтение файла и замену в нем строки я понял что вот так можно сделать -  это просто для примера.

*1::

FileRead, Var, C:\work.txt

Loop
{
  StringReplace, Var, Var, <info>true</info>, <info>ВСЕ ИДЕТ КАК НАДО</info>, All
    If ErrorLevel = 0  ; No more replacements needed.
      Break
}
FileDelete, C:\work.txt
FileAppend %Var%, C:\work.txt
return

О! в общем я разобрался и получил эффект который хотел, но помогите плиз с одним, никак не могу понять как осуществить чтобы в файле искал не полную строку как я написал выше<target>300</target, а игнорировал само число 300, тк оно изначально там может быть любым, те ориентировался только на <target>*****</target>?

2 (изменено: Александр_, 2012-06-26 13:57:57)

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

AleksLee пишет:

никак не могу понять как осуществить чтобы в файле искал не полную строку как я написал выше<target>300</target, а игнорировал само число 300, тк оно изначально там может быть любым, те ориентировался только на <target>*****</target>?

FoundPos := RegExMatch(Var, "<target>(\d+)</target>", Result)

Совпадение на символе номер FoundPos, найдена строка Result, а число в тегах Result1.
Используя запросы вперёд и назад:

FoundPos := RegExMatch(Var, "(?<=<target>)\d+(?=</target>)", Result)

Тоже самое, но найденным шаблоном будет только число.
Замена:

NewStr := RegExReplace(Var, "<target>\d+</target>", "<target>700</target>")

собственно замена всего шаблона. Результат помещён в NewStr.
См. это, это и это.

3

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

Огpомное спасибо за ответ, а можете еще мне помочь? Больная фантазия тянет вперед-можно ли осуществить похожий скрипт... - чтобы по нажатию горячей клавиши перед полноэкранным приложением появлялось окошко с выпадающий списком, в котором был были все возможные варианты числа, которое находится в файле, как и в примере выше в тегах target, и при выборе одного из вариантов происходит перезапись существующей значения и перезапись самого файла.
Для меня это очень сложно, там надо подключать gui, а тут я вообще ничего не понял. Но если не сложно помогите плиз. Может тут похожий пример где есть. Заранее благодарен.

4

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

Задавайте более конкретные вопросы. Составляйте нужный gui, устанавливаете ему стиль AlwaysOnTop и скрываете/отображаете по команде.

5 (изменено: AleksLee, 2012-06-28 18:55:13)

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

Ну вот хочется почти такое же:

 *1::


Gui, Add, DropDownList, gChoose x6 y45 w200 h20 R3, 1|2|3
   Gui, Add, Text, vText cred x6 y75 w200 h20
   Gui, Show
   Return

Choose:
   if A_GuiControl = 1
      Goto, 1
   if A_GuiControl = 2
      Goto, 2
   if A_GuiControl = 3
      Goto, 3
   Return
   
1:
   GuiControl,, Text, metka 1

FileRead, Var, C:\test.xml

Loop
{
  StringReplace, Var, Var, <gun>f411</gun>, <gun>222</gun>, All
    If ErrorLevel = 0  ; No more replacements needed.
      Break
}
FileDelete, C:\test.xml
FileAppend %Var%, C:\test.xml

   Return
   
2:
   GuiControl,, Text, metka 2
   Return
3:
   GuiControl,, Text, metka 3
   Return

Вот приблизительно вот так как смог понять.... ну и список будет соответственно диннее и на каждую будет своя такая же команда с заменой.
А не подскажите как сделать чтобы путь был независимо от диска, т.е диск и место может у всех разные, но конечные папки полюбому допустим \111\222\333\DARGunSetting.xml или например чтобы если скрипт лежал бы в папке конечной рядом с файлом test.хмл, тогда вообще путь не нужно соблюдать будет.
Ну вот, осталось только понять как сделать так чтобы она выскакивала всегда по нажатии горячей клавиши, а то сейчас при повторном нажатии ругается что не работает.
И можно ли сделать так, что бы оно появлялось, а приложение не сворачивалось?
Можно ли чтобы выбор поисходил не при выборе пункта меню, а еще после подтверждения нажатия кнопки ОК?

6

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

AleksLee, я ведь вам уже писАл:

Александр_ пишет:

Составляйте нужный gui, устанавливаете ему стиль AlwaysOnTop и скрываете/отображаете по команде.

А у вас Gui создаётся по горячей клавише. Код должен быть примерно такого вида:

Gui, Add, DropDownList, vList, 1|2|3 ;создаём gui
Gui, Add, button, glButton, Enter
return

*1::
   Gui, Show ;отображаем gui
return

lButton:
   Gui, Submit
   f(List)
return
   
f(x)
{
   msgbox выбран вариант %x%.
   return
}

Esc::
GuiClose:
   ExitApp
AleksLee пишет:

И можно ли сделать так, что бы оно появлялось, а приложение не сворачивалось?

Зависит от приложения.

7

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

AleksLee пишет:

И можно ли сделать так, что бы оно появлялось, а приложение не сворачивалось?

Можно, если приложение запущенно в оконном режиме (и растянуто на весь экран, если нужен эффект полноэкранного).

8 (изменено: AleksLee, 2012-07-02 17:41:58)

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

Извинте, за глупые вопросы, но 2-й день уже мучаюсь, можно ли сделать так чтобы производилась замена в строке из нескольких символов только конкретного символа, например в строке  "<target>АБСД</target>" менялась сначала буква А, а остальное оставалось, потом только Б и остальное не трогалось и т.д. Надеюсь понятно объяснил? по мануалу что то у меня ничего не получается. Причем нге зависимо от того какая там буква просто по факту 3 символ значит третий.

9

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

Если я верно понял задачу, то RegExReplace не позволяет редактировать найденные шаблоны, поэтому нужно либо разбить строку на подшаблоны, либо просто находить нужный фрагмент и заменять его вручную.

10

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

А на подшаблоны это как?

11

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

AleksLee пишет:

А на подшаблоны это как?

Во втором сообщении самый первый пример, там \d+ является подшаблоном и его значение можно использовать. Пример:

Var := "sgshdhfhf<target>ABCD</target>fghfgh"
NewStr := RegExReplace(Var, "(?<=<target>)(\w)(\w)(\w)(\w)(?=</target>)", "Z$2$3$4")
msgbox %NewStr%

Ищется 4 символа в тегах и каждый из них является подшаблоном.

12

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

В очередной раз прошу прощения, что задаю наверно глупые вопросы, но бьюсь уже не первый день, ничего не выходит казалось бы в элементарном вопросе, помогите если не трудно.
В продолженнии всего вышесказанного, есть файл в нем для упрощения 1 строка

<targetX>-300</targetX>

(чисто там может быть абсолютно любое положительное отрицательное...любое)
Хотел сделать чтобы можно было сделать окно с элементом EDIT и кнопкой СОХРАНИТЬ, чтобы можно было ввести в этом поле значение любое, положительное или отрицательное и нажав на кнопку Сохранить внести это значение в строку <targetX>-300</targetX>, заменив в данном примере -300 на то, что будет введено в строке EDIT.
Пишу вот так:

Gui, Add, Edit, vLength1 
Gui, Add, Button, gSaveSettigs, Сохранить
Gui, Show
Return

 

SaveSettigs:
   Gui, Submit, NoHide
  FileRead, Var, DAR.xml
NewStr := RegExReplace(Var, "(?<=targetX>)(.*)(?=</targetX>)", %Length1%)

FileDelete, DAR.xml
FileAppend, %NewStr%, DAR.xml
   Return

Но в итоге ничего не меняется...видимо выражение для поиска и замены не то, да?

13 (изменено: Александр_, 2012-07-20 01:14:55)

Re: AHK: запись инфы в файл по команде из полноэкранного приложения

AleksLee пишет:

NewStr := RegExReplace(Var, "(?<=targetX>)(.*)(?=</targetX>)", %Length1%)

Ошибка выделена в цитате.