PDA

View Full Version : چگونه متوجه شویم که برنامه ما از طریق یک برنامه دیگر باز میشه یا روش دابل کلیک شده



Delphi7_love
چهارشنبه 10 آذر 1389, 14:02 عصر
آیا راهی هست که متوجه شویم به صورت مستقیم برنامه مارو باز میکنن(دابل کلیک روی فایل برنامه یا کلیک راست و اپن) یا اینکه بوسیله یه برنامه دیگه داره باز میشه(تقریبا شبیه نرم افزار های مانیتورینگ)

MEhdi Sobhani
چهارشنبه 10 آذر 1389, 14:30 عصر
سلام
دلفی هنوز زیاد کار نکردم . Get Parrent proccess ID رو سرچ کن . موردای زیادی در سی شارپ و وی بی پیدا میشه که احتمالا میشه ازشون استفاده کرد برای این کار .
یه راه دیگه هم که ساده تره اگر قراره خودت برنامت رو از داخل یه برنامه دیگه اجرا کنی اینه که با چند تا کامند commmand برنامت رو اجرا کنی و وقتی برنامه اجرا شد چک کنه اگر با کامند بود یعنی از داخل برنامت اجرا شده و اگر بدون اون یعنی روش دبل کلیک شده .

Delphi7_love
چهارشنبه 10 آذر 1389, 14:46 عصر
سلام
دلفی هنوز زیاد کار نکردم . Get Parrent proccess ID رو سرچ کن . موردای زیادی در سی شارپ و وی بی پیدا میشه که احتمالا میشه ازشون استفاده کرد برای این کار .
یه راه دیگه هم که ساده تره اگر قراره خودت برنامت رو از داخل یه برنامه دیگه اجرا کنی اینه که با چند تا کامند commmand برنامت رو اجرا کنی و وقتی برنامه اجرا شد چک کنه اگر با کامند بود یعنی از داخل برنامت اجرا شده و اگر بدون اون یعنی روش دبل کلیک شده .

ممنون از پاسختون

هدفم از اینکار اینه که دیگر برنامه ها نتونن برنامه منو اجرا کنن
و فقط با دابل کلیک امکانش باشه

vcldeveloper
چهارشنبه 10 آذر 1389, 23:06 عصر
هدفم از اینکار اینه که دیگر برنامه ها نتونن برنامه منو اجرا کنن
و فقط با دابل کلیک امکانش باشه
حالا هدفتون از این اجرا نشدن چی هست؟! خب شاید یک کاربری از یک File Manager دیگه به جز Windows Explorer خواست استفاده کنه؟ یا یکی خواست از طریق command line برنامه شما را اجرا کنه؛ اونها چیکار کنند؟!

در هر حال، اگر میخواید در صورت اجرا شدن برنامه تون خارج از شرایط مد نظر شما، برنامه بسته بشه، براش یک command line parameter خاص در نظر بگیرید، و در برنامه خودتون هر وقت که میخواید اون برنامه رو اجرا کنید، اون پارامتر را هم بهش پاس کنید، تا معلوم بشه شما دارید اجراش می کنید. برنامه شما می تونه در هنگام اجرا چک کنه، که آیا پارامتر مورد نظر بهش ارسال شده یا نه، اگر نه، خودش را ببنده.

اگر هم اصرار دارید که بدونید چه پروسه ایی برنامه شما را اجرا کرده، کامپوننت ProcessInfo (http://vcldeveloper.com/products/products-components/process-info/)را دانلود و نصب کنید، و یک نمونه از 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;

Delphi7_love
چهارشنبه 10 آذر 1389, 23:14 عصر
با تشکر از شما
میخواستم یک راه واسه جلوگیری از اجرای برنامه توسط نرنامه های مانیتورینگ داشته باشم

sh4mid
پنج شنبه 11 آذر 1389, 11:51 صبح
سلام
ببین شاید این راه هم به دردت بخوره
جایی توی برنامت از GetStartupInfo (http://msdn.microsoft.com/en-us/library/ms683230(VS.85).aspx) استفاده کن و بعد از فراخوانی اون مقدار dwFlags ساختاری که به عنوان پارامتر به تابع دادی رو بررسی کن

Felony
پنج شنبه 11 آذر 1389, 12:07 عصر
var
SI: TStartupInfo;
begin
GetStartupInfo(SI);
if SI.dwFlags<> 1025 then
Application.Terminate;
end;