Как отследить?
- Попытку пользователя удалить /переместить /открыть /т.д какой-либо файл?
спасибо! :-?
Лучше ее использовать при запуске программы, так как если во время использования программы осуществлялось навигация по папкам то эта функция вернет последнию папку
ExtractFileDir(Application->ExeName);
Юзать GetCurrentDir не очень правильно, потому что после того как приложение запущено, текущая директория может поменяться, хотя я сам не проверял, может быть и не прав.
Спасибо за ответы, но не все так просто, дело в том, что надо отследить запуск не моего приложения, а других приложений запущенных пользователем, нечто вроде API GetModuleName. :o
Объясни по подробнее
:) Например в системе запущено: Word, Builder, ... Требуется узнать из какой директории запущен Word, а из какой Builder
Я пытаюсь сделать это так: Перебераю все процессы с помощью Process32First, Process32Next; Функции возвращают структуру PROCESSENTRY32 у которых есть поле szExeName.
В этой строке и должно по докам храниться путь и имя exe файла, но храниться только имя, а жаль.
Хоть ищи по диску этот файл...:x
Кстати, для получения директории из которой запущена своя прога можно определить еще так:
AnsiString s = ExtractFilePath(Application->ExeFile); // всегда верно работает
Вот тебе прога которая показывает в мемополе все процессы и убивает те из них которые были запущены из автозагрузки...
(смотри если у тебя есть какие проги в автозагрузке то не спеши запускать)
В мемполе отображается полный путь к процессам...
#include <Tlhelp32.h>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD th32ProcessID;
HANDLE hSnapshoot,hKillProcess;
hSnapshoot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot == NULL) return;
tagPROCESSENTRY32 pe32;
pe32.dwSize = sizeof(tagPROCESSENTRY32);
Memo1->Lines->Add("Список процессов:");
if (Process32First(hSnapshoot, &pe32))
do
{
Memo1->Lines->Add(String(pe32.szExeFile));
String strPath="C:\\WINDOWS\\Главное меню\\Программы\\Автозагрузка\\";
String strExeFile=pe32.szExeFile;
strExeFile.SetLength(strPath.Length());
if (strExeFile==strPath)
{
th32ProcessID=pe32.th32ProcessID;
hKillProcess = OpenProcess(PROCESS_ALL_ACCESS, True, th32ProcessID);
TerminateProcess(hKillProcess,0);
}
}
while (Process32Next(hSnapshoot, &pe32));
String strFile;
WIN32_FIND_DATA nf;
nf.cAlternateFileName[0]=0;
HANDLE pp;
pp=FindFirstFile("C:\\WINDOWS\\Главное меню\\Программы\\Автозагрузка\\*.*",&nf);
String strNameFile=nf.cFileName;
strNameFile=String("C:\\WINDOWS\\Главное меню\\Программы\\Автозагрузка\\")+strNameFile;
if (nf.cAlternateFileName!="") DeleteFile(strNameFile.c_str());
for (int i=1; i<=1999; i++)
{
if (FindNextFile(pp,&nf)==false) break;
strNameFile=nf.cFileName;
strNameFile=String("C:\\WINDOWS\\Главное меню\\Программы\\Автозагрузка\\")+strNameFile;
if (String(nf.cFileName)!=String(".") && String(nf.cFileName)!=String(".."))
{
for (int j=1; j<=10000; j++)
{
int p=DeleteFile(strNameFile.c_str());
if (p==1)
{
break;
}
if (j==10000) ShowMessage("Не удается удалить файл из автозагрузки");
}
}
}
}