在Delphi中,我有两个编辑框和一个按钮.
默认情况下选择Edit1.我想用消息改变焦点.但是,如果我按照以下方式执行操作,那么在编辑中的选择范围,错误框中的插入符等等都会搞得一团糟.
我使用消息的原因是我可以在外部应用程序中控制焦点.这看起来似乎有效,但很明显,Windows内部状态有点混乱.我没有外部程序的来源.
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(edit1.handle,WM_KILLFOCUS,0,0);
PostMessage(edit2.handle,WM_SETFOCUS,0,0);
end;
Run Code Online (Sandbox Code Playgroud)
......那可以吗?我错过了一条消息吗?
我有一个可以向另一个应用程序发送消息的应用程序.在Win8之前的系统中,运行正常.你给它类或标题,它使用enumwindows并找到目标窗口.使用Win8,您只能枚举顶级窗口,这意味着TApplication类.发送方对此感到满意,但接收方却不满意.
要捕获消息,我在目标表单中使用此代码...
function Tmain.AppMsgHookFunc(var wmsg : TMessage) : Boolean;
begin
Result := False;
if wmsg.Msg = WM_COPYDATA then begin
// Post the caught message back to this form.
postmessage (handle,wmsg.Msg,wmsg.WParam,wmsg.LParam);
end;
end;
Run Code Online (Sandbox Code Playgroud)
...然后使用application.hookmainwindow等激活它.
这永远不会开火.我看到,如果我使用sendmessage向自己发送消息然后它会触发,但是如果我使用postmessage不起作用,即使在XP上也是如此.有什么建议?