激活另一个进程的窗口

ndscndscnd 2011-12-28 09:45:24
 Mutex:=CreateMutex(NIL,True,'SingleApp');
IF GetLastError<>ERROR_ALREADY_EXISTS THEN//如果不存在另一实例
BEGIN
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
END;
ReleaseMutex(Mutex);

上面这段代码会在程序执行时 如果已经运行就自动关闭

我想在关闭之前激活已经打开的进程的窗口 请问如何实现

...全文
279 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ndscndscnd 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sgzhou12345 的回复:]

获取句柄,得到焦点
用勾子方法即可
[/Quote]
你指的是进程吗?
山东蓝鸟贵薪 2011-12-28
  • 打赏
  • 举报
回复
获取句柄,得到焦点
用勾子方法即可
ndscndscnd 2011-12-28
  • 打赏
  • 举报
回复
窗口显示出来了,其他都可以用, 但是上面的最小化 和关闭按钮 没有作用

是不是还要激活进程啊
ndscndscnd 2011-12-28
  • 打赏
  • 举报
回复
窗口显示出来了,其他都可以用, 但是上面的最小化 和关闭按钮 没有作用

是不是还要激活进程啊
kaikai_kk 2011-12-28
  • 打赏
  • 举报
回复
procedure SwitchToThisWindow(h:Thandle;bo:boolean);stdcall;external 'User32.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
SwitchToThisWindow(findwindow(nil,'程序标题'),true);
end;

如果是隐藏的窗体,可以先枚举找出它的handle,再调用此函数
无条件为你 2011-12-28
  • 打赏
  • 举报
回复
代码:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

const
CM_RESTORE=WM_USER+$1000;{自定义的“恢复”消息}
MYAPPNAME='MyDelphi';//重新定义窗体类名。


type
TForm1 = class(TForm)
private
{ Private declarations }
public
procedure CreateParams(var Params: TCreateParams); override;
Procedure RestoreRequest(var message: TMessage); message CM_RESTORE;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName := MYAPPNAME;
end;

procedure TForm1.RestoreRequest(var message: TMessage);
begin
if IsIconic(Application.Handle) then
Application.Restore
else
Application.BringToFront;
end;


end.



工程中:

program ChongKai;

uses
Forms,
windows,
messages,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

const
CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}
MYAPPNAME = 'MyDelphi';

var
RvHandle : hWnd;


begin
RvHandle := FindWindow(MYAPPNAME,0);
if RvHandle > 0 then
begin
PostMessage(RvHandle, CM_RESTORE, 0, 0);
Exit;
end;

Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
funxu 2011-12-28
  • 打赏
  • 举报
回复
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
我可没看到代码里有如果已经运行就自动关闭,只有释放mutex
想激活别的窗口用bringwindowtotop或者SetForegroundWindow都可以,不过要先知道窗口句柄,至于像调用其中的函数,需要dll注入了
ndscndscnd 2011-12-28
  • 打赏
  • 举报
回复
还有就是如果能调用其中的函数就更好了

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