آیا راهی هست که متوجه شویم به صورت مستقیم برنامه مارو باز میکنن(دابل کلیک روی فایل برنامه یا کلیک راست و اپن) یا اینکه بوسیله یه برنامه دیگه داره باز میشه(تقریبا شبیه نرم افزار های مانیتورینگ)
آیا راهی هست که متوجه شویم به صورت مستقیم برنامه مارو باز میکنن(دابل کلیک روی فایل برنامه یا کلیک راست و اپن) یا اینکه بوسیله یه برنامه دیگه داره باز میشه(تقریبا شبیه نرم افزار های مانیتورینگ)
سلام
دلفی هنوز زیاد کار نکردم . Get Parrent proccess ID رو سرچ کن . موردای زیادی در سی شارپ و وی بی پیدا میشه که احتمالا میشه ازشون استفاده کرد برای این کار .
یه راه دیگه هم که ساده تره اگر قراره خودت برنامت رو از داخل یه برنامه دیگه اجرا کنی اینه که با چند تا کامند commmand برنامت رو اجرا کنی و وقتی برنامه اجرا شد چک کنه اگر با کامند بود یعنی از داخل برنامت اجرا شده و اگر بدون اون یعنی روش دبل کلیک شده .
حالا هدفتون از این اجرا نشدن چی هست؟! خب شاید یک کاربری از یک File Manager دیگه به جز Windows Explorer خواست استفاده کنه؟ یا یکی خواست از طریق command line برنامه شما را اجرا کنه؛ اونها چیکار کنند؟!هدفم از اینکار اینه که دیگر برنامه ها نتونن برنامه منو اجرا کنن
و فقط با دابل کلیک امکانش باشه
در هر حال، اگر میخواید در صورت اجرا شدن برنامه تون خارج از شرایط مد نظر شما، برنامه بسته بشه، براش یک command line parameter خاص در نظر بگیرید، و در برنامه خودتون هر وقت که میخواید اون برنامه رو اجرا کنید، اون پارامتر را هم بهش پاس کنید، تا معلوم بشه شما دارید اجراش می کنید. برنامه شما می تونه در هنگام اجرا چک کنه، که آیا پارامتر مورد نظر بهش ارسال شده یا نه، اگر نه، خودش را ببنده.
اگر هم اصرار دارید که بدونید چه پروسه ایی برنامه شما را اجرا کرده، کامپوننت ProcessInfo را دانلود و نصب کنید، و یک نمونه از ProcessInfo را بر روی فرم تان بیاندازید، و با کدی مثل کد زیر، پروسه ایی که برنامه شما را اجرا کرده، مشخص کنید:
var
ParentProcessID : Cardinal;
ParentProcess : TProcessItem;
begin
ParentProcessID := ProcessInfo1.RunningProcesses.FindByID(GetCurrentP rocessId).ParentProcessID;
ParentProcess := ProcessInfo1.RunningProcesses.FindByID(ParentProce ssID);
if Assigned(ParentProcess) then
ShowMessage(ParentProcess.ExeFile);
end;
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
با تشکر از شما
میخواستم یک راه واسه جلوگیری از اجرای برنامه توسط نرنامه های مانیتورینگ داشته باشم
سلام
ببین شاید این راه هم به دردت بخوره
جایی توی برنامت از GetStartupInfo استفاده کن و بعد از فراخوانی اون مقدار dwFlags ساختاری که به عنوان پارامتر به تابع دادی رو بررسی کن
var
SI: TStartupInfo;
begin
GetStartupInfo(SI);
if SI.dwFlags<> 1025 then
Application.Terminate;
end;