Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.04.2013, 13:17
kudesnik kudesnik вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 21
Репутация: 10
По умолчанию вместо читаемого текста - иероглифы

в 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  
Старый 11.04.2013, 13:35
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

либо юникод, либо кодировки.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #3  
Старый 11.04.2013, 13:57
kudesnik kudesnik вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 21
Репутация: 10
По умолчанию

каким образом нужно менять чтоб код заработал? никак не могу доделать эту функцию
  #4  
Старый 11.04.2013, 14:01
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ты передаешь указатель на строчку, а дальше как вычитывается? Через ReadProcessmemory?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #5  
Старый 11.04.2013, 14:45
kudesnik kudesnik вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 21
Репутация: 10
По умолчанию

сделал так, результата нет.
Код:
var
  qwe:pointer;
begin
qwe:=  @Buffer;
NewBuffer := 'прочитано сообщение - "'+pchar(qwe^)+'"';
...
  #6  
Старый 11.04.2013, 14:50
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Я не понимаю, что ты делаешь. Еще и код толком не отформатирован, читать невозможно.

Тебе из одной программы данные надо передать в другую?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #7  
Старый 11.04.2013, 15:00
kudesnik kudesnik вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 21
Репутация: 10
По умолчанию

да. я подключаю библиотеку в чужую программу, перехватываю ReadFile, данные из buffer (из readfile) надо перекодировать в "читаемый" string, чтобы я мог ее передать.
  #8  
Старый 11.04.2013, 15:11
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну так ты передаешь указатель на данные которые в ЧУЖОЙ программе, а достать их пытаешься из СВОЕЙ. Надо либо через память с общим доступом это передавать, либо через readprocess вытягивать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #9  
Старый 11.04.2013, 16:01
kudesnik kudesnik вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 21
Репутация: 10
По умолчанию

подключив dll к ЧУЖОЙ программе, разве не будет выполняться код библиотеки как СВОЯ?
ps. мне надо достать данные из своей программы, а потом передать эти данные в чужую программу

Последний раз редактировалось kudesnik, 11.04.2013 в 16:06.
  #10  
Старый 11.04.2013, 16:09
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ты сам то понял, что написал, я вот не понял.
Своя по отношению а кому?

Короче вот то, что тебе надо: http://delphiworld.narod.ru/base/mailslot.html
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #11  
Старый 11.04.2013, 16:24
kudesnik kudesnik вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Ну так ты передаешь указатель на данные которые в ЧУЖОЙ программе, а достать их пытаешься из СВОЕЙ. Надо либо через память с общим доступом это передавать, либо через readprocess вытягивать.

1. Я никак не могу передать указатель которые в ЧУЖОЙ программе
2. программа только одна а чужая, своя - ты просто зачитался. разницы никакой

Цитата:
Сообщение от M.A.D.M.A.N.
Еще и код толком не отформатирован, читать невозможно.

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  
Старый 12.04.2013, 00:04
kudesnik kudesnik вне форума
Прохожий
 
Регистрация: 06.02.2012
Сообщения: 21
Репутация: 10
Сообщение

На самом деле причина этих проблем элементарная
Данные из Buffer надо забирать только после выполнения ReadFile, а не во время ее перехвата. тему можно закрывать.
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter