Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

Handle запущенного приложения   Найти похожие ветки 

 
Sergey SP ©   (2003-11-13 13:47) [0]

Возможно ли как-то запустить приложение, тут же получить его хэндл и через этот хендл с ним работать.
Причем интересует именно явное получение хэндла, т.к. поиск по заголовку...


 
Игорь Шевченко ©   (2003-11-13 13:54) [1]

У приложений нет Handle.


 
Sergey SP ©   (2003-11-13 15:23) [2]

Ну хорошо, у окна.


 
Digitman ©   (2003-11-13 15:39) [3]


> поиск по заголовку


заголовку чего ? окна ?
окон с интересующим заголовком в дан.момент времени с системе м.б. туева хуча... как собираешься идентифицировать конкретно нужное ?


> через этот хендл с ним работать


что есть "работать" ?


 
Sergey SP ©   (2003-11-13 15:57) [4]

Хорошо, по другому.
Есть программа которую нужно запустить, "нажать" в ней необходимые кнопочки, дождаться пока она отработает и закрыть ее. Проблема в том что гарантии что в данный момент не выполняется другая копия программы нет, поэтому нужно однозначно знать что я работаю именно с тем экземпляром программы что запустил.


 
Digitman ©   (2003-11-13 16:05) [5]


> нужно однозначно знать что я работаю именно с тем экземпляром
> программы что запустил.


каковы же критерии идентификации, по-твоему ?


> "нажать" в ней необходимые кнопочки


кнопка кнопке рознь
не представляю, как ты собрался "нажимать кнопки", если они, к примеру, рисованые и не имеют своего окна


 
Prov ©   (2003-11-13 17:41) [6]

Нельзя получить хэндл приложения, можно получить хэндл ео окон...
Например, хэндл главного окна... Например, так:

var WD: hWnd;
WD:= FindWindow(nil, "Window"); где Window - заголовок твоего окна
а потом можно делать с ним всё, что хочешь


 
DillerXX ©   (2003-11-14 10:28) [7]

Ну вот, тут типа код есть как запустить, подождать, закрыть. Что есть что разбирайся сам, мне лень.

procedure TForm1.Button1Click(Sender: TObject);
var si:STARTUPINFO;
pi:PROCESS_INFORMATION;
cmdline:string;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
cmdline:="c:\command.com";
if not CreateProcess( nil, // No module name (use command line).
PChar(cmdline), // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
nil, // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then
begin
ShowMessage( "CreateProcess failed." );
Exit;
end;
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
ShowMessage("Done !");
end;

Для того чтобы найти само окно надо как уже сказали

var WD: hWnd;
WD:= FindWindow(nil, "Window");

Что бы найти кнопку, эдит и д.т. то вот:

var h2:HWND;
h2:=FindWindowEx(h,0,nil,"Название того, что хочешь найти");

Имя класса можно не указывать, всё равно названия обычно не повторяются
Если это кнопка то:

SendMessage(h2,BM_CLICK,0,0);

А как вводить текст в едит я забыл.


 
Prov ©   (2003-11-14 10:31) [8]

Ввести текст в эдит можно так: SetWindowtext



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

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
1-63106
Evgeniy_K
2004-01-07 19:55
2004.01.20
Глюк TSpeedButton


1-63097
SergP
2004-01-06 22:18
2004.01.20
Как восстановить (разархивировать) данные сжатые GZIP ом?


1-63158
Rimd
2004-01-06 16:51
2004.01.20
Rave Report


1-63109
Novic
2004-01-08 12:46
2004.01.20
Блокировать папку


1-63095
Unax
2004-01-07 11:15
2004.01.20
Kylix 3