Ver Mensaje Individual
  #10  
Antiguo 22-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Jeje, me corrijo a mi mismo. El evento keybd_event parece que no funciona con los juegos. Sin embargo contamos con la función SendInput que lo hace sin problemas. Aquí te dejo el código corregido, esta vez pulso la tecla al pulsar el botón derecho del ratón y suelto la tecla cuando suelto el botón. Probé el código con el Pinball de windows y parece que funciona:

Código Delphi [-]
const
  WH_MOUSE_LL = 14;
  KEYEVENTF_SCANCODE = $08;

var
  Hook: HHook;

procedure SendKey(Code: Cardinal; KeyUp: Boolean);
var
  Input: TInput;
begin
  FillChar(Input,Sizeof(Input),0);
  Input.Itype:= INPUT_KEYBOARD;
  Input.ki.wScan:= MapVirtualKey(Code,0);
  if KeyUp then
    Input.ki.dwFlags:= KEYEVENTF_SCANCODE or KEYEVENTF_KEYUP
  else
    Input.ki.dwFlags:= KEYEVENTF_SCANCODE;
  SendInput(1,Input,Sizeof(TInput));
end;

function MouseProc(Code: Integer; WParam, LParam: DWORD): LRESULT; stdcall;
begin
  if Code = HC_ACTION then
  begin
    if WParam = WM_RBUTTONDOWN then
      SendKey(Ord('Z'),FALSE)
    else
    if WParam = WM_RBUTTONUP then
      SendKey(Ord('Z'),TRUE);
  end;
  Result := CallNextHookEx(Hook, Code, WParam, LParam);
end;


procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Hook <> 0 then UnhookWindowsHookEx(Hook);
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Hook := SetWindowsHookEx(WH_MOUSE_LL, @MouseProc, HInstance, 0);
end;

Aquí te dejo todo montado
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo33.zip (5,2 KB, 99 visitas)
Responder Con Cita