PDA

Показать полную графическую версию : [решено] AutoIt и ResHacker


Страниц : [1] 2

ya158
23-09-2009, 13:15
Подскажите как ввести в 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
Если положить рядом ResHacker.exe, AkelPad.exe и AutoIt-cкрипт следующего содержания »
Положил рядом, запустил... Но уж очень много Send. Где должен остановиться скприпт, дойдя до команды: ControlSend("Resource Hacker - ..\distr\akelpad.exe", "", "TRichEdit1", "Блокнот")?

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

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

unick12345
23-09-2009, 17:26
а почему не напишешь "notepad"? это тоже самое

ya158
23-09-2009, 17:38
а почему не напишешь "notepad"? это тоже самое »
Потому что "notepad" – по-английски, а "Блокнот" – по-русски ;)

beve
23-09-2009, 18:31
Во первых, нужно было уточнить что версия Akelpad - 4.3.2.
Скрипт должен стереть "AkelPad text editor" и напечатать вместо этого "Блокнот". »
Проблема у тебя из за языка ввода по умолчанию (который стоит при загрузки компьютера). Если стоит английский - будут кракозябры. Поставиш русский - будет все ОК.

ya158
23-09-2009, 19:16
Проблема у тебя из за языка ввода по умолчанию (который стоит при загрузки компьютера). Если стоит английский - будут кракозябры. Поставиш русский - будет все ОК. »
А как убрать кракозябры, еслиязык ввода по умолчанию - английский? Или это невозможно?

beve
23-09-2009, 19:34
А как убрать кракозябры, еслиязык ввода по умолчанию - английский? »
Поменять язык на русский, сделать что нужно, и потом вернуть язык обратно на анклийский. (Имею ввиду, поменять тоже скприптом...)

Кстати, по поводу 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
Поменять язык на русский, сделать что нужно, и потом вернуть язык обратно на анклийский. (Имею ввиду, поменять тоже скприптом...) »
Не подскажешь скриптик для смены кодировки на русскую, причём, чтобы работал, заранее не зная какая кодировка установлена в данный момент и какими клавишами переключается кодировка на данном компьютере?

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

здесь (http://forum.oszone.net/post-941925-530.html)

beve
23-09-2009, 21:14
А как убрать кракозябры, еслиязык ввода по умолчанию - английский? Или это невозможно? »
Возможно сделать и без замены языка ввода по умолчанию, но нужно изменить код: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
Еще одно замечание по коду. Лучше вобще не использовать команду 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
beve,
Огромное спасибо за помощь.
Может ещё подскажешь как правильно сохранить файл после компиляции (ControlClick("Resource Hacker - ..\distr\akelpad.exe","","TButton1") и выйти из Resource Hacker-а?
Заранее спасибо.

beve
23-09-2009, 23:29
Может ещё подскажешь как правильно сохранить файл после компиляции (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
beve,
Что-то не получается - создаётся новый файл akelpad_original.exe, а akelpad.exe не появляется.

beve
24-09-2009, 00:57
а 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
Так заработало. Спасибо.

FlatX007
24-09-2009, 10:15
А ничего если 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
А ничего если 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
Тогда расскажи как с помощью командной строки заменить ОДНО слово в определённом ресурсе, причём не изменяя в этом ресурсе больше ничего. »

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

beve
24-09-2009, 12:38
Если запустить скомпилированный скрипт просто дважды щёлкнув по нему мышью, то всё нормально. Если же запустить скомпилированный скрипт с помощью батника из другой папки - ResHacker.exe запускается без открытого akelpad.exe. »
Странно однако. Но тут проблема уже не в autoit.
P.S. Почему бы тебе не сделать для конструктора - красивый Gui интерфейс (на замену дос.окне), где бы была возможность сразу отметить необходимые галочки... и потом нажать выполнить...




© OSzone.net 2001-2012