Мозголомная брага для виндузного программиста.
- Вы, молодой человек, простите, кто?
- Студент я.
- Объявление - читали?
- Нет...
- Лекция - для КОЛХОЗНИКОВ!
Итак, есть несколько открытых окон 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, которая это могЕт, в исходниках недоступна.
У кого есть какие идеи, камраден?
Спасибо заранее.
- cynic's blog
- Login to post comments
Вот это не
Вот это не поможет ли?
"Querying information from an Explorer window" http://blogs.msdn.com/oldnewthing/archive/2004/07/20/188696.aspx