Как узнать..
запущен ли в данное время определенный файл (екзешник)? :)
Простого пути не знаю, зато есть сложный (ведь трудности для того и существуют, чтобы их преодолевать):
1) создаешь снимок текущего состояния системы функцией CreateToolhelp32Snapshot с флагом TH32CS_SNAPPROCESS
2) с пом. ф-ций Process32First и Process32Next проверяешь все процессы системы. Эти функции заполняют структуру PROCESSENTRY32, в ней есть член szExeFile - вот его и тести.
3) Если этот файл не является исходным модулем процесса, а только используемым (напр., DLL) - тогда действий в п.2 недостаточно. Тогда по каждому процессу из п.2 создается список используемых им модулей все той же функцией CreateToolhelp32Snapshot, но уже с флагом TH32CS_SNAPMODULE + во втором параметре передаешь PROCESSENTRY32.th32ProcessID из п.2.
4) Итерируешь в полученном списке с пом. функций Module32First и Module32Next, которые заполняют тебе структуру MODULEENTRY32 - в ней проверяешь члены szModule и szExePath.
Чиркнешь, как оно получилось! ;)
Простого пути не знаю, зато есть сложный (ведь трудности для того и существуют, чтобы их преодолевать):
1) создаешь снимок текущего состояния системы функцией CreateToolhelp32Snapshot с флагом TH32CS_SNAPPROCESS
2) с пом. ф-ций Process32First и Process32Next проверяешь все процессы системы. Эти функции заполняют структуру PROCESSENTRY32, в ней есть член szExeFile - вот его и тести.
3) Если этот файл не является исходным модулем процесса, а только используемым (напр., DLL) - тогда действий в п.2 недостаточно. Тогда по каждому процессу из п.2 создается список используемых им модулей все той же функцией CreateToolhelp32Snapshot, но уже с флагом TH32CS_SNAPMODULE + во втором параметре передаешь PROCESSENTRY32.th32ProcessID из п.2.
4) Итерируешь в полученном списке с пом. функций Module32First и Module32Next, которые заполняют тебе структуру MODULEENTRY32 - в ней проверяешь члены szModule и szExePath.
Чиркнешь, как оно получилось! ;)
Функции ToolHelp32 доступны только в Win9x. Их использование под WinNT приведет к ошибке. Под NT следует использовать PSAPI.
Функции ToolHelp32 доступны только в Win9x. Их использование под WinNT приведет к ошибке. Под NT следует использовать PSAPI.
PSAPI не пользовался, да и ToolHelp под NT, честно говоря, не тестил. Тем не менее в MSDN (за апрель 2003 года) указано, что ToolHelp32-функции поддерживаются на следующих системах:
Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003 and Windows 2000 Server.
Header: Declared in Tlhelp32.h.
Library: Use Kernel32.lib.
PSAPI не пользовался, да и ToolHelp под NT, честно говоря, не тестил. Тем не менее в MSDN (за апрель 2003 года) указано, что ToolHelp32-функции поддерживаются на следующих системах:
Requirements
Client: Included in Windows XP, Windows 2000 Professional, Windows Me, Windows 98, and Windows 95.
Server: Included in Windows Server 2003 and Windows 2000 Server.
Header: Declared in Tlhelp32.h.
Library: Use Kernel32.lib.
Это верно. ToolHelp нет в NT. Но потом Microsoft добавила их в Win2000.