|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
либо юникод, либо кодировки.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
каким образом нужно менять чтоб код заработал? никак не могу доделать эту функцию
|
#4
|
||||
|
||||
Ты передаешь указатель на строчку, а дальше как вычитывается? Через ReadProcessmemory?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
сделал так, результата нет.
Код:
var qwe:pointer; begin qwe:= @Buffer; NewBuffer := 'прочитано сообщение - "'+pchar(qwe^)+'"'; ... |
#6
|
||||
|
||||
Я не понимаю, что ты делаешь. Еще и код толком не отформатирован, читать невозможно.
Тебе из одной программы данные надо передать в другую? — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
|||
|
|||
да. я подключаю библиотеку в чужую программу, перехватываю ReadFile, данные из buffer (из readfile) надо перекодировать в "читаемый" string, чтобы я мог ее передать.
|
#8
|
||||
|
||||
Ну так ты передаешь указатель на данные которые в ЧУЖОЙ программе, а достать их пытаешься из СВОЕЙ. Надо либо через память с общим доступом это передавать, либо через readprocess вытягивать.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#9
|
|||
|
|||
подключив dll к ЧУЖОЙ программе, разве не будет выполняться код библиотеки как СВОЯ?
ps. мне надо достать данные из своей программы, а потом передать эти данные в чужую программу Последний раз редактировалось kudesnik, 11.04.2013 в 16:06. |
#10
|
||||
|
||||
Ты сам то понял, что написал, я вот не понял.
Своя по отношению а кому? Короче вот то, что тебе надо: http://delphiworld.narod.ru/base/mailslot.html — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#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, а не во время ее перехвата. тему можно закрывать. |