Сейчас на форуме: hgdagon, asfa (+4 невидимых)

 eXeL@B —› Программирование —› Найти файл и запустить
Посл.ответ Сообщение

Ранг: 15.3 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 июня 2006 19:48
· Личное сообщение · #1

Мне нужно найти какой то файл например в папке виндовза и запустить его. Но я не знаю какой винд (вин2000 -> WINNT, Winxp -> Windows и т.д.) и в каком диске установлен. Как решить праблему?



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 10 июня 2006 19:55
· Личное сообщение · #2

%windir%\filename.exe



Ранг: 15.3 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 июня 2006 19:58
· Личное сообщение · #3

А этот трюк с делфи проходит?



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 10 июня 2006 20:06
· Личное сообщение · #4

этот трюк проходит в винде. называется переменная окружения. язык не причем



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 10 июня 2006 20:19
· Личное сообщение · #5

GetWindowsDirectory




Ранг: 122.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 10 июня 2006 21:47
· Личное сообщение · #6

а можно и вообще "filename.exe"
виндовая папка ведь всегда в переменной окружения PATH прописана. (разве нет?)



Ранг: 15.3 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 июня 2006 22:02
· Личное сообщение · #7

2 intty
Ну да, но вряд ли сработает.

2 Asterix
Спасибо, а можно поконкретнее?




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 11 июня 2006 00:39
· Личное сообщение · #8

n90p
GetWindowsDirectory http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getwindowsdirectory.asp -- куда уж конкретнее .

-----
the Power of Reversing team




Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 12 июня 2006 10:35 · Поправил: Error_Log
· Личное сообщение · #9

Есть еще одна функция:
GetSystemDirectory

The GetSystemDirectory function retrieves the path of the system directory. The system directory contains system such files such as dynamic-link libraries, drivers, and font files.

This function is provided primarily for compatibility. Applications should store code in the Program Files folder and persistent data in the Application Data folder in the user's profile. For more information, see ShGetFolderPath.


UINT GetSystemDirectory(
LPTSTR lpBuffer,
UINT uSize
);

Parameters
lpBuffer
[out] Pointer to the buffer to receive the null-terminated string containing the path. This path does not end with a backslash unless the system directory is the root directory. For example, if the system directory is named Windows\System on drive C, the path of the system directory retrieved by this function is C:\Windows\System.
uSize
[in] Maximum size of the buffer, in TCHARs. This value should be set to MAX_PATH.

В винХР вернет что-то типа C:\WINDOWS\system32

-----
Research is my purpose




Ранг: 42.4 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 16 июня 2006 08:31
· Личное сообщение · #10

В Билдере точно было что-то подобное, а вообще глянь доку по реестру. Положение этой папки там если и не в одном и том же месте , то вариантов 2-3, не больше.

try {..} catch рулит

А если совсем не париться,то батник, где, как писали выше:
%windir%\filename.exe



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 июля 2006 22:22
· Личное сообщение · #11

В builder:

char sWinDir[255];
GetWindowsDirectory(sWinDir,sizeof(sWinDir));
... AnsiString(sWinDir)+"\filename.exe" //"..." - необходимая операция
примерно так



Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 20 июля 2006 23:22
· Личное сообщение · #12

Млин, над чем ты мудишься..
В паблике объяви переменные: директория(строка), директория(pchar), результат(кардинал).
директория(pchar) := stralloc(max_path);
результат := GetWindowsDirectory(директория(pchar), max_path);
if результат > 0 then
директория(строка) := strpas(директория(pchar));




Ранг: 7.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 20 июля 2006 23:36
· Личное сообщение · #13

еще вот, забыл
если файла там нет, попробуй поискать.
пользуй shellexecute (чтобы найти файл - ключ search, открыть - open)
ну а если тебе и api не поможет , тебе уже ничто не поможет



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 21 июля 2006 10:16
· Личное сообщение · #14

GetWindowsDirectory + FindFirstFile, FindNextFile, FindClose + ShellExecute




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 21 июля 2006 14:26
· Личное сообщение · #15

Точно не помню, но на делфях, вроде, есть такая функция которая принимает на вход только ИмяФайла и вохвращает полный путь. А вот назавние забыл =(

-----
Don_t hate the cracker - hate the code.




Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 30 августа 2006 08:29
· Личное сообщение · #16

у мня например при указании только имени файла работало (если файл в папке винды был)



Ранг: 38.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 01 сентября 2006 04:11 · Поправил: ne0n
· Личное сообщение · #17

Блин, вот готовый код, ничего сложного.

uses
ShellApi;

var
windir: array [0..255] of char;

begin
GetWindowsDirectory(windir, 255);
ShellExecute(Handle, 'open',
Pchar(windir+'filename.exe'), nil, nil, SW_SHOWNORMAL);
end;

а уж про FindFirst,FindNext,FindClose найти не проблема.



Ранг: 15.3 (новичок)
Активность: 0.010
Статус: Участник

Создано: 19 февраля 2007 01:41
· Личное сообщение · #18

Thanx to all


 eXeL@B —› Программирование —› Найти файл и запустить
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати