![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
в dll-ке есть функция, которая передает перехваченный текст (readfile) в tmemo, после передачи выводятся - иероглифы.
как это исправляется? думаю проблема в этом: Код:
NewBuffer := 'прочитано сообщение - "'+pchar(@Buffer)+'"'; Код:
b:= trim(s)+#13#10+(newBuffer); сама функция: Код:
function NewReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD; var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; stdcall; var ll,l: integer; s : string; b:string; UnPro : HWND; PassText: HWND; NewBuffer: string; begin // текст передаваемого сообщения NewBuffer := 'прочитано сообщение - "'+pchar(@Buffer)+'"'; // здесь передается сообщение в memo (в чужую программу) UnPro:= FindWindow(nil, 'xxx'); PassText := FindWindowEx(UnPro, 0, 'TMemo', nil); ll:=SendMessage(PassText, WM_GETTEXTLENGTH, 0, 0) + 1; SetLength( s, ll ); l := SendMessage( PassText, WM_GETTEXT, ll, lparam( @s[ 1 ] ) ); Copy( s, 1, l ); b:= trim(s)+#13#10+(newBuffer); SendMessage(PassText, WM_SETTEXT, 0,lparam(b)); result := TrueReadFile(hFile,Buffer,nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped); end; |
|
#2
|
||||
|
||||
|
либо юникод, либо кодировки.
|
|
#3
|
|||
|
|||
|
каким образом нужно менять чтоб код заработал? никак не могу доделать эту функцию
|
|
#4
|
||||
|
||||
|
Ты передаешь указатель на строчку, а дальше как вычитывается? Через ReadProcessmemory?
|
|
#5
|
|||
|
|||
|
сделал так, результата нет.
Код:
var qwe:pointer; begin qwe:= @Buffer; NewBuffer := 'прочитано сообщение - "'+pchar(qwe^)+'"'; ... |
|
#6
|
||||
|
||||
|
Я не понимаю, что ты делаешь. Еще и код толком не отформатирован, читать невозможно.
Тебе из одной программы данные надо передать в другую? |
|
#7
|
|||
|
|||
|
да. я подключаю библиотеку в чужую программу, перехватываю ReadFile, данные из buffer (из readfile) надо перекодировать в "читаемый" string, чтобы я мог ее передать.
|
|
#8
|
||||
|
||||
|
Ну так ты передаешь указатель на данные которые в ЧУЖОЙ программе, а достать их пытаешься из СВОЕЙ. Надо либо через память с общим доступом это передавать, либо через readprocess вытягивать.
|
|
#9
|
|||
|
|||
|
подключив dll к ЧУЖОЙ программе, разве не будет выполняться код библиотеки как СВОЯ?
ps. мне надо достать данные из своей программы, а потом передать эти данные в чужую программу Последний раз редактировалось kudesnik, 11.04.2013 в 16:06. |
|
#10
|
||||
|
||||
|
Ты сам то понял, что написал, я вот не понял.
Своя по отношению а кому? Короче вот то, что тебе надо: http://delphiworld.narod.ru/base/mailslot.html |
|
#11
|
|||
|
|||
|
Цитата:
1. Я никак не могу передать указатель которые в ЧУЖОЙ программе 2. программа только одна а чужая, своя - ты просто зачитался. разницы никакой Цитата:
3. чтобы было понятнее. это код библиотеки. Код:
function NewReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD; var lpNumberOfBytesRead: DWORD; lpOverlapped: POverlapped): BOOL; stdcall; var NewBuffer: string; begin NewBuffer := pchar(@Buffer); showmessage(NewBuffer); // не выводится то что в файле result := TrueReadFile(hFile,Buffer,nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped); end; это код программы Код:
procedure TForm1.Button1Click(Sender: TObject);
var
fHandle: THandle;
Buffer: array[0..255] of Char;
a: Cardinal;
begin
fHandle := CreateFile('C:\1.txt', Generic_read, 0, Nil, open_existing, 0, 0);
ReadFile(fHandle, Buffer, 5, a, 0);
Edit1.Text:=Buffer;// выводится то что в файле
CloseHandle(fHandle);
end;Последний раз редактировалось M.A.D.M.A.N., 11.04.2013 в 17:05. Причина: Отформатировал код |
|
#12
|
|||
|
|||
|
На самом деле причина этих проблем элементарная
Данные из Buffer надо забирать только после выполнения ReadFile, а не во время ее перехвата. тему можно закрывать. ![]() |