سلام
می خواستم بدونم که چه جوری برنامه می تونه متوجه بشه که یه برنامه خواصی در حال اجرا هست یا خیر. مثلا برنامه ای بنویسیم که اگه مثلا Svchost.exe در حال اجرا بود یه پیغام بده.
.........ممنونم.........
سلام.
اسم پروسه اسم خاصیه؟ اگه اسمش تکه میتونی به راحتی لیست پروسه هارو بگیری. با توابع
CreateToolhelp32Snapshot
Process32First
Process32Next
ولی اگه فایلی با اون اسم مشابه اجرا شه برنامه به اشتباه میفته.
(۰۸-فروردین-۱۳۸۸, ۱۷:۴۷:۳۶)Payman62 نوشته است: [ -> ]سلام.
اسم پروسه اسم خاصیه؟ اگه اسمش تکه میتونی به راحتی لیست پروسه هارو بگیری. با توابع
CreateToolhelp32Snapshot
Process32First
Process32Next
ولی اگه فایلی با اون اسم مشابه اجرا شه برنامه به اشتباه میفته.
می شه بیشتر توضیح بدی؟
اين مثال با استفاده همون توابع که پيمان گفت ليست پروسه های در حال اجرا رو نشون ميده
(۰۹-فروردین-۱۳۸۸, ۱۴:۳۲:۰۰)crazyfull نوشته است: [ -> ]اين مثال با استفاده همون توابع که پيمان گفت ليست پروسه های در حال اجرا رو نشون ميده
ببین من نمی خوام این همه کد بنویسم فقط می خوام بدونم مثلا اگه پروسه ABC.exe در حال اجرا بود یه پیغام بده اگه این کد رو بنویسی که عالی می شه! از جوابت هم ممنونم.
اگه پروسه ات دارای فرم یا پنجره ای با اسم خاصی باشه با تابع FindWindow هم میتونی راحت تر وجودش را چک کنی
البته روشی که دوستمون تو پست قبلی گفتم روش اصولی هست ، منتها این findwindow روش راحت و سریعتر در بعضی مواقع هست که شما هم میخواین کمتر کد بنویسین :)
فایل ضمیمه را ببین ، اگه پروسه مورد نظرت به شکلی بود که عنوانش توی لیست دیده میشد از این روش بالا میتونی استفاده کنی.
اون که فقط چهار تا تابع API هست
اون تابع رو هم ميتونی تغيير بدی و ليستو حذف کنی که کد نويسی کمتر بشه اين فقط يه مثال بود هر جور دوست داشته باشی ميتونی تغييرش بدی
اگه کلاً هميشه هدف کارت رو هم توی سؤال توضيح بدی بهترين روش رو ميشه پيشنهاد داد
(۰۹-فروردین-۱۳۸۸, ۱۸:۳۳:۰۱)crazyfull نوشته است: [ -> ]اون که فقط چهار تا تابع API هست
اون تابع رو هم ميتونی تغيير بدی و ليستو حذف کنی که کد نويسی کمتر بشه اين فقط يه مثال بود هر جور دوست داشته باشی ميتونی تغييرش بدی
اگه کلاً هميشه هدف کارت رو هم توی سؤال توضيح بدی بهترين روش رو ميشه پيشنهاد داد
راستش من مي خوام يه ويروس بنويسم که حاوي دو تا فايل باشه.هر کدوم اون يکي رو چک کنه که اگه اون فايل نبود دوباره اجراش کنه حالا مي خوام بدونم که چجوري بايد بفهمم يعني با چه تابعي بفهمم که برنامه مورد نظر من در ليست Process هست يا نه. ( امیدوارم که متوجه شده باشی)
شما بهتره از peid برای چک کردن استفاده کنین یا از handle پروسه چون ممکنه پروسه ای با همون نام در حال اجرا باشه و برنامه شما دچار اشتباه بشه
در ضمن برای پیاده سازی این روش به درستی شما نیاز داری که هر دو پروسه peid یا handle هم رو بدونن و برای این کار به جز کلک های مرغابی , استفاده از WM_COPYDATA هست و با این اطلاعاتی که شما از برنامه نویسی دارین پیاده سازی این روش برای شما غیر ممکن هست
بنظر من اگه می خوای کمتر کد نویسی کنی از دستورات شل استفاده کن. خیلی راحت می تونی با دستور tasklist پروسه های در حال اجرا رو بگیری و بعد با تابع instr (اگه درست یادم مونده باشه) تو خروجی دنبال اسم پروسه یا شماره آی دی بگردی. اگه تابع صفر بگردوند یعنی پروسه تو لیست نیست . . .
از CreateMutex و OpenMutex هم میتونی استفاده کنی، تو هر پروسه با CreateMutex یک موتکس بساز (هر پروسه اسم متفاوتی داشته باشه)
بعد با OpenMutex از موتکس اون یکی پروسه(با توجه به اسمی که براش تعیین کردی) هندل بگیر اگه گرفت که یعنی اجراست اگه نگرفت یعنی اجرا نیست که میتونی اجراش کنی