Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2011, 22:11   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Счастье Передать в dll(загружна в чужое АП) строку...

Доброго времени суток!

Есть некое консольное приложение, в котром нужно провести манипуляции изнутри.
Допустим подстановка своего заголовка через SetConsoleTitle.

Вопрос:
Каким образом в эту подгруженную dll передать нужный мне заголовок(строку)(который будет задан консольному окну).

Вот есть dll:
Код:
procedure SetWindowCaption(aNewCaption:PChar); stdcall;
begin
  SetConsoleTitle('THIS IS SPARTA!');
  FreeLibraryAndExitThread(GetModuleHandle('hooklib.dll'), 0);
end;

procedure DLLEntryPoint(dwReason: DWORD);
begin
  case dwReason of
    DLL_PROCESS_ATTACH:
    begin
      ExitCode := 0;
    end;
  end;
end;

exports SetWindowCaption;

begin
  DLLProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
Гружу её в АП нужной мне консоли и оно успешно меняет заголовок окна на "THIS IS SPARTA!" а затем выгружается.

Но это "статический" метод. И не пожходит. Мне нужно задавать текст заголовка самостоятельно(т.е. передавать его в эту dll), как это сделать?
Человек_Борща вне форума Ответить с цитированием
Старый 17.09.2011, 23:23   #2
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Думаю memory-mapped file, wm_copydata должно хватить...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 17.09.2011, 23:51   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Хех, а куда именно мне передавать wm_copydata из программы. Если мне только processid известен.
Человек_Борща вне форума Ответить с цитированием
Старый 18.09.2011, 00:12   #4
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

ну поготь, у тебя ж функция SetWindowCaption принимает параметр aNewCaption что в него не передаешь?
fate вне форума Ответить с цитированием
Старый 18.09.2011, 00:33   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

проблема в том что я гружу dll в чужой процесс.
И
Код:
function Func; external 'lol.dll';
или тот же динам. вызов через GetProcAddress не сделаешь, потому что невозможно т.к. dll не в твоём АП находится, либо потому что я незнаю как это делать. Если есть знающие, просвятите.

Хотя вот, нашёл исходник программы вин-локера.

длл написана на c++ , программа на delphi. Если кто-то может, пояните пожалуйста, как программа передаёт в dll сведенья о том, что включать а что выключать.

Хотя не думаю, что это поможет мне понять как передать строку в dll, которая находится в чужом Адрсном Пространстве.
Вложения
Тип файла: zip winKeyLock1.0.1_src.zip (165.2 Кб, 8 просмотров)
Человек_Борща вне форума Ответить с цитированием
Старый 18.09.2011, 00:39   #6
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

как уже было упомянуто используй memory-mapped file
fate вне форума Ответить с цитированием
Старый 18.09.2011, 00:40   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Человек_Борща, ну так поставь глобальный хук и используй memory-mapped file ... в чем проблема-то?

EDIT:
Кстати, в аттаче выше используется #pragma data_seg - сишная фича...тут можно почитать...
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 18.09.2011 в 00:46.
spamer вне форума Ответить с цитированием
Старый 18.09.2011, 00:45   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ага, т.е.
1. загружаем dll в процесс
2. Создаём mmf
3. dll хавает mmf, меняет заголовок, и выгружается.
4. уничтожаем mmf

Я правильно понял?
Человек_Борща вне форума Ответить с цитированием
Старый 18.09.2011, 01:01   #9
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Ну вобщем-то да, если не учитывать еще небольшие нюансы...
Почитать - 1, 2
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Через командную строку передать два слова и целое число N. gas777 Общие вопросы C/C++ 5 23.06.2011 19:59
Передать методы класса из dll alexprey Общие вопросы Delphi 3 11.11.2010 16:11
Не могу передать строку в функцию Никки Общие вопросы Delphi 4 18.09.2010 21:22
Передать строки из dll в программу 856100 Общие вопросы Delphi 6 03.08.2009 00:37
из .exe TBitMap передать в DLL(форма) lexaltd Мультимедиа в Delphi 13 14.07.2009 17:47