제가 하고 싶은 작업은, 특정키를 눌렀을때, 완벽하게 다른 키가 눌린것 처럼 윈도우와 여타 어플리캐이션을 속이는 일입니다. 그것도 제 프로그램이 훅한 이후에 다른 프로그램이 훅한것은 포기하고, 기존에 실행된 프로그램들만 속이는겁니다.
우선 민성기님의 키보드 훅킹 강좌를 참고하여 전연훅에는 성공했습니다.
그러나 CallNextHookEx를 부르지 않으면 키가 안 먹는것은 되지만,
내가 원하는 변경은 불가능하고, 'a'키를 누르면 'd'가 눌린것 처럼 아무리 하려해도 안 먹히고 그냥 'a'가 찍히고 있습니다. 어떻게 하면 'd'가 눌린것처럼 속일 수 있을까요?
아래는 hook 함수입니다. 제가 무엇을 잘못한것일까요??
function MyKBHook(Code : Integer; wParam : WPARAM; lParam : LPARAM)
: LongInt; stdcall;
begin
  { 파일에 저장된 훅핸들을 읽어온다. }
  if HKbHook = 0 then begin
    ReadData;
  end;
{ Code값이 0보다 크거나 같을때만 }
{ 갈구리질을 하는 것이 요령. }
  if Code >= 0 then begin
    case wParam of
      65 : begin
        wParam := 68;   // A를 D로
        lParam := lParam and $10000000;  // 스캔코드도 바꿔줘야 한다.
        lParam := lParam  or $01200001;  // 최상위는 4bit는 눌림/계속눌림/뗌 표시
      end;
    end;
  end;
  Result := CallNextHookEx(HKbHook, Code, myW, myL);
end;
혹시나 해서 위 소스의 if 문 안에 다른것 다 지우고,
        wParam := 68;   // A를 D로
        lParam := lParam and $10000000;  // 스캔코드도 바꿔줘야 한다.
        lParam := lParam  or $01200001;  // 최상위는 4bit는 눌림/계속눌림/뗌 표시
요렇게만 남겨서 모든 키 눌림을 D로 바꿔보려 했으나,
키를 속이는건 불가능 합니다.
어떻게 해야 속일 수 있을까요?
감사합니다.
			 
	
	
    
    
	
	
    
    
    
아마도 이렇게
Result := CallNextHookEx(HKbHook, Code, myW, myL);
case 문을 수행한후 항상 훅체인이 다음으로 넘어가서 그럴겁니다.
case 의 else 문에 위 문장이 들어가도록 한다면
원하시는 대로 동작할거 같네요..
즐거운 프로그래밍 하시길~