Delphi, управление на архив на чужди приложения

целта е да подадете определени команди, сякаш идват от името на потребителя

Струва ми се, че трябва да се задълбочим в съобщенията тук, защото всяко действие на потребителя, независимо дали е натискане на бутон, преместване на мишката, предизвиква съобщение на Windows (Windows Message) към активния прозорец и той вече го обработва по следния начин: Мишка надолу - съобщение WM_MOUSE_DOWN Мишка надясно - съобщение WM_MOUSE_RIGHT Натискане на левия бутон на мишката - съобщение WM_MOUSE_KEYCLICK_1 Щракване върху бутона - WM съобщение _KEY_DOWN Отпускане на бутон - WM_KEY_Up съобщение Щракване върху бутон - WM_KEY_PRESS съобщение и др. кодът на бутона изглежда като отделна функция, освен това има опашка Накратко, потърсете тази информация по-подробно. Сега, ако научите как да изпращате съобщение с данни до приложението, ще имате контрол над него.

За да емулирате напълно мишката и клавиатурата, вместо да изпращате съобщения, е по-добре да използвате функциите: mouse_event keybd_event или да замените и двете функции - SendInput

Искам обаче да кажа, че задачата не е тривиална. Дори комерсиалните програми, които правят GUI автоматизация, не работят в някои случаи.

PS: Мога да коригирам примери за търсене в прозорци и емулация на потребителски действия, но не в Delphi, а в C ++

Искам обаче да кажа, че задачата не е тривиална. Дори комерсиалните програми, които правят GUI автоматизация, не работят в някои случаи.

Струва ми се, че това се дължи на внедряването на тези програми, те могат да работят не според стандартните събития на Windows, а според собствените си. Не е трудно да се направи, само малко допълнителен код. Тогава да, без да знаете тези събития, не можете да ги предадете essno.

господа, има следа. задача: когато стартирате вашата програма, стартирайте програма на трета страна и я направете "част" от вашата собствена. а именно:скрийте заглавието, поставете прозореца на чужда програма "върху формуляра" на вашата програма, направете така, че когато промените позицията на вашата програма, позицията на чужда програма спрямо формата да се запазва, така че когато моята форма е минимизирана, чуждата също е минимизирана, когато се възстанови, тя се възстановява и т.н. Има ли готово решение?

ако не, моля, кажете ми поне с първата част - как да стартирате програмата - това е разбираемо. Но тогава как мога да скрия заглавието му?

благодаря на всички предварително.

Отново, това става чрез събития. CreateProcess RunProcess - тогава получавате манипулатора на процеса След това предавате събитията за минимизиране и максимизиране на този процес съответно чрез неговия манипулатор, когато минимизирате и разширявате вашата програма.

За скриването на заглавието. След като имате дръжка за прозорец, можете да правите каквото искате с нея. Оцветете всичко в зелено :)

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

Стил = GetWindowLong(ChildWindow, GWL_STYLE) Стил = Стил Или WS_CHILD SetWindowLong ChildWindow, GWL_STYLE, Стил

SetParent ChildWindow, ParentWindow SetWindowLong ChildWindow, GWL_HWNDPARENT, ParentWindow

Стил = SWP_NOZORDER или SWP_NOSIZE или 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 не знам нищо за това.