IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   delphi, управление чужим приложением (https://www.imho.ws/showthread.php?t=123985)

nudlles 24.09.2007 16:45

delphi, управление чужим приложением
 
delphi, управление чужим приложением. Нужна информация, желательно подробная.

sflash 02.10.2007 13:45

Что конкретно имеется ввиду?

fockewulf 02.10.2007 16:26

технология называется COM (Componrnt Object Model) попробуй поискать с таким запросом

sflash 03.10.2007 10:48

Через COM можно управлять только если само то приложение поддерживает COM.

nudlles 03.10.2007 14:37

смысл заключается в том, чтобы передавать определенные команды, как будто они происходят от имени пользователя, но проблема состоит в том, что при использовании функций findwindow(ex) не находится окно и кнопки.
TApplication-TForm1-TPanel Вот что показывает Winsight. Так вот в этой цепочке TApplication я нахожу, а вот TForm1 нет. Кроме того еще winsight не показывает кнопки после TPanel.

nudlles 03.10.2007 14:48

Вот что выдает WinSight
 
Вложений: 1
Прикрепил картинку...

yan_kos 08.10.2007 20:23

2 nudlles
0. найди утилитку Spy++ идет в поставке с VS6.0 оч полезная вещь, фактически позволяет определить тип, ид, имя любого окна в Винде.
1. Потом посмотри еще такие ф-и GetNextWindow, GetWindow, GetDesktopWindow... как точно ими пользоваться щас не скажу, смотри MSDN...

sflash 26.10.2007 14:59

Цитата:

смысл заключается в том, чтобы передавать определенные команды, как будто они происходят от имени пользователя
Мне кажеться тут надо копаться в сторону сообщений, ведь каждое действие пользователя, будь то нажатие кнопки, перемещение мышки вызывает сообщение windows (Windows Message) в активное окно, а оно уже обрабатывает его типа так:
Перемещение мышки вниз - сообщение WM_MOUSE_DOWN
Перемещение мышки вправо - сообщение WM_MOUSE_RIGHT
Нажатие левой кнопки на мышке - сообщение WM_MOUSE_KEYCLICK_1
Нажатие кнопки - сообщение WM_KEY_DOWN
Отжатие кнопки - сообщение WM_KEY_Up
клик по кнопке - сообщение WM_KEY_PRESS и т.д.
код кнопки смотриться отдельной функцией , к тому же там очередь
Короче подробней поищи данную инфу.
Вот если научишься передавать данные сообщение приложению то тогда поимеешь контроль над ним.

alexey_ma 30.10.2007 13:56

Для полной эмуляции мыши и клавиатуры вместо посылки сообщений лучше использовать функции :
mouse_event
keybd_event
или заменяющую обе эти функции - SendInput

Однако хочу сказать что задача нетривильная. Даже коммерческие программы которые делают автоматизацию GUI не работают в некоторых случаях.

PS : Могу подогнать примеры поиска окон и эмуляции действий юзера, но не дельфи а на C++

sflash 26.11.2007 09:23

Цитата:

Однако хочу сказать что задача нетривильная. Даже коммерческие программы которые делают автоматизацию GUI не работают в некоторых случаях.
Мне кажется что это из за реализации этих программ, они могут работать не по стандартным событиям Windows, а по своим. Это не сложно сделать, просто дополнительный код. Вот тогда да, не зная этих событий ессно их и не передашь.

LAndrew2 29.12.2007 01:04

господа, есть след. задача: при старте своей программы запустить стороннюю программу и сделать её "частью" своей. А именно: скрыть заголовок, поместить окно чужой программы "на форму" своей программы, сделать так, чтоб при изменении положения своей программы сохранялось положение чужой программы относительно формы, чтоб при сворачивании моей формы — чужое тож сворачивалось, при восстановлении — восстанавливалось и т.п.
есть готовое решение?

если нет, подскажите плз хотя бы с первой частью — как запустить программу — это понятно. но как потом у неё скрыть заголовок?

спасибо всем заранее.

sflash 06.03.2008 12:20

Опять же делается через события.
CreateProcess
RunProcess - потом получаешь хендл (Handle) процесса
Затем этому процеccу по его хендлу передаешь события Minimize и Maximize соответсвенно при сворачивании и разворачивании своей программы.

Про скрытие заголовка. Когда у тебя будет хендл окна, сделаешь с ним что хочешь. Хочть зеленым цветом закрась все :)

Nerey_ser 07.03.2008 19:51

Код:

Public Sub StickWindow(ParentWindow As Long, ChildWindow As Long, Optional ByVal NoActivate As Boolean = True, Optional ByVal NoShow As Boolean = False)
  Dim Style As Long
 
  Style = GetWindowLong(ChildWindow, GWL_STYLE)
  Style = Style Or WS_CHILD
  SetWindowLong ChildWindow, GWL_STYLE, Style
 
  SetParent ChildWindow, ParentWindow
  SetWindowLong ChildWindow, GWL_HWNDPARENT, ParentWindow
 
  Style = SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE
 
  If NoActivate Then Style = Style Or SWP_NOACTIVATE
  If Not NoShow Then Style = Style Or SWP_SHOWWINDOW
  SetWindowPos ChildWindow, _
    HWND_TOP, 0&, 0&, 100, 100, _
    Style
End Sub

Вот это код на VB. Что он делает: делает чужое окно дочерним к нужному, т.е. "цепляет" его и делает частью.
Объявления функции тоже могу выковырять, но, опять же, на VB.

А вообще, лучше оращаться на форумы, посвященные программированию
sflash, не обижайся, но WM_MOUSE_DOWN - опускание кнопки мыши, а WM_MOUSE_RIGHT вообще такого не знаю.

helldomain 07.03.2008 23:28

Poprobuite podumat o reshenijah w duhe Automation ili o freimworkah.

sflash 11.03.2008 09:12

Цитата:

sflash, не обижайся, но WM_MOUSE_DOWN - опускание кнопки мыши, а WM_MOUSE_RIGHT вообще такого не знаю.
Писал по памяти, может что то и перепутал ;) Так что не смотри на эту информацию как на 100% верную, я только так сказать указал путь, где копать.


Часовой пояс GMT +4, время: 15:10.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.