HookDll 파일은 다음과 같이 코딩을 했습니다.
function MouseProc(nCode: Integer; wParam: Longint; lParam: Longint) : integer; stdcall;
var
TargetWnd : HWnd;
begin
if (nCode >=0) and (nCode = HC_ACTION) then
begin
if wParam = WM_LBUTTONDown then
begin
TargetWnd := FindWindow(nil, '가상키보드');
SendMessage(TargetWnd,WM_LBUTTONDOWN,wParam,lParam);
end;
end;
result := CallNextHookEx(0, nCode, wParam, lParam);
end;
Procedure InitHook; export;
begin
myhookdata.nType := WH_MOUSE;
myhookdata.hkprc := @MouseProc;
ShowMessage('훅이 초기화 되었음');
myhookdata.hhook := SetWindowsHookEx(
myhookdata.nType,
myhookdata.hkprc,
HInstance, 0);
end;
그리고 이를 가상키보드프로그램에서 폼위에 각각의 버튼을 올려놓고, 각버튼에
다음과 같이 코딩을 했습니다.
procedure TForm1.ButtonAClick(Sender: TObject);
begin
SendMessage(TargetWnd,WM_CHAR,ord('a'),0);
end;
:
:
:
procedure TForm1.WndProc(var Message : TMessage);
var
P : TPoint;
begin
case Message.Msg of
WM_LBUTTONDOWN :
begin
GetCursorPos(P);
TargetWnd := WindowFromPoint(P);
CheckMyWnd; {다른 위도우의핸들을 얻어오는 부분입니다.}
Test1Wnd := TargetWnd;
end;
end;
inherited WndProc(Message);
end;
이렇게 작업을 하니, 일반 영문이나,숫자/특수문자등은 잘 작동을하는데
한글은 도무지 어떻게 해야할지 깜깜하네요.
고수님들 제발 이에대한 답변좀 부탁드리겠습니다.