Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
14-1120654675
netnt
2005-07-06 16:57
2005.07.31
Есть ли такая программа?


3-1118393371
Dummes
2005-06-10 12:49
2005.07.31
Запрос и ProgressBar


4-1117125568
чип
2005-05-26 20:39
2005.07.31
Как считать файл по битам?


9-1113735560
Fosgen
2005-04-17 14:59
2005.07.31
GLScene Определение "глубины" размещения объектов


3-1119428469
Sigetta
2005-06-22 12:21
2005.07.31
UNION





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский