Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
4-1117809351
iskatel
2005-06-03 18:35
2005.07.31
пульт avermedia


1-1121026051
Arc
2005-07-11 00:07
2005.07.31
Как отловить момент после создания новой формы?


1-1120763531
Kastusik
2005-07-07 23:12
2005.07.31
Перерисовка в TListView


4-1117711688
Альфа
2005-06-02 15:28
2005.07.31
полупрозрачная надпись


14-1121147519
Керк
2005-07-12 09:51
2005.07.31
Посоветуйте две ссылки. Электронные. Можно больше.




   Наверх