[WT] [Архив] [Поиск] Главная Управление
[Совместно с Ычаном]

[Назад]
Ответ в нить
Имя
Animapcha image [@] [?]
Тема   ( ответ в 6256)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаемые типы файлов: 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, OGG, PDF, PNG, PSD, RAR, SVG, SWF, TXT, XCF, ZIP
  • Максимально допустимый размер файлов: 10000 кБ.
  • Изображения, размер которых превышает 200 на 200 пикселей, будут уменьшены.
  • Ныне 1522 unique user posts. Посмотреть каталог
  • Радио:

Файл: 132882065877.png-(3.80KB, 200x200, imgvw.png)
6256 No. 6256 watch    
Привет, Стив. Хочу сделать "дополнение" к стандартному просмотрщику изображений Windows, которое бы, в числе прочего, умело бы подцепляться к его открытому окну и посылать команды (типа "перейти к следующему изображению") и получать от него адрес текущего открытого файла. Это реально?
Я читал про обмен сообщениями в винде, как послать команду перехода между картинками я еще понимаю (отправить нажатие стрелки на клаве), но вот как запросить полный путь открытого файла не знаю.
Ах да, среда разработки - Delphi.
Развернуть все изображения
>> No. 6257    
>>6256
>но вот как запросить полный путь открытого файла не знаю.
Никак. Придётся искать оффсет, где хранится путь текущего файла. Можешь из заголовка имя файла вытаскивать, в общем-то. Можешь ещё Винспаем поковыряться, может есть элемент который хранит путь к файлу.
>> No. 6265    
>>6257
>оффсет
В смысле в память процесса залезть? Антивирусы не обидятся?
>> No. 6266    
>>6265
Да, залезть. Конечно обидятся, на то они и антивирусы.
>> No. 6272    
На StackOverflow подсказывают, что можно или узнать параметр Current Directory у процесса просмотрщика (но я не знаю как), либо использовать функцию NtQueryObject, чтобы найти хэндлы ко всем файлам, открытым некоторым процессом, но найденные мной реализации этого ничего открытого в просмотрщике не видят.
>> No. 6274    
Файл: 132906263448.jpg-(121.79KB, 850x637, 1.jpg)
6274
>>6272
>NtQueryObject, чтобы найти хэндлы ко всем файлам
Не поможет. Во первых вьювер кеширует изображения, т.е. не держит файл открытым, во вторых rundll32.exe это не только вьювер, и оно много к чему лезет.


>можно или узнать параметр Current Directory
А вот это правильно. Узнаешь папку, узнаёшь имя файла по заголовку окна программы, папка+файл = профит. Сам сможешь достать директорию просмотра?
>> No. 6307    
>>6274
Ну сам-не сам, но код, предложенный на StackOverflow текущую папку показывает, как в Process Explorer'e. Проблема оказалась в другом - как RunDll32 вьювер cуществует только при явном запуске через командную строку или правый клик - открыть с помощью. При открытии же картинки двойным кликом вьювер запускается как один из потоков проводника - и его CurrentDirectory не меняется.
Вот если бы можно было получить этот параметр для ThreadID вместо ProcessID...
>> No. 6317    
>>6307
Почему бы не зарегистрировать свой собственный обработчик файлов с картинками, который сначала будет запоминать путь, а уже следом открывать просмотрщик? Костыль, коечно, но и ты желаешь странного.
>> No. 6321    
Файл: 13296048838.jpg-(169.79KB, 499x700, 1.jpg)
6321
>>6307
>ThreadID
Без внедрения в процесс не выйдет. Алсо, дай ссылку на то, что тебе предложили на StackOverflow.
И попробуй покопаться в PEB http://www.google.ru/search?q=peb+NtQueryInformationProcess

>>6317
Слишком по-индусски.
>> No. 6323    
>>6321
http://stackoverflow.com/questions/9229742/get-path-to-file-currently-open-in-windows-picture-fax-viewer/
Разработка идет на ХР, тестировал пока на вин8 - вроде как не работает определение текущей папки (выдает сис32 вместо нее). Обе системы 32бит - на 64 программа падает с ошибкой из-за разницы в структуре данных о процессе.
>> No. 6332    
Файл: 132970379072.jpg-(134.70KB, 850x1062, 1.jpg)
6332
>>6323
Похоже, что без внедрения никак. Максимум что можно - извлечь параметры запуска и получить из них текущую директорию. Но отследить изменение директории у меня например не получилось.
Попробуй поискать строки в программе. Правда я прозреваю что она просто держит хэндл папки, а не путь, что очень печально.
[Назад]


Удалить сообщение []
Пароль  
[Mod]