Manipulacja kółkiem od myszki

0

Otóż mam problem, bo nie posiadam myszki, a gram sobie w grę w której odsuwa się kamerę kółkiem i takie pytanie mam, jak zmanipulować kółko od myszki? Próbowałem kiedyś z tymi adresami klawiszy czy jak to się zwie i kicha.

0

W jakim języku chcesz to zrobić albo pokaż jak to robiłes z tymi "adresami", bo mi
się wydaje, że przez Mouse_Event powinno się udać zasymulować działanie myszy.

0

To tak : Delphi 7, te adresy to znaczy się ich symbol np #13 czyli chyba enter.

1

To masz przykład poniżej jak przechwycić ruchy myszką i wciskać klawisz F1 przy ruchu w góre. A na wielu stronach do wyszukania
w google między innymi na http://delphi.about.com/cs/adptips2002/a/bltip1102_3.htm masz przykłady jak obslużyć rolkę w ruchu
myszy, podejrzewam, że trzeba będzie w Mouse_Event zasymulować VK_UP oraz VK_DOWN, ale to już pokombinuj dalej samemu.

//...
var
  Form1 : TForm1;
  HHK : integer;

implementation

{$R *.dfm}

procedure SimulateKeyPress(Key : Cardinal; KeyUp : boolean);
var
  Input : TagINPUT;
begin
  Input.Itype := INPUT_KEYBOARD;
  Input.ki.wVK := Key;
  Input.ki.wScan := MapVirtualKey(Key, 0);
  if Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME,
    VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE] then
  begin
    Input.ki.dwFlags := KEYEVENTF_EXTENDEDKEY;
  end
  else
  begin
    if KeyUp = False then
    begin
      Input.ki.dwFlags := 0;
    end
    else
    begin
      Input.ki.dwFlags := KEYEVENTF_KEYUP;
    end;
  end;
  Input.ki.time := 0;
  SendInput(1, Input, SizeOf(Input));
end;

function MouseLLProc(iCode : Integer; wParam : WPARAM; lParam : LPARAM) :
  integer; stdcall;
type
  TMsLLHookStruct = packed record
    pt : TPoint;
    mouseData : DWORD;
    flags : DWORD;
    time : DWORD;
    dwExtraInfo : DWORD;
  end;
  PMsLLHookStruct = ^TMsLLHookStruct;
var
  WheelDir : Word;
  MS : PMsLLHookStruct;
begin
  if (iCode = HC_ACTION) and (wParam = WM_MOUSEWHEEL) then
  begin
    with Form1 do
    begin
      MS := PMsLLHookStruct(lParam);
      WheelDir := MS.mouseData shr 16;
      Caption := IntToStr(WheelDir);
      if WheelDir = 120 then
      begin
        Application.Title := 'w górę';
        SimulateKeyPress(VK_F1, False);
        SimulateKeyPress(VK_F1, True);
      end
      else
      begin
        Application.Title := 'w dół';
      end;
    end;
  end;
  Result := CallNextHookEx(HHK, iCode, wParam, lParam);
end;

procedure TForm1.FormCreate(Sender : TObject);
const
  WH_MOUSE_LL = 14;
begin
  HHK := SetWindowsHookEx(WH_MOUSE_LL, MouseLLProc, HInstance, 0);
end;
0

Ja sobie dałem to w timera i gra gitara XD
mouse_event(MOUSEEVENTF_WHEEL,0,0,10,0);

Dzięki wielkie

1 użytkowników online, w tym zalogowanych: 0, gości: 1