Russian Qt Forum

Qt => Общие вопросы => Тема начата: Anarchist от Декабрь 23, 2010, 11:37



Название: Управление SysDateTimePick32
Отправлено: Anarchist от Декабрь 23, 2010, 11:37
Пишу программу на Qt из которой необходимо управлять другим приложением.
В этом стороннем приложении имеется такой контрол как SysDateTimePick32.
Необходимо изменить в нём дату на необходимую из моей программы.
Дескриптор элемента однозначно нахожу верно. В spy++ вижу что ему приходит моё сообщение.
Пишу так:
Код:
SYSTEMTIME date;
SendMessage(hSdt, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&date);
Внешнее приложение валится с ошибкой.
Пробовал самые различные варианты:
Код:
SYSTEMTIME date;
SYSTEMTIME date = {};
SendMessage(hSdt, DTM_GETSYSTEMTIME, GDT_VALID, (LPARAM)&date);
PostMessage(hSdt, DTM_GETSYSTEMTIME, GDT_VALID, (LPARAM)&date);
SendMessage(hSdt, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&date);
PostMessage(hSdt, DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&date);
На всё валится с ошибкой. Не подскажете в чём может быть дело и как решить поставленную задачу?


Название: Re: Управление SysDateTimePick32
Отправлено: brankovic от Декабрь 25, 2010, 11:21
Почему валится понятно: date находится в адресном пространстве вашего приложения. Вообще любой SendMessage, передающий ненулевой указатель в другой процесс, приведёт к падению (за некоторыми исключениями типа WM_SETTEXT и т.п.)

Бороться можно внедрением dll. Но я бы не советовал, возня слишком большая для календарика.