Вверх ↑
Ответов: 1841
Рейтинг: 370
#1: 2013-12-26 09:00:11 ЛС | профиль | цитата
Узнаём имя и ID родительского процесса.
Накатал IC:
Add(InlineCode,7422537,280,168)
{
WorkPoints=#15:doGetParentProc|
EventPoints=#13:onProcessName|11:onProcessId|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|38:uses kol,Share,Debug,TlHelp32,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|27: onProcessName:THI_Event;|25: onProcessId:THI_Event;|58: procedure doGetParentProc(var _Data:TData; Index:word);|0:|5: end;|0:|14:implementation|0:|38:procedure THiAsmClass.doGetParentProc;|3:var|13: i: integer;|36: ProcessID, ParentProcessID: DWORD;|21: hSnapshot: THandle;|32: ProcessEntry: TProcessEntry32;|26: ProcessList: PStrListEx;|28: ResultProcessName: String;|25: ResultProcessID: DWORD;|2: |5:begin|31: ResultProcessName:= 'noname';|0:|29: ProcessList:= NewStrListEx;|5: try|36: ProcessID:= GetCurrentProcessID;|24: ParentProcessID:= 0;|64: hSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);|49: if hSnapshot <> INVALID_HANDLE_VALUE then try|49: ProcessEntry.dwSize:= SizeOf(ProcessEntry);|59: if Process32First(hSnapshot, ProcessEntry) then begin|14: repeat|84: ProcessList.AddObject(ProcessEntry.szExeFile, ProcessEntry.th32ProcessID);|56: if ProcessEntry.th32ProcessID = ProcessID then|63: ParentProcessID:= ProcessEntry.th32ParentProcessID;|56: until not Process32Next(hSnapshot, ProcessEntry)|9: end|11: finally|28: CloseHandle(hSnapshot)|8: end;|38: if ParentProcessID <> 0 then begin|59: i:= ProcessList.IndexOfObj(TObject(ParentProcessID));|21: if i <> -1 then|50: ResultProcessName := ProcessList.Items[i];|43: ResultProcessId := ParentProcessID;|8: end;|9: finally|20: ProcessList.Free|6: end;|2: |48: _hi_onEvent(onProcessName, ResultProcessName);|44: _hi_onEvent(onProcessId, ResultProcessId);|4:end;|0:|4:end.|
}
Windows 8.1 x64 - работает отлично.
------------ Дoбавленo в 09.00:
Ещё вариант с выдачей полного пути до parent process, почти без IC
Add(MultiElementEx,14516969,350,224)
{
@Hint=#13:ParentProcess|
Mode=2
}
BEGIN_SDK
Add(EditMultiEx,3524886,21,21)
{
WorkCount=#18:doGetParentProcess|
EventCount=#15:onParentProcess|
Width=209
Height=144
link(doGetParentProcess,211286:doFindID,[(35,27)(35,98)])
}
Add(EnumProcess,211286,49,85)
{
Point(onFind)
Point(CurrParentID)
link(ID,2961482:MyProcessID,[])
link(onFind,2201166:doFindID,[])
}
Add(InlineCode,2961482,49,42)
{
@Hint=#7:Get PID|
VarPoints=#11:MyProcessID|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|9: public|49: procedure MyProcessID(var dt:TData; idx:word);|5: end;|0:|14:implementation|0:|34:procedure THiAsmClass.MyProcessID;|5:begin|36: dtInteger(dt,GetCurrentProcessId);|4:end;|0:|4:end.|
}
Add(EnumProcess,2201166,105,85)
{
Point(onFind)
Point(FullPath)
link(ID,211286:CurrParentID,[(111,73)(87,73)(87,129)(62,129)])
link(onFind,6594671:doData,[])
}
Add(DoData,6594671,168,92)
{
link(onEventData,3524886:onParentProcess,[(215,98)(215,27)])
link(Data,2201166:FullPath,[(174,80)(146,80)(146,129)(118,129)])
}
END_SDK
карма: 1
0