Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.20;
Скачать: CL | DM;

Вниз

срочно нужен совет спеца!   Найти похожие ветки 

 
garik   (2002-03-16 04:48) [0]

Уважаемый спец, помогите пожалуйста разобраться с задачей:
НУЖНО ВЗЯТЬ ПУТЬ С ОТКРЫТОГО В ДАННЫЙ МОМЕНТ ДИАЛОГА (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-16 07:28) [1]

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


 
Cobalt ©   (2002-03-16 12:26) [2]

> Модератор

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


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

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


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

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


 
garik   (2002-03-17 12:17) [5]

> Cobalt

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

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


 
VuDZ ©   (2002-03-17 12:34) [6]


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), но ничего не копирует...



Страницы: 1 вся ветка

Текущий архив: 2002.05.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
3-64465
Somebody
2002-04-24 16:14
2002.05.20
Сортировка


1-64727
ymin
2002-05-07 08:55
2002.05.20
forms


1-64684
Maloy
2002-05-06 12:02
2002.05.20
Отчеты при помощи Word а


7-64848
777
2002-02-21 13:46
2002.05.20
Как узнать параметры процедуры из DLL?


1-64750
ymin
2002-05-07 08:58
2002.05.20
А как сделать, чтобы например форма1