Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

узнать hwnd   Найти похожие ветки 

 
RaPToR_1   (2004-08-30 02:00) [0]

i:=winexec("notepad.exe",1);
как мне узнать хендл окна, которое я запустил?
findwindow не канает для меня в этом случаи...нужен другой способ


 
GuAV ©   (2004-08-30 02:11) [1]

CreateProcess
EnumThreadWindows


 
RaPToR_1   (2004-08-30 02:19) [2]

а поподробнее?


 
GuAV ©   (2004-08-30 03:19) [3]

CreateProcess запустит приложение заместо winexec.
в lpProcessInformation будет информация о процессе и потоке
в частности hProcess и ThreadId.
ждешь, когда он закончит инициализацию
WaitForInputIdle.
ThreadId передашешь в EnumThreadWindows - она найдёт окно.


 
_sulent ©   (2004-08-30 09:16) [4]

var
 ...
 pc: pChar;
 pi: TProcessInformation;
 si: TStarupInfo;
begin
 ...
pc := "Что екзекать";
 CreateProcess(nil, pc, nil,nil, false, CREATE_DEFAULT_ERROR_MODE,nil,nil,si,pi);
 WaitForSingleObject(pi.hProcess, INFINITE);
 ...
end;


 
GuAV ©   (2004-08-30 10:50) [5]

_sulent ©   (30.08.04 09:16) [4]

Не то. Читай внимательно вопрос. В [3] я уже дал ответ, осталось только его в код перевести.


 
RaPToR_1   (2004-08-30 11:41) [6]

function zxc(lhwn,lparam:integer):integer;
begin
form1.Caption:=inttostr(lhwn);
//////
result:=1;
end;

function okno:string;
var
Rlst: LongBool;
StartUpInfo: TStartUpInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);
with StartUpInfo do
begin
  cb := SizeOf(TStartUpInfo);
  dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
  wShowWindow := SW_SHOWNORMAL;
end;
Rlst := CreateProcess("c:\windows\calc.exe", "", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
if Rlst then
with ProcessInfo do begin
  WaitForInputIdle(hProcess, INFINITE);
   EnumThreadWindows(ProcessInfo.hThread,@zxc,1);
  CloseHandle(hThread);
 CloseHandle(hProcess);
end;
end;


не работает это


 
MetalFan ©   (2004-08-30 12:38) [7]

EnumThreadWindows(ProcessInfo.dwThreadId,@zxc,1);


 
RaPToR_1   (2004-08-30 12:51) [8]


function zxc(lhwn,lparam:integer):integer;
var ii:integer;
s:string;
begin
       ii := GetWindowTextLength(lhwn);
       s:="";
       setlength(s,ii+1);
       ii := GetWindowText(lhwn, pchar(s), ii+1);
form1.Caption:=s;
//////
result:=1;
end;


вот тут я получаю хендл, но почему я не могу получить заголовок окна?


 
KADAN ©   (2004-08-30 12:57) [9]

может stdcall


 
RaPToR_1   (2004-08-30 13:15) [10]

даже если так я получай например у окна калькулятора капшен calcmsgpumpwnd
что  эт такое?
function zxc(lhwn,lparam:integer):integer;stdcall;
var ii:integer;
s:string;
begin
      ii := GetWindowTextLength(lhwn);
      s:="";
      setlength(s,ii+1);
      ii := GetWindowText(lhwn, pchar(s), ii+1);
form1.Caption:=s;
//////
result:=1;
end;


 
GuAV ©   (2004-08-30 14:12) [11]


> что  эт такое?


То что окон больше одного.
Глянь в WinSight, сам увидишь.
Так попробуй.

function EnumThreadWndProc(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
const
 CalcClass = "SciCalc";
 CalcClassStr: array[0..Length(CalcClass)] of Char = CalcClass;
var
 ClassStr: array[0..Length(CalcClass)] of Char;
begin
 GetClassName(hWnd,ClassStr,Length(CalcClass)+1);
 Result:=ClassStr <> CalcClassStr;
 if not Result then PHandle(lParam)^:=hWnd;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Wnd: HWND;
 SI: TStartupInfo;
 PI: TProcessInformation;
 S: string;
 Len: Integer;
begin
 Wnd:=0;
 FillChar(SI, SizeOf(SI),0);
 SI.cb:=SizeOf(SI);
 CreateProcess(nil,"CALC.EXE",nil,nil,False,
   0,nil,nil,SI,PI);
 WaitForInputIdle(PI.hProcess, INFINITE);
 EnumThreadWindows(PI.dwThreadId,
   @EnumThreadWndProc, LPARAM(@Wnd));
 begin
   GetWindowTextLength(Wnd);
   Len:=GetWindowTextLength(Wnd) + 1;
   setlength(S, Len);
   setlength(S, GetWindowText(Wnd, @s[1], Len));
   Caption:=S;
 end;
end;


 
RaPToR_1   (2004-08-30 15:29) [12]

пасиб, отлично работает



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.031 c
11-1080548358
Boris Mouradov
2004-03-29 12:19
2004.09.12
MHFontDialog - initfont


1-1093580888
samumka
2004-08-27 08:28
2004.09.12
Работа с датой в Delphi?


3-1092742537
Эдик Дятлов
2004-08-17 15:35
2004.09.12
Как получить подключенных пользователей в базе SQL Anywhere


3-1092577113
Ольга
2004-08-15 17:38
2004.09.12
Формирование SQL-скрипта на создание таблицы из программы


1-1093712107
Черный дембель
2004-08-28 20:55
2004.09.12
Параметры функций из DLL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский