Форум: "WinAPI";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c