سافت گذر دانشنامه نرم افزار - دانلود رایگان نرم افزار

همه دسته بندی ها

منو
آیکون جستجو در سایت سافت گذر
اطلاعیه های مهم سایت اطلاعیه های مهم سایت
💐 میلاد زینت پدر حضرت زینب سلام الله علیها مبارک باد 💐
 
 
  1. جهت رفع مشکل باز شدن سایت به دلیل بلاک توسط  نود 32 این ویدیو یا این ویدیو(ورژن 9 به بالا) یا راهنمای تصویری را مشاهده کنید
  2. به مناسبت عید غدیر، در سایت https://esetupdate.ir/ تخفیف ویژه‌ای برای محصولات در نظر گرفته شده است؛ فرصت را از دست ندهید. 🌸
  3. اکانت های بروزرسانی نود32 با قیمت های مناسب به صورت یک ، سه ، شش و دوازده ماهه از اینجا قابل خرید می باشد.

نرم افزار های پرکاربرد

ثبت نام | ورود

اخبار آموزشی

نحوه ساخت پلاگین‌ها در دات‌نت

در زمان طراحی نرم‌افزاری کاربردی، گروه طراحی سعی می‌کند کامل‌ترین و جذاب‌ترین جنبه‌های بصری را در برنامه قرار دهد، اما بنا به دلایل مختلفی ممکن است همه قابلیت‌ها مستقیماً درون یک برنامه قرار نگیرند. در چنین شرایطی شرکت‌ها به دو روش می‌کوشند قابلیت‌های جدید را به برنامه وارد کنند.

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

استخراج اطلاعات از درون اسمبلی
پیش از اینکه درباره روش ساخت افزونه‌ها در دات‌نت بدانید، باید با مفاهیم مرتبط با این موضوع آشنا شوید. System.Reflection از جمله کتابخانه‌های پرکاربرد دنیای دات‌نت است. این کتابخانه ضمن آنکه دسترسی به اطلاعاتی درباره اسمبلی‌ها، ماژول‌ها، اعضا، پارامترها و دیگر عناصری را که در یک کد مدیریت‌شده قرار دارند، فراهم می‌کند، آن‌ها را بررسی کرده و متادیتاها (metadata) متعلق به آن‌ها را در اختیار برنامه‌نویسان قرار می‌دهد. با استفاده از متد‌ها و خاصیت‌های کتابخانه Reflection، برنامه‌نویس به صورت پویا در مدت زمان اجرای یک کد، می‌تواند اسمبلی خود را به صورت اختیاری بارگذاری کند. این تکنیک راه آسانی برای پیاده‌سازی ساختار پلاگین‌ها در اختیار برنامه‌نویسان قرار می‌دهد.

مطلب پیشنهادی

نکات امنیتی آفیس را جدی بگیرید

اما مهم‌ترین پرسش این است که چگونه می‌توان به انواع داده‌ای که در یک اسمبلی وجود دارد، دست پیدا کرد؟ پاسخ Reflection است که امکان کشف نوع‌های قرارگرفته در یک اسمبلی را به‌آسانی امکان‌پذیر می‌سازد. برای اینکه با نحوه کارکرد این کتابخانه بهتر آشنا شوید، باید آن را در عمل مشاهده کنید. برای این منظور ویژوال استودیو را باز کنید، در فهرست File روی گزینه New Project کلیک کرده و زبان برنامه‌نویسی سی‌شارپ را انتخاب کنید. در پانل میانی از میان الگوهای موجود، گزینه Windows Forms Application را انتخاب کنید. برای نشان دادن عناصر درون یک برنامه از کنترل Treeview استفاده کنید. این کنترل را به همراه یک دکمه (Button) و یک کنترل برچسب (LabelText) روی فرم قرار دهید. روی کنترل دکمه دوبار کلیک کنید تا رویداد مربوط به آن ساخته شود. در کنترل ساخته‌شده دستوراتی را که در فهرست شماره یک مشاهده می‌کنید، قرار دهید. در ابتدای برنامه خود لازم است تا کتابخانه using System.Reflection; را وارد کنید.
فهرست ۱ :

using System.Reflection;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openfile = new OpenFileDialog();
            openfile.Filter = “Assemblies (*.exe،*.dll)|*.exe;*.dll|All files (*.*)|*.*”;

            if (openfile.ShowDialog() == DialogResult.OK)
            {
                AssemblyName.Text = openfile.FileName;
                Mytree.Nodes.Clear();

                Assembly assembly = Assembly.LoadFrom(AssemblyName.Text);
                foreach (Type t in assembly.GetTypes())
                {
                    TreeNode Nodes = new TreeNode(“TeeNode-> “ + t.Name);
                    Mytree.Nodes.Add(Nodes);

                    foreach (MethodInfo mi in t.GetMethods())
                    {
                        Nodes.Nodes.Add(new TreeNode(“Methods-> “ + mi.Name));
                    }

                    foreach (PropertyInfo pi in t.GetProperties())
                    {
                        Nodes.Nodes.Add(new TreeNode(“Properties-> “ + pi.Name));
                    }

                    foreach (FieldInfo fi in t.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic))
                    {
                        Nodes.Nodes.Add(new TreeNode(“FiledInfo-> “ + fi.Name));
                    }

                    foreach (EventInfo ei in t.GetEvents())
                    {
                        Nodes.Nodes.Add(new TreeNode(“Events-> “ + ei.Name));
                    }

                    foreach (Type ei in t.GetInterfaces())
                    {
                        Nodes.Nodes.Add(new TreeNode(“Interfaces-> “ + ei.Name));
                    }
                }
            }
        }
    }
}

برنامه را اجرا کنید. روی دکمه Browse کلیک کرده و یک فایل اسمبلی (exe یا dll) انتخاب کنید. پیشنهاد می‌شود فایل اجرایی خود برنامه را انتخاب کنید. خروجی فهرست شماره یک را در شکل 1 مشاهده می‌کنید.


شکل ۱

اما قطعه کد بالا دقیقاً چه کاری انجام می‌دهد؟ کلاس Assembly برای بارگذاری اسمبلی‌های دات‌نت استفاده می‌شود. این کلاس دسترسی به متادیتاها و بخش‌های اصلی موجود در یک اسمبلی را امکان‌پذیر می‌سازد. اگر به نوع‌های داده‌ای که در دامین جاری استفاده می‌شود نیاز دارید، از متد AppDomain.GetAssemblies استفاده کنید. بعد از بارگذاری اسمبلی مدنظر، برای دریافت اطلاعات داخلی آن باید تعدادی از متدها و خاصیت‌ها را فراخوانی کنید. متدهای استفاده‌شده در این قطعه کد بدین شرح هستند: 
• GetTypes: با فراخوانی این متد به نوع‌های تعریف‌شده در یک اسمبلی دسترسی خواهید داشت.
• PropertyInfo، MethodInfo، FieldInfo، EventInfo، Type: اطلاعات مربوط به یک خاصیت، متد، فیلد، رویداد و یک واسط را به‌همراه متادیتاهای مربوط به هر یک از اشیا یادشده، در اختیارتان قرار می‌دهد. این اطلاعات با خاصیت Name دریافت می‌شود و درون کنترل Tree قرار می‌گیرند.

تعریف کلاس پویا
بعضی مواقع نیاز به بارگذاری پویای نمونه‌ای از یک کلاس دارید. زمانی که قصد استفاده از یک کلاس را دارید، باید ارجاعی به اسمبلی که کلاس درون آن قرار دارد، در برنامه خود وارد کنید. در غیر این صورت کامپایلر پیغام خطای نشناختن کلاس یا عناصر مرتبط به آن را نشان می‌دهد. به کمک reflectionها، می‌توانید از کلاسی استفاده کنید که مرجع مربوط به آن کلاس در زمان ساخت برنامه کاربردی در آن ضمیمه نشده است. این کار با فراخوانی کتابخانه پویایی که کلاس درون آن قرار دارد، به همراه تعریف نام کلاس در متد GetType و در نهایت ساخت نمونه‌ای از کلاس مدنظر با فراخوانی متد CreateInstance انجام می‌شود. فهرست شماره دو نحوه پیاده‌سازی این کار را نشان می‌دهد. 
فهرست ۲ :

Assembly assembly = Assembly.LoadFrom(“MyDynamicFile.dll”);
Type type = assembly.GetType(“MyDynamicFile.MyClass”);
            object obj = Activator.CreateInstance(type);

با توجه به اینکه در این مدل فراخوانی، به مرجع اصلی کلاس دسترسی ندارید، در نتیجه امکان تعیین نوع واقعی شی وجود ندارد. برای این منظور از نوع object استفاده می‌شود.

دسترسی پویا به متدی که در کلاس پویا قرار دارد
کلاس‌ها زمانی به صورت پویا استفاده می‌شوند که متدهایی درون آن‌ها قرار داشته باشد. برای دسترسی به متدهای قرارگرفته در کلاسی که به شیوه پویا بارگذاری شده است، روش‌های مختلفی وجود دارد. فهرست شماره سه ساده‌ترین روش را نشان می‌دهد.
فهرست ۳: فراخوانی کلاس به همراه متد مربوط به آن

 Assembly assembly = Assembly.LoadFrom(“MyDynamicFile.dll”);
            Type type = assembly.GetType(“MyDynamicFile.MyClass”);
            object obj = Activator.CreateInstance(type);

            int result = (int)type.InvokeMember(“Rotate”، BindingFlags.Instance |
BindingFlags.InvokeMethod ،null، obj،new object[] { 90، 45 });

ساختار افزونه‌ها
حال که با مقدمات ساخت افزونه‌ها آشنا شدید، زمان آن رسیده است تا در عمل با نحوه ساخت افزونه‌ای ساده برای یک برنامه کاربردی آشنا شوید. ساخت افزونه برای این برنامه کاربردی در سه مرحله انجام می‌شود: 
1. ساخت رابط اصلی که یک رابط (افزونه) با کدهای اشتراکی است.
2. پیاده‌سازی هر افزونه در قالب پروژه‌ جداگانه در ویژوال استودیو -در این مقاله افزونه چرخش Rotate و تغییر رنگ Change Color- زمانی‌که هر یک از این افزونه‌ها جداگانه ساخته شدند، لازم است تا فایل‌های کامپایل شده (Dll) در مسیر فایل برنامه اصلی (exe) کپی شوند تا برنامه اصلی توانایی شناسایی و دسترسی به آن‌ها را داشته باشد.
3. در آخرین مرحله، برنامه اصلی ساخته می‌شود و دستورات لازم برای شناسایی و بارگذاری متدها و کلاس‌های قرارگرفته در افزونه‌ها در آن جای می‌گیرد.

• ساخت اسمبلی مشترک
در مرحله اول نیازمند یک اسمبلی هستید که هم برنامه اصلی و هم افزونه‌ به آن ارجاع داشته باشند. این اسمبلی رابطی را پیاده‌سازی می‌کند که هر افزونه باید در هر کد مشترکی که در نظر دارد به آن دسترسی داشته باشد، آن را پیاده‌سازی کند. ویژوال استودیو را اجرا کرده و پروژه‌ای از نوع Class Library به نام MainInterface ایجاد کنید. (شکل 2) در ادامه دستورات فهرست چهار را درون این کتابخانه وارد کنید.


شکل ۲

فهرست ۴:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MainInterface
{
    public interface MyImageAddon
    {
        System.Drawing.Image RunAddon(System.Drawing.Image image);
        string Name { get; }
    }
}

برای اجرای صحیح برنامه باید اسمبلی System.Drawing را در برنامه وارد کنید. روی نام پروژه کلیک‌راست کرده و از زیرفهرست Add گزینه Reference را انتخاب کنید. در پنجره ظاهرشده گزینه System.Drawing را انتخاب کنید. (شکل 3) برنامه را یک بار دیگر کامپایل کنید تا فایل کتابخانه پویای ساخته شود. 


شکل ۳  

 

• ساخت افزونه
در این مرحله قصد داریم افزونه خود را طراحی کنیم. افزونه‌ مدنظر از رابط MainInterface ارث‌بری می‌کند. در نتیجه متد و خاصیت تعریف‌شده در بخش قبل باید در آن پیاده‌سازی شود. در ویژوال استودیو، پروژه جدیدی از نوع Class Library به نام MyRotate ایجاد کنید. 
اولین کاری که در این مرحله باید انجام دهید، وارد کردن اسمبلی MainInterface در برنامه کاربردی است. روی پروژه کلیک‌راست کرده، گزینه Add Reference را انتخاب و اسمبلی MainInterface.dll را در پروژه کاربردی خود وارد کنید. برای این کار از دکمه Browse در پایین صفحه استفاده کنید و به مسیری بروید که پروژه قبلی در آن ساخته شده است. فایل dll درون پوشه bin قرار دارد. اضافه کردن این کتابخانه به‌منظور ارث‌بری از رابطی است که در بخش قبل ساختید.  
در مرحله بعد Class1 باید از رابط MyImageAddOn ارث‌بری کرده و در ادامه متد و خاصیت قرارگرفته در رابطی را که از آن ارث‌بری کرده است، پیاده‌سازی ‌کند. فهرست پنج نحوه پیاده‌سازی این فرایند را نشان می‌دهد. فراموش نکنید همانند پروژه قبلی مرجع متعلق به کتابخانه System.Drawing را به پروژه وارد کنید.
فهرست ۵ :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using MainInterface;

namespace MyRotate
{
    public class Class1 : MyImageAddon
    {
        public Image RunAddon(Image image)
        {
            Bitmap bitmap1 = new Bitmap(image);
            Bitmap bitmap2 = new Bitmap(image);
            for (int row = 0; row < bitmap1.Height; ++row)
            {
for (int col = 0; col < bitmap1.Width; ++col)
                {
 bitmap2.SetPixel(bitmap1.Width - col - 1, bitmap1.Height - row - 1,bitmap1.GetPixel(col, row));
                }
            }
            bitmap1.Dispose();
            return bitmap2;
        }

        public string Name
        {
            get
            {
                return “Invert Image”;
            }
        }
    }
}

• ساخت برنامه اصلی
بعد از طراحی موفقیت‌آمیز افزونه، زمان آن رسیده است که برنامه اصلی را ایجاد کنید. در این مرحله باید افزونه‌ ساخته‌شده را در برنامه اصلی استفاده کنید. برای این منظور پروژه‌ای از نوع Windows Forms Application به نام MyPicture بسازید. در برنامه اصلی ضمن بارگذاری کتابخانه پویا، به این فیلدها نیاز داریم: 
1. یک کنترل PictureBox روی فرم قرار دهید.
2. یک دکمه (Button) روی فرم قرار دهید.
3. حال از زیرگروه Menus & Toolbars کنترل MenuStrip را انتخاب کنید و روی فرم قرار دهید. 
4. در پنجره Solution Explorer روی گزینه Reference کلیک کرده و اسمبلی MainInterface را که در اولین مرحله ساختید، در برنامه وارد کنید. کدهای فهرست شماره شش را در برنامه کاربردی وارد کنید.
فهرست ۶ :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MainInterface;
using System.Reflection;
using System.IO;

namespace MyPicture
{
    public partial class Form1 : Form
    {
        private Dictionary<string, MainInterface.MyImageAddon> Addon=
new Dictionary<string, MainInterface.MyImageAddon>();

        public Form1()
        {
            InitializeComponent();
            Assembly assembly = Assembly.GetExecutingAssembly();
            string path = Path.GetDirectoryName(assembly.Location);
            LoadAddons(path);
            CreateMenu();
        }

        private void LoadAddons(string path)
        {
            Addon.Clear();
            foreach (string dll in Directory.GetFiles(path, “*.dll”))
            {
                try
                {
                    Assembly assembly = Assembly.LoadFrom(dll);
                    foreach (Type type in assembly.GetTypes())
                    {
                        if (type.GetInterface(“MyImageAddon”) == typeof(MainInterface.MyImageAddon))
                        {
                            MyImageAddon plugin = Activator.CreateInstance(type) as MyImageAddon;
                            Addon[plugin.Name] = plugin;
                        }
                    }
                }
                catch (BadImageFormatException)
                {
                }
            }
        }
        private void CreateMenu()
        {
            toolStripMenuItem1.DropDownItems.Clear();
            foreach (var pair in Addon)
            {
                ToolStripMenuItem toolstrip=new ToolStripMenuItem(pair.Key);
                toolstrip.Click += new EventHandler(menuItem);
                toolStripMenuItem1.DropDownItems.Add(toolstrip);
            }
        }

  void menuItem(object sender, EventArgs e)
        {
            ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
            MainInterface.MyImageAddon plugin = Addon[menuItem.Text];
            try
            {
              pictureBox1.Image = plugin.RunAddon(pictureBox1.Image);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, “Plugin is not valid”);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openImage = new OpenFileDialog();
            openImage.Filter = “All images (*.bmp, *.png, *.jpg)|*.bmp;*.png;*.jpg”;
            if (openImage.ShowDialog() == DialogResult.OK)
            {
             pictureBox1.Image = Image.FromFile(openImage.FileName);
            }
        }
    }
}

قبل از اجرای برنامه به این نکته توجه کنید که فایل‌های کتابخانه‌های پویا (DLL) باید در مسیر پوشه اصلی برنامه کپی شده باشند. برنامه را اجرا کنید؛ زمانی که برنامه اجرا می‌شود، افزونه‌ مدنظر را جست‌وجومی‌کند. اگر همه‌چیز را به‌درستی طراحی کرده باشید، برنامه اجرا می‌شود. روی دکمه Browse کلیک کرده و یک تصویر را انتخاب کنید تا در برنامه بارگذاری شود. از فهرست برنامه گزینه Invert را انتخاب کنید. همان‌گونه که در شکل 4 مشاهده می‌کنید، تصویر درون باکس وارونه‌شده نشان داده می‌شود. به این ترتیب، موفق شدیم افزونه‌ای را به‌درستی طراحی کنیم.


شکل ۴

• ساخت افزونه تغییر رنگ
برای ساخت افزونه تغییر رنگ باید مراحل قبل را یک‌بار دیگر تکرار کنیم: 
1. ابتدا پروژه‌ای از نوع Class Library به نام ChangeColor ایجاد کنید. 
2. در پروژه ساخته‌شده ابتدا ارجاع مربوط به MainInterface را با استفاده از گزینه AddReference در پروژه وارد کنید. 
3. در این قسمت در نظر داریم فرایند یک انتخاب رنگ ساده را در اختیار کاربر قرار دهیم. 
بر همین اساس به اسمبلی System.Windows.Forms و System.Drawing نیاز داریم. این کتابخانه قرار است دیالوگ انتخاب رنگ Color را در برنامه اصلی ظاهر سازد. شکل 5 اسمبلی‌های واردشده در پروژه را نشان می‌دهد.
4. دستورات فهرست هفت را در برنامه وارد کنید.


شکل ۵

فهرست ۷ :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MainInterface;
using System.Drawing;
using System.Windows.Forms;
namespace ChangeColor
{
    public class Class1:MyImageAddon
    {
      public System.Drawing.Image RunAddon(System.Drawing.Image image)
        {
    ColorDialog color = new ColorDialog();
            Color color2;

 if (color.ShowDialog() == DialogResult.OK)
            {
                color2 = color.Color;
            }
            else
                color2 = Color.BlueViolet;
Bitmap bitmap = new Bitmap(image);

for (int row = 0; row < bitmap.Height; ++row)
                {
 for (int col = 0; col < bitmap.Width; ++col)
                    {
      color2 = bitmap.GetPixel(col, row);
                        if (color2.B > 0 )
                        {
color2 = Color.FromArgb(color2.A, color2.R, color2.G, color.Color.B);

                        }
                        else if (color2.G > 0)
                        {
 color2 = Color.FromArgb(color2.A, color2.R, color.Color.G, color2.B);
                        }
                        else if(color2.R > 0)
                        {
color2 = Color.FromArgb(color2.A, color.Color.R, color.Color.G, color2.B);
                        }
    bitmap.SetPixel(col, row, color2);
                    }
                }
            
            return bitmap;
        }

        public string Name
        {
            get { return “Change Color image”; }
        }
    }
}

برنامه را کامپایل کنید تا کتابخانه پویا ساخته شود. اگر این فرایند موفقیت‌آمیز بوده باشد، یک کتابخانه پویای ColorChange.Dll در اختیار دارید. کتابخانه ساخته‌شده را در مسیر فایل اجرایی برنامه کپی کرده و برنامه اصلی را یک‌بار دیگر اجرا کنید. اکنون گزینه‌ای به نام Change Color در فهرست اصلی برنامه قرار گرفته است. با کلیک روی این گزینه دیالوگ تغییر رنگ نشان داده می‌شود. (شکل 6) حال اگر رنگی را از درون این جعبه انتخاب کنید، رنگ تصویر تغییر پیدا می‌کند. (شکل 7) کتابخانه‌های پویا باید مانند شکل 8 در مسیر فایل اصلی برنامه یا مسیر شناخته‌شده برای برنامه کاربردی قرار گرفته باشند.


شکل ۶


شکل ۷


شکل ۸

نظرتان را ثبت کنید کد خبر: 34104 گروه خبری: اخبار آموزشی منبع خبر: مجله شبکه تاریخ خبر: 1395/07/25 تعداد مشاهده: 2340
اخبار مرتبط با این خبر
نظر های کاربران
سرور آپدیت نود 32
پیشنهاد سافت گذر
TeamSpeak 3 v3_3.3.3 for Android +2.3

TeamSpeak 3 v3_3.3.3 for Android +2.3

تیم اسپیک

آموزش نرم افزار Revit Autodesk

آموزش نرم افزار Revit Autodesk

آموزش ریویت اتودسک

Windows Video Converter 2025 10.0.3.9

Windows Video Converter 2025 10.0.3.9

تبدیل فرمت فیلم ها

Super Keyboard Pro 1.7.1 for Android

Super Keyboard Pro 1.7.1 for Android

کیبرد با پشتیبانی از زبان فارسی

Finding Paradise

Finding Paradise

نقش آفرینی RPG

The Outer Worlds: Spacer's Choice Edition

The Outer Worlds: Spacer's Choice Edition

جهان های بیرونی

TweakNow WinSecret Plus 9.8.0

TweakNow WinSecret Plus 9.8.0

بهینه سازی ویندوز

NBA 2K17 0.0.27 / 2K16 0.0.29 / 2K15 1.0.0.58 for Android +4.2

NBA 2K17 0.0.27 / 2K16 0.0.29 / 2K15 1.0.0.58 for Android +4.2

بسکتبال زیبای NBA

Frontline Commando:WW2 v3.0.2 for Android +3.0

Frontline Commando:WW2 v3.0.2 for Android +3.0

بازی تکاور خط مقدم

ONLYOFFICE Desktop Editors 9.3.0

ONLYOFFICE Desktop Editors 9.3.0

آنلی آفیس

مداحی حاج مهدی اکبری سال 97

مداحی حاج مهدی اکبری سال 97

مداحی مهدی اکبری سال 97

RecMe Pro Screen Recorder HD 2.7.0 for Android +4.0.3

RecMe Pro Screen Recorder HD 2.7.0 for Android +4.0.3

ضبط حرفه ای صفحه نمایش

سخنرانی های آیت الله شهید مطهری بخش دوم

سخنرانی های آیت الله شهید مطهری بخش دوم

سخنرانی مرتضی مطهری

Neox 0.93 for Android

Neox 0.93 for Android

بازی دنیای نئونی

Hack 'n' Slash

Hack 'n' Slash

هک و تغییر دلخواه در روند گیم‌پلی

Hasleo Windows ISO Downloader 3.0.2

Hasleo Windows ISO Downloader 3.0.2

دانلود ویندوز از سایت مایکروسافت

Windows Server 2008 Enterprise SP2 Integrated May 2014 x86 + x64

Windows Server 2008 Enterprise SP2 Integrated May 2014 x86 + x64

نسخه 32 بیتی و 64 بیتی ویندوز سرور 2008 سرویس پک 2 به همراه تمامی آپدیت‌ها تا 18 اردیبهشت 1393

مجموعه‌ی منتخب بازی‌های سافت گذر - مهر ماه 1389

مجموعه‌ی منتخب بازی‌های سافت گذر - مهر ماه 1389

مجموعه حدود 20 بازی با گرافیک بالا و جذاب با قیمتی بسیار مناسب

Anyplace Control 6.1.0.0 Final

Anyplace Control 6.1.0.0 Final

مدیریت کامپیوتر از راه دور

CATIA P3 V5-6R2014 (V5R24) GA x86/x64 + Documentation + SP4

CATIA P3 V5-6R2014 (V5R24) GA x86/x64 + Documentation + SP4

قدرتمند ترین نرم افزار طراحی، مهندسی و ساخت با کمک رایانه

تکنیک های وبلاگ نویسی

تکنیک های وبلاگ نویسی

وبلاگ نویسی

Explzh 10.00

Explzh 10.00

فشرده سازی فایل ها

Adobe Flash CS4 Professional 10.0.2

Adobe Flash CS4 Professional 10.0.2

نرم افزار اصلی برای ساخت کلیپ های انیمیشنی فلش

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

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

تلاوت محمد جواد پناهی سوره احزاب

Motorsport Revolution v1.5

Motorsport Revolution v1.5

مسابقات اتومبیل‌رانی موتور-اسپرت ریوُلوشن

Do It Later 4.4.2 for Android +4.4

Do It Later 4.4.2 for Android +4.4

بعدا انجام بده

Effortless English Complete Lessons

Effortless English Complete Lessons

آموزش زبان افورتلس Aj Hoge

DAZ Studio Professional 4.22.0.15

DAZ Studio Professional 4.22.0.15

ساخت انیمیشن 3 بعدی

XIII Century Gold Edition

XIII Century Gold Edition

قرن سیزده نسخه طلایی

BandiCamera 5.07

BandiCamera 5.07

اسکرینشات از محیط ویندوز

File Expert Pro 8.3.0 / HD 2.3.0 for Android +4.1

File Expert Pro 8.3.0 / HD 2.3.0 for Android +4.1

فایل منیجر اچ دی

ReNamer Pro 7.6.0

ReNamer Pro 7.6.0

تغییر نام فایل‌ها و پوشه‌ها

یافتن اتوماتیک درایورها با نرم افزار Driver Magician

یافتن اتوماتیک درایورها با نرم افزار Driver Magician

یافتن درایورها با درایور مجیکان

آلبوم کامل موسیقی سریال بازی تاج و تخت فصل 6 - با دو کیفیت 128kbps + 320kbps

آلبوم کامل موسیقی سریال بازی تاج و تخت فصل 6 - با دو کیفیت 128kbps + 320kbps

آهنگ سریال بازی تاج و تخت

Quod Libet 4.7.1

Quod Libet 4.7.1

پلیر موسیقی

سخنرانی حجت الاسلام حسینی قمی با موضوع اقدامات امام حسن عسکری (ع)

سخنرانی حجت الاسلام حسینی قمی با موضوع اقدامات امام حسن عسکری (ع)

حاج آقا حسینی قمی با موضوع اقدامات امام حسن عسکری (ع)

مداحی اربعین جواد مقدم سال 97

مداحی اربعین جواد مقدم سال 97

مداحی اربعین 97 جواد مقدم

Shoot the Apple 2 1.1.7 for Android

Shoot the Apple 2 1.1.7 for Android

بازی پرتاب سیب

سیر قلبی به سوی خدا از زبان آیت الله مصباح یزدی

سیر قلبی به سوی خدا از زبان آیت الله مصباح یزدی

سیر قلبی به سوی خدا از زبان آیت الله مصباح یزدی

GameMaker Studio Ultimate 2022.8.1.36

GameMaker Studio Ultimate 2022.8.1.36

گیم میکر استودیو

خبرنامه

با عضویت در خبرنامه، زودتر از همه باخبر باش!