WinAPI: найти путь к исполняемому файлу по его имени

Здесь обсуждаются темы, косвенно связанные с Far.
Post Reply
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

WinAPI: найти путь к исполняемому файлу по его имени

Post by DV »

Вопрос чисто по WinAPI, может кто подскажет? Не знал, в какой теме его лучше задать.
Несколько часов мучил поиск в Google, но он выдаёт ответы в несколько другом направлении.

Задача следующая:
1. Исходные данные:
- Есть имя исполняемого файла - например, "far", "sfk" или "greenshot"
2. Требуется:
- Найти полный путь к указанному исполняемому файлу - то есть вернуть, например:
"C:\FAR3\Far.exe" (полный путь и расширение файла получены из текущей папки);
"C:\Tools\sfk\sfk.exe" (полный путь к файлу получен из %PATH%);
"C:\Tools\greenshot.bat" (полный путь к файлу получен из %PATH%, обратите внимание на расширение .bat).

У меня есть подозрение, что существуют функции WinAPI, позволяющие автоматизировать такой поиск.
Иначе придётся вручную пробегаться по всем путям из списка %PATH%, и по каждому пути вручную искать файл с расширением из списка %PATHEXT%.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

WinAPI: найти путь к исполняемому файлу по его имени

Post by Shmuel »

Допустим, надо найти "greenshot".
1. lua: far.CopyToClipboard(win.GetEnv('pathext'):gsub('%.','greenshot.'),nil)
2. AltF7 ShiftIns Tab Del
3. Выбираем Select Search Area = "In PATH folders"
4. Enter

Естественно, если подобная задача нужна часто, то можно больше автоматизировать.
Last edited by Shmuel on Sat 02 Feb, 2019 16:36, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

WinAPI: найти путь к исполняемому файлу по его имени

Post by John Doe »

Кое-что есть из коробки:
win.SearchPath
https://msdn.microsoft.com/library/aa365527

Расширения можно брать из %PATHEXT%, а всё остальное сделает функция.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

WinAPI: найти путь к исполняемому файлу по его имени

Post by buniak_a_h »

Если надо не просто найти, но и перейти в ФАРе к найденному, то набрать в командной строке
whereis:<имя файла>. Я этим так часто пользуюсь, что сделал макрос:
  1. Macro {
  2.  
  3.   area="Shell"; key="CtrlShiftW"; Description="WhereIs:..."; flags="NotEmptyCommandLine";
  4.  
  5.   action = function()
  6.  
  7.   Far.DisableHistory(1)
  8.  
  9.  Keys('CtrlHome w h e r e i s : Enter')
  10.  
  11.   end;
  12.  
  13. }
Это - при наличии плагина FAR Commands, но он входит в комплект поставки
Last edited by buniak_a_h on Sat 02 Feb, 2019 18:21, edited 2 times in total.
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

WinAPI: найти путь к исполняемому файлу по его имени

Post by DV »

Спасибо за ответы!
Из того, что я вижу, особенно в коде FAR, выходит, что Microsoft поощряет изобретение велосипедов для действия, которое точно выполняется самой системой при каждом запуске файла из консоли...
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

WinAPI: найти путь к исполняемому файлу по его имени

Post by Xerox »

buniak_a_h,
святые угодники, а я и не знал про то что это в ФАРе искоропки
лично я всегда использовал утилиту where, в виндае она встроенная тоже
дает список всех кого найдет в путях, ищет и по маске:
Post Reply

Return to “Операционные системы, командные оболочки и прочее”