Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Две мыши, и чтоб работали "сами по себе"  (Прочитано 13767 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« : 16-01-2007 20:03 » 

  Добрый день/вечер.

Недавно заинтересовался (точнее меня заинтересовали Улыбаюсь ) следующей задачей.

У компа есть обыкновенная мышь (не обязательно USB).
И есть USB-трекбол(по сути - та же мышь).

Надо:
 Чтобы "обыкновенная мышь" работала как обычно.
 Трекбол работал только с моим приложением, грубо говоря, чтобы при изменении "положения" трекбола обычный курсор не двигался, а мое приложение получало об это соответствующее уведомление.

Как правильней реализовать такое?
                             
                             С уважением, Артем.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 18-01-2007 09:47 » 

задачка интересная... сам о таком думал)
судя по тому как работают две мыши по умолчанию... те перемещения которые они обе отслеживают скопом валятся на координаты указателя.
те "дельты" координат формируются драйверами мыши...
а интерфейс у них HID.
так что видимо, можно написать драйвер-фильтр, подстыковать его где нибудь "между"...
а может и напрямую из приложения можно к HID драйверу трекбола подключится)
надо читать DDK и экскрементировать)

ничего шибко-конкретно-умного я с налета не предложил конечно, но сам бы пошел по такому пути...
плюс рекомендую посерчить в инете, наверняка что нибудь найдется - идея то в воздухе витает...))
а вообще меня уже месяц как интерисует тот же вопрос... использовать трекбол в качестве ээ... типа ручки громкости и настройки... только вот пока не уверен на 100%, что это будет удобно...

PS ща мельком глянул DDK....
Mouclass Device Control Requests (IRP_MJ_DEVICE_CONTROL (Mouclass)) - может быть?
« Последнее редактирование: 18-01-2007 09:51 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #2 : 18-01-2007 10:37 » 

 Благодарю за ответ.

Мне тоже кажеться, что необходимо подстыковать фильтр, в котором все пакеты от обычной мыши посылать дальше, а от трекбола-- только конкретному приложению.

В выходные еще "покопаю".


Записан
GreyAngel
Гость
« Ответ #3 : 22-01-2007 04:20 » 

http://cpnmouse.sourceforge.net/
« Последнее редактирование: 22-01-2007 04:23 от GreyAngel » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 22-01-2007 07:34 » 

GreyAngel,
сенькс!!!! будем копать!
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #5 : 28-01-2007 11:38 » 

GreyAngel, спасибо большое!  Класс!
как раз то что я и искал!!!
Причем, там решены проблемы, на которые я уже морально настроился потратить "кучу" времени!!! Вот именно

         С уважением, Артем
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 02-08-2007 13:26 » 

кстати, тоже подключил cpnmouse - весч!
только не захотел hapi.c использовать. решил lapi.c обойтись и....
пол дня только проковырялся пока понял, что APC должны в отдельную нить приходить)
из за того что, они именно что APC) то есть, нить сама не пробудится!
в hapi для этого используется нить с ожиданием события и флагом!!! что выход из WaitForSingleObject() по APC тоже возможен.

кроме того - добавли строчку в драйвер, для возможности отлеживания колесика.
Код:
b = (void *)(unsigned int)((i->ButtonFlags << 16) | (((unsigned int) i->ButtonData) & 0xffff));
вместо того, что было:
Код:
b = (void *)(unsigned int)((i->ButtonFlags << 16);

тогда в lapi.c:
Код:
void __cdecl ApcCallback(PVOID NormalContext, PVOID SystemArgument1, PVOID SystemArgument2)
{
  if (theCallback!=NULL)
  {
    while (WaitForSingleObject(hMutex, INFINITE) != WAIT_OBJECT_0) ;
    theCallback(
       (((int) NormalContext)-1),
(signed int) (signed short int) ((((unsigned int) SystemArgument1) & 0xffff0000) >> 16),
(signed int) (signed short int) (((unsigned int ) SystemArgument1) & 0xffff),
(unsigned int) ((((unsigned int) SystemArgument2) & 0xffff0000) >> 16),
(int) (((unsigned int) SystemArgument2) & 0xffff));

    ReleaseMutex(hMutex);
  }
}
а пользовательская будет
Код:
void __cdecl thehCallback(int number, signed int dx, signed int dy, unsigned int buttons, signed int weel)
{
    switch (buttons)
    {
    case 0x1: //нажатие лево
        break;
    case 0x2: //отжатие лево
        break;
    case 0x4: //нажатие право
        break;
    case 0x8: //отжатие право
        break;
    case 0x10: //нажатие середина
        break;
    case 0x20: //отжатие середина
        break;
    case 0x40: //кнопка 4 нажатие
        break;
    case 0x80: //кнопка 4 отжатие
        break;
    case 0x100: //кнопка 5 нажатие
        break;
    case 0x200: //кнопка 5 отжатие
        break;
    case 0x400: //колесо
        //параметры:
        //up    :   weel==0x0078 >0 ???
        //down  :   weel==0xFF88 <0 ???
        break;
    default:
        break;
    }

PS как раз тоже прикупил трекбол логитековский "Marble") привязал его к своему приложению.
да, код - для случая если режим Suspend не нужен. так по идее лучше еще один параметр для пользовательского callback-а сделать.
« Последнее редактирование: 02-08-2007 13:34 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
TazmanianDevil
Интересующийся

ru
Offline Offline

« Ответ #7 : 11-11-2014 07:41 » 

Добрый день. Cpnmouse очень хорошая вещь, которая активно используется у нашей системе наведения для антенн. Антенна движется вслед за вращением трекбола. Все бы хорошо, но работает это дело только под 32-битной Windows. А давече пришли компьютеры с предустановленной Windows x64. И переустановить ОС не представляется возможным, поэтому руководство поставило задачу выполнить пятилетку в три года, то есть заставить cpnmouse tools работать под Windows x64.
С помощью Windows Driver Kits я собрал sys-файл из исходников. Inf-файл переписал следующим образом:
Код:
; Installation file (.inf) for the CPN Tools mouse filter driver
;
; (c) Copyright 2002-2004 CPN Group, University of Aarhus
;

[Version]
Signature="$Windows NT$"
Provider=%CPNGroup%
ClassGUID={4D36E96F-E325-11CE-BFC1-08002BE10318}
Class=Mouse
CatalogFile=cpnmouse.cat
DriverVer=09/05/2004,1.0.5.0

[DestinationDirs]
DefaultDestDir   = 12

;
; Driver information
;

[Manufacturer]
%CPNGroup%   = CPNGroup.Mfg, NTamd64

[CPNGroup.Mfg]
%CPNGroup.DeviceDesc0% = ps2inst, *PNP0FAKE
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c402
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c000
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c001
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c00e
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c016
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_0603&PID_6871
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_061c&PID_a700
%CPNGroup.DeviceDesc2% = serinst, *PNP0F0C,SERENUM\PNP0F0C,SERIAL_MOUSE

[CPNGroup.Mfg.NTamd64]
%CPNGroup.DeviceDesc0% = ps2inst, *PNP0FAKE
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c402
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c000
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c001
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c00e
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_046d&PID_c016
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_0603&PID_6871
%CPNGroup.DeviceDesc1% = usbinst, HID\VID_061c&PID_a700
%CPNGroup.DeviceDesc2% = serinst, *PNP0F0C,SERENUM\PNP0F0C,SERIAL_MOUSE

;
; General installation section
;

[ps2inst]
; perform port related actions from msmouse.inf
Include=msmouse.inf
Needs=Ps2_Inst

AddReg=cpnmouse.AddReg
; Copy the driver over
CopyFiles=cpnmouse.CopyFiles

[usbinst]
; perform port related actions from msmouse.inf
Include=msmouse.inf
Needs=HID_Mouse_Inst.NT

AddReg=cpnmouse.AddReg
; Copy the driver over
CopyFiles=cpnmouse.CopyFiles

[serinst]
; perform port related actions from msmouse.inf
Include=msmouse.inf
Needs=Ser_Inst

AddReg=cpnmouse.AddReg
; Copy the driver over
CopyFiles=cpnmouse.CopyFiles

[cpnmouse.AddReg]

;
; File sections
;

[cpnmouse.CopyFiles]
cpnmouse.sys

;
; Service Installation
;

[ps2inst.Services]
AddService = cpnmouse,  , cpnmouse_Service_Inst, cpnmouse_EventLog_Inst
; Install the port driver and mouclass from msmouse.inf
Include=msmouse.inf
Needs=Ps2_Inst.Services

[usbinst.Services]
AddService = cpnmouse,  , cpnmouse_Service_Inst, cpnmouse_EventLog_Inst
; Install the port driver and mouclass from msmouse.inf
Include=msmouse.inf
Needs=HID_Mouse_Inst.NT.Services

[serinst.Services]
AddService = cpnmouse,  , cpnmouse_Service_Inst, cpnmouse_EventLog_Inst
; Install the port driver and mouclass from msmouse.inf
Include=msmouse.inf
Needs=Ser_Inst.Services

[cpnmouse_Service_Inst]
ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
StartType      = 3                  ; SERVICE_DEMAND_START
ErrorControl   = 0                  ; SERVICE_ERROR_IGNORE
LoadOrderGroup = Pointer Port
ServiceBinary  = %12%\cpnmouse.sys

[cpnmouse_EventLog_Inst]
AddReg = cpnmouse_EventLog_AddReg

[cpnmouse_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\drivers\cpnmouse.sys"
HKR,,TypesSupported,0x00010001,7

[ps2inst.HW]
; Add the device upper filter
AddReg = ps2inst.HW.AddReg

; run the directives need by the port driver
Include=msmouse.inf
Needs=Ps2_Inst.HW

[usbinst.HW]
; Add the device upper filter
AddReg = usbinst.HW.AddReg

; run the directives need by the port driver
Include=msmouse.inf
Needs=HID_Mouse_Inst.NT.HW

[serinst.HW]
; Add the device upper filter
AddReg = serinst.HW.AddReg

; run the directives need by the port driver
Include=msmouse.inf
Needs=Ser_Inst.HW

[ps2inst.HW.AddReg]
HKR,,"UpperFilters",0x00010000,"cpnmouse"

[usbinst.HW.AddReg]
HKR,,"UpperFilters",0x00010000,"cpnmouse"

[serinst.HW.AddReg]
HKR,,"UpperFilters",0x00010000,"cpnmouse"

;
; Source file information
;

[SourceDisksNames.x86]
1 = %DiskId1%,,,""

[SourceDisksNames.ntamd64]
1 = %DiskId1%,,,""

[SourceDisksFiles]
; Files for disk CPN Group, University of Aarhus Installation Disk #1 (Mouse)
cpnmouse.sys = 1,,

[Strings]

;
; Non-Localizable Strings
;

REG_SZ         = 0x00000000
REG_MULTI_SZ   = 0x00010000
REG_EXPAND_SZ  = 0x00020000
REG_BINARY     = 0x00000001
REG_DWORD      = 0x00010001
SERVICEROOT    = "System\CurrentControlSet\Services"

;
; Localizable Strings
;

CPNGroup.DeviceDesc0 = "CPN Tools mouse filter driver PS/2"
CPNGroup.DeviceDesc1 = "CPN Tools mouse filter driver USB"
CPNGroup.DeviceDesc2 = "CPN Tools mouse filter driver serial"
DiskId1 = "CPN Group, University of Aarhus Installation Disk #1 (Mouse)"
CPNGroup = "CPN Group, University of Aarhus"

В принципе, драйвер устанавливается, хоть и ругается на цифровую подпись. Но с ней проблему решить труда не составляет. Интересует меня другое в проекте cpnmouse есть библиотека, которая как я понял и работает с этим драйвером, а также программы demo и ordinary, показывающие работу всего этого дела. Когда я пересобрал весь проект, то обе программы запускаются и даже определяют, что в системе есть одно указывающее устройство с драйвером cpnmouse. Но стоит только этой мышкой/трекболом подвигать или щелкнуть кнопкой как вылетает исключение (на рисунке во вложении).
Подскажите, пожалуйста, в чем проблема. Из-за несоответствия того, что драйвер теперь 64-битный, а библиотека cpnmouse-lib и приложения 32-битные? Или в чем-то другом?
Большое спасибо.

* Exception.png (443.01 Кб - загружено 187 раз.)
Записан
TazmanianDevil
Интересующийся

ru
Offline Offline

« Ответ #8 : 11-11-2014 08:51 » 

Еще добавлю. Попробовал для солюшна выставить сборку х64 в Configuration Manager, но все равно вылетает с исключением при попытке подвигать трекболом. Visual Studio при исключении тыкает мне на WaitForSingleObjectEx в функции "DWORD WINAPI MainThread(LPVOID lpParameter)" в файле hapi.c.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 11-11-2014 09:56 » 

сейчас повспоминал немного как оно работало...скорее всего да.
там при регистрации обработчика ApcCallback приложения - открывается драйвер по IRP_MJ_CREATE с именем,
которое формируется в том числе из адреса APC процедуры обработки:
Код:
sprintf(c, "%s\\execute\\get\\%u\\%Iu",
functionClassDeviceData->DevicePath,
maxused + 1,
&ApcCallback);
а в драйвере при разборе этот адрес разбирается как int и записывается в поле адреса калбэка:
Код:
   devExt->routine = (PKNORMAL_ROUTINE) readInt(token);
потом в драйвере, при необходимости передать параметры, ставится в очередь APC:
Код:
 KeInitializeApc(apc, devExt->client, 0, (PKKERNEL_ROUTINE) &KeAPCRoutine, 0, devExt->routine, UserMode, (PVOID) devExt->id);
  KeInsertQueueApc(apc, p, b, 0);
а вот тут не знаю как поведет себя эта функция. она похоже немного недокументирована((( хотя с первого взгляда совсем криминала не вижу.

параметры, (которые на самом деле указатели) формируются в драйвере:
Код:
p = (void *)(unsigned int)((i->LastX << 16) | (((unsigned int) i->LastY) & 0xffff));
b = (void *)(unsigned int)((i->ButtonFlags << 16) | (((unsigned int) i->ButtonData) & 0xffff));
тут вроде тоже не криминал... но опять же не понятно как оно транслироваться будет в 32 разрядный код.

попробуйте скомпилить отладочную версию драйвера, и посмотреть отладочные сообщения драйвера при тыканье кнопок. (какой нить DebugView к примеру. только вывод ядровых отладочных сообщений там в реестре надо включить где-то)

Добавлено через 1 минуту и 11 секунд:
и скиньте сюда лог)
« Последнее редактирование: 11-11-2014 09:57 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
TazmanianDevil
Интересующийся

ru
Offline Offline

« Ответ #10 : 11-11-2014 10:20 » 

Спасибо Вам большое за столь оперативный ответ.
Лог вот:
Код:
00000001 0.00000000 Debug info
00000002 0.00000601 --- 0 0 9040b60 12ed89d 1 ---
00000003 0.02399595 Debug info
00000004 0.02400165 --- 10000 0 9040b60 12ed89d 1 ---
00000005 0.03199590 Debug info
00000006 0.03200160 --- 40000 0 9040b60 12ed89d 1 ---
00000007 0.03999164 Debug info
00000008 0.03999735 --- 70000 0 9040b60 12ed89d 1 ---
00000009 0.04799549 Debug info
00000010 0.04800150 --- 70000 0 9040b60 12ed89d 1 ---
00000011 0.05599514 Debug info
00000012 0.05600085 --- 70001 0 9040b60 12ed89d 1 ---
00000013 0.06399179 Debug info
00000014 0.06399749 --- 70002 0 9040b60 12ed89d 1 ---
00000015 0.07199444 Debug info
00000016 0.07200015 --- 70001 0 9040b60 12ed89d 1 ---
00000017 0.07999439 Debug info
00000018 0.08000010 --- 90002 0 9040b60 12ed89d 1 ---
00000019 0.08799434 Debug info
00000020 0.08800034 --- 70003 0 9040b60 12ed89d 1 ---
00000021 0.09600270 Debug info
00000022 0.09600870 --- 80002 0 9040b60 12ed89d 1 ---
00000023 0.10399394 Debug info
00000024 0.10399994 --- 70003 0 9040b60 12ed89d 1 ---
00000025 0.11199389 Debug info
00000026 0.11199959 --- 60004 0 9040b60 12ed89d 1 ---
00000027 0.11999414 Debug info
00000028 0.11999984 --- 50002 0 9040b60 12ed89d 1 ---
00000029 0.12799318 Debug info
00000030 0.12799889 --- 50002 0 9040b60 12ed89d 1 ---
00000031 0.13599344 Debug info
00000032 0.13599914 --- 30002 0 9040b60 12ed89d 1 ---
00000033 0.14399369 Debug info
00000034 0.14399970 --- 50001 0 9040b60 12ed89d 1 ---
00000035 0.15199304 Debug info
00000036 0.15199874 --- 20001 0 9040b60 12ed89d 1 ---
00000037 0.15997496 Debug info
00000038 0.15998067 --- 20000 0 9040b60 12ed89d 1 ---
00000039 0.16797101 Debug info
00000040 0.16797642 --- 10000 0 9040b60 12ed89d 1 ---
00000041 0.17597276 Debug info
00000042 0.17597817 --- 10000 0 9040b60 12ed89d 1 ---
00000043 0.30399299 Debug info
00000044 0.30399868 --- 0 0 9040b60 12ed89d 1 ---
00000045 0.31198934 Debug info
00000046 0.31199533 --- 10000 0 9040b60 12ed89d 1 ---
00000047 0.31998956 Debug info
00000048 0.31999528 --- 0 0 9040b60 12ed89d 1 ---
00000049 4.21590424 Debug info
00000050 4.21591043 --- 0 10000 9040b60 12ed89d 1 ---
00000051 4.63189316 Debug info
00000052 4.63189888 --- 0 20000 9040b60 12ed89d 1 ---
00000053 5.27187586 Debug info
00000054 5.27188158 --- 0 40000 9040b60 12ed89d 1 ---
00000055 5.71187019 Debug info
00000056 5.71187687 --- 0 80000 9040b60 12ed89d 1 ---
00000057 6.19985771 Debug info
00000058 6.19986391 --- 0 0 9040b60 12ed89d 1 ---
00000059 6.74384356 Debug info
00000060 6.74384928 --- 0 0 9040b60 12ed89d 1 ---
00000061 7.30382872 Debug info
00000062 7.30383396 --- 0 0 9040b60 12ed89d 1 ---
00000063 7.80780792 Debug info
00000064 7.80781364 --- 0 0 9040b60 12ed89d 1 ---
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 11-11-2014 10:39 » 

параллельно запустите проект под отладчиком.
расшифровка лога такая
Код:
p = (void *)(unsigned int)((i->LastX << 16) | (((unsigned int) i->LastY) & 0xffff));
b = (void *)(unsigned int)((i->ButtonFlags << 16) | (((unsigned int) i->ButtonData) & 0xffff));
devExt->id = readInt(token); - НОМЕР МЫШКИ вроде<<<<<<<<<<<<<<<<<
devExt->client = KeGetCurrentThread(); <<<<<<<<<<ID нити из которого вызывалось
devExt->routine = (PKNORMAL_ROUTINE) readInt(token); <<<<< адрес APC.
DebugPrint("--- %x %x %x %x %x ---", p, b, devExt->client, devExt->routine, devExt->id);

проверьте на соответствие адрес в отладочном сообщении и адрес  в отладчике функции ApcCallback в "lapi.c"

Добавлено через 54 секунды:
вообще в отладчике брякпоинт на ApcCallback   срабоает?
« Последнее редактирование: 11-11-2014 10:40 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
TazmanianDevil
Интересующийся

ru
Offline Offline

« Ответ #12 : 11-11-2014 11:57 » 

Брекпоинт ставится и даже съедается Студией, но при выполнении программы я туда ни разу не попал Жаль
В MainThread на WaitForSingleObjectEx вывалился.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 11-11-2014 13:01 » 

то что валится на WFSO - это как раз момент когда APC доходит до процесса, но видимо не исполняется.

попробуйте в драйвере использовать
PsWrapApcWow64Thread
Код: (C)
NTSTATUS
PsWrapApcWow64Thread(
    __inout PVOID *ApcContext,
    __inout PVOID *ApcRoutine)

/*++

Routine Description:

    This routine is used by kernel mode callers to queue APCs to a 32-bit thread
    running inside a Wow64 process. It wraps the original APC routine
    with a wrapper routine inside Wow64. The target Apc routine must be
    inside 32-bit code. This routine must be executed in the context of the
    Wow64 thread where the target APC is going to run in. The resulting ApcContext
    and ApcRoutine from this routine are used when initializing, using KeInitializeApc,
    to be queued later to a Wow64 thread.
   
    The API does nothing and succeeds on :
        - 32-bit systems.
        - native 64-bit processes on 64-bit systems.

Environment:

    Kernel mode only.

Arguments:

    ApcContext - Pointer to the original ApcContext parameter.

    ApcRoutine - Pointer to the original ApcRoutine that is targeted to run
        32-bit code.

Return:

    NTSTATUS.

--*/
пишут что может помочь. подробности тут:
предлагают вот такую обертку
Код: (C)
void APCKernelRoutine  // отдать в KeInitializeApc() как PKKERNEL_ROUTINE в случае если твой целевой процесс 32 бита
(
  KAPC*             apc
, PKNORMAL_ROUTINE* pf_norm
, void**            pnorm_ctx
, void**            psys_ctx1
, void**            psys_ctx2
)
{
...
  PsWrapApcWow64Thread(pnorm_ctx, pfnorm);
...
}
+ не забыть про " #ifdef _AMD64_ и проверку IoIs32bitProcess(), и делать это всё следует в kernel APC routine."

PS товарищу x64 очередное спасибо)
« Последнее редактирование: 11-11-2014 13:05 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 11-11-2014 13:15 » 

PPS еще вот какая штука объявилась.. пока не вкурил что это
MultiPoint Mouse SDK
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
TazmanianDevil
Интересующийся

ru
Offline Offline

« Ответ #15 : 11-11-2014 13:53 » 

Я уже пробовал ставить Multipoint SDK. Довольно интересная вещь, специально созданная для многомышевых систем. Но там используется C#, а я неуч и не знаю, можно ли это как-то прикрутить к гигантскому С++ проекту.
Записан
TazmanianDevil
Интересующийся

ru
Offline Offline

« Ответ #16 : 11-11-2014 14:14 » 

Ну все, все заработало. Сделал так, как вы сказали. Спасибо Вам большое. Теперь операторы на Байконуре будут и дальше гонять антенны с помощью трекбола Ага

* Exception2.png (289.45 Кб - загружено 156 раз.)
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 11-11-2014 14:37 » 

ага, круто) кстати в хелпе по Multipoint SDK указан и с++)
а эксцепшен 2 откуда?)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
TazmanianDevil
Интересующийся

ru
Offline Offline

« Ответ #18 : 11-11-2014 18:37 » 

На будущее тогда можно будет посмотреть и в сторону Multipoint SDK Улыбаюсь
А exception2 возникает при запуске cpnmouse-demo или cpnmouse-ordinary. Проявляется очень хитро. Если совершать короткие движения трекболом, то все работает как часы. Но если долго и упорно вести курсор, то вываливается с сообщением о переполнении стека. Что самое интересное в нашей программе такого нет. Причину пока не нашел.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines