Страница 1 из 1

Галактика и WinAPI

Добавлено: 21 фев 2006, 14:56
ExBallistik
доброго времени суток, всем!
подскажите, пожалуйста, как при помощи функций WinAPI заполнить текстовое поле(Edit) в дочернем окне Галактики? до окна добрался, фокус этому контролу передал, а вот текстом поле заполнить не получается. пробовал так:
SetWindowText(WndCh,PChar('Text')) и
PostMessage(WndCh,WM_SETTEXT,0,Integer(PChar('Text')));
ничего не вышло :(. возможно ли вообще это сделать ф-ми WinAPI? если да, то где ошибка? если нет, то как реализовать?
PS: я не программист Галактики, работаю с ней как с обычным приложением (не используя средства Атлантиса), поэтому попрошу отнестись к возможно глупому вопросу лояльно.

Добавлено: 21 фев 2006, 16:16
WiRuc
Записывать необходимый текст в Clipboard, устанавливать фокус на контрол и передавать сообщение WM_PASTE.

Добавлено: 22 фев 2006, 08:05
ExBallistik
копирнул в Clipboard, окно открывается, фокус передается, но текст почему то не вставляется автоматом, а только после нажатия Shift+Ins :(. в чем дело? с блокнотом все работает отлично.

Добавлено: 22 фев 2006, 12:32
KATZ
Будет работать, например, такой код на Си (hWnd - дескриптор EditBox-а, фокус ввода ему уже передан):

Код: Выделить всё

SendMessage(hWnd, EM_SETSEL, 0, -1);
SendMessage(hWnd, EM_REPLACESEL, FALSE, (LPARAM)pszNewText);
После этого в EditBox-е текст появится, но при смене позиции он не сохранится в таблице БД. Чтобы заставить "Галактику" думать, что текст введен с клавиатуры, к коду надо добавить еще несколько строк:

Код: Выделить всё

PostMessage(hWnd, WM_KEYDOWN, VK_SPACE, 0x00000001);
PostMessage(hWnd, WM_KEYUP, VK_SPACE, 0xC0000001);
PostMessage(hWnd, WM_KEYDOWN, VK_BACK, 0x00000001);
PostMessage(hWnd, WM_KEYUP, VK_BACK, 0xC0000001);
Если в тексте нет русских букв, то его можно даже целиком ввести, посылая на каждый символ пару сообщений WM_KEYDOWN + WM_KEYUP.

Добавлено: 24 фев 2006, 17:24
san
еще вариант на делфи, wnd-дескриптор окна,s-записываемая строка:
procedure SetWND(wnd : longint;s:string);
var buf:array[0..255]of Char;
i: longint;
begin
s:=oemtoansi(s);
ZeroMemory(@buf,SizeOf(buf));
for i:=1 to length(s) do begin
buf[i-1] := s;
end;
SendMessage(wnd,wm_SetFocus,0,0);
SendMessage(wnd,WM_SETTEXT,0,lparam(@buf[0]));
UpdateWindow(wnd);
SendMessage(wnd,wm_KillFocus,0,0);
end;

Re: Галактика и WinAPI

Добавлено: 15 ноя 2011, 14:50
timaskraft
Есть самописное приложение, которое мониторит определенные события. Необходимо отсылать сообщение в галактику о том, что событие произошло.
У меня получилось через WinApi послать в Галактику нажатие клавиши F3 или F4 в свой интерфейс, и обработать cmPick и cmEdit. Но мне бы хотелось организовать обмен через свое событие. Можно ли послать в галактику сообщение из своего приложения посредством функций WinApi, и чтобы галактика отработала какую-нибудь команду, не привязанную к клавиатуре?

Может кто сталкивался - просветите пожалуйста.

Re: Галактика и WinAPI

Добавлено: 15 ноя 2011, 19:26
Masygreen
Начните терзать ТП. Есть функционал (покрайней мере разрабатывался) как через API запустить интерфейс галактический..