Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
7 / 7 / 2
Регистрация: 12.07.2010
Сообщений: 30
1

Как узнать полное имя файла зная его краткое имя?

03.08.2010, 13:38. Показов 6928. Ответов 13
Метки нет (Все метки)

например при запуске программы достаточно написать "Excel" или "Calc" при этом система уже в курсе где этот файл лежит. как программно узнать путь к этим файлам. В частности мне нужно вытянуть иконку (как это делается я знаю) из такого вот файла
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2010, 13:38
Ответы с готовыми решениями:

Как узнать имя exe, зная его id?
Пишу программу отслеживающие активность пользователя. Проблема стоит в том что не могу найти...

Как найти процесс, зная полное имя файла
Мне дано полное имя файла, и по этому файлу я должен найти соответственный процесс(если он запущен).

Как узнать имя процесса, зная имя программы?
Здравствуйте, подскажите пожалуйста, как узнать имя процесса выполняемой программы, зная имя этой...

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого католога
Помогите пожалуйста!!! Залание: Дано полное имя файла, т.е путь к файлу, имя и расширение....

13
Заблокирован
03.08.2010, 13:51 2
как правило они лежат в сист папках windows:
C:\WINDOWS\system32\, C:\WINDOWS\
еще в системном реестре, как правило, прописывается путь к ним этот или другой
запусти програму C:\WINDOWS\system32\regedit32 и через поиск поищи, какие записи с ними связаны
0
7 / 7 / 2
Регистрация: 12.07.2010
Сообщений: 30
03.08.2010, 13:56  [ТС] 3
это не выход.
Excel лежит не в системных папках более того для разных версий офиса в разных папках лежит и ответ ;Желателен в общем виде
типа
Function ShotToFull(filename : String) :String;
Begin
...
End;
0
Заблокирован
03.08.2010, 14:04 4
FullPath должен помочь, только я программист не на Delphi
*система уже в курсе* - в системном реестре искать надо regedit32 и там Ctrl+F,Ctrl+F,Ctrl+F, пока не найдеш
0
Эксперт С++
7175 / 3234 / 78
Регистрация: 17.06.2009
Сообщений: 14,165
03.08.2010, 20:42 5
В консоли "excel" ничего не запускает
А через Run -> "excel" запускает
Так что загадка откуда берет
0
Эксперт С++
3184 / 865 / 39
Регистрация: 29.12.2008
Сообщений: 952
04.08.2010, 12:26 6
По идее, эти пути могут храниться в переменных среды. Например, в
PATH
PATH является переменной среды и представляет собой список папок, который используется операционной системой для поиска исполняемых файлов (*.EXE). На практике, если папка добавлена в PATH, исполняемые файлы можно запускать из командной строки без указания полного пути к ним.
Для того чтобы посмотреть список папок, входящих в переменную PATH, просто наберите PATH в командной строке.
Добавить папку в PATH можно при помощи графического интерфейса Windows. Для этого надо открыть диалоговое окно свойств системы (WIN+PAUSE), на вкладке Дополнительно нажать кнопку Переменные среды, в разделе системные переменные выделить PATH и нажать кнопку Изменить.


Если так, то можно использовать функцию getenv для получения содержимого переменной. Или GetEnvironmentVariable.

Не по теме:

В принципе, переменные среды всё равно хранятся в реестре, так что можно и сним работать, но непосредствено с переменными может быть более удобно.

1
7 / 7 / 2
Регистрация: 12.07.2010
Сообщений: 30
04.08.2010, 12:53  [ТС] 7
мысль хорошая но проверенно пути к папкам офиса в переменной Path нет
0
Эксперт С++
3184 / 865 / 39
Регистрация: 29.12.2008
Сообщений: 952
04.08.2010, 13:26 8
Цитата Сообщение от odip Посмотреть сообщение
Так что загадка откуда берет
Просто когда мы вбиваем "excel" в командную строку, она ищет в переменных окружения и не находит. Если находит, то запускает.

Когда мы вбиваем "excel" в Выполнить, то сначала отыскивается полный путь в реестре по адресу
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion \App Paths
а потом уже вызывается CMD, куда передается этот полный путь как параметр. Ну а полный путь командная строка естественно обрабатывает и запускает приложение.

Только так можно объяснить, возможно, я ошибаюсь. Но именно в этой ветке хранится огромное количество путей и именно с ней и связан Run\Выполнить.

Так что, вот такие хранилища есть в системе - переменные окружения и эта ветка реестра. Ими и нужно пользоваться.
2
Фрилансер
3683 / 2054 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
04.08.2010, 14:31 9
А ведь точно, я и не знал о такой фиче. WinRar, оказывается, проводник тоже находит, а консоль - нет. Он тоже прописан в AppPath
0
Эксперт С++
7175 / 3234 / 78
Регистрация: 17.06.2009
Сообщений: 14,165
04.08.2010, 22:55 10
Только так можно объяснить, возможно, я ошибаюсь. Но именно в этой ветке хранится огромное количество путей и именно с ней и связан Run\Выполнить.
proof link ?
Предположить как оно находит я тоже могу.

Добавлено через 12 минут
http://msdn.microsoft.com/en-u... 85%29.aspx
http://support.microsoft.com/kb/837633

Эти пути в "HKLM\...\App Paths" используются не только через Run, но и вообще при вызове фукнций ShellExecute(), ShellExecuteEx().
0
Фрилансер
3683 / 2054 / 565
Регистрация: 31.05.2009
Сообщений: 6,684
04.08.2010, 23:01 11
Странно, почему в консоли этого не происходит.

А я откуда знаю про этот ключ: я смотрел, как DLL от WinRar находит его для выполнения контекстных команд эксплорера
0
Эксперт С++
3184 / 865 / 39
Регистрация: 29.12.2008
Сообщений: 952
04.08.2010, 23:20 12
Цитата Сообщение от odip Посмотреть сообщение
proof link ?
Озадачил на самом деле,... Ну вот в этой статье, например, в пункте "Adding applications to the Path" говорится о том, как добавлять пути таким образом, чтобы вызывать приложения по короткому имени. Упоминается как раз эта ветвь реестра.
Если посмотреть эту ветвь в реестре, то нетрудно убедиться, что в ней содержатся записи о большом количестве приложений, которых нет в папках переменной окружения. При этом все они запускаются с помощью Run.


odip, а примешь в качестве доказательства тот факт, что при нажатии на кнопочку OK в RUN происходит обращение как раз к этой ветке реестра, что нетрудно видеть с помощью Regmon'а?
0
Эксперт С++
7175 / 3234 / 78
Регистрация: 17.06.2009
Сообщений: 14,165
05.08.2010, 07:18 13
Странно, почему в консоли этого не происходит.
Видимо консоль не вызывает функцию ShellExecute()
Озадачил на самом деле,...
Я уже нашел и ссылку выложил
0
3 / 3 / 0
Регистрация: 15.08.2010
Сообщений: 15
18.08.2010, 17:24 14
Функция GetFullPathName вас не устроит?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2010, 17:24

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как узнать имя exe зная его id (WinApi,c++)
Пишу программу отслеживающие активность пользователя. Проблема стоит в том что не могу найти...

Как узнать имя окна (обьекта), зная его хэндл?
Допустим, хэндл окна я узнаю так: HANDLE h=WindowFromPoint(Mouse->CursorPos); Класс так:...

Как узнать Handle или PID процесса, зная его имя и класс?
Как узнать Handle или PID процесса, зная его имя и класс?

Узнать полное имя файла
Привет, помогите пожалуйста, как сделать в .bat файле чтобы он узнал полное имя файла. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.