![]() |
Obtener Título de una ventana de consola
Hola, estoy desarrollando una GUI, en la que mi aplicación llama a un programa de consola. La única información que me interesa, es el porcentaje que lleva, y esta se encuentra en la barra de título. He encontrado esta función "GetConsoleTitle" pero no estoy muy seguro de su uso. Mi aplicación llama a este archivo de consola mediante la funcion "ShellExecute" de la API de Windows.
Otra duda: En el caso que quiera matar el programa ejecutado por "ShellExecute", ¿como se haria?. Muchísimas gracias por todo. |
Source Code
Me respondo a mi mismo:
No he encontrado información sobre la barra de título, pero he encontrado como sacar el texto de salida de la consola, que también me sirve. procedure RunDosInMemo(DosApp:String;AMemo:TMemo) ; const ReadBuffer = 80*25; var Security : TSecurityAttributes; ReadPipe,WritePipe : THandle; start : TStartUpInfo; ProcessInfo : TProcessInformation; Buffer : Pchar; BytesRead : DWord; Apprunning : DWord; begin With Security do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe (ReadPipe, WritePipe, @Security, 0) then begin Buffer := AllocMem(ReadBuffer + 1); FillChar(Start,Sizeof(Start),#0); start.cb := SizeOf(start); start.hStdOutput := WritePipe; start.hStdInput := ReadPipe; start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(DosApp), @Security, @Security, true, NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then begin repeat Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100); Application.ProcessMessages; until (Apprunning <> WAIT_TIMEOUT); repeat BytesRead := 0; ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil); Buffer[BytesRead]:= #0; OemToAnsi(Buffer,Buffer); AMemo.Text := AMemo.text + String(Buffer); until (BytesRead < ReadBuffer); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); end; end; procedure TForm1.Button1Click(Sender: TObject); begin RunDosInMemo(Edit1.Text,Memo1) ; end; Espero que este código sea de ayuda a los usuarios que lo necesiten. |
La franja horaria es GMT +2. Ahora son las 09:25:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi