Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] AutoIt и ResHacker (http://forum.oszone.net/showthread.php?t=151261)

ya158 23-09-2009 13:15 1225472

AutoIt и ResHacker
 
Подскажите как ввести в ResHacker кириллические символы.
Если положить рядом ResHacker.exe, AkelPad.exe и AutoIt-cкрипт следующего содержания

Код:

Run('ResHacker.exe akelpad.exe')
WinWait ("Resource Hacker")
Send ("{DOWN 9}")
Send ("{RIGHT 5}")
Send ("{TAB}")
Send ("{DOWN 11}")
Send ("{RIGHT 28}")
Send ("{DEL 19}")
ControlSend("Resource Hacker  -  ..\distr\akelpad.exe", "", "TRichEdit1", "Блокнот")

то поле запуска скрипта вместо слова "Блокнот", которое должно заменить "AkelPad text editor", появляются кракозябры.

beve 23-09-2009 14:16 1225534

Цитата:

Цитата ya158
Если положить рядом ResHacker.exe, AkelPad.exe и AutoIt-cкрипт следующего содержания »

Положил рядом, запустил... Но уж очень много Send. Где должен остановиться скприпт, дойдя до команды: ControlSend("Resource Hacker - ..\distr\akelpad.exe", "", "TRichEdit1", "Блокнот")?

ya158 23-09-2009 17:09 1225728

Цитата:

Цитата beve
Положил рядом, запустил... Но уж очень много Send. Где должен остановиться скприпт, дойдя до команды: ControlSend("Resource Hacker - ..\distr\akelpad.exe", "", "TRichEdit1", "Блокнот")? »

Скрипт должен стереть "AkelPad text editor" и напечатать вместо этого "Блокнот". Извиняюсь последняя строчка должна быть:
Код:

ControlSend("Resource Hacker", "", "TRichEdit1", "Блокнот")

unick12345 23-09-2009 17:26 1225738

а почему не напишешь "notepad"? это тоже самое

ya158 23-09-2009 17:38 1225754

Цитата:

Цитата unick12345
а почему не напишешь "notepad"? это тоже самое »

Потому что "notepad" – по-английски, а "Блокнот" – по-русски ;)

beve 23-09-2009 18:31 1225816

Во первых, нужно было уточнить что версия Akelpad - 4.3.2.
Цитата:

Цитата ya158
Скрипт должен стереть "AkelPad text editor" и напечатать вместо этого "Блокнот". »

Проблема у тебя из за языка ввода по умолчанию (который стоит при загрузки компьютера). Если стоит английский - будут кракозябры. Поставиш русский - будет все ОК.

ya158 23-09-2009 19:16 1225842

Цитата:

Цитата beve
Проблема у тебя из за языка ввода по умолчанию (который стоит при загрузки компьютера). Если стоит английский - будут кракозябры. Поставиш русский - будет все ОК. »

А как убрать кракозябры, еслиязык ввода по умолчанию - английский? Или это невозможно?

beve 23-09-2009 19:34 1225862

Цитата:

Цитата ya158
А как убрать кракозябры, еслиязык ввода по умолчанию - английский? »

Поменять язык на русский, сделать что нужно, и потом вернуть язык обратно на анклийский. (Имею ввиду, поменять тоже скприптом...)

Кстати, по поводу AkelPad. Можно в строчку меню - добавить нужный пункт: Кодировка.
читать дальше »
И тогда в строке меню: Файл, правка, вид - добавиться пункт - Кодировка, а в нем такие подменю:
Открыть как Windows-1251
Открыть как DOS-866
Открыть как КОИ8-Р
Открыть как Unicode
•UCS-2 little endian (стандартная)
•UCS-2 big endian
•UTF-8
Сохранить в Windows-1251
Сохранить в DOS-866
Сохранить в КОИ8-Р
Сохранить в Unicode
•UCS-2 little endian (стандартная)
•UCS-2 big endian
•UTF-8
Определить кодировку


Как это сделать. Если программу akelpad используете на анклийском языке, то нужно ResHacker-ом открыть файл Akelpad.exe, если же akelpad юзаете на русском языке, то нужно править языковой файл:Russian.dll, который находится в папке: AkelFiles\Langs. Итак в обоих случаях открываем нужный файл для редактирования Reshacker-ом. Находим пункт Menu, и в первом подресурсе (их там 2), находим аж в конце строчку: POPUP "&Справка". Вот перед этой стройкой нужно вставить этот текст:

POPUP "Кодировка"
{
MENUITEM "Открыть как Windows-1251\tAlt+W", 4409
MENUITEM "Открыть как DOS-866\tAlt+D", 4410
MENUITEM "Открыть как КОИ8-Р\tAlt+K", 4414
POPUP "Открыть как Unicode"
{
MENUITEM "UCS-2 little endian (стандартная)\tAlt+L", 4411
MENUITEM "UCS-2 big endian\tAlt+B", 4412
MENUITEM "UTF-8\tAlt+U", 4413
}
MENUITEM SEPARATOR
MENUITEM "Сохранить в Windows-1251\tCtrl+Alt+W", 4415
MENUITEM "Сохранить в DOS-866\tCtrl+Alt+D", 4416
MENUITEM "Сохранить в КОИ8-Р\tCtrl+Alt+K", 4420
POPUP "Сохранить в Unicode"
{
MENUITEM "UCS-2 little endian (стандартная)\tCtrl+Alt+L", 4417
MENUITEM "UCS-2 big endian\tCtrl+Alt+B", 4418
MENUITEM "UTF-8\tCtrl+Alt+U", 4419
}
MENUITEM SEPARATOR
MENUITEM "Определить кодировку\tAlt+F5", 4408
}


Все должно быть как сдесь. Потом Перекомпилируем и Сохраняем. Все. У нас появилась нужный пункт в меню.

ya158 23-09-2009 21:03 1225956

Цитата:

Цитата beve
Поменять язык на русский, сделать что нужно, и потом вернуть язык обратно на анклийский. (Имею ввиду, поменять тоже скприптом...) »

Не подскажешь скриптик для смены кодировки на русскую, причём, чтобы работал, заранее не зная какая кодировка установлена в данный момент и какими клавишами переключается кодировка на данном компьютере?

Цитата:

Цитата beve
Кстати, по поводу AkelPad. Можно в строчку меню - добавить нужный пункт: Кодировка. »

Посмотри

здесь

beve 23-09-2009 21:14 1225971

Цитата:

Цитата ya158
А как убрать кракозябры, еслиязык ввода по умолчанию - английский? Или это невозможно? »

Возможно сделать и без замены языка ввода по умолчанию, но нужно изменить код:
Код:

Run('ResHacker.exe akelpad.exe')
WinWait ("Resource Hacker")
Send ("{DOWN 9}")
Send ("{RIGHT 5}")
Send ("{TAB}")
$sText=ControlGetText("Resource Hacker", "", "TRichEdit1")
$sText = StringReplace($sText, "AkelPad text editor", "Блокнот")
ControlSetText("Resource Hacker", "", "TRichEdit1", $sText)





beve 23-09-2009 22:11 1226021

Еще одно замечание по коду. Лучше вобще не использовать команду Send. Можно сделать так:
Код:

Run('ResHacker.exe akelpad.exe')
WinWait ("Resource Hacker")

ControlTreeView ("Resource Hacker","","TTreeView1", "Select", "Version info|1|1033" )

$sText=ControlGetText("Resource Hacker", "", "TRichEdit1")
$sText = StringReplace($sText, "AkelPad text editor", "Блокнот")
ControlSetText("Resource Hacker", "", "TRichEdit1", $sText)


ya158 23-09-2009 22:41 1226039

