Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

срочно нужен совет спеца! [D5, WinME, Win2k]


garik ©   (2002-03-16 04:48:00) 

Уважаемый спец, помогите пожалуйста разобраться с задачей:
НУЖНО ВЗЯТЬ ПУТЬ С ОТКРЫТОГО В ДАННЫЙ МОМЕНТ ДИАЛОГА (open/save as dialog)
Сообщение которое это делает, я нашёл – CDM_GETFOLDERPATH
SENDMESSAGE (хендл диалога open/save as dialog, CDM_GETFOLDERPATH,sizeof( переменная которая получит путь), указатель на переменную, которая получит путь).
И я пишу в своей проге:
Чтобы не усложнять ситуацию различными хуками, события отслеживания открытия диалогов и взятия с них пути, будут происходить по таймеру:
procedure TForm1.Timer1Timer(Sender: TObject);
Var
A:HWND; hh:integer;
zz:array [0 .. max_path] of char;
BEGIN
a:=findwindow(pchar("#32770"),nil); IF A>0 THEN BEGIN
hh:=SendMessage (a,cdm_getfolderpath,sizeof(zz),integer(@zz));
Label1.caption: =zz; Label2.caption: =inttostr(hh);
END; END;
Пусть по button1.click открывается opendialog1 (opendialog1.execute)

Выше приведенный код говорит о том, что всякий раз, когда срабатывает таймер, происходит следующее:
1. ищется в памяти диалог (без заголовка)
2. если найдено, то посылается сообщение диалогу
3. заполнение переменной zz-путём, взятого с диалога, а в переменную hh передаётся размер взятого пути

НО ВОТ КАКАЯ ИНТЕРЕСНАЯ ВЕЩЬ ПРОИСХОДИТ:
ЕСЛИ ОТКРЫВАЕТСЯ OPENDIALOG1 , ТО ВСЁ НОРМАЛЬНО: В ПЕРЕМ ZZ ПЕРЕДАЕТСЯ ПУТЬ, А В ПЕРЕМЕННУЮ HH РАЗМЕР
А ВОТ ЕСЛИ ОТКРЫВАЕТСЯ ЛЮБОЕ ДРУГОЕ ДИАЛОГОВОЕ ОКНО open/save as dialog, ТО ПЕРЕМЕННАЯ ZZ ЛИБО ПУСТА, ЛИБО СОДЕРЖИТ НЕМНОГОЧИСЛЕННЫЕ КАРАКУЛИ, А ПЕРЕМЕННАЯ HH ПОПЕРЖНЕМУ ПОЛУЧАЕТ РАЗМЕР ВЗЯТОГО ПУТИ.

Не могу понять, в чём причина такого глюка????????
В MSDN ничего такого не говорится.

Буду ВАМ очень признателен, если ВЫ проверите на работоспособность приведенный мною код и объясните мне в чем дело и как сделать так чтобы работало для всех диалоговых окон.
Надеюсь на ВАШ опыт и знания

МОЙ: STAINER@MAIL.RU

ЗАРАНЕЕ БЛАГОДАРЕН


VuDZ   (2002-03-17 12:34:00) [1]


int main(int argc, char* argv[])
{
HWND hNote = FindWindow(NULL, "Open");
WPARAM wp = MAX_PATH;
LPARAM lp = (LPARAM)new char[MAX_PATH];
ZeroMemory((void*)lp, MAX_PATH);
GetClassName(hNote, lp, wp); // must be 32770
int copied;
//1
CommDlg_OpenSave_GetFolderPath(hNote, wp, lp);
//2
if ((copied = SendMessage(hNote, CDM_GETFOLDERPATH, wp, lp)) > 0)
{
printf((const char*)lp);
wprintf(L"%s", (const short*)lp);
}

return 0;
}

рабочий код, за тем исключением, что он ничего не получает... хотя честно возвращется, что скопировано 8 байт (E:\Webs+"0" == 8), но ничего не копирует...


garik   (2002-03-17 12:17:00) [2]

> Cobalt

Напиш ответ ещё раз, пожалуйста! очень нужно!

> VuDZ что такое IPR? И ПРИЧЁМ ЗВЕСЬ ХУКИ, ВЕДЬ Я ЖЕ ПОСЫЛАЮ МЕССАГУ ИЗВЕСТНОМУ МНЕ ДИАЛОГУ? А ЕСЛИ И ПРИТОМ, ТО МОЖНОЛИ ПО КОНКРЕТНЕЙ, КАКОЙ ХУК И КАК ЕГО СТАВИТЬ???


VuDZ   (2002-03-16 12:34:00) [3]

я ты Юзий Золотов? :>


VuDZ   (2002-03-16 12:34:00) [4]

я ты Юрий Золотов? :>


Cobalt   (2002-03-16 12:26:00) [5]

> Модератор

Позвольте, я же вчера отвечал на вопрос, и даже полюбовался на него;)
А нонче его уже нет :((


VuDZ   (2002-03-16 07:28:00) [6]

из-за IPR ничего не выйдет, юзай хуки


Наверх

Титульная страница Поиск, карта сайта Написать письмо