//列出所有运行的主窗体
function EnumWindowsProc(hWindow:hwnd; lparam:longint):bool;stdcall;
var
lpbuffer:PChar;
windowcaptionfound:bool;
classnamefound:bool;
begin
getmem(lpbuffer,255);
result:=true;
windowcaptionfound:=false;
classnamefound:=false;
try
if GetWindowtext(hwindow,lpbuffer,255)> 0 then
if pos(PFindWindowStruct(lParam).caption,strpas(lpbuffer))>0 then
windowcaptionfound:=true;
if PFindWindowStruct(lParam).classname='' then
classnamefound:=true
else if GetclassName(hwindow,lpbuffer,255)> 0 then
if pos(PFindWindowStruct(lParam).classname,strpas(lpbuffer))>0 then
classnamefound:=true;
if (windowcaptionfound and classnamefound) then
begin
pFindwindowStruct(lParam).windowHandle:=hWindow;
Result:=false;
end;
finally
freemem(lpbuffer,sizeof(lpbuffer^));
end;
end;
function FindAWindow(caption:string; classname:string):THandle;
var
WindowInfo:TFindWindowStruct;
begin
windowinfo.caption:=caption;
windowinfo.classname:=classname;
windowinfo.windowhandle:=0;
procedure TForm1.Button1Click(Sender: TObject);
var
TheWindowHandle:THandle;
begin
TheWindowHandle:=FindAWindow('浏览','');//这里可以找任意的应用程序标题
if TheWindowHandle=0 then
begin
showmessage('window not found!');
winExec('EXPLORER.EXE',SW_SHOWNORMAL);
end
else
BringWindowToTop(TheWindowHandle);
end;
要判断程序已经运行(自己写的),在dpr中用CreateMutex来判断:
program Project1;
uses
Forms,
Windows,
main in 'main.pas' {FrmMain};
{$R *.RES}
var Mutex:THandle;
begin
Mutex:=CreateMutex(nil,True,'project1');
if GetLastError<>ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TFrmMain, FrmMain);
Application.Run;
end
else
begin
Application.MessageBox('程序已经运行!','提示',MB_OK+MB_ICONINFORMATION);
end;
ReleaseMutex(Mutex);
end.