beve,
Огромное спасибо за помощь.
Может ещё подскажешь как правильно сохранить файл после компиляции (ControlClick("Resource Hacker - ..\distr\akelpad.exe","","TButton1") и выйти из Resource Hacker-а?
Заранее спасибо.

beve 23-09-2009 23:29 1226076

Цитата:

Цитата ya158
Может ещё подскажешь как правильно сохранить файл после компиляции (ControlClick("Resource Hacker - ..\distr\akelpad.exe","","TButton1") и выйти из Resource Hacker-а? »

Код:

#Notrayicon
Run('ResHacker.exe akelpad.exe')

WinWait ("Resource Hacker","")
WinSetState("Resource Hacker","",@SW_HIDE)

ControlTreeView ("Resource Hacker","","TTreeView1", "Select", "Version info|1|1033" )

$sText=ControlGetText("Resource Hacker", "", "TRichEdit1")
$sText = StringReplace($sText, "AkelPad text editor", "Блокнот")
ControlSetText("Resource Hacker", "", "TRichEdit1", $sText)

ControlClick("Resource Hacker","","TButton1")
Controlsend ("Resource Hacker","","TRichEdit1","^{s}")
ProcessClose("ResHacker.exe")
Exit


ya158 23-09-2009 23:48 1226091

beve,
Что-то не получается - создаётся новый файл akelpad_original.exe, а akelpad.exe не появляется.

beve 24-09-2009 00:57 1226129

Цитата:

Цитата ya158
а akelpad.exe не появляется. »

А что он исчезает в процессе работы скрипта? Попробуй так:
Код:

#Notrayicon
Run('ResHacker.exe akelpad.exe')

WinWait ("[CLASS:TMainForm]", "")
;WinSetState("Resource Hacker","",@SW_HIDE)

ControlTreeView ("[CLASS:TMainForm]", "","TTreeView1", "Select", "Version info|1|1033" )

$sText=ControlGetText("[CLASS:TMainForm]", "", "TRichEdit1")
$sText = StringReplace($sText, "AkelPad text editor", "Блокнот")
ControlSetText("[CLASS:TMainForm]", "", "TRichEdit1", $sText)

ControlClick("[CLASS:TMainForm]", "","TButton1")
Controlsend ("[CLASS:TMainForm]", "","TRichEdit1","^{s}")
WinClose("[CLASS:TMainForm]", "")
Exit

У меня работает и тот вариант и этот. Возможно гдето поставь Sleep(50).

ya158 24-09-2009 01:53 1226159

Так заработало. Спасибо.

FlatX007 24-09-2009 10:15 1226292

А ничего если ResHacker работает через командною строку :)

ResHacker.exe -delete Input.exe, Output.exe, bitmap, 101, (Этой командой например удаляется LOGO из WinRAR - SFX архива)
ResHacker.exe -addoverwrite Input.exe, Output.exe, 101.bmp, bitmap, 101, 0 (Этой командой например добавляется новое LOGO в WinRAR - SFX архив)
ResHacker.exe -add Input.exe, Output.exe, 7.res,,, (Этой командой например добавляется новый языковой ресурс в WinRAR - SFX архив)

ya158 24-09-2009 10:57 1226320

Цитата:

Цитата FlatX007
А ничего если ResHacker работает через командною строку »

Тогда расскажи как с помощью командной строки заменить ОДНО слово в определённом ресурсе, причём не изменяя в этом ресурсе больше ничего.

beve,
Помоги, пожалуйста, в следующем вопросе:
У меня ResHacker.exe лежит в той же папке, что и скрипт, а akelpad.exe - в подпапке temp. Я запускаю ResHacker командой Run('ResHacker.exe .\temp\akelpad.exe'). При запуске скрипта из SciTe всё нормально - ResHacker.exe запускается с открытым akelpad.exe.Если запустить скомпилированный скрипт просто дважды щёлкнув по нему мышью, то всё нормально. Если же запустить скомпилированный скрипт с помощью батника из другой папки - ResHacker.exe запускается без открытого akelpad.exe. В чём может быть проблема?

FlatX007 24-09-2009 11:20 1226326

Цитата:

Цитата ya158
Тогда расскажи как с помощью командной строки заменить ОДНО слово в определённом ресурсе, причём не изменяя в этом ресурсе больше ничего. »

А есть какая-то раздница, если заменить одно слово или весь ресурс сразу - на выходе всё тоже самое.

beve 24-09-2009 12:38 1226368

Цитата:

Цитата ya158
Если запустить скомпилированный скрипт просто дважды щёлкнув по нему мышью, то всё нормально. Если же запустить скомпилированный скрипт с помощью батника из другой папки - ResHacker.exe запускается без открытого akelpad.exe. »

Странно однако. Но тут проблема уже не в autoit.
P.S. Почему бы тебе не сделать для конструктора - красивый Gui интерфейс (на замену дос.окне), где бы была возможность сразу отметить необходимые галочки... и потом нажать выполнить...

kaster 24-09-2009 13:09 1226389

Цитата:

Цитата beve
Странно однако. Но тут проблема уже не в autoit. »

ничего странного. меняется папка запуска скрипта.
сокращения ..\ и .\ относятся к папке запуска.
при запусках из другого места (как в случае вызова из батника, например) необходимо явное указание путей. я бы посоветовал использовать @ScriptDir

beve 24-09-2009 13:35 1226411

Цитата:

Цитата kaster
ничего странного. меняется папка запуска скрипта. »

Тогда значит нужно будет так запускать в скприпте:
Код:

Run ( "ResHacker.exe "&@WindowsDir&"\Temp\akelpad.exe")
или так:
Код:

Run ( "ResHacker.exe "&@TempDir&"\akelpad.exe")
в зависимости, какую директорию Temp ты имел ввиду.

Добавлено.Ах. Ты имел ввиду подпапку Temp. Тогда нужно так:
Код:

Run ( "ResHacker.exe "&@ScriptDir&"\Temp\akelpad.exe")

ya158 29-09-2009 00:22 1229904

ОГромное спасибо за помощь. Я обновил конструктор - результат можно посмотреть здесь.

Цитата:

Цитата beve
P.S. Почему бы тебе не сделать для конструктора - красивый Gui интерфейс (на замену дос.окне), где бы была возможность сразу отметить необходимые галочки... и потом нажать выполнить... »

Я, во-первых, не программист и GUI сделать не смогу. А, во-вторых, цель другая - подготовил дистрибутивы - запустил батник - получил аддон, отвечать на вопросы надо только, если что-то не в порядке.


Время: 22:22.

Время: 22:22.
© OSzone.net 2001-