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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2016, 18:45   #1
voltair
 
Регистрация: 11.02.2016
Сообщений: 9
Вопрос Задача выделить память в чужом приложении

Привет всем!

Есть задача изменить дату-время в элементе класса SysDateTimePick32 (типа "Календарь") в одном приложении из другого.

Делается примерно так:
SendMessageA(hDateTimeBegin,DTM_SET SYSTEMTIME,0,rglSysTime);

Здесь hDateTimeBegin - дескриптор описанного элемента в другом приложении (НЕ в своем).

rglSysTime - массивчик, хранящий данные дата-время В СВОЕМ приложении.

При передаче SendMessage как указано, другое приложение "валится".

Ошибка в том, что ему передается ссылка на память вне его самого - тот самый массивчик с датой-временем ( int rglSysTime[4]; ).

Вопрос - как выделить память в другом приложении, записать в нее то, что требуется и корректно передать по SendMessage?

Help! Очень нужно!
voltair вне форума Ответить с цитированием
Старый 11.02.2016, 18:57   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx
p51x вне форума Ответить с цитированием
Старый 11.02.2016, 21:36   #3
voltair
 
Регистрация: 11.02.2016
Сообщений: 9
Смущение

Цитата:
Сообщение от p51x Посмотреть сообщение
Спасибо большое, p51x! Но пожалуйста не думайте что если такие умные вопросы, то и умные ответы помогут.

Разжевать все нужно. Давно не программировал на С++.

То есть как добыть все что нужно VirtualAllocEx(...) не очень понимаю.

Примерчик бы... Попроще и попонятнее.

Please!
voltair вне форума Ответить с цитированием
Старый 11.02.2016, 21:50   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
То есть как добыть все что нужно VirtualAllocEx(...) не очень понимаю.
Все что там надо добыть это hProcess, например чеоез GetWindowThreadProcessId и OpenProcess
p51x вне форума Ответить с цитированием
Старый 11.02.2016, 22:18   #5
voltair
 
Регистрация: 11.02.2016
Сообщений: 9
Вопрос

Цитата:
Сообщение от p51x Посмотреть сообщение
Все что там надо добыть это hProcess, например чеоез GetWindowThreadProcessId и OpenProcess
p51x, просьба - давайте набросаем планчик решения.

А то пишут типа GetWindowThreadProcessId возвращает идентификатор (не дескриптор) основного потока (не процесса), смущают.

В общем, интересуют для начала основные step by step.

Начнем. (?)

1. Есть дескриптор МОЕГО приложения.
2. Есть дескриптор ДРУГОГО приложения.
3. идентификатор потока ДРУГОГО приложения = GetWindowThreadProcessId(дескриптор ДРУГОГО приложения)
4. ??
voltair вне форума Ответить с цитированием
Старый 11.02.2016, 22:30   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Что вы подразумеваете под дискриптором приложения?

Цитата:
3. идентификатор потока ДРУГОГО приложения = GetWindowThreadProcessId(дескриптор ДРУГОГО приложения)
ну откройте же доку
Цитата:
DWORD WINAPI GetWindowThreadProcessId(
_In_ HWND hWnd,
_Out_opt_ LPDWORD lpdwProcessId
);

hWnd [in]
Type: HWND
A handle to the window.
lpdwProcessId [out, optional]
Type: LPDWORD
A pointer to a variable that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the variable; otherwise, it does not.

Return value

Type:
Type: DWORD
The return value is the identifier of the thread that created the window.
p51x вне форума Ответить с цитированием
Старый 11.02.2016, 22:39   #7
voltair
 
Регистрация: 11.02.2016
Сообщений: 9
Лампочка

Цитата:
Сообщение от p51x Посмотреть сообщение
Что вы подразумеваете под дискриптором приложения?
Давно не занимался C++, извиняйте, pls.

Что мы находим по FindWindowW(sClassName,sWindowsCapt ion) ?

Наверное дескриптор окна приложения, а не приложения?
voltair вне форума Ответить с цитированием
Старый 11.02.2016, 23:05   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Это всего лишь хендл окна определенного класса. Вот его и суйте в GetWindowThreadProcessId, а потом открывайте процесс, не забывая про права.
p51x вне форума Ответить с цитированием
Старый 13.02.2016, 21:11   #9
voltair
 
Регистрация: 11.02.2016
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Это всего лишь хендл окна определенного класса. Вот его и суйте в GetWindowThreadProcessId, а потом открывайте процесс, не забывая про права.
p51x, СПАСИБО! Решил задачу. Но принципиально больше помогли на другом форуме конкретным примером.
voltair вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кликв чужом приложении alfikss Общие вопросы Delphi 3 07.05.2013 18:36
Клик в чужом приложении SunnyDay Общие вопросы Delphi 5 31.10.2011 15:12
Вызвать хоткей в чужом приложении. Gypsy Общие вопросы Delphi 6 27.02.2010 11:26
Окно в чужом приложении? Volkogriz Общие вопросы Delphi 3 10.02.2009 18:22