Главная страница
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.014 c
7-64849
Olfi
2002-01-26 12:33
2002.05.20
Как можно узнать параметры компьютера?


1-64583
galina
2002-05-07 15:22
2002.05.20
программирование


3-64507
Ser_Kham1
2002-04-23 10:51
2002.05.20
BDE


1-64732
Lerico
2002-05-07 09:17
2002.05.20
Передаю в Excel данные - порядка 1000 строк.


6-64759
BDRON
2002-03-07 08:52
2002.05.20
Dial-up программа