Форум: "WinAPI";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
Внизсрочно нужен совет спеца! Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c