Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перетаскивание файлов из listView 
:(
    Опции темы
Vadimka1234
Дата 24.9.2012, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 5.9.2012

Репутация: нет
Всего: нет



Всем привет. У меня на форме есть listview, который отображает файлы хранящиеся на сервере. Необходимо чтобы пользователь имел возможность перетаскивания файлов из приложение в любую папку в винде, после чего файл скачивался бы в эту папку.Вычетал в инете, что можно использовать функцию SetWindowsHookEx для установления хука для отслеживания событий в виндовс. Решил отслеживать событие мыши, чтобы определять куда пользователь будет помещать файлы для этого создал Dll и в нее запихнул процедуру обработки для WH_MOUSE_LL хука(вроде только он позволяет устанавливать глобальные хуки). Вот сама библиотека:

Код

public class mouse_llHook
    {
        static int hHook = 0;
        
        public mouse_llHook() { resaults = new List<string>(); }
        [StructLayout(LayoutKind.Sequential)]
        public class POINT
        {
            public int x;
            public int y;
        }
        
        [StructLayout(LayoutKind.Sequential)]
        public class MouseHookStruct
        {
            public POINT pt;
            public int hwnd;
            public int wHitTestCode;
            public int dwExtraInfo;
        }


        private enum MouseMessages
        {
            WM_LBUTTONDOWN = 0x0201,
            WM_LBUTTONUP = 0x0202,
            WM_MOUSEMOVE = 0x0200,
            WM_MOUSEWHEEL = 0x020A,
            WM_RBUTTONDOWN = 0x0204,
            WM_RBUTTONUP = 0x0205
        }


        [DllImport("user32.dll", CharSet = CharSet.Auto,
 CallingConvention = CallingConvention.StdCall)]
        public static extern int CallNextHookEx(int idHook, int nCode,
        IntPtr wParam, IntPtr lParam);
        
        public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            //Marshall the data from the callback.
            MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));

            if (nCode < 0)
            {
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }
            else if(nCode<0 && MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam)
            {
                //Create a string variable that shows the current mouse coordinates.
             
                //You must get the active form because it is a static function.
                

                //Set the caption of the form.
                
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }
            return 0;
        }



затем привязываю эту функцию к хуку

Код

                hHook = SetWindowsHookEx(WH_MOUSE,
                            MouseHookProcedure,
                            GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 
                            0);


WH_MOUSE=7


В результате выдается ошибка SetWindowsHookEx failed , насколько я понимаю это из-за последнего параметра, указывающего на поток. Если указываю на текущий поток то работает, но ловит сообщения только когда мышка в пределах формы, как сделать, чтобы ловила также к примеру на рабочем столе и вообще везде?

Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0395 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.