|

楼主 |
发表于 2008-2-13 16:37:25
|
显示全部楼层
回复: 【转帖】 遍历对话框里的static控件
HWND tmpa=::FindWindow("#32770 (Dialog)",NULL);
tmpa=::FindWindowEx(tmpa,NULL,"Edit",NULL);
char *msg;
CString tmp;
m_msg.GetWindowText(tmp);
msg=tmp.GetBuffer(tmp.GetLength());
::SendMessage(tmpa,WM_SETTEXT,tmp.GetLength(),(long)msg);
keybd_event 或者sendinput都行,你想写一串,可以用一个数组,循环写,
用vkscan()和mapvirtualkey()结合,把字符转化成virtualkey 或者扫描码来发送,
procedure SendShift(H: HWnd; Down: Boolean);
var
vKey, ScanCode: Word;
lParam: longint;
begin
vKey:= $10;
ScanCode:= MapVirtualKey(vKey, 0);
lParam:= longint(ScanCode) shl 16 or 1;
if not(Down) then lParam:=lParam or $C0000000;
SendMessage(H, WM_KEYDOWN, vKey, lParam);
end;
{****************************************************}
procedure SendCtrl(H: HWnd; Down: Boolean);
var
vKey, ScanCode: Word;
lParam: longint;
begin
vKey:= $11;
ScanCode:= MapVirtualKey(vKey, 0);
lParam:= longint(ScanCode) shl 16 or 1;
if not(Down) then lParam:= lParam or $C0000000;
SendMessage(H, WM_KEYDOWN, vKey, lParam);
end;
{****************************************************}
function TBUSendKey.SendKey(AppName:string;Key:Char):Boolean;
var
vKey, ScanCode: Word;
lParam, ConvKey: longint;
Shift, Ctrl: boolean;
H:HWND;
begin
H:=FindWindow(pchar(appname),nil);
if H<>0 then
begin
ConvKey:= OemKeyScan(ord(Key));
Shift:= (ConvKey and $00020000) <> 0;
Ctrl:= (ConvKey and $00040000) <> 0;
ScanCode:= ConvKey and $000000FF or $FF00;
vKey:= ord(Key);
lParam:= longint(ScanCode) shl 16 or 1;
if Shift then SendShift(H, true);
if Ctrl then SendCtrl(H, true);
SendMessage(H, WM_KEYDOWN, vKey, lParam);
SendMessage(H, WM_CHAR, vKey, lParam);
lParam:= lParam or $C0000000;
SendMessage(H, WM_KEYUP, vKey, lParam);
if Shift then SendShift(H, false);
if Ctrl then SendCtrl(H, false);
result:=true;
end
else result:=false;
end;
可以对单个程序SendKey,全部就可以用kimryo的方法。还有方法是用Hook,很好的,我就不说了。有问题可以Email:Zeng@zymail.net
VOID keybd_event(
BYTE bVk, // virtual-key code
BYTE bScan, // hardware scan code
DWORD dwFlags, // function options
ULONG_PTR dwExtraInfo // additional keystroke data
); |
|