| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 |
|
Junior Member
Регистрация: 20.10.2005
Адрес: Москва
Сообщения: 70
![]() ![]() ![]() ![]() |
Delphi: Как программно заграбить (аналог PrintScreen) полноэкранное DOS окно?
Кто знает, как программно заграбить (аналог PrintScreen) полноэкранное DOS окно?
Нижеприведенный код, получает данные из DOS окна, но только если оно не использует сложную структуру (command.com, ping.exe, arj.exe). function TForm1.RunCaptured(const _dirName, _exeName, _cmdLine: string): Boolean; var start: TStartupInfo; procInfo: TProcessInformation; tmpName: string; tmp: Windows.THandle; tmpSec: TSecurityAttributes; res: TStringList; return: Cardinal; begin Result:=false; try // Setze ein Temporares File // Set a temporary file tmpName:='Test.tmp'; FillChar(tmpSec, SizeOf(tmpSec), #0); tmpSec.nLength:=SizeOf(tmpSec); tmpSec.bInheritHandle:=true; tmp:=Windows.CreateFile(PChar(tmpName), Generic_Write, File_Share_Write, @tmpSec, Create_Always, File_Attribute_Normal, 0); try FillChar(start, SizeOf(start), #0); start.cb:=SizeOf(start); start.hStdOutput:=tmp; start.dwFlags:=StartF_UseStdHandles or StartF_UseShowWindow; start.wShowWindow:=SW_SHOW; // Starte das Programm // Start the program if CreateProcess(nil, PChar(_exeName+' '+_cmdLine), nil, nil, True, 0, nil, PChar(_dirName), start, procInfo) then begin SetPriorityClass(procInfo.hProcess, Idle_Priority_Class); WaitForSingleObject(procInfo.hProcess, Infinite); GetExitCodeProcess(procInfo.hProcess, return); Result:=(return=0); CloseHandle(procInfo.hThread); CloseHandle(procInfo.hProcess); Windows.CloseHandle(tmp); // Die Ausgaben hinzufugen // Add the output res:=TStringList.Create; try res.LoadFromFile(tmpName); Memo1.Lines.Clear; Memo1.Lines.AddStrings(res); finally res.Free; end; Windows.DeleteFile(PChar(tmpName)); end else begin Application.MessageBox(PChar(SysErrorMessage(GetLastError())), 'RunCaptured Error', MB_OK); end; except CloseHandle(tmp); DeleteFile(PChar(tmpName)); raise; end; finally end; end; procedure TForm1.Button13Click(Sender: TObject); begin RunCaptured(ExtractFilePath(Application.ExeName), 'ping.exe', ' 127.0.0.1'); end; Если же требуется получить данные из окна программ: Norton Commander, различных базы данных под DOS и т.п., то ничего не выводится. Как получать данные из полноэкранного окна из любой DOS программы? |
|
|