تبلیغات
پایگاه کد ها وسورس های مختلف زبان های برنامه نویسی - پروسس ها در دات نت
پروسس ها در دات نت | برنامه نویسی کاربردی ,

سلام !

آقا آموزش Delegate یکم مونده و آموزش الگوریتم ها هم کامل شده و دارم روش کار می کنم تا برای آپ لود آماده شه

اما برم سراغ بحث اصلی امروز براتون چیزی آوردم که از Delegate ها در دات نت هم براتون مفید تره (البته در وین اپلیکیشن ها!!!) امروز می خواهم براتون از پروسس ها و فضا های قدرتمندی که در دات نت به آن ها اختصاص داده شده بگم .

{این آموزش مختص سی شارپ هست چون با سیستکس سی شارپ نوشته شده ولی در صورتی که شما به دوز بان برنامه نویسی وارد باشید با توجه به این که چیزی از متد ها و کلاس ها تغییر نمی کند به راحتی قادر هستید تا کد های این آموزش را به وی بی دات نتا کانورت (تبدیل) کنید!! }


 

   System.Diagnostics

برای کار با پروسس ها در سی شارپ شما نیاز مند هستید تا در قسمت دستورات ورودی ازفضایSystem.Diagnostics استفاده کنید. برای مثال سورس زیر قسمت ورودی یک برنامه با فضای گفته شده را نشان می دهد :

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Diagnostics;
using System.Text;

{نکته : بعضی ها می رسند که کار این پروسه های چیه خوب برای این که بهتر متوجه بشید بذارید براتون یه مثال بزنم :

فرض کنید دارید کیه برنامه می نویسید که می خواهید در آن یک موزیک پخش کنید یا یک فایل را برنامه ای که توسط خودش پشتیبانی می شود باز کنید یا می خواهید یک آنتی ویروس بنویسید که در آن یک فایل را از روی حافظه ببندید یا می خواهید از روی نام فایل اجرایی هندل پنجره آن را بدست آورید و.....

خب برای این کار های باید از ای پی ای ها سخت و پیچیده استفاده کنید که احتمال خطای بالایی دارد وهم چنین نمی توان بعضی از کار ها دیگه با ای پی ای انجام داد خب مایکروسافت برای اینکه برنامه نویسان خودشرو در این ضمینه یاری کند کار با پروسه ها را در  دات نت قرار داده تا برنامه نویس بتواند براحتی این گونه کار ها را انجام دهد . }

 

خب کار با پروسه ها در دات نت به چند نوع تقسیم میشه . همانطور که در بالا گفته شد می توان از این پروسه ها در موارد مختلفی استفاده کرد که ساده ترین و پر کاربرد ترین روش می توان به اجرای یک برنامه اشاره کرد. فزض کنید که می خواهید یک فال پی دی اف ر با خود آکروبات ریدر باز کنید همانطور که می دانید قبلنا برای این کار می بایستی رجیستری رو می خواندید و دنبال فرمت  پی دی اف می گشتید سپس آدرس آکروبات رو پیدا می کردید بعد هم آدرس فایل مون رو به پیدا می کردیم سپس با تابع آی پی ای شل (Shell) با پاس دادن آدرس ایل به آکروبات اونو باز می کردید که تازه در هر مرحله امکان اشتباه وجود داشت و ممکن بود باعث هنگ سیستم عامل  یا بسته شدن برنامه تون می شد !!!! در ضمن وقت بسیار زیادی هم برای جست و جو در رجیستری و ... تلف میشد که باعث پایین آمدن کیفیت برنامه میشد

اما حالا با استفاده از دو کلاس استاندارد می توان به سرعتی کمتر از ? ثانیه تمام این کار ها را در دات نت انجام داد   ببینید برای این کار می باید از یک کلاس + یک کلاس اختیاری استفاده کنید . برای مثال می خواهید یک فایل پی دی اف را اجرا کنید  :

System.Diagnostics.Process.Start(@"C:\E-Books\CS_Learning.pdf");

البته می توانید خود آکوربات ریدر رو صدا و کنید و به صورت آرگومان فایل رو به آن ارسال کنید :

System.Diagnostics.Process.Start(@"C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe",@"E:\Asp_laerning.pdf"); 

همانطور که دیدید می توان به سادگی و با متد ایستای Start به سادگی این کار را انجام داد !!!!

اما اگر بخواهید یک فایل را به صورت مخفی اجرا کنید و یا یک فالی رو به صورت مینیمایز  باز کنید و دیگر کنترل های دیگه ی این فایل ا داشته باشیم باسید چه کنیم!!! به طور مثال می خواهید یک موسیقی یا یک فایل صوتی در برنامه اجرا کنید و نمی خواهید پنجره مددیا پلیر باز شه !!! برای این کار باید با کلاس System.Diagnostics.ProcessStartInfo تنظیمات لازم را ست کنید سپس آن را به متد استارت پاس بدیم برای مثال :

System.Diagnostics.ProcessStartInfo s=new ProcessStartInfo();
s.WindowStyle=ProcessWindowStyle.Hidden;
System.Diagnostics.Process.Start(@"E:\Files\2.,p3",s);

خب حالا می تونید پارامتر مورد نظر که در اینجا یک فایل صوتی هست را مطابق با هر بنرماه یا فایلی تغییر دهید سپس برنامه را اجرا کندی می بیندی که برنامه کار خود را انجام می دهد بدون این که دیده شود

البته کلاس پروسس استارت اینفو دارای متد ها و پراپرتی ها مفید دیگری است که توضیح آن ها از حوصله این بخش خارجه

حال به پرداختن کار دیگه از پروسس ها می پردازیم ! فرض کندی می خواهید تمام برنامه های در حال اجرا را بدست آوریم {البته فقط نام فایل اجرایی}

ابتدا یه فیلد از نوع آرایه لیست در فرم تعریف می کنیم :

private ArrayList mcolProcesses = new ArrayList();

وبعد در یک رویداد مثلا در هنگام لود فرم کد زیر را وارد کنید

try
   {
     Process[] Processes;

    Processes = Process.GetProcesses();
     foreach(Process p in Processes)
         {
 listBox1.Items.Add(  p.ProcessName);

        mcolProcesses.Add(p);
          }
    }
 catch (Exception exp)
  {
     MessageBox.Show(exp.Message,"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

   }

{در حاشیه : ببخشید که قیافه کد یکی ریخته بهم اگه می خواهید قیافه اصلی کد را ببینید گد بالا را در نت پد کپی کنید}

خب حالا ما در یک لیست باکس که در فرم قرار دادیم لیستی از تمام برنامه های در حال اجراردر پروسه گیر آوردیم به همین سادگی حال اگه بخواهید اطلاعات دیگه هم بدست آورید می تونید مثلا اگه بخواهید کپشن فایل رو بدست آورید میتونید از کد زیر استفاده کنید :

{نکته این کد رو در رویداد سلسکت ایندکس چنج (SelectIndexChaged) لیست باکس همان فرم بنویسید}

Process p;    
p = ((Process) (mcolProcesses[listBox1.SelectedIndex]));
 MessageBox.Show("This Is Caption Of "+p.ProcessName+" ="+p.MainWindowTitle+" And Handle Of This Process Is "+p.Handle.ToString()+" And Main Windows Handle Of This Process Is "+p.MainWindowHandle.ToString());

همانطور که میبیند شما می توانید اطلاعات بسیاز زیاد و بسیار مفیدی از یک پروسه بدست آورید !!!! در ضمناگه در کد های بالا دقت کرده باشید من تمام پروسه های موجود رو در یک آرایه لیست ریختم واون ها رو پر کردم این کار برای این بود که دیگه هر دفعه نیم دوباره تمام آرایه ها ر بخونم و کار رو از اول شروع کنم  شما هم در این چنین پروژه هایی سعی کنید از ترفند بالا استفاده کنید

آخرین نکته که به نظرم جالب میاد کدی است که یک پروسه را می بندد !!! فرض کنید می خواهید یک آنتی ویروس بنوئیسید اولین کاری که باید بکنید ویروس و از لیست پروسه ها پاک (اصلاحا ویورس را ببندید) یا می خواهید یک ویورس بنویسید ویک آنتی ویروس را ببندید  !! من برای این کار یه متد نوشتم که به نظرم کار می کنه (تا به حال چک نکردم ولی ?? در صد کار میکنه !) :

private void ClosP(string filename)
 {
    Process[] Processes;
     Processes = Process.GetProcesses();
       foreach(Process p in Processes)
        {
 if(p.ProcessName.ToUpper()==filename.ToUpper())
  p.Kill();
          }
  }

خب امیدوارم که این آموزش بدردتون خورده باشه !!! البته پروسس ها در دات نت بسیار گسترده تر از مطالب این آموزش است  اما سعی کردم که مطالب مفید و اصلی و پایه را بیان کنم و از پرداختن به مطالب بی ربط و جزئی پرهیز کنم  در کل اگه از آموزش امروز خوشتون اومد و انتقاد یا پیشنهادی داشتید و یا سوالی در باره هر یک از موضوع های برنامه نویسی داشتید در قسمت نظرات بیان کنید حتما رسیدگی خواهد شد

تا آموزش دیگه از دنیای کامپیوترو  برنامه نویسی خدانگه دار


نوشته شده توسط دایرکتور در شنبه 11 تیر 1384 و ساعت 02:07 ق.ظ
نوشته های پیشین
+ معرفی سرویس جدید پارسی باکس+ فراخوان دعوت به همکاری+ بازم شروعی دوباره !!!+ شروعی دوباره ؟؟؟؟؟+ الگوریتم های فشرده سازی+ .........+ گذری بر Delegate ها در سی شارپ+ کار با دیتا بیس ۲ + ارتباط با دیتا بیس ..... + افزودن یک ایتم منو به فلش پلیر+ عذر خواهی وکوکی+ پروسس ها در دات نت+ تغییر آدرس وبلاگ + اشاره گر ها و توابع + آموزش ASP.NET شماره ۱

صفحات: