![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как нажать кнопку чужого приложения.
Тоха © (2006-06-26 06:51:00)Собственно сабж.
Мне надо нажать кнопку в чужом приложении, скрытно от пользователя (это не хакерство, упоси господь).
Поможите плиз.
Тоха (2006-06-27 06:29:00) [1]Спасибо всем, очень помогли.
> Для этого не надо кнопки нажимать. Для этого есть ключи.
Нету ключей. В том то и дело.
вот нашел примерчик:
==============
function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
var
szFull: array[0..MAX_PATH] of Char; //Buffer for window caption
begin
Result := Wnd 0;
if Result then
begin
GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer
if (Pos(SL[0], StrPas(szFull)) > 0) // Test for text
and (SL.IndexOfObject(TObject(Wnd)) < 0) // Test for duplicate handles
then SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list
EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); //Recurse into child windows
end;
end;
function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean;
var
SL: TStringList;
H: hWnd;
begin
SL := TStringList.Create;
try
SL.AddObject(ButtonCaption, nil); // First item in list is text to find
EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL));
H := 0;
case SL.Count of
1: ShowMessage('Window text not found.');
2: H := hWnd(SL.Objects[1]);
else
ShowMessage('Ambiguous text detected.');
end;
finally
SL.Free;
end;
Result := H 0;
if Result then PostMessage(H, BM_CLICK, 0, 0);
end;
// Rememeber the ampresand for underlined characters
// if the 'c' is underlined, then the text is '&click'
==============
Medved (2006-06-26 20:10:00) [2]http://unattended.oszone.net/
http://unattended.msfn.org/
http://www.autoitscript.com/autoit3/
http://www.nncron.ru/index_ru.shtml
evvcom (2006-06-26 14:42:00) [3]Для этого не надо кнопки нажимать. Для этого есть ключи.
Тоха (2006-06-26 14:36:00) [4]Спасибо. Буду пробовать.
Действительно не хакерство. Это что бы в своей же сети на работе развернуть приложение. А пользователю - это нафиг не надо.
Плохиш (2006-06-26 13:58:00) [5]
> Плохиш © (26.06.06 13:57) [7]
Пардон, ключ " -s", клавиатуру забыл переключить :-)
Плохиш (2006-06-26 13:57:00) [6]
> Тоха © (26.06.06 11:41) [3]
> Мне надо сделать что инсталяшка другого производителя шла
> в скрытом (полускрытом) состоянии.
Используй ключ "-с" при запуске "инсталяшки другого производителя"
ANB (2006-06-26 13:42:00) [7]
> Тоха © (26.06.06 11:41) [3]
Смотреть FindWindow. Надежнее будет EnumWindows (если запускаешь инсталляшку через CreateProcess, то сможешь фильтровать окна по ProcessID, чтобы случайно не поймать другое).
Handle (2006-06-26 12:08:00) [8]
> Мне надо сделать что инсталяшка другого производителя шла
> в скрытом (полускрытом) состоянии
А помоему хакерство
Handle (2006-06-26 12:05:00) [9]
> Мне надо нажать кнопку в чужом приложении
В каком приложении?
> как этот хэндл узнать
Например вот так
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption:= ( IntToStr (WindowFromPoint(Mouse.CursorPos)));
end;
Тоха (2006-06-26 11:41:00) [10]Мне надо сделать что инсталяшка другого производителя шла в скрытом (полускрытом) состоянии.
Тоха (2006-06-26 11:36:00) [11]Спасибо. Извените за наглость, и за то что не в том разделе написал, но можно небольшой примерчик, как этот хэндл узнать?
Плиз. Ну очень нада.
Handle (2006-06-26 11:06:00) [12]
PostMessage('handle кнопки в чужом приложении' , BM_CLICK, 0, 0);