Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Проблема с эмуляцией мышиного колеса


Автор: sanek198 11.10.2007, 19:32
Делаю так:

Код

var
P:TPoint;
begin
 GetCursorPos(P);
  SendMessage(WindowFromPoint(P), WM_MOUSEWHEEL, 120, 0);
end;


Из всех окон прокручивается только окно Оперы, да и то только вниз. Пробовал также mouse_event (MOUSEEVENTF_WHEEL), вообще ни одно окно не реагирует. Что не так делаю?

Автор: MetalFan 11.10.2007, 23:17
а мсдн почитать?
Цитата(msdn)

wParam
The high-order word indicates the distance the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. 

The low-order word indicates whether various virtual keys are down. This parameter can be one or more of the following values. 
MK_CONTROL
The CTRL key is down.
MK_LBUTTON
The left mouse button is down.
MK_MBUTTON
The middle mouse button is down.
MK_RBUTTON
The right mouse button is down.
MK_SHIFT
The SHIFT key is down.
MK_XBUTTON1
Windows 2000/XP: The first X button is down.
MK_XBUTTON2
Windows 2000/XP: The second X button is down.

Автор: sanek198 12.10.2007, 11:15
Цитата

а мсдн почитать?


Читал уже. С отрицательным значением в другую сторону не прокручивается ( DWORD(-120) ). Подскажите, так в чем все таки дело?

Автор: dumb 12.10.2007, 11:58
Цитата(sanek198 @  12.10.2007,  12:15 Найти цитируемый пост)
Читал уже.
плохо, негодно читал.

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  P: TPoint;
  Delta, VKeys: Integer;
begin
  GetCursorPos(P);
  Delta := StrToIntDef(Edit1.Text, 0); // берем из едита число
  if not CheckBox1.Checked then Delta := Delta * -1; // вверх-вниз
  VKeys := 0;{MK_CONTROL;} // сюда можно "как бы нажатые" кнопки вписать(список выше)
  SendMessage(WindowFromPoint(P), WM_MOUSEWHEEL, (Delta shl 16) or VKeys, DWORD(SmallPoint(P.X, P.Y)));
end;


Автор: sanek198 12.10.2007, 15:08
Мда... действительно плохо читал...
Огромное спасибо! Буду изучать лучше!  smile 

Автор: Snowy 12.10.2007, 15:42
Код

  mouse_event(MOUSEEVENTF_WHEEL, Mouse.CursorPos.X, Mouse.CursorPos.Y, dword(-120), 0); // вверх
  mouse_event(MOUSEEVENTF_WHEEL, Mouse.CursorPos.X, Mouse.CursorPos.Y, dword(120), 0); // вниз

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)