Уроки Iczelion'а




Урок 21. Пайп - часть 8


.while TRUE

invoke RtlZeroMemory,addr buffer,1024 invoke ReadFile,hRead,addr buffer,1023,addr bytesRead,NULL .if eax==NULL .break

.endif invoke SendMessage,hwndEdit,EM_SETSEL,-1,0 invoke SendMessage,hwndEdit,EM_REpLACESEL,FALSE,addr buffer

.endw

Теперь мы готовы читать данные. Мы входим в бесконечный цикл, пока все данные не будут считанны. Мы вызываем RtlZeroMemorb, чтобы заполнить буфер нулями, потом вызываем ReadFile и вместо хэндла файла передаем хэндл пайпа. Заметьте, что мы считываем максимум 1023 байта, так данные, которые мы получим, должны быть ASCIIZ-строкой, которую можно будет передать edit control'у.

Когда ReadFile вернет данные в буфере, мы выведем их в edit control. Тем не менее, здесь есть несколько проблем. Если мы используем SetWindowText, чтобы поместить данные в edit control, новые данные перезапишут уже считанные! Hам нужно, чтобы новые данные присоединялись к старым.

Для достижения цели мы сначала двигаем курсор к концу текста edit control'а, послав сообщение EM_SETSEL с wрaram'ом равным -1. Затем мы присоединяем данные с помощью сообщения EM_REpLACESEL.

invoke CloseHandle,hRead

Когда ReadFile возвращает NULL, мы выходим из цикла и закрываем конец чтения.

[C] Iczelion, пер. Aquila.






Содержание  Назад  Вперед