Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2011, 21:06   #11
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

надо использовать хук WH_HARDWARE?

Цитата:
Фильтр WH_HARDWARE предназначен для перехвата сообщений, поступающих от нестандартных устройств ввода, таких, как устройства перьевого ввода (клавиатура и мышь - это стандартные устройства ввода). Функция фильтра должна находиться в DLL-библиотеке.
Приведем прототип функции фильтра типа WH_HARDWARE:
LRESULT CALLBACK HardwareProc(
int code, // код действия
WPARAM wParam, // не определено
LPARAM lParam); // адрес структуры HARDWAREHOOKSTRUCT
Структура HARDWAREHOOKSTRUCT описана в файле windows.h:
typedef struct tagHARDWAREHOOKSTRUCT
{
HWND hWnd;
UINT wMessage;
WPARAM wParam;
LPARAM lParam;
} HARDWAREHOOKSTRUCT;

Последний раз редактировалось Dimarik; 17.04.2011 в 21:08.
Dimarik вне форума Ответить с цитированием
Старый 18.04.2011, 09:35   #12
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

почти доделал....
вот файл Form1.cs
Код:
namespace copy
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        protected override void WndProc(ref Message m) 
        {
            // Listen for operating system messages.
            switch (m.Msg)
            {
                // The WM_ACTIVATEAPP message occurs when the application
                // becomes the active application or becomes inactive.
                case 0x219:
                    Program.MainMethod();
                    break;
                        
            }
            base.WndProc(ref m);
        }
    }
}
//а вот это написано в файле Program.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;

namespace copy
{
    class Win32Space
    {
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern bool GetMessage(ref Message m, IntPtr h, uint u1, uint u2);
        public static extern bool TranslateMessage(ref Message m);
        public static extern bool DispatchMessage(ref Message m);
    }
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void copyFiles(string path_1, string driveName, string VolumeLabel)
        {
           //какой-то код
        }
       
        
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
//дальнейший кусок кода сделан для того чтобы программа обрабатывала сообщения от винды и не вылетала сразу же
            Message msg;
            IntPtr iHwnd;
            while (Win32Space.GetMessage(ref msg, null, 1, 1))
            {
                Win32Space.TranslateMessage(ref msg);
                Win32Space.DispatchMessage(ref msg);
            }
            
            
        }
        public static void MainMethod()
        {
            DriveInfo[] allDrives = DriveInfo.GetDrives();
            foreach (DriveInfo d_info in allDrives)
            {
                if (d_info.IsReady)
                {
                    if ((d_info.TotalSize > 1000000) && (d_info.DriveType == DriveType.Removable))
                    {
                        copyFiles(d_info.Name, d_info.Name, d_info.VolumeLabel);
                    }
                }
            }
            Application.Exit();
        }

       

    }
}
в итоге вот тут какая-то ошибка...while (Win32Space.GetMessage(ref msg, null, 1, 1))
вот сам проект, написанные в VS 2010
http://zalil.ru/30882789
Dimarik вне форума Ответить с цитированием
Старый 18.04.2011, 13:00   #13
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

переписал программу. вроде синтаксических ошибок теперь нет. но dll не подключается. Я даже и через [DllImport("C:\\User32.dll", CharSet = CharSet.Auto)] пробовал - результат один и тот же.. Гляньте кто может.
http://zalil.ru/30883631
P.S. я правильно сделал обработку вставки влэшки в комп и вызов метода по этому событию?
Dimarik вне форума Ответить с цитированием
Старый 20.04.2011, 20:05   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можно всетаки текст ошибки?
хотя бы класс исключения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qt vs. WinAPI Зелёный_спец Общие вопросы C/C++ 3 12.03.2010 15:34
WinAPI for me Kazimir Фриланс 4 14.12.2009 14:36