Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите перевести из ASM в Delphi [D7]


SkyN ©   (2007-07-10 16:19:00) 

Единственный вызов SendMessageA, но как передаются параметры и получается результат не пойму

; int __cdecl GetCount(HWND hWnd)
public GetCount
GetCount proc near

lParam= dword ptr -48h
var_2C= dword ptr -2Ch
hWnd= dword ptr  4

mov     ecx, [esp+hWnd]
sub     esp, 48h
lea     eax, [esp+48h+lParam]
push    eax             ; lParam
push    0               ; wParam
push    7F0h            ; Msg
push    ecx             ; hWnd
call    ds:SendMessageA
mov     eax, [esp+48h+var_2C]
add     esp, 48h
retn
GetCount endp


SkyN   (2007-07-11 18:41:00) [1]

Сергей, Вы были практически правы
В результате, посмотрев, что возвращается в Buf получил:
function GetCount(hWnd: THandle): Integer;
var
Buf: array[0..18] of Integer;
begin
SendmessageA(hWnd, $7F0, 0, lParam(@Buf));
Result := Buf[3];
end;


Buf: array[0..18] of Integer; - расширю на всякий случай.


Сергей М.   (2007-07-11 17:03:00) [2]


> SkyN   (11.07.07 16:36) [5]


По [3] что скажешь ?

Любопытно ж)


SkyN   (2007-07-11 16:36:00) [3]

to Плохиш
Ты мне сильно помог, и чтобы не остаться в долгу могу и тебе рассказать много интересного http://slovari.yandex.ru/search.xml?text=%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82

PS Рад, что вызвал у тебя приятные эмоции


Плохиш   (2007-07-10 17:03:00) [4]


> я знаю как пользоваться SendMessage
> не могу понять какие параметры в неё передаются, и как получают
> результат

Классные два утверждения. Читаю и балдею, просто тащусь, а ж слёзы наварачиваются... Он знает как пользоваться, но не знает как туда что-то передать :-))


Сергей М.   (2007-07-10 16:41:00) [5]

Мне в этой абракадабре видится что-то вроде этого:

function GetCount(hWnd: THandle): Integer; cdecl;
const
 lParam_size = $48h;
 Result_offset = lParam_size - $2C;
var
 Buf: array[0..lParam_size-1];
begin
 SendmessageA(hWnd, $7F0, 0, lParam(@Buf));
 Result := PInteger(@Buf[Result_offset])^;
end;


SkyN   (2007-07-10 16:35:00) [6]

я знаю как пользоваться SendMessage
не могу понять какие параметры в неё передаются, и как получают результат

Сообщение 7F0h  программа использует не только для GetCount, т.е. надо корректно задать lparam, wparam и/или корректно "распарсить" результат.

На asm алгоритм дан, как это записать в Delphi не въеду.


MBo   (2007-07-10 16:26:00) [7]

функция SendMessage описана в справке WinSDK и в MSDN


Наверх

Титульная страница Поиск, карта сайта Написать письмо