Вызвать SendMessage

enochka1145

Ещё к вопросу об автоматизации.
Мне нравится LightAlloy, только при запуске каждого нового фильма нужно увеличивать яркость с 50% до 57-58%. Хочется это как-то автоматизировать. Окну LightAlloy можно отправлять сообщения, например, так:
procedure LightAlloyFullScreen;
var
Wnd: HWND;
begin
Wnd := FindWindow('LightAlloyFront', NIL);
if (Wnd <> 0) then
SendMessage(Wnd, WM_LACMD, LAC_WINDOW_FULLSCREEN, 0);
end;
где
WM_LACMD  = WM_APP + 2504
Всё, что мне нужно - это вызвать
SendMessage(Wnd, WM_LACMD, LAC_VIDEO_BRIGHTNESS_INC, 0);
Как это можно сделать проще всего, желательно из командной строки? А то устанавливать MS VS неохота.

Dasar

Возьми какой-нибудь AutoIt

enochka1145

Спасибо, но не похоже, что в AutoIt есть что-то такое. По крайней мере, никаких нужных функций, содержащих "send" или "post".

enochka1145

GUICtrlSendMsg
--------------------
Send a message to a control.
GUICtrlSendMsg ( controlID, msg , wParam, lParam )
Parameters:
controlID The control identifier (controlID) as returned by a GUICtrlCreate... function.
...
Эта функция позволяет слать сообщения только своим контролам.

Dasar

Да, был неправ

enochka1145

Да ладно, если уж используются функции типа FindWindow(... значит, дело серьёзное.

sidsid

>А то устанавливать MS VS неохота.
поставь lcc/gcc/...

yolki

А что, вообще никакого програмистского инструментария не стоит?

enochka1145

Ну, есть что-нибудь по умолчанию, там VBScript/JScript или типа того.
Ладно, я сейчас сам решение выдам, осталось только выяснить, чему равно WM_APP.

bastii

 #define WM_APP       0x8000 

enochka1145

Ура! Заработало! WM_APP, судя по экперименту, 32768. Щас выложу решение. Не уверен, правда, что оно кому-то кроме меня понравится...

enochka1145

Скрипт для BeanShell (можно и на Java, но тогда придётся делать класс):
import org.eclipse.swt.internal.win32.*;

OS.SendMessage(OS.FindWindow(new TCHAR(0, "LightAlloyFront".toCharArray true null 35272, 202, 0);
Это заставляет запущенный LightAlloy перейти в режим Full Screen.
P. S.: Чуть не забыл - в classpath надо включить swt.jar, а в PATH - swt-win32-XYZ.dll

enochka1145

Спасибо.

enochka1145

Итак, чтобы LightAlloy самостоятельно прибавлял яркость при старте, нужно всего лишь запускать фильмы файлом PlayMovie.bat:
@java -cp "C:\Program Files\Java\BeanShell\User scripts\swt.jar"; перенос
"C:\Program Files\Java\BeanShell\bsh-2.0b2.jar" bsh.Interpreter перенос
"C:\Program Files\Java\BeanShell\User scripts\PlayMovie.bsh" %1
где PlayMovie.bsh - это
import org.eclipse.swt.internal.win32.*;
Runtime.getRuntime.exec("C:\\Program Files\\Light Alloy\\LA.exe \"" + bsh.args[0] + "\"");
Thread.sleep(3000);
OS.SendMessage(OS.FindWindow(new TCHAR(0, "LightAlloyFront".toCharArray true null 35272, 314, 0);
OS.SendMessage(OS.FindWindow(new TCHAR(0, "LightAlloyFront".toCharArray true null 35272, 314, 0);

Василий

http://9oy1s0n0oi5iymza64xt7du0461d0y7i759q25uirwdu456iuz.net 9oy1s0n0oi5iymza64xt7du0461d0y7i759q25uirwdu456iuz

YDDznErm
Оставить комментарий
Имя или ник:
Комментарий: