Як передати дату в чуже додаток

Як передати дату в чуже додаток?

Доброго вам дня.
Ситуація така: є деякий чуже додаток, що має компонент типу DateTimePicker.В цей компонент мені потрібно передати свою дату.Я роблю так:
h: = FindWindow (nil, "Form");
hd: = FindWindowEx (h, 0, "TDateTimePicker", nil);
SendMessage (hd, WM_SETTEXT, 0, lparam (LPCTSTR (PChar ( "23.03.1981"))));
Чи не работает.Подскажіте як треба, плиз.

Якщо Ви впевнені, що в чужому додатку використовується саме компонент TDateTimePicker (клас вікна - DATETIMEPICK_CLASS), і його хендл відомий, можна використовувати повідомлення DTM_SETSYSTEMTIME.

var
# XA0; H: HWND; # XA0; # XA0; # XA0; # XA0; # XA0; // Хендл вікна TDateTimePicker
# XA0; ST: TSystemTime; # XA0; // Дата-час в системному форматі
begin
# XA0; FillChar (ST, sizeof (ST), 0);
# XA0; ST.wDay: = 23;
# XA0; ST.wMonth: = 3;
# XA0; ST.wYear: = 1981;
# XA0; SendMessage (H, DTM_SETSYSTEMTIME, GDT_VALID, Integer (@ST))
end.

У компонента клас вікна, якраз, "TDateTimePicker".

Але я якось не врахував головного: оскільки в якості параметра повідомлення використовується покажчик, а саме повідомлення відправляється вікна чужого процесу, то так просто послати його не вдасться.

Тому прошу не звертати уваги на [1].

Взагалі-то додатків два.В одному InqSoft Window Scanner показує клас вікна SysDateTimePick32, а в іншому-TDateTimePicker.


> fmf # XA0; (03.08.05 10:26) [4]
> Взагалі-то додатків два.В одному InqSoft Window Scanner
> Показує клас вікна SysDateTimePick32, а в іншому-TDateTimePicker.

Для вирішення оной проблеми потрібно розподілити в чужому
додатку буфер, а в LParam повідомлення посилатися на нього.
Після обробки повідомлення буфер можна прочитати.

Зараз передаю так:
h: = FindWindow (nil, "Form");
hd: = FindWindowEx (h, 0, "TDateTimePicker", nil);
DateTime_SetFormat (hd, PChar ( "23.03.1981"));
Передається текст в якійсь лівій кодіровке.Вопрос: як правильно перетворити дату?

Зараз передаю так:
h: = FindWindow (nil, "Form");
hd: = FindWindowEx (h, 0, "TDateTimePicker", nil);
DateTime_SetFormat (hd, PChar ( "23.03.1981"));
Передається текст в якійсь лівій кодіровке.Вопрос: як правильно перетворити дату?


> fmf # XA0; (11.08.05 13:31) [7]
> Зараз передаю так:

Тобі ж пояснювали, що так передати не можна.

Якщо хочеш по-простому, постарайся:

# XA0; 2 в активне поле:
# XA0; PostMessage (DateTimePicker.Handle, WM_CHAR, Ord ( "2"), 0);

# XA0; Перехід до наступного поля:
# XA0; PostMessage (DateTimePicker.Handle, WM_KEYDOWN, VK_RIGHT, 0);
# XA0; SendMessage (DateTimePicker.Handle, WM_KEYUP, VK_RIGHT, 0);

# XA0; Для активації чужого додатка - SetForegroundWindow.
# XA0; Для установки фокусу на контрол:
# XA0; AttachThreadInput (. True), Windows.SetFocus, AttachThreadInput (. False)


> Для установки фокусу на контрол:
> # XA0; AttachThreadInput (. True), Windows.SetFocus, AttachThreadInput (. False)
- WM_SETFOCUS - замінює цю конструкцію.
До речі, тепер мені зрозуміло, чому функція SetFocus для чужих додатків не працює.