![]() |
|
|
|
|
#1
|
|||
|
|||
|
Вообще вопрос следующий
ShellExecute запускаю exe файл два раза. Потом по заголовку окна ищу эти два экземпляра с помощью функции EnumWindows(@EnumLoginWindows,0); И вот видит эта функция только одно окно. Окно второго экземпляра не видит. В чем ошибка? |
|
#2
|
||||
|
||||
|
Используй CreateProcess, там хоть по PID можно сравнить будет.
|
|
#3
|
||||
|
||||
|
все честно. запускает 2 калькулятора и сворачивает оба:
Код:
unit Unit1;
interface
uses
ShellAPI,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): Boolean; stdcall;
var
buf: array [0..$ff] of Char;
l: Integer;
s: String;
begin
Result:=True;
l:=GetWindowText(hwnd, @buf[0], Length(buf));
if l>0 then
begin
s:=Copy(buf, 1, l);
if s='Калькулятор' then
begin
Form1.Memo1.Lines.Add(s+' = '+IntToStr(hwnd));
SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShellExecute(0, 'open', 'c:\WINDOWS\system32\calc.exe', nil, nil, SW_SHOWNORMAL);
ShellExecute(0, 'open', 'c:\WINDOWS\system32\calc.exe', nil, nil, SW_SHOWNORMAL);
Sleep(1000);
EnumWindows(@EnumWindowsProc, 0);
end;
end. |