![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Handl'ы [D7, WinXP]
seamcat © (2005-05-28 01:18:00)Помогите пожалуйста. У меня программа должна запускать два абсолютно одинаковых приложения и управлять ими. У меня возникла проблема с определением дескрипторов. Они ж одинаковые! Подскажите, как разрешить?
seamcat (2005-05-31 21:40:00) [1]Мне нужены были именно дискрипторы окон. Но решение проблемы оказалось неожиданным. Достаточно было воспользоваться фун-ей FindWindow, только дождавшись, когда создание нового процесса закончиться...
anton2v (2005-05-31 17:34:00) [2]при запуске любого процесса из своего процесса на выходе или в одном из параметров функции ты получишь дискриптор дочернего процесса
seamcat (2005-05-28 23:10:00) [3]Огромное спасибо! Я пробовала функцию GetNextWindow, но она не помогла... Надеюсь это поможет
Reindeer Moss Eater (2005-05-28 01:41:00) [4]а так как название и клас окон одинаковы между собой
Сделай их неодинаковыми. По крайней мере заголовки.
Marser (2005-05-28 01:41:00) [5]Вот готовый пример перечисления всех окон в системе с помощью EnumWindows:
unit uenumwindows;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function EnumWindowProc(hwnd: HWND; lParam: Integer): BOOL; stdcall;
var
Form1: TForm1;
implementation
{$R *.dfm}
function EnumWindowProc(hwnd: HWND; lParam: Integer): BOOL;
var p:pchar;
begin
p:=StrAlloc(120);
if hwnd>0 then
begin
result:=true;
GetWindowText(hwnd,p,GetWindowTextLength(hwnd)+1);
Form1.Memo1.Lines.Add(inttohex(hwnd,4)+': '+string(p));
end;
StrDispose(p)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowProc,0);
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
label1.Caption:=inttostr(memo1.lines.Count);
end;
end.
Собственно, все перебирать необязательно. Достаточно дождаться поступления двух окон с одинаковыми заголовками, соответствующими твоим.
seamcat (2005-05-28 01:38:00) [6]Да не брала я их ниоткуда! Просто прога запускает одно приложение 2 раза подряд и автоматически пытается определить их дескрипторы, а так как название и клас окон одинаковы между собой, то получается, что в итоге она имеет дескриптор только одного окна! Лучше помогите...
Reindeer Moss Eater (2005-05-28 01:36:00) [7]А что за функция?
А откуда ты вообще взял те два одинаковых дескриптора?
Приятель в гости заходил, с собой их принес?
seamcat (2005-05-28 01:31:00) [8]Не могу. На след неделе лабу по операционным системам сдавать, а у меня конь еще не валялся...
Reindeer Moss Eater (2005-05-28 01:30:00) [9]Да забей.
seamcat (2005-05-28 01:29:00) [10]А что за функция? Какие параметры? Я не сильно разбираюсь...
Marser (2005-05-28 01:26:00) [11]EnumWindows
Marser (2005-05-28 01:25:00) [12]HWND у них точно разные.
Reindeer Moss Eater (2005-05-28 01:24:00) [13]Значит не дескрипторы одинаковые.
А это ты находишь одно и то же окно два раза.
Разницу понимаешь?
seamcat (2005-05-28 01:22:00) [14]Одинаковые не дискрипторы, а окна. И прога всегда выдает дескриптор одного и того же.
Marser (2005-05-28 01:21:00) [15]По определению нге может быть двух одинакових дескрипторов.
Reindeer Moss Eater (2005-05-28 01:20:00) [16]Они ж не одинаковые.