Текущий архив: 2005.07.31;
Скачать: CL | DM;
ВнизHandl ы Найти похожие ветки
← →
seamcat (2005-05-28 01:18) [0]Помогите пожалуйста. У меня программа должна запускать два абсолютно одинаковых приложения и управлять ими. У меня возникла проблема с определением дескрипторов. Они ж одинаковые! Подскажите, как разрешить?
← →
Reindeer Moss Eater © (2005-05-28 01:20) [1]Они ж не одинаковые.
← →
Marser © (2005-05-28 01:21) [2]По определению нге может быть двух одинакових дескрипторов.
← →
seamcat (2005-05-28 01:22) [3]Одинаковые не дискрипторы, а окна. И прога всегда выдает дескриптор одного и того же.
← →
Reindeer Moss Eater © (2005-05-28 01:24) [4]Значит не дескрипторы одинаковые.
А это ты находишь одно и то же окно два раза.
Разницу понимаешь?
← →
Marser © (2005-05-28 01:25) [5]HWND у них точно разные.
← →
Marser © (2005-05-28 01:26) [6]EnumWindows
← →
seamcat (2005-05-28 01:29) [7]А что за функция? Какие параметры? Я не сильно разбираюсь...
← →
Reindeer Moss Eater © (2005-05-28 01:30) [8]Да забей.
← →
seamcat (2005-05-28 01:31) [9]Не могу. На след неделе лабу по операционным системам сдавать, а у меня конь еще не валялся...
← →
Reindeer Moss Eater © (2005-05-28 01:36) [10]А что за функция?
А откуда ты вообще взял те два одинаковых дескриптора?
Приятель в гости заходил, с собой их принес?
← →
seamcat (2005-05-28 01:38) [11]Да не брала я их ниоткуда! Просто прога запускает одно приложение 2 раза подряд и автоматически пытается определить их дескрипторы, а так как название и клас окон одинаковы между собой, то получается, что в итоге она имеет дескриптор только одного окна! Лучше помогите...
← →
Reindeer Moss Eater © (2005-05-28 01:41) [12]а так как название и клас окон одинаковы между собой
Сделай их неодинаковыми. По крайней мере заголовки.
← →
Marser © (2005-05-28 01:41) [13]Вот готовый пример перечисления всех окон в системе с помощью 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 23:10) [14]Огромное спасибо! Я пробовала функцию GetNextWindow, но она не помогла... Надеюсь это поможет
← →
anton2v (2005-05-31 17:34) [15]при запуске любого процесса из своего процесса на выходе или в одном из параметров функции ты получишь дискриптор дочернего процесса
← →
seamcat (2005-05-31 21:40) [16]Мне нужены были именно дискрипторы окон. Но решение проблемы оказалось неожиданным. Достаточно было воспользоваться фун-ей FindWindow, только дождавшись, когда создание нового процесса закончиться...
Страницы: 1 вся ветка
Текущий архив: 2005.07.31;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.036 c