Вверх ↑
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
#1: 2013-12-25 18:34:33 ЛС | профиль | цитата
Как узнать кто запустил программу?
в том смысле что к примеру мою программу запустила сторонняя программа как узнать путь к этой сторонней программе да и возможно ли это???

конкретно надо как то сделать если программа запущена юзером на прямую 2 клика то программа закрывалась а если она запускалась из под какой то программы а эту стороннюю программу определить уже по строению изнутри ну тоесть тупо открыть перевести в str и по маске сравнить, то программа не закрывалась
карма: 2

0
Ответов: 4664
Рейтинг: 767
#2: 2013-12-25 19:00:50 ЛС | профиль | цитата
Узнать ID родительского процесса, послать ему определенную команду через какой-нибудь способ межпроцессного взаимодействия или выполнить другие проверки, чтобы убедится, что это именно тот процесс.
карма: 26

0
Ответов: 1343
Рейтинг: 31
#3: 2013-12-25 19:16:27 ЛС | профиль | цитата
ффф... 0 реакции

code_32678.txt

или я чё то нето взял?..
карма: 2

0
файлы: 1code_32678.txt [361B] [142]
Ответов: 1841
Рейтинг: 370
#4: 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
Ответов: 1343
Рейтинг: 31
#5: 2013-12-26 17:13:26 ЛС | профиль | цитата
CriDos писал(а):
Ещё вариант с выдачей полного пути до parent process, почти без IC


БОЛЬШОЕ СПАСИБО
теперь будет защита от левых распостранителей
мол скачал не через загрузчик то и не получишь ничего
карма: 2

0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)