Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как передать дату в чужое приложение?

12K
02 августа 2005 года
fmf
4 / / 02.08.2005
Ситуация такая:есть некоторое чужое приложение, имеющее компонент типа DateTimePicker.В этот компонент мне нужно передать свою дату.Я делаю так:
h:=FindWindow(nil,'Form');
hd:=FindWindowEx(h,0,'TDateTimePicker',nil);
SendMessage(hd,WM_SETTEXT,0,lparam(LPCTSTR(PChar('23.03.1981'))));
Не работает.Подскажите как надо,плиз.
4.7K
06 августа 2005 года
kelz
42 / / 21.06.2004
Win32 SDK:
Цитата:
HWND FindWindowEx( HWND hwndParent, // handle to parent window HWND hwndChildAfter, // handle to a child window LPCTSTR lpszClass, // pointer to class name LPCTSTR lpszWindow // pointer to window name );



WinAPI и Delphi "не есть одно и то же". Параметр lpszClass - это класс окна, зарегистрированный с помощью функции WinAPI RegisterClass(Ex), который не имеет ничего общего с пространством имен борланда. У Вас имеет место быть "mix" WinAPI и VCL.

  • hd:=FindWindowEx(h,0,'TDateTimePicker',nil);

Уверен, что hd после возрата равен NULL
406
06 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by kelz
Win32 SDK:
WinAPI и Delphi "не есть одно и то же". Параметр lpszClass - это класс окна, зарегистрированный с помощью функции WinAPI RegisterClass(Ex)


Согласен.

Цитата:

который не имеет ничего общего с пространством имен борланда. У Вас имеет место быть "mix" WinAPI и VCL.
  • hd:=FindWindowEx(h,0,'TDateTimePicker',nil);


Не согласен. При чем тут протстранство имен Borland`а? Обект класса окна является системным и регистрируется в системе,и поэтому никакого отношению к пространству имен приложения он не имеет.

Цитата:

Уверен, что hd после возрата равен NULL


Не факт. Если только класс и нэндл родителя были правильны,hd должен быть хэндлом на нужное окно.
Скорее здесь проблема с WM_SETTEXT,не может передать данные между двумя процессами.

4.7K
08 августа 2005 года
kelz
42 / / 21.06.2004
Цитата:
Originally posted by vitaly2003s

Не согласен. При чем тут протстранство имен Borland`а? Обект класса окна является системным и регистрируется в системе,и поэтому никакого отношению к пространству имен приложения он не имеет.



Прошу прощения, я некорректно выразился. Я хотел сказать, что имя класса окна, зарегистрированного в системе будет отлично от "TDateTimePicker". Только что запустил Spy++ и увидел, что имя класса окна это имя компонента (имя указанное в свойстве Name компонента). Так вот наверное его и следует подставить на вход FindWindow.

406
08 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by kelz
Прошу прощения, я некорректно выразился. Я хотел сказать, что имя класса окна, зарегистрированного в системе будет отлично от "TDateTimePicker". Только что запустил Spy++ и увидел, что имя класса окна это имя компонента (имя указанное в свойстве Name компонента). Так вот наверное его и следует подставить на вход FindWindow.



Ну тогда это возможно. Просто если контрол был создан из приложения напрямую через вызов CreateWindow то имя класса заданное в этой функции и будет реальным именем класса кторый и покажет spy++ а не другим,независимо от среды и языка где вызывается эта функция. В данном случае я так понял этот компонент был вставлен просто на форму,и соответсвтвенно у него используется класс по умолчанию,в описании контрола или через spy++ можно узнать какое точно имя для класса использует данный контрол.

12K
10 августа 2005 года
fmf
4 / / 02.08.2005
Цитата:
Originally posted by kelz
Win32 SDK:


WinAPI и Delphi "не есть одно и то же". Параметр lpszClass - это класс окна, зарегистрированный с помощью функции WinAPI RegisterClass(Ex), который не имеет ничего общего с пространством имен борланда. У Вас имеет место быть "mix" WinAPI и VCL.
  • hd:=FindWindowEx(h,0,'TDateTimePicker',nil);

Уверен, что hd после возрата равен NULL



hd не равен NULL,он содержит хэндл контрола.

12K
11 августа 2005 года
fmf
4 / / 02.08.2005
Сейчас передаю так:
h:=FindWindow(nil,'Form');
hd:=FindWindowEx(h,0,'TDateTimePicker',nil);
DateTime_SetFormat(hd,PChar('23.03.1981'));
В принципе это работает,но только передается строка в какой-то левой кодировке.Как правильно преобразовать дату?
406
11 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by fmf
Сейчас передаю так:
h:=FindWindow(nil,'Form');
hd:=FindWindowEx(h,0,'TDateTimePicker',nil);
DateTime_SetFormat(hd,PChar('23.03.1981'));
В принципе это работает,но только передается строка в какой-то левой кодировке.Как правильно преобразовать дату?



Можеш попробывать преобразовать в юникод так:

char in_str[]="Hello";
int len=(strlen((char*)in_str)+1)*sizeof(WCHAR);
LPWSTR out_str= (LPWSTR)malloc(len);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,(LPCSTR)in_str,-1,out_str,len);

теперь в out_str конвертированая строка из ANSI в UNICODE

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог