Здравствуйте. Подскажите как можно завершить процесс(завершить программу) зная путь к запускаемому файлу. Спасибо.
Перебрать все процессы, если найдено совпадения имени то закрыть процесс сделать можно с помощью GetModuleFileNameEx ( PSAPI ) http://www.rsdn.ru/article/qna/baseserv/enumproc.xml
1) вычленить имя исполняемого файла из пути 2) найти пид процесса по имени исполняемого файла 3) завершить процесс можно многими способами в чем проблема то?
Найди в строке последний бек-слеш('\') - после него, очевидно, имя модуля) - легко реализуется циклом.
Вот что-то нашёл =) start: invoke GetCommandLine mov ebx,eax next: cmp byte [ebx],'-' je found cmp byte [ebx],0 jz exit inc ebx jmp next found: inc ebx invoke sndPlaySound,ebx,NULL
Код (Text): include '%fasm%\win32ax.inc' section '.code' executable start: invoke GetModuleFileName,NULL,lpFileName,MAX_PATH mov ecx,eax lea edi,[lpFileName+eax-1] std mov al,'\' repne scasb mov byte[edi+1],0 cld @: invoke MessageBox,NULL,lpFileName,' FileDir: ',MB_OK exit: invoke ExitProcess,NULL .end start section '.data' readable writable lpFileName dd NULL section '.rsrc' resource readable directory RT_MANIFEST,_manifest resource _manifest,1,LANG_NEUTRAL,manifest resdata manifest file '%fasm%\manifest32.xml' endres
Вот ещё один примерчик, только тут наоборот путь отсекается Код (Text): start: invoke GetCurrentDirectory,MAX_PATH,lpBuffer invoke MessageBox,NULL,lpBuffer,'I''m here:',MB_OK exit: invoke ExitProcess,NULL lpBuffer db 2048 dup (?)
В данном случае лучше велосипед из 5-х строчек на асме, чем загрузка тяжелой артилерии - shlwapi.dll Вот если бы эта функа в kernel32 стдела, тогда другое дело