Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Вниз

Указатель на 16-разрядный процесс   Найти похожие ветки 

 
Demon   (2003-03-11 18:11) [0]

Как получить указатель на 16-разрядный процесс?


 
MBo   (2003-03-11 18:15) [1]

А что такое указатель на процесс????


 
Demon   (2003-03-11 18:20) [2]

В данном случае это то, что ты можешь увидать в Task manager :), извиняюсь за неточную формулировку. Смысл: современная прога тянет пару 16-тиразрядных exe-шников (начальство никак не желает понять, что это проще переделать). Ну они и подвисают временами. Необходимо в этом случае грохнуть этот процесс (типа TerminateProcess)...


 
Игорь Шевченко   (2003-03-11 18:25) [3]

Demon © (11.03.03 18:20)
> В данном случае это то, что ты можешь увидать в Task manager
>


В task manager виден процесс NTVDM. Вот его, очевидно, и надо убивать при подвисаниях :-)))


 
Demon   (2003-03-11 18:31) [4]

> Игорь Шевченко

!!! Спасибо! :) А для 98-й как? Просто у меня сейчас только 2000-к, а надо будет.


 
Burmistroff   (2003-03-11 21:01) [5]

А в 98 разве есть какие-то особые правила для 16 битных (я честно говоря ни когда над этим не задумывался ;) ) но про NT - скажу - убивать ntvdm несколько не спортивно, хотя и действенно. По хорошему, надо получить его PID, а затем использовать ф-ции vdmdbg:

function AppKill(PID, VDM: cardinal):boolean; //Убивает процесс. Если процесс 16-разрядный, то VDM должен быть PID"ом NTVDM.EXE иначе, VDM = 0
type TVDMTerm= function(VDM_, PID_: dword): boolean; stdcall;
var
hInstLib2, ProcHand: thandle;
FuncPtr: pointer;
r: boolean;
VDMTerm: TVDMTerm;
begin
r:=false;
if pid>0 then
try
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
EnablePrivilege("SeSystemEnvironmentPrivilege");
EnablePrivilege("SeDebugPrivilege");
end;
if vdm=0 then
begin
ProcHand := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
if (ProcHand>0)and(terminateprocess(ProcHand,0)) then r:=true else r:=false;
CloseHandle(ProcHand);
end else
begin
try
hInstLib2:=LoadLibraryA("VDMDBG.DLL");
FuncPtr:=GetProcAddress(hInstLib2,"VDMTerminateTaskWOW");
if FuncPtr<>nil then
begin
@VDMTerm:=FuncPtr;
r:=VDMTerm(VDM, PID);
FuncPtr:=nil;
end;
finally
FreeLibrary(hInstLib2);
end;
end;
except r:=false end;

result:=r;
end;



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
3-91212
Andrews
2003-04-10 12:57
2003.04.28
DBGrid и колесо мыши


1-91337
Giemgo
2003-04-13 16:33
2003.04.28
Загрузка библиотеки


1-91294
Kedis
2003-04-17 12:29
2003.04.28
Ожидание в Delphi


14-91507
igorr
2003-04-10 14:52
2003.04.28
Ошибка завершения работы Windows


1-91298
Andrey007
2003-04-17 15:08
2003.04.28
Подскажите, пожалуйста, по поводу изменения разрешения экрана.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский