我写了一个向非当前焦点的记事本程序发送按数字键5的消息的小程序但是实现不了按键功能,专家哥哥救命啊困绕我几天了!!
这是代码
procedure TForm1.Button1Click(Sender: TObject);
var
h:HWND;
begin
h:=findwindow(nil,'a.txt - 记事本');
if h<>0 then
begin
sendMessage(h,WM_KEYDOWN,53,0);
sendMessage(h,WM_KEYUP,53,0);
end
else
showmessage('no run')
end;
end.
这是代码
procedure TForm1.Button1Click(Sender: TObject);
var
h:HWND;
begin
h:=findwindow(nil,'a.txt - 记事本');
if h<>0 then
begin
sendMessage(h,WM_KEYDOWN,53,0);
sendMessage(h,WM_KEYUP,53,0);
end
else
showmessage('no run')
end;
end.
var
wnd : HWND;
buffer : array [0..256] of Char;
begin
wnd := FindWindow('Notepad', nil);
if IsWindow(wnd) then
begin
wnd := FindWindowEx(wnd, 0, 'Edit', nil);
if IsWindow(wnd) then
begin
FillChar(buffer, sizeof(buffer), #0);
SendMessage(wnd, WM_GETTEXT, sizeof(buffer) - 1, Integer(@buffer)); StrLCopy(buffer, 'this is a test!', sizeof(buffer) - 1);
SendMessage(wnd, WM_SETTEXT, 0, Integer(@buffer));
end;
end;
end;
function MyEnumWindowsProc(hwnd : Hwnd; // handle to parent window
lParam : LPARAM) : Boolean; stdcall; // application-defined value
var
clsName : Array [0..127] of char;
begin
FillChar(clsName,sizeof(clsname),0);
if GetClassName(hwnd, clsName,sizeof(clsname)) > 0 then
begin
if clsName = 'Edit' then
begin
SendMessage(hwnd, wm_paste,0,0); // paste data.
SendMessage(hwnd, wm_char,102,0); // put a char to notepad.
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hNotepad : Thandle;
begin
WinExec('Notepad.exe',sw_shownormal);
hNotepad := FindWindow('Notepad',nil);
if hNotepad > 0 then
begin
richedit1.SelectAll ;
SendMessage(richedit1.handle,wm_copy,0,0);
EnumChildWindows(hNotepad,@MyEnumWindowsProc,0);
// SendMessage(hNotepad, WM_SysCommand, SC_MINIMIZE,0);
end;
end;
一个例子,不知有没有用
var
h1:HWND;
begin
h1:=findwindow(nil,'手机顽童模拟器');
if h1<>0 then
begin
SendMessage(h1,WM_KEYDOWN,13,0);
SendMessage(h1,WM_KEYUP,13,0);
end
else
showmessage('no run')
end;
end.
模拟按回车无效