IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Сообщения проводника, API
сообщение
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

Возникло несколько вопросов, когда общался с windows-проводником. Первое - когда я открываю Мой компьютер, то это же окно? В таком случае, какой заголовок оно имеет, как найти хэндл? Если в XP, то обычно в какую папку зайдёшь, такой заголовок и будет. И то, может отображаться полный путь к папке, а может и просто имя папки. В win7 же вообще в "Моём компьютере" никаких заголовков не наблюдается. Это непонятная вариативность. Есть ли универсальный способ найти окно проводника (если заходить с "Моего компьютера" или с "Пуск->Проводник"), чтобы можно было в том числе определить, в какой директории этот проводник находится?

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Есть ли универсальный способ найти окно проводника
Есть, разумеется, IShellWindows и IWebBrowser2 на что придумали?

  Explorer := CoShellWindows.Create;
for I := 0 to Explorer.Count - 1 do
Memo1.Lines.Add((Explorer.Item(I) as IWebbrowser2).LocationUrl);

Может понадобиться подключить модуль SHDocVw.

А, да... Explorer - типа IShellWindows, если что smile.gif

А вообще, искать окно эксплорера можно так: FindWindow('ExploreWClass', nil). И под XP можно взять название текущей папки через GetWindowText. Но лучше все-таки штатными средствами, чтоб независимо от версии Windows...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата
А вообще, искать окно эксплорера можно так: FindWindow('ExploreWClass', nil). И под XP можно взять название текущей папки через GetWindowText. Но лучше все-таки штатными средствами, чтоб независимо от версии Windows...


Ага, значит, есть разница в этом в разных windows. Тогда, можно находить через FindWindow, а папку брать не с GetWindowText, а искать нужный эдит, он-то и в севене тоже есть. Ибо сильно жирный этот SHDocVw..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
он-то и в севене тоже есть
Есть-то он есть, да вот ты можешь гарантировать, что находятся адресные строки (там не эдиты, а ComboBoxEx32) на одном уровне и в XP и в Win7? А если нет, тогда что делать?опять проверять, какая ОС, и далее условиями? Ну, делай, как знаешь. Только сначала попробуй с SHDocVw, а потом - чтоб отработало на WinXP/Vista/Win7 без него. И сравни результаты. И время разработки заодно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата
Ну, делай, как знаешь. Только сначала попробуй с SHDocVw, а потом - чтоб отработало на WinXP/Vista/Win7 без него. И сравни результаты. И время разработки заодно...


Намёк понял) Я, наверное, сделаю вариант только для XP. Знаю, что так делать нехорошо, но этот момент не сильно критичен, размер важнее.

Кстати, кажется, для XP не ищет..

var h:hwnd;
p:pchar;
begin
h:=FindWindow('ExploreWClass', nil);
if h<>0 then begin
getwindowtext(h,p,255);
showmessage(p);
...
end;




До showmessage не доходит. Окошко проводника в момент поиска открыто.

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ага. Это мой глюк. В XP такая фигня: если окно эксплорера открыто правым кликом по MyComputer и выбором пункта меню Explore - то тогда имя класса = ExploreWClass. Если же правый клик по MyComputer + меню Open - то имя класса - CabinetWClass. Так что вот тебе еще один довод в пользу стандартных средств smile.gif.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


спасибо за информацию smile.gif //это я так, немного влез в тему smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Присоединяюсь к Client'у, давно интересовала эта тема smile.gif Ещё небольшой вопрос, я криво вызываю getwindowtext, что ли.. Когда делал с pchar, в буфере были кракозябры, а сейчас вообще ничего:

var h:hwnd;
ps:string;
begin
h:=FindWindow('ExploreWClass', nil);
if h=0 then h:=findwindow('CabinetWClass',nil);
if h<>0 then begin
getwindowtext(h,pchar(ps),255);
showmessage(ps);
...
end;
end;


Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
я криво вызываю getwindowtext, что ли
Память надо выделять под тот текст, который будет читаться. А String этого не делает. Это динамическая строка...
procedure TForm1.Button1Click(Sender: TObject);
var
h: hwnd;
p: array[0 .. pred(MAX_PATH)] of char;
begin
h := FindWindow('CabinetWClass', nil);
if h <> 0 then
begin
getwindowtext(h, p, max_path);
showmessage(p);
end
else showmessage('cannot find explorer window');
end;

Все нормально отображается. Даже если в названии папки - кириллица...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


с PChar у меня отработало...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


volvo, спасибо, сделал что хотел. Я, кстати, вроде раньше тоже с pchar делал и работало..)


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 22:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name