هل من الممكن تحديد العملية التي يبدأ بلدي .صافي التطبيق ؟
-
09-06-2019 - |
سؤال
أنا النامية تطبيق وحدة التحكم في .صافي و أريد تغيير السلوك قليلا استنادا إلى معلومات التطبيق بدأ من cmd.exe أو من explorer.exe.هل من الممكن ؟
المحلول
Process this_process = Process.GetCurrentProcess();
int parent_pid = 0;
using (ManagementObject MgmtObj = new ManagementObject("win32_process.handle='" + this_process.Id.ToString() + "'"))
{
MgmtObj.Get();
parent_pid = Convert.ToInt32(MgmtObj["ParentProcessId"]);
}
string parent_process_name = Process.GetProcessById(parent_pid).ProcessName;
نصائح أخرى
على CreateToolhelp32Snapshot وظيفة وقد Process32First طريقة من شأنها أن تسمح لك لقراءة PROCESSENTRY32 هيكل.هيكل الملكية التي سوف تحصل على المعلومات التي تريدها:
th32ParentProcessID - المعرف العملية التي خلقت هذا عملية (الأم عملية).
هذه المادة سوف تساعدك على الشروع في العمل باستخدام ToolHelpSnapshot وظيفة:
قضية واحدة مع ToolHelp/ManagementObject النهج هو أن الأصل العملية بالفعل قد خرجت.
على GetStartupInfo Win32 وظيفة (استخدام PInvoke إذا كان هناك لا .صافي ما يعادلها) يملأ الهيكل الذي يتضمن عنوان النافذة.من أجل تطبيق وحدة تحكم Win32 "app.exe" هذا العنوان سلسلة "التطبيق" عندما بدأت من cmd "c:\full\path o\app.exe" عندما بدأت من إكسبلورر (أو مقابل المصحح).
بالطبع هذا هو الإختراق (قابلة للتغيير في الإصدارات الأخرى ، إلخ.).
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int main()
{
STARTUPINFO si;
GetStartupInfo(&si);
MessageBox(NULL, si.lpTitle, NULL, MB_OK);
return 0;
}