- Июл 28, 2012
- 6
- 5
- 19
Знаю что тем по Инжекторы куча, но они в своем роде однотипные. Предлагаю вариант совместного использования C#(оболочка) и С++(модуль dll)....
C#(оболочка программы)
Проект WInForm:
Добавляем:
Так же нужно включить ссылку System.Management: ПКМ по проекту - Добавить ссылку - NET и ищем в списке System.Management - OK.
Понадобится:
- listView
- contextMenuStrip
- openFileDialog
Размещаем на форме listView и настраиваем:
- FullRowSelect = true (выделятся будет вся строка, а не одна ячейка)
- GridLines = true (разделение линиями)
- View = Details
- заходим в коллекцию Сolumns и добавляем два зоголовка: "Имя процесса" и "pID".
Далее переходим в Свойства -> События и подписываемя на событие MouseUp(двойной клик на строчке)
В обработчике MouseUp привязываем наш contextMenuStrip:
Теперь при клике ПКМ, в поле listView, выскочит контекстное меню.
Заполним listView списком процессов. Для этого напишем такую "функцию":
Отработаем ее при запуске программы.Для этого допишем под иницализацией refResh();
Теперь "подключим" наш модуль.
Указываем импорт:
Добавляем к контекстному меню пункты: "Обновить", "DllInject","Выход".
Двойной клик по "Обновить", пишем:
Теперь по нажатию на этот пункт список процессов обновится.
Двойной клик по "Выход", пишем:
Двойной клик по "DllInject", пишем:
Исходный код основного класса модуля
Исходный код проекта
ВТ сделать не могу, так как ГГГ-модем "посылает"....
C#(оболочка программы)
Проект WInForm:
Добавляем:
Код:
using System.Runtime.InteropServices;
using System.Management;
using System.IO;
Понадобится:
- listView
- contextMenuStrip
- openFileDialog
Размещаем на форме listView и настраиваем:
- FullRowSelect = true (выделятся будет вся строка, а не одна ячейка)
- GridLines = true (разделение линиями)
- View = Details
- заходим в коллекцию Сolumns и добавляем два зоголовка: "Имя процесса" и "pID".
Далее переходим в Свойства -> События и подписываемя на событие MouseUp(двойной клик на строчке)
В обработчике MouseUp привязываем наш contextMenuStrip:
Код:
ListView listView = sender as ListView;
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
ListViewItem item = listView.GetItemAt(e.X, e.Y);
if (item != null)
{
item.Selected = true;
contextMenuStrip1.Show(listView, e.Location);
}
}
Заполним listView списком процессов. Для этого напишем такую "функцию":
Код:
//Получаем имена процессов и их pID
void refResh()
{
listView1.Items.Clear();
ManagementObjectSearcher FindprocessEum = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
ListViewItem add_item;
foreach (ManagementObject process in FindprocessEum.Get())
{
add_item = new ListViewItem(process["Name"].ToString());
add_item.SubItems.AddRange(new string[] { process["ProcessId"].ToString() });
listView1.Items.Add(add_item);
}
}
Код:
.......................
public Form1()
{
InitializeComponent();
refResh();
}
.....................
Теперь "подключим" наш модуль.
Указываем импорт:
Код:
[DllImport("InjectModule.dll", CharSet = CharSet.Auto)]
public static extern void StartInject([In][MarshalAs(UnmanagedType.LPStr)]string PROC_NAME, [In][MarshalAs(UnmanagedType.LPStr)]string PatchDll);
Добавляем к контекстному меню пункты: "Обновить", "DllInject","Выход".
Двойной клик по "Обновить", пишем:
Код:
refResh();
Двойной клик по "Выход", пишем:
Код:
Application.Exit();
Двойной клик по "DllInject", пишем:
Код:
if (File.Exists("InjectModule.dll"))//проверяем есть ли файл
{
openFileDialog1.Title = "Выберете DLL";
openFileDialog1.FileName = "";
openFileDialog1.Filter = "DLL (*.dll)|*.dll";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
StartInject(listView1.SelectedItems[0].SubItems[0].Text, openFileDialog1.FileName);
}
}
else
{
MessageBox.Show("InjectModule.dll не найден!", "Error");
}
Исходный код основного класса модуля
Исходный код проекта
ВТ сделать не могу, так как ГГГ-модем "посылает"....