journay(梦回唐朝) ,不行,我没用错吧 var h,hWND_FORM:THandle; begin h:=findwindow(nil,'计算器'); //hWND_FORM:=findwindowex(0,0,nil,'计算器'); 也试过 hWND_FORM:=findwindowex(h,0,nil,'计算器'); PostMessage (hWND_FORM, WM_KEYDOWN, VK_F1, 0); PostMessage (hWND_FORM, WM_KEYUP, VK_F1, 0);
我试过了,确实不行,等我查查!下面是个记事本的可以,你参考一下! procedure TForm1.Button2Click(Sender: TObject); var wnd: Hwnd; s: string; i: integer; begin wnd := FindWindow('notepad', nil); if wnd<>0 then begin wnd := FindWindowEx(wnd,0,'Edit',nil); PostMessage(wnd, WM_KEYDOWN, VK_F1, 0); PostMessage(wnd, WM_KEYUP, VK_F1, 0); end else ShowMessage('notepad not find'); end;
procedure TForm1.Button1Click(Sender: TObject); var wnd: Hwnd; s: string; i: integer; begin wnd := FindWindow( nil,'计算器'); if wnd<>0 then begin SHOWWINDOW(WND,SW_SHOW); keybd_event(vk_f1,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(vk_f1,0,KEYEVENTF_KEYUP,0); end else ShowMessage('计算器 not find'); end;
不能用keybd_event,它只对当前活动窗口有效
模拟按键 H := FindWindow(nil,'计算器') PostMessage(H, WM_KEYDOWN, VK_F1, 0);
SetFocus(h);
sendmessage(h,wm_keydown,vk_f1,0);
sendmessage(h,wm_keyup,vk_f1,0);
还是没有效果,你试过吗?
begin
if key=vk_F1 then
//需要的事件
end;
begin
if key=vk_F1 then
ShellExecute(handle,nil,'help.chm',nil,nil,sw_shownormal);
end;
PostMessage (hWND_FORM, WM_KEYDOWN, VK_F1, 0)
if key=VK_F1 then
begin
...
end;
var
h,hWND_FORM:THandle;
begin
h:=findwindow(nil,'计算器');
//hWND_FORM:=findwindowex(0,0,nil,'计算器'); 也试过
hWND_FORM:=findwindowex(h,0,nil,'计算器');
PostMessage (hWND_FORM, WM_KEYDOWN, VK_F1, 0);
PostMessage (hWND_FORM, WM_KEYUP, VK_F1, 0);
procedure TForm1.Button2Click(Sender: TObject);
var
wnd: Hwnd;
s: string;
i: integer;
begin
wnd := FindWindow('notepad', nil);
if wnd<>0 then
begin
wnd := FindWindowEx(wnd,0,'Edit',nil);
PostMessage(wnd, WM_KEYDOWN, VK_F1, 0);
PostMessage(wnd, WM_KEYUP, VK_F1, 0);
end
else ShowMessage('notepad not find');
end;
var
wnd: Hwnd;
s: string;
i: integer;
begin
wnd := FindWindow( nil,'计算器');
if wnd<>0 then
begin
SHOWWINDOW(WND,SW_SHOW);
keybd_event(vk_f1,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(vk_f1,0,KEYEVENTF_KEYUP,0);
end
else ShowMessage('计算器 not find');
end;
H := FindWindow(nil,'计算器')
PostMessage(H, WM_KEYDOWN, VK_F1, 0);
你可以变通一下,比如窗口大小变得很小等等
SHOWWINDOW(WND,SW_SHOW);似乎无效,setforegroundwindow(wnd);还可以
keybd_event只对活动窗口有效