Salut j'ai beau chercher a faire fonctionner cette function (SendKeysTo), je n'ai pas trouvé le probleme... si vous pouviez m'aider...
Voici la source :
//debut de code
unit Winutils;
interface
uses WinTypes;
function SendKeys(const AKeys: string; Wait: boolean): boolean;
function SendKeysTo(Handle: Hwnd; const AKeys: string; Wait: boolean): boolean;
implementation
uses Messages, SysUtils, WinProcs{,
KeyCodes, StrUtil};
procedure HandleMessages;
var
Msg: TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
function SendAMessage(Wnd: HWnd; Msg, wParam: Word; lParam: LongInt): LongInt;
begin
SendMessage(Wnd, Msg, wParam, lParam);
HandleMessages;
end;
function SendKeys(const AKeys: string; Wait: boolean): boolean;
var
h : Hwnd;
begin
h := GetFocus;
SendKeys := SendKeysTo(h, AKeys, Wait);
end; { SendKeys }
function SendKeysTo(Handle: Hwnd; const AKeys: string; Wait: boolean): boolean;
function AHandle: Hwnd;
var
h: Hwnd;
p: PChar;
begin
p := StrAlloc(32);
h := GetFocus;
{ GetClassName(h, p, 31);
if StrComp(p, 'Button' = 0 then
AHandle := GetParent(h)
else}
AHandle := h;
StrDispose(p);
end;
var
Char : boolean;
CtrlDown : boolean;
k : integer;
Keys : string;
p : integer;
s : string;
ShiftDown : boolean;
SysKey : boolean;
begin
CtrlDown := false;
SysKey := false;
ShiftDown := false;
Keys := AKeys;
while length(Keys) > 0 do
begin
if Keys[1] = '%' then
begin
SysKey := true;
if Wait then
SendAMessage(AHandle, WM_SysKeyDown, VK_Menu, $20000001)
else
PostMessage(AHandle, WM_SysKeyDown, VK_Menu, $20000001);
Keys := copy(Keys, 2, length(Keys));
end
else if Keys[1] = '+' then
begin
ShiftDown := true;
if Wait then
SendAMessage(AHandle, WM_KeyDown, VK_Shift, $00000001)
else
PostMessage(AHandle, WM_KeyDown, VK_Shift, $00000001);
Keys := copy(Keys, 2, length(Keys));
end
else if Keys[1] = '^' then
begin
CtrlDown := true;
if Wait then
SendAMessage(AHandle, WM_KeyDown, VK_Control, $00000001)
else
PostMessage(AHandle, WM_KeyDown, VK_Control, $00000001);
Keys := copy(Keys, 2, length(Keys));
end;
if Keys[1] = '{' then
begin
p := pos('}', Keys);
s := lowercase(copy(Keys, 2, p-2));
Keys := copy(Keys, p+1, length(Keys));
Char := true;
if s = 'tab' then
k := VK_Tab
else if s = 'enter' then
k := VK_Return
else
begin
Char := false;
if s = 'down' then
k := VK_Down
else if s = 'up' then
k := VK_Down
else if s = 'right' then
k := VK_Right
else if s = 'left' then
k := VK_Left
else if s = 'capslock' then
k := VK_Capital
else
begin
Char := false;
if s = 'f1' then
k := VK_F1
else if s = 'f2' then
k := VK_F2
else if s = 'f3' then
k := VK_F3
else if s = 'f4' then
k := VK_F4
else if s = 'f5' then
k := VK_F5
else if s = 'f6' then
k := VK_F6
else if s = 'f7' then
k := VK_F7
else if s = 'f8' then
k := VK_F8
else if s = 'f9' then
k := VK_F9
else if s = 'f10' then
k := VK_F10
else if s = 'f11' then
k := VK_F11
else if s = 'f12' then
k := VK_F12
else if s = 'f13' then
k := VK_F13
else if s = 'f14' then
k := VK_F14
else if s = 'f15' then
k := VK_F15
else if s = 'f16' then
k := VK_F16;
end;
end;
if SysKey then
begin
if Wait then
begin
SendAMessage(AHandle, WM_SysKeyDown, k, $20000001);
SendAMessage(AHandle, WM_SysKeyUp, k, $e0000001);
end
else
begin
PostMessage(AHandle, WM_SysKeyDown, k, $20000001);
PostMessage(AHandle, WM_SysKeyUp, k, $e0000001);
end;
end
else
begin
if Wait then
begin
SendAMessage(AHandle, WM_KeyDown, k, $08000001);
if Char then
SendAMessage(AHandle, WM_Char, k, $08000001);
SendAMessage(AHandle, WM_KeyUp, k, $c8000001);
end
else
begin
PostMessage(AHandle, WM_KeyDown, k, $08000001);
if Char then
PostMessage(AHandle, WM_Char, k, $08000001);
PostMessage(AHandle, WM_KeyUp, k, $c8000001);
end;
end;
end
else
begin { Ordinary characters }
if Wait then
begin
SendMessage(AHandle, WM_KeyDown, ord(UpCase(Keys[1])), $08000001);
if ShiftDown then
SendMessage(AHandle, WM_Char, ord(UpCase(Keys[1])), $08000001)
else
SendMessage(AHandle, WM_Char, ord(Keys[1]), $08000001);
SendAMessage(AHandle, WM_KeyUp, ord(UpCase(Keys[1])), $c8000001);
end
else
begin
PostMessage(AHandle, WM_KeyDown, ord(UpCase(Keys[1])), 1);
if ShiftDown then
PostMessage(AHandle, WM_Char, ord(UpCase(Keys[1])), 1)
else
PostMessage(AHandle, WM_Char, ord(Keys[1]), 1);
PostMessage(AHandle, WM_KeyUp, ord(UpCase(Keys[1])), $c0000001);
end;
Keys := copy(Keys, 2, length(Keys));
end;
if SysKey then
begin
if Wait then
SendAMessage(AHandle, WM_KeyUp, VK_Menu, $c0000001)
else
PostMessage(AHandle, WM_KeyUp, VK_Menu, $c0000001);
SysKey := false;
end;
if ShiftDown then
begin
if Wait then
SendAMessage(AHandle, WM_KeyUp, VK_Shift, $c0000001)
else
PostMessage(AHandle, WM_KeyUp, VK_Shift, $c0000001);
ShiftDown := false;
end;
if CtrlDown then
begin
if Wait then
SendAMessage(AHandle, WM_KeyUp, VK_Control, $c0000001)
else
PostMessage(AHandle, WM_KeyUp, VK_Control, $c0000001);
CtrlDown := false;
end;
end; { while }
SendKeysTo := true;
end; { SendKeysTo }
end.
//fin de code