Skip navigation.
Home

Мозголомная брага для виндузного программиста.

- Вы, молодой человек, простите, кто?
- Студент я.
- Объявление - читали?
- Нет...
- Лекция - для КОЛХОЗНИКОВ!

Итак, есть несколько открытых окон Windows Explorer. В одном окне - содержимое, скажем, папки C:\111, в другом - содержимое папки F:\111 (т.е. имена каталогов - одинаковы). Оба каталога пусты.

Процесс в памяти один, т.е. эксплорер настроен НЕ создавать отдельный процесс в памяти для каждого открытого окна.

Настройки эксплорера таковы, что адресной строки нет, и в заголовке главного окна показывается только каталог, но никак не диск (это важно для понимания проблемы).

Внимание, вопрос: как, тем не менее, понять, каталог какого диска открыт?

Сразу расскажу, чего я пробовал:

Комбинацией функций:

HWND h = ::GetTopWindow(0 );
и
::GetNextWindow( h , GW_HWNDNEXT);

я перебрал окна верхнего уровня. Отловил окна с вот такими classname's:

CabinetWClass
ExploreWClass
IEFrame

у каждого из отловленных окон функцией EnumChildWindows отловил все чайлд-окна. Нигде ссылки на имя диска нет. Т.е. вообще нигде.

Тем не менее, существует программулина (EjectUSB.exe) которая в такой ситуации, тем не менее, умеет найти и закрыть именно то окно процесса, которое имеет отношение к нужному мне диску.

Во избежание совета "да скачай ты исходники и посмотри", сообщаю, что файл "EjectUSB.au3", который есть в этих ваших Интернетах - это старая версия, которая не умеет делать такой цирковой трюк. Новая же версия EjectUSB.exe, которая это могЕт, в исходниках недоступна.

У кого есть какие идеи, камраден?

Спасибо заранее.

Вот это не

Вот это не поможет ли?

"Querying information from an Explorer window" http://blogs.msdn.com/oldnewthing/archive/2004/07/20/188696.aspx

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.