Hide Your Processes In Task Manager

12 12 2008

سلام مجدد خدمت دوستان، دیروز تو شرکت بحث از ویروس و نوشتن ویروس بود یکی از دوستان عزیزم به اسم سالار به موردی اشاره کرد که توجه مو جلب کرد اونم این بود که برخی از ویروسها اسم خودشونو از تو لیست Task Manager حذف یا اصطلاحا Hidden می کنن. نکته جالبی بود علاقه مند شدم که چطور ؟ دیشب نشستم و یک نمونه برنامه کوچیک نوشتم، که یک تابعی رو صدا میکنه و پارامتر ورودی تابع نام process ای که قرار به اصطلاح مخفی بشه. این بود که گفتم نمونه کد رو بزارم تا شما دوستان نیز بتونین ازش استفاده کنین. توضیحی در مورد نحوه عملکرد کد نمی دم چون comment برای هر بخش که مربوط به API میشه گذاشتم.

داشت یادم میرفت این نمونه کد در ویستا کار نمی کنه. در ضمن اگه در حین اجرا Exception پیش اومد که نتونستین رفع کنین یا سوالی در این رابطه دارین بپرسین و بگین تا حلش کنیم. :)

برای دانلود سورس کامل برنامه اینجا رو کلیک کنید


Int32 hwndParent = FindWindow(null, "Windows Task Manager");
Int32 hwndDialog = 0;
Int32 hwndProcessList = 0;
Int32 hwndProcessHeader = 0;


//-----/ Get menu task manager handle
Int32 hwndMenu = GetMenu(hwndParent);
//-----/ Get handle of view menu
Int32 hwndSubMenu = GetSubMenu(hwndMenu, 2);
//-----/ Get sub menu handle for update menu
Int32 hwndSubSubMenu = GetSubMenu(hwndSubMenu, 1);
//-----/ Get refresh item id
Int32 hwndRefreshItemID = GetMenuItemID(hwndSubMenu, 0);
//----/ Get high update item id
Int32 hwndHighUpdateItemID = GetMenuItemID(hwndSubSubMenu, 0);
//----/ Get normal update item id
Int32 hwndNormalUpdateItemID = GetMenuItemID(hwndSubSubMenu, 1);
//----/ Get low update item id
Int32 hwndLowUpdateItemID = GetMenuItemID(hwndSubSubMenu, 2);
//----/ Get pause update item id
Int32 hwndPauseUpdateItemID = GetMenuItemID(hwndSubSubMenu, 3);


if (processStatus)
{
for (int i = 0; i < 7; i++)
{
hwndDialog = FindWindowEx(hwndParent, hwndDialog, null, null);
if (hwndProcessList == 0) // Get process list view handle
hwndProcessList = FindWindowEx(hwndDialog, 0, "SysListView32", "Processes");
if (hwndProcessHeader == 0) // Get listview columns handle
hwndProcessHeader = FindWindowEx(hwndProcessList, 0, "SysHeader32", null);
}


//-----/ Click "paused update speed", so we can do it for the taskmgr
SendMessage(hwndParent, WM_COMMAND, hwndPauseUpdateItemID, 0);
//-----/ disable refresh now item
EnableMenuItem(hwndMenu, hwndRefreshItemID, MF_ENABLE);
//-----/ disable high update speed
EnableMenuItem(hwndMenu, hwndHighUpdateItemID, MF_GRAYED);
//-----/ disable normal update speed
EnableMenuItem(hwndMenu, hwndNormalUpdateItemID, MF_GRAYED);
//-----/ disable low update speed
EnableMenuItem(hwndMenu, hwndLowUpdateItemID, MF_GRAYED);
//-----/ disable paused update speed
EnableMenuItem(hwndMenu, hwndPauseUpdateItemID, MF_GRAYED);


//-----/ Disable the process header
EnableWindow(hwndProcessHeader, false);
//-----/ Sort process
SendMessage(hwndProcessList, LVM_SORTITEMS, 0, 0);
Int32 processIndex = GetProcessIndexByName(processName);
//-----/ disables drawing in the specified window
LockWindowUpdate(hwndProcessList);
//-----/ AutoClick refresh to update
SendMessage(hwndParent, WM_COMMAND, hwndRefreshItemID, 0);
//-----/ Delete process
SendMessage(hwndProcessList, LVM_DELETEITEM, processIndex - 1, 0);
//-----/ Unlock window - enable drawing in the specified window
LockWindowUpdate(0);





Microsoft Certification

10 12 2008

بنده یکی از افرادی هستم که اعتقاد دارم ایران جایی برای یک برنامه نویس حرفه ای نیست، وقتی از یک برنامه نویس یاد میشه مردم میگن اه مگه چیه اینم شد شغل. کلا ذهن مردم نسبت به کارهای نرم افزاری خرابه چرا ؟ یکی ازدلایلش شاید Copyright باشه. در طرف دیگه در USA در سال 2007 برنامه نویسی بهترین شغل انتخاب شده و شغل وکالت پر درآمد ترین شغل ها. بنابراین تصمیم گرفتم برای دوستان برنامه نویسم که قصد شرکت در آزمون برای کسب مدرک MCPD (Microsoft Certification Professional Developer)  مایکروسافت رو دارن منابع مرتبط رو معرفی کنم.تا بتونن با در دست داشتن یک مدرک بین المللی معتبر حداقل امنیت شغلی خودشون رو نه در ایران بلکه در خارج از کشور تامین کنند. ( خوده بنده نیز به دنبال همین هدف هستم )سعی میکنم در پست های بعدی تا اونجایی که امکانش هست لینک داونلود این منابع رو براتون بذارم.

سبز = عنوان آزمون- آبی = منابع متنی مرتبط با آزمون

MCTS ( Microsoft Certification Technology Specialist ) - MCPD Requirement Exams:

1- Exam 70–526 TS Microsoft .NET Framework 2.0 – Windows-Based Client Development

1-1- Microsoft .NET Framework 2.0 Windows-Based Client

1-2- Programming Microsoft ADO.NET 2.0 Core Reference

1-3- Programming Microsoft Visual C# 2005 The Language OR Microsoft Visual Basic 2005 The Language

2- Exam 70–536 TS Microsoft .NET Framework 2.0 – Application Development Foundation

2-1- Microsoft .NET Framework 2.0 Fundation

2-2- Programming Microsoft Visual C# 2005 The Language OR Microsoft Visual Basic 2005 The Language

3- Exam 70–529 TS Microsoft .NET Framework 2.0 – Distributed Application Development

3-1- Microsoft .NET Framework 2.0 – Distributed Application Development

3-2- Programming Microsoft Visual C# 2005 The Language OR Microsoft Visual Basic 2005 The Language

MCPD Exams :

1- Exam 70–548 PRO Designing and Developing Windows Applications by Using the Microsoft .NET Framework

1-1 CLR Via C# 2Nd Edition

1-2- Debugging, Testing, and Tuning Microsoft .NET 2.0 Applications

1-3- Designing and Developing Windows Applications by Using the Microsoft .NET Framework

2- Exam 70-505: Microsoft .NET Framework 3.5, Windows Forms Application Development

2-1- Microsoft MCTS Self-Paced Training Kit

2-2- Microsoft .NET Framework 2.0 Windows-Based Client Development

2-3- Debugging, Testing, and Tuning Microsoft .NET 2.0 Applications

2-4- Programming Microsoft ADO.NET 2.0 Core Reference

More Information: http://www.microsoft.com/learning/mcp/certifications.mspx





Make Your UI More Attractive

9 12 2008

چند روز پیش داشتم در مورد UI نرم افزار هایی که داریم طراحی و پیاده سازی می کنیم فکر می کردم با خودم گفتم چرا به جای استفاده از text معمولی در help برنامه ها از امکانات جذاب دیگه ای که در اختیار داریم استفاده نکنیم. یکی از این امکاناتی که نرم افزار رو کاربر پسند تر یا به اصطلاح ما برنامه نویسا User Friendly  می کنه، استفاده از AxAgent ویندوز هستش که یک Activex که به پروژه از طریق AddReference اضافه میشه و میشه ازش استفاده کرد. این Activex چند تا کاراکتر کارتونی در اختیار شما قرار میده که می تونین استفاده های گوناگونی از این کاراکتر های زیبا و جذاب بکنبن. اجازه بدین بقیه کار رو با مثالی ادامه بدیم، شما بعد از اضافه کردن Activex AxAgent که از تب COM پنجره Add Reference باید دو تا متغییر در دامنه کلاستون ( بسته به نوع استفاده )ایجاد کنید. طبق مثال زیر:

private AxAgentObjects.AxAgent agent;
private AgentObjects.IAgentCtlCharacter characterController;

متغییر agent برای load کردن کاراکتر مورد نظر و متغییر characterController برای کنترل کاراکتر load شده استفاده میشه، خوب حالا نوبت میرسه به استفاده از کاراکتر هامون اولین کاری که باید کرد اینه که کاراکتر هامونو Load کنیم و سپس با استفاده از کلاس IAgentCtlCharacter کاراکتر مورد نظرمون رو کنترل کنیم. طبق کد های زیر:

try
{
this.agent.Characters.Load("merlin" , "merlin.acs");
this.characterController= this.axAgent1.Characters["merlin"];
this.characterController.Show(null);
this.characterController.MoveTo(800, 600, null);
this.characterController.Play("Explain");
this.characterController.Speak("Try codeprojects.wordpress.com to get more tricks ... LOL", null);
}
catch
{
// Report codeprojects.wordpress.com OR Character not found
}

معمولا نباید نگرانی در مورد Exception پیدا نشدن کاراکتر ها داشت چون ویندوز هنگام نصب چندتاشون رو به صورت پیش فرض نصب می کنه.

امیدوارم به دردتون خورده باشه.





Capture Video In C#.Net

19 11 2008

با سلام خدمت دوستان خوبم امروز می خوام یک سری کد و یک نمونه برنامه براتون بزارم تا با نحوه دریافت تصاویر از webcam و ذخیره تصاویر دریافتی در فایل avi آشنا بشین. بدون بحث اضافی می رم تا توضیح مختصری در مورد کد های برنامه براتون بدم. در این پروژه ما سه تا کلاس اساسی داریم که به قول معروف، تقریبا کارهای تصویر برداری و ضبط تصاویر رو بر عهده دارن.

1- کلاس CaptureAPI : نمونه pinvoke شده API های کار با دوربین

2- کلاس AVIStreamAPI : نمونه pinvoke شده API های کار با فایل های avi از قبیل ساخت فایل، ساخت استریم avi، ساختن header های فایل avi و …

3- کلاس AviStream : که وظیفه ساخت فایل و ضبط تصاویر رو با استفاده از api های pinvoke شده رو بر عهده داره.

در این پروژه پس از اتصال به webcam با استفاده از توابع کلاس CaptureAPI و پخش تصاویر با استفاده از event OnVideoCaptured هر frame به bitmap تبدیل شده و سپس بر روی pictureboxنمایش داده میشه. با استفاده از این روش و تبدیل frame های استخراج شده به bitmap نوبت میرسه به ساخت فایل avi و stream مربوط به فایل avi با استفاده از توابع کلاس AviStream، ابتدا فایل avi Initialize شده سپس با استفاده از flage Create فایل avi خام بدون هیچگونه data و header ی که در ساخت avi به کار میره، ساخته میشه . پس از مراحل ساخت فایل نوبت به initalize کردن stream فایل avi میرسه، پس از ساخت stream ، اولین frame که به صورت bitmap هستش به stream اضافه میشه و به همین ترتیب frame های بعدی تا زمان توقف تصویربرداری و بستن فایل avi . شما به راحتی میتونید با استفاده از این روش با دوربین یا webcam ی که در منزل دارید برنامه ای بنویسید که دوربین رو شناسایی کرده اطلاعات رو frame به frame بگیره و ضبط کنه.

نمونه ی برنامه رو می تونید از لینک پایین دانلودش کنید. :-) امیدوارم تونسته باشم کمکی در یادگیری کار با دوربین و ضبط تصاویر کرده باشم.

لینک دریافت نمونه پروژه :http://www.megaupload.com/?d=2SJM7J40





خواندن Rss Feed در #C

12 11 2008

سلام امروز می خوام نحوه ی نوشتن یک Rss Reader رو براتون توضیح بدم.تقریبا اکثر سایت هایی که محتویات دینامیک دارن حداقل یک سرویس Rss برای ویزیتوراشون ارائه میدن، Rss feed ها می تونن tag های خودشون و داشته باشن یا اصلا برخی از tag ها رو نداشته باشن، ساختار کلی Rss، با تگ xml  شروع می شه، پس از اون rss tag که مشخص می کنه که این سند xml یک سند Rss هستش، بعدش به ترتیب داخل تگ rss ، تگ channel هستش که تگ های داخلیش ارائه دهنده ی اطلاعاتی در مورد ارائه دهنده rss و خود اخباری که از طریق rss ارائه داده میشه . شکل زیر ساختار یک rss رو نشون میده:

rssstructureمنم بر اساس این ساختار یک برنامه ی ساده برای خواندن rss ها براتون نوشتم که حالت آموزشی داره و کاملا ساده است. که می تونین از سورس برنامه رو از لینک پایین داونلودش کنین.

متغییر های استفاده شده در کد برنامه :

// Xml Document
private XmlDocument m_XmlDocument;
// Xml Node
private XmlNode m_XmlNode;
// Xml Text Reader
private XmlTextReader m_XmlReader;

تکه کد هایی از برنامه Rss Reader:


// -----/ Create xml reader from url
m_XmlReader = new XmlTextReader(cmbFeedUrl.Text);
m_XmlDocument = new XmlDocument();
// -----/

// -----/ Load the xml from url into the xml document
m_XmlDocument.Load(m_XmlReader);
// -----/

// -----/ Detect xml tag and validate xml document to find RSS tag
// -----/ if method find the rss tag that return the rss tag's node
m_XmlNode = ValidateXmlDocument();


//------/ Get gerneral information of rss provider like title
//------/ link and description, then set form control value
//------/  with information inside the nodes
m_RssInformation = GetGeneralInformationOfRssProvider();

lblTitle.Text += m_RssInformation.Title;
lblLink.Text += m_RssInformation.Link;
lblLanguage.Text += m_RssInformation.Language;
lblDescription.Text += m_RssInformation.Description;
//-----/

//-----/ Add rss news to the list view
AddRssNewsToRssListView();
//-----/


/// Validate the rss file from entered url
/// Return current Rss tag if it's find it
private XmlNode ValidateXmlDocument()
{
      foreach (XmlNode node in m_XmlDocument.ChildNodes)
      {
         if (node.Name == "rss")
           return node;
      }
      // Return null, if it's not find the rss tag
      return null;
}


private string GetRssContentAsHTML()
{
  foreach (XmlNode node in m_XmlNode.ChildNodes)
  {
    if (node.Name == "item")
    {
      foreach (XmlNode innerNode in node.ChildNodes)
        if (innerNode.InnerText == lstRssList.SelectedItems[0].Text)
            return String.Format("{0}    {1}",
               innerNode.InnerText, node["description"].InnerText);
    }
  }
  return string.Empty;
}

سورس نرم افزار : http://www.megaupload.com/?d=GOI5XEJ7





راه اندازی دوربین مخفی برای Folder ها

8 11 2008

با سلام بدون مقدمه میرم سر اصل مطلب، مونیتور کردن تغییراتی که روی پوشه انجام میشه در نرم افزار های سرور کاربرد زیادی داره. فرض کنید من یک سروری دارم که هرگاه کاربر یک فایل جدیدی مثلا با پسوند pdf رو upload کرد نرم افزار سرور باید عملیاتی رو بر روی اون فایل انجام بده، بذارید با یک مثال کاربردی این مسئله رو عملیش کنیم.


using System.IO;
/* Watches the C:\Temp folder
     and notifies creation of new text files */

public static void WatchTempFolder()
{
    // Create the FileSystemWatcher object
   //  and set its properties
    FileSystemWatcher fileSystemWatcher =
                                 new FileSystemWatcher();
    fileSystemWatcher.Path = "C:\\Temp";
    fileSystemWatcher.NotifyFilter =
                                NotifyFilters.LastAccess |
                                NotifyFilters.LastWrite |
                                NotifyFilters.FileName |
                                NotifyFilters.DirectoryName;
    fileSystemWatcher.Filter = "*.txt";

    // Add event handlers.
    fileSystemWatcher.Created +=
                    new FileSystemEventHandler(OnCreated);

    // Begin watching.
    fileSystemWatcher.EnableRaisingEvents = true;

    // Wait for the user to quit the program.
    Console.WriteLine("Press q to quit the sample.");
    while(Console.Read()!='q');
}

// The event handler
private static void OnCreated(object source,
                            FileSystemEventArgs e)
{
    // Report codeprojects.wordpress.com :-)
}

خوب اجازه بدین کمی در مورد این تابعی که براتون نوشتم خلاصه وار توضیحاتی بدم، ما برای مونیتور کردن تغییراتی که بر روی فایل ها و فولدر هامون از کلاس FileSystemWatcher استفاده می کنیم که در System.IO ,namespace قرار داره. همانطور که از اسم کلاس هم مشخصه تقریبا یک وظیفه جاسوسی رو به عهده داره که با تنظیم مسیری که باید مونیتور بشه، به مانیتور کردن تغییرات در مسیر تعیین شده می پردازه. NotifyFilter, property به شما این امکان رو میده که تعیین کنین چه زمانی باید مانیتور کردن روی فایل ها انجام بشه برای مثال اگر سایز فایلی تغییر کرد، اگر فایلی تغییر نام پیدا کرد، اگر مثل این مثال فایل text جدیدی در مسیر تعیین شده ساخته شد و …. به همین سادگی می تونین این کار رو انجام بدین.

موفق باشید .





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

6 11 2008

باسلام، امروز می خوام براتون نشون بدم که چطوری می تونید از اجرای دوباره ی برنامه یتان که قبلا اجرا شده است جلوگیری کنید، معمولا بعضی هکر های خرابکار از این روش استفاده میکنند تا برنامه ای رو چند بار اجرا کرده و با ورود اطلاعات مختلف و تست عملیات، نقاط ضعف برنامه یتان را پیدا کنند و سپس …. ،کلاسی که می تونین از اون برای کنترل اینکار استفاده نمایید کلاس Mutex هستش که در namespace، System.Threading قرار داره. خوب بزارین یک نمونه کد براتون بزارم تا راحتتر و با مثال عملی این کلاس رو تست کنیم.

using System.Threading;
static void Main()
{
  bool appFirstInstance;
  oMutex = new Mutex(true, "Global\\" + “YOUR_APP_NAME”,
                     out appFirstInstance);
  if(appFirstInstance)
    Application.Run(new yourStartupClass());
  else
    MessageBox.Show("برنامه مورد نظر قبلا اجرا شده است.",
                    "Startup Warning");
}
خوب اجازه بدین یه توضیح مختصری از این تکه کد براتون بدم، پارامتر دوم از سازنده این کلاس نام برنامه ی مورد نظر شما رو دریافت می کنه که قرار کنترل بشه که آیا نمونه ی دیگری از برنامه در حال اجرا هست یا خیر، اگر شما می خواهید که این کنترل در کل سیستم انجام بشه باید از پیشوند Global\\ استفاده کنین، در غیر اینصورت برای کنترل user session نیازی به این prefix که همراه نام برنامه ی شما میاد نیست. پارامتر سوم که یک پارامتر خروجی هستش مشخص کننده اینه که آیا instance ی از برنامه در حال اجرا هست یا خیر. اگر مقدار این پارامتر خروجی true باشه مشخص می شه که همه چیز رو به راهه و نرم افزار می تونه ادامه ی مراحل اجرایی رو طی کنه در غیر اینصورت معلوم میشه که کلاس فوق یک نمونه ی دیگر رو پیدا کرده و دیگه تصمیم با شماست که بعد مشخص شدن این موضوع چه کار می خواهید بکنین. این کنترل رو می تونین در تابع ()Main برنامه تون استفاده کنید.