Две мышки
Я пробовал использовать DirectInput по MSDN:
Var
Mices: Array of TDIDeviceInstanceA;
function EnumMouses(var pdinst : TDIDeviceInstance; pvRef : Pointer) : Integer;
var dewType:Byte;
begin
dewType:=LoByte(pdinst.dwDevType);
dewType:=dewType shl 4;
dewType:=dewType shr 4;
ShowMessage(pdinst.tszProductName);
IF dewType = DIDEVTYPE_MOUSE Then
Begin
SetLength(Mices, Length(Mices)+1);
Mices[Length(Mices)-1]:=pdinst;
End;
Result:=DIENUM_CONTINUE;
end;
...
SetLength(Mices,0);
DInput.EnumDevices(0,@EnumMouses,nil,DIEDFL_ATTACHEDONLY);
...
Вот этото код ДОЛЖЕН (так в МСДН написанно) получить GUID всех мышек, однако сиравно находиться тока одна мышь!Хотя в диспетчере устройст их две...
У кого есть какие идеи (необезательно юзать DirectInput), натолкните на мысль...
Цитата:
Originally posted by Sashusik
Люди помагите, срочно надо! Есть две мышки надо их поотдельности использовать, но вот беда виндовс считает их одной! Как их "распаралелить"...
Я пробовал использовать DirectInput по MSDN:
Var
Mices: Array of TDIDeviceInstanceA;
function EnumMouses(var pdinst : TDIDeviceInstance; pvRef : Pointer) : Integer;
var dewType:Byte;
begin
dewType:=LoByte(pdinst.dwDevType);
dewType:=dewType shl 4;
dewType:=dewType shr 4;
ShowMessage(pdinst.tszProductName);
IF dewType = DIDEVTYPE_MOUSE Then
Begin
SetLength(Mices, Length(Mices)+1);
Mices[Length(Mices)-1]:=pdinst;
End;
Result:=DIENUM_CONTINUE;
end;
...
SetLength(Mices,0);
DInput.EnumDevices(0,@EnumMouses,nil,DIEDFL_ATTACHEDONLY);
...
Вот этото код ДОЛЖЕН (так в МСДН написанно) получить GUID всех мышек, однако сиравно находиться тока одна мышь!Хотя в диспетчере устройст их две...
У кого есть какие идеи (необезательно юзать DirectInput), натолкните на мысль...
Люди помагите, срочно надо! Есть две мышки надо их поотдельности использовать, но вот беда виндовс считает их одной! Как их "распаралелить"...
Я пробовал использовать DirectInput по MSDN:
Var
Mices: Array of TDIDeviceInstanceA;
function EnumMouses(var pdinst : TDIDeviceInstance; pvRef : Pointer) : Integer;
var dewType:Byte;
begin
dewType:=LoByte(pdinst.dwDevType);
dewType:=dewType shl 4;
dewType:=dewType shr 4;
ShowMessage(pdinst.tszProductName);
IF dewType = DIDEVTYPE_MOUSE Then
Begin
SetLength(Mices, Length(Mices)+1);
Mices[Length(Mices)-1]:=pdinst;
End;
Result:=DIENUM_CONTINUE;
end;
...
SetLength(Mices,0);
DInput.EnumDevices(0,@EnumMouses,nil,DIEDFL_ATTACHEDONLY);
...
Вот этото код ДОЛЖЕН (так в МСДН написанно) получить GUID всех мышек, однако сиравно находиться тока одна мышь!Хотя в диспетчере устройст их две...
У кого есть какие идеи (необезательно юзать DirectInput), натолкните на мысль...
Может они юзают один драйвер? У меня две мыши (нормальная и планшетная) и работают отдельно, но у них разные драйвера. Конечно, курсор все равно один :) Попробую дома твой код...
Этот же вопрос я задал на gamedev.ru вот ответы:
-----------------------------------------------------------
Lion007
попробуй DIEDFL_ALLDEVICES или DIEDFL_INCLUDEHIDDEN... это так, в порядке эксперимента - интересно, что получится...
Сашусик
Ща проверить не могу мышку забрали) Но ещё проблема в том что GUID который находит функция реагирует на обе мыши, хотя если бы проблема была бы в поиске GUIDA то найденный реагировал на одну мышь... Такое чувство что это из-за того что один драйвер обрабатывает обем мыши или я гоню?
Mirage
Под 2000/XP две мышки через DirectInput работать не будут. Под 9X - должны. Под XP и далее есть так называемый raw input. Копай в эту сторону.
Mirage
Да, есть код (на C) как это используется. От Reflexive (они зачем-то толкают технологию MouseParty, которая в сабже и состоит). http://www.mouse-party.com/MouseParty.zip
-----------------------------------------------------------
Так что впринцепе проблема решена,правдо я ещё не успел проверит, но всё равно - всем спасибо...