Меня в автопилоте интересует как раз трасса на карте и окошко регулирования высоты. Поэтому и ковыряю. Может у тебя етсь что интересненькое по этому вопросу ?
Upd
Такс, я со всем разобрался сам. Спасибо за моральную поддержку =)
Формат команды - в виде массива DWRD'ов в памяти:
Code:
330 - Это код команды (отрабатывается в вызывающей процедуре)
0 - хз что, всегда 0
0 - хз что, всегда 0
0 - код действия (0-старт, 1-изменить высоту, 2-стоп)
X - для кода 0 = X, для кода 1 = высота, для кода 2 = 0
Y - для кода 0 = Y, для кода 1 = 0, для кода 2 = 0
0 - хз что, всегда 0
И вот как это использовать:
Code:
Const
AutoRouteAddr = $0044E8E0;
procedure AutoRouteCall(cmd : Pointer); stdcall;
var
addr: Pointer;
begin
addr := Pointer(AutoRouteAddr);
asm
pushad
mov eax, dword ptr [PW_BASE_ADDRESS]
mov eax, dword ptr [eax + PW_DYNAMIC_BASE_OFFSET]
mov ecx, dword ptr [eax + PW_ROLE_BASE_OFFSET]
push cmd
call addr
popad
end;
end;
procedure TfmMain.Button1Click(Sender: TObject);
var
buf : array[0..6] of integer;
begin
buf[0] := 330;
buf[1] := 0;
buf[2] := 0;
buf[3] := 0;
buf[4] := 1227;
buf[5] := 984;
buf[6] := 0;
self.pwProcess.InjectFunc(@AutoRouteCall, @buf, SizeOf(buf));
end;
Что такое PW_BASE_ADDRESS, PW_DYNAMIC_BASE_OFFSET, PW_ROLE_BASE_OFFSET и как работает InjectFunc расписывать не буду - это очевидно и не раз обсуждалось в ветке.
Sapienti sat.