Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ресурсы / 23 сообщений из 23, страница 1 из 1
30.12.2004, 15:56
    #32851788
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Дело было так:

Есть процесс, который создаёт некий ресурс. Например иконку.
Есть второй процесс, с кнопкой.
Дык вот BM_SETIMAGE из первого процесса во второй сказать нельзя, потому что второй процесс не имеет доступа к памяти первого:

SendMessage(hBut_in2, BM_SETIMAGE, IMAGE_ICON, (long)hIcon_in1);

облом.

Скажите, как первому процессу дать доступ к своим ресурсам?
...
Рейтинг: 0 / 0
30.12.2004, 16:27
    #32851866
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Для такой мелочи наверно удобнее всего использовать WM_COPYDATA
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
30.12.2004, 16:28
    #32851869
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Передать как кусок данных, а не как ресурс
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
30.12.2004, 17:59
    #32852057
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Никак. У них разная память. Главное - нафига ?
...
Рейтинг: 0 / 0
31.12.2004, 07:40
    #32852284
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
авторудобнее всего использовать WM_COPYDATA
Дык, эта, тот кому это послали, должен ведь обработать это сообщение?

авторНикак.
Нее, всегда можно что-то сделать, даже когда кажется, что нельзя.

авторГлавное - нафига ?
Надо.

Ааа, блин.
Можно сред приаттачить. Но, ёпрст, слишком жирно для такой маленькой операции...

Ок, кто что ещё придумает - пишите, я пошёл копать...
...
Рейтинг: 0 / 0
13.01.2005, 08:39
    #32862362
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
авторОк, кто что ещё придумает - пишите
Что ли никто ничего не придумал?
...
Рейтинг: 0 / 0
13.01.2005, 09:22
    #32862416
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
CEMb авторОк, кто что ещё придумает - пишите
Что ли никто ничего не придумал?

Можно еще попробовать во втором процессе сделать
handle=LoadLibrary(первый процесс)
LoadIcon(handle,...)
...
Рейтинг: 0 / 0
13.01.2005, 12:01
    #32862852
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
CEMb авторудобнее всего использовать WM_COPYDATA
Дык, эта, тот кому это послали, должен ведь обработать это сообщение?

А WM_COPYDATA именно копирует данные из памяти одного приложения
в память другого. Средствами OS.
...
Рейтинг: 0 / 0
14.01.2005, 10:19
    #32864480
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
MaksimМожно еще попробовать во втором процессе сделать
handle=LoadLibrary(первый процесс)
LoadIcon(handle,...)

Не, нельзя. Нету доступа к исходникам второго процесса.

MasterА WM_COPYDATA именно копирует данные из памяти одного приложения
в память другого. Средствами OS.
Это-то ясно.
Я к тому, что если я из первого процесса делаю
Код: plaintext
SendMessage(hWnd_od_2nd_proc,WM_COPYDATA,hWnd_od_1st_proc,(long)data);
то во втором процессе надо же этот посыл разобрать:
Код: plaintext
1.
2.
...
case WM_COPYDATA:
...
?
Или нет?
...
Рейтинг: 0 / 0
14.01.2005, 11:54
    #32864714
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Ну и обработаешь, сложно што-ли)))
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
17.01.2005, 07:18
    #32866940
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Блииин, не могу я обработать, не мой процесс, нету у меня к нему доступа, вот,блин, в чём, блин, проблема, блин!
Мне надо создать ресурс в памяти чужого процесса.
...
Рейтинг: 0 / 0
17.01.2005, 07:31
    #32866949
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
другими словами:
тебе нужно заставить процесс выполнить определенные действия,
но сделать этого ты не можешь, потому что это невозможно :-)

козьма прутков умный мужыки были, бывало говаривали
нельзя объять необъятное. да помногу раз повторяли. нет. нельзя. если очень захотеть - тоже нельзя. :-)
...
Рейтинг: 0 / 0
17.01.2005, 12:45
    #32867553
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
CEMbБлииин, не могу я обработать, не мой процесс, нету у меня к нему доступа, вот,блин, в чём, блин, проблема, блин!
Мне надо создать ресурс в памяти чужого процесса.

Ага, а использовать этот ресурс этот процесс как будет ? Кто его заставит ?
Короче, либо просто редактором ресурсов положи этот ресурс в этот модуль ( статичное решение), либо надо внедряться в пространство того процесса (это сложно), но как заставить его использовать этот ресурс - не понятно.
Как внедряться - написано в книге Джефри Рихтера и есть на www.rsdn.ru
...
Рейтинг: 0 / 0
18.01.2005, 07:34
    #32869076
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
alex_kно сделать этого ты не можешь, потому что это невозможно :-)
Вот тут ты не прав :)
Во-первых. Я заставить это делать я его смог сразу. Просто ресурс был не тот, так как загрузить было неоткуда.

Во-вторых. Оффтоп. Нет ничего невозможного. Если поставить себе это за принцип, можно много сделать. Например нахождение максимума без операции сравнения или полноценное прозрачное окно под WINDOWS<=0x400

К тому же, у меня есть программа(рассширение которой и повлекло этот вопрос). Которая очень хорошо умеет лезть в чужие окна. Как спай. Тока спай смотрит, а моя может менять. Оффтоп: это не хакерство, это надо было по работе, были ситуации, когда надо было проэмулировать некоторые действия окон при некоторых состояниях. А поднять эти окна - долгая/нудная песня. И чтобы каждый раз для одного шага теста не гонять весь проект, была написана полупрога для работы с окнами.
Теперь вот понадобились ресурсы.

МастерКак внедряться - написано в книге Джефри Рихтера и есть на www.rsdn.ru
Спасиб!
...
Рейтинг: 0 / 0
18.01.2005, 12:13
    #32869739
MKV
MKV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Ключевые слова
HICON; поиск и загрузка ресурсов; LoadResource; LockResource; LoadIcon; сомнение; гипотеза


Кажись должно быть осуществимо все-же, ведь в трей суют и вообще...
А точно ли что это существенно, что у этих двух процессов разная память? Я сам не попробовал, но мне кажется что это тут рояля не играет. Не а глобальной ли памяти виндовые хенделы сидят? - помоему так и есть. Не может ли вся фигня быть в том, что при использовании некоторых способов загрузки (к которым все привыкли) они автоматом выгружаются после окончания процесса? Уточните - какой функцией грузите иконку?

см. также
/topic/14640&hl=hicon
http://www.sql.ru/forum/actualsearch.aspx?search=HICON&a=&ma=0&bid=0&dt=-1&s=1&so=1
...
Рейтинг: 0 / 0
18.01.2005, 15:29
    #32870395
kulpavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
MKV
А точно ли что это существенно, что у этих двух процессов разная память?
по определению у двух процессов разное адресное пространство, каждому выделено по по 4 Гб вирт памяти, правда тока для Win2000 и выше соответственно, а в 98 и 95 все процессы включая системные разделяли одну область виртуальной памяти,поэтому все и падало... ((:
...
Рейтинг: 0 / 0
18.01.2005, 16:15
    #32870540
MKV
MKV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Адресное пространство разное, но биты иконки разве сидит в адресном пространстве процесса? Не располагаются ли ее биты в адресном пространстве ОС? То есть когда мы вызываем LoadIcon, то биты засасывает ОС, а наружу выдают хендел HICON - вроде так было бы логично.
Если все так, то сценарий описанный CEMb вполне должен работать. Мы сообщаем через BM_SETIMAGE хендел иконки, и вообще вся работа идет через хенделы, а память реальная в адресном пространстве ОС.

Меня смущает вот в этом утверждении

CEMb
BM_SETIMAGE из первого процесса во второй сказать нельзя, потому что второй процесс не имеет доступа к памяти первого:

SendMessage(hBut_in2, BM_SETIMAGE, IMAGE_ICON, (long)hIcon_in1);


такой момент - а чем hBut_in2 принципиально отличается от hIcon_in1 в плане памяти и процессов?
...
Рейтинг: 0 / 0
18.01.2005, 16:20
    #32870552
kulpavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Код: plaintext
но биты иконки разве сидит в адресном пространстве процесса? Не располагаются ли ее биты в адресном пространстве ОС?
нет они маппируются в адресное пространство процесса вызвавшего ресурс.а хендл-ссылка на область.
Код: plaintext
а чем hBut_in2 принципиально отличается от hIcon_in1 в плане памяти и процессов?
указатели на области памяти РАЗНЫХ процессов.
...
Рейтинг: 0 / 0
18.01.2005, 17:01
    #32870662
MKV
MKV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
да, раз иконка в том, где ресурс загружали, то кисляк
...
Рейтинг: 0 / 0
18.01.2005, 18:07
    #32870889
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
Вобщем-то можно открыв процесс с помощью OpenProcess и получив доступ к памяти с помощью VirtualAllocEx (нужны привелегии), можно попытаться подсунуть свою иконку в память другого процесса...
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
18.01.2005, 18:18
    #32870923
kulpavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
CEMbБлииин, не могу я обработать, не мой процесс, нету у меня к нему доступа, вот,блин, в чём, блин, проблема, блин!
Мне надо создать ресурс в памяти чужого процесса.
об этом уже упомяналось...
MasterZiv
Ага, а использовать этот ресурс этот процесс как будет ? Кто его заставит ?
Короче, либо просто редактором ресурсов положи этот ресурс в этот модуль ( статичное решение), либо надо внедряться в пространство того процесса (это сложно), но как заставить его использовать этот ресурс - не понятно.
Как внедряться - написано в книге Джефри Рихтера и есть на www.rsdn.ru
...
Рейтинг: 0 / 0
19.01.2005, 07:53
    #32871349
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
На счёт разделённости ресурсов по процессам.

Делался такой тест:
Создавался фонт.
Брался ДС окна, и туда селектился фонт, с сохранением старого.
Если всё это применять на родные окна, то фонт устанавливается, старый сохраняется, и потом восстанавливается.

Если тоже самое делать с чужим окном - старый фонт с селектобжект возвращается _ненулевой_, новый-свой не устанавливается - в окне стандартный системный(страшноквадратный). Старый фонт восстанавливается.

Стало быть, хэндлы указывают на разные куски памяти...
...
Рейтинг: 0 / 0
19.01.2005, 12:43
    #32872126
MKV
MKV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ресурсы
MasterZivлибо надо внедряться в пространство того процесса (это сложно), но как заставить его использовать этот ресурс - не понятно
Внедрившись можно какое-нибудь окно отсабклассить, и при каком-то событии сделать дополнительные вещи (BM_SETIMAGE ).
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ресурсы / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]