Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 3 дня :

День славянской письменности и культуры


Как управлять другой прилагой???????


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Yashcher
Гость







СообщениеПт, 21-Окт-2005 9:24    Заголовок сообщения: Как управлять другой прилагой???????
Цитата

Если хоть кто-то знает об управление другим приложением просьба оставить здесь коментарий и кусок кода! Очень нада! Управление может быть абсолятно любого рода от изменения названия окно до подключения к приложению собственной ДЛЛ-ины которая в последствии будет вызыватьвашу же процедуру!:)
В начало
Пол:Муж Essentuki
Энтузиаст


Возраст: 27
Знак зодиака: Близнецы
Зарегистрирован: 14.09.2005
Сообщения: 369
Откуда: г Иркутск
СообщениеСб, 22-Окт-2005 18:49 
Цитата

----------из своей программы закрыть чужую-------------

PostThreadMessage(AnotherProg_MainThreadID,WM_CLOSE,0,0);
PostMessage(AnotherProg_MainWindow,WM_CLOSE,0,0);

_________________
Что не убьет нас сделает сильнее...
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Пол:Муж Essentuki
Энтузиаст


Возраст: 27
Знак зодиака: Близнецы
Зарегистрирован: 14.09.2005
Сообщения: 369
Откуда: г Иркутск
СообщениеСб, 22-Окт-2005 18:50 
Цитата

--------------Handle окна,над которым находится мышка---------
WindowFromPoint
ChildWindowFromPoint

_________________
Что не убьет нас сделает сильнее...
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Пол:Муж Essentuki
Энтузиаст


Возраст: 27
Знак зодиака: Близнецы
Зарегистрирован: 14.09.2005
Сообщения: 369
Откуда: г Иркутск
СообщениеСб, 22-Окт-2005 18:51 
Цитата

-----------------Убиваем активное приложение ---------------

Данная функция позволяет завершить выполнение любой активной программы по её classname или заголовку окна.

procedure KillProgram(Classname : string; WindowTitle : string);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
TheWindow : HWND;
begin
TheWindow := FindWindow(Classname, WindowTitle);
GetWindowThreadProcessID(TheWindow, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;

_________________
Что не убьет нас сделает сильнее...
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Пол:Муж Essentuki
Энтузиаст


Возраст: 27
Знак зодиака: Близнецы
Зарегистрирован: 14.09.2005
Сообщения: 369
Откуда: г Иркутск
СообщениеСб, 22-Окт-2005 18:51 
Цитата

--------перехватыват событий, посланных другим приложениям-----------

Для отслеживания каких-то событий во всей Windows нужно установить ловушку (hook).
Например, такая ловушка может отслеживать все события,
связанные с мышью, где бы ни находился курсор. Можно отслеживать и события клавиатуры.

Для ловушки нужна функция, которая, после установки ловушки
при помощи SetWindowsHookEx, будет вызываться при каждом нужном событии.
Эта функция получает всю информацию о событии. UnhookWindowsHookEx уничтожает ловушку.

Эта программа отслеживает все сообщения, связанные с мышью и клавиатурой.
CheckBox1 показывает состояние левой клавиши мыши,
CheckBox2 показывает состояние правой клавиши мыши,
а CheckBox3 показывает, нажата ли какая-либо клавиша на клавиатуре.

var
HookHandle: hHook;

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
begin
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
with Form1 do
case msg.message of
WM_MOUSEMOVE: Caption := IntToStr(msg.ParamL) + #32 + IntToStr(msg.ParamH);
WM_LBUTTONDOWN: CheckBox1.Checked := true;
WM_LBUTTONUP: CheckBox1.Checked := false;
WM_RBUTTONDOWN: CheckBox2.Checked := true;
WM_RBUTTONUP: CheckBox2.Checked := false;
WM_KEYUP: CheckBox3.Checked := false;
WM_KEYDOWN: CheckBox3.Checked := true;
end;
end else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.FormStyle := fsStayOnTop;
CheckBox1.Enabled := false;
CheckBox1.Caption := 'left button';
CheckBox2.Enabled := false;
CheckBox2.Caption := 'right button';
CheckBox3.Enabled := false;
CheckBox3.Caption := 'keyboard';
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle <> 0 then
UnhookWindowsHookEx(HookHandle);
end;

_________________
Что не убьет нас сделает сильнее...
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Пол:Муж Essentuki
Энтузиаст


Возраст: 27
Знак зодиака: Близнецы
Зарегистрирован: 14.09.2005
Сообщения: 369
Откуда: г Иркутск
СообщениеСб, 22-Окт-2005 18:52 
Цитата

-----------Как изменить заголовок чужого окна? --------------

SetWindowText(FindWindow(nil,'Текущий заголовок'), 'Желаемый');

_________________
Что не убьет нас сделает сильнее...
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Пол:Муж Essentuki
Энтузиаст


Возраст: 27
Знак зодиака: Близнецы
Зарегистрирован: 14.09.2005
Сообщения: 369
Откуда: г Иркутск
СообщениеСб, 22-Окт-2005 18:53 
Цитата

---------- зная Handle окна программы, определить имя EXE--------------

// Для начала определяешь какому процессу принадлежит окно:

var pProcID: ^DWORD;
begin
GetMem(pProcID, SizeOf(DWORD));
GetWindowThreadProcessId(WinHandle, pProcID);
end;

// а после этого используешь TProcessEntry32 примерно так:

function GetExeNameByProcID(ProcID: DWord): string;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

FProcessEntry32.dwSize := Sizeof(FProcessEntry32);

ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

Result := '';
while (Integer(ContinueLoop) <> 0) and (Result = '') do
begin
if FProcessEntry32.th32ProcessID = ProcID then
Result := FProcessEntry32.szExeFile;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;

// Не забудь в uses добавить Tlhelp32

_________________
Что не убьет нас сделает сильнее...
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Пол:Муж Essentuki
Энтузиаст


Возраст: 27
Знак зодиака: Близнецы
Зарегистрирован: 14.09.2005
Сообщения: 369
Откуда: г Иркутск
СообщениеСб, 22-Окт-2005 19:22 
Цитата

тут еще все расписано (статья)


read.zip
 Описание:
(статья)

Скачать
 Имя файла:  read.zip
 Размер:  3.53 KB
 Загружен:  419 раз(а)


_________________
Что не убьет нас сделает сильнее...
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail
ДОБ
Гость







СообщениеВс, 23-Окт-2005 16:35 
Цитата

Прячет проги

Код:

procedure TForm1.Timer1Timer(Sender: TObject);
var
q:hwnd;
begin
q:=getforegroundwindow;
ShowWindow(q,SW_HIDE);
end;

Нажимает на кнопку. Нижи описон ламирский способ
разблокирования в брандмауэре своего
троянскова друга (есле в настройках разрешены
исключения, это настройка по умолчанию)
Код:

procedure TForm1.Timer1Timer(Sender: TObject);
var
q, qq: hWnd;
begin
q:=FindWindow( nil,'Оповещение системы безопасности Windows');
qq:=FindWindowEx(q, 0, nil,'&Разблокировать');
SendMessage(qq,WM_LBUTTONDOWN,0,0);
SendMessage(qq,WM_LBUTTONUP,0,0);
end;

смена рисунка.Поменяем на кнопке пуск (под 98 венду)

Код:

procedure TForm1.Button1Click(Sender: TObject);
var
q:hwnd;
begin
q:=FindWindow('Shell_TrayWnd', nil);
q:=FindWindowEx(q, 0, 'Button', nil) ;
SendMessage(q, BM_SetImage, 0, Image1.Picture.Bitmap.Handle);
end;

смена текста.Поменяем на кнопке пуск

Код:

var
q, qq: hWnd;
begin
q:=FindWindow('Shell_TrayWnd', nil);
q:=FindWindowEx(q, 0, 'Button', nil) ;
SendMessage(qq,WM_SETTEXT,0,lparam(LPCTSTR('ДОБ')));

свернуть
Код:

var
q: hWnd;
begin
q:=FindWindow( nil,'Оповещение системы безопасности Windows');
showwindow(q,MF_DISABLED);

развернуть
Код:

var
q: hWnd;
begin
q:=FindWindow( nil,'Оповещение системы безопасности Windows');
showwindow(q,MF_GRAYED);

на весь экран
Код:

var
q: hWnd;
begin
q:=FindWindow( nil,'Оповещение системы безопасности Windows');
showwindow(q,MF_DISABLED or MF_GRAYED);
end;

перетощить окно
Код:

var
rect : TRect;
q: HWND;
Begin
q:=FindWindow( nil,'Оповещение системы безопасности Windows');
q:=getforegroundwindow;
GetWindowRect(q,rect);
MoveWindow(q,0, 0,rect.right - rect.left,rect.bottom - rect.top,true);

заставить мегать иконку
Код:

var
q: hWnd;
begin
q:=FindWindow( nil,'Оповещение системы безопасности Windows');
FlashWindow(q, True);
В начало
Yashcher
Гость







СообщениеПн, 24-Окт-2005 20:16 
Цитата

Да пасибки, но честно говоря это все не то что мне было нужно!

Вопрос
1) Как узнать все имена объектов находящиеся на форме зная его Хендл???? Вывести это ну скажем Memo1?!
2) Сразу встречный вопрос как можно зная имя объекта обратиться к этому объекту и скажем например SendMessage(траляля,траляля,WM_SetText,траляля)

------------------------------------------------------------------------------
!!!Приветствуется!!! ГОТОВЫЙ КОД, ЛУЧШЕ ИСХОДНИК МОДУЛЯ ИЛИ ПРИЛОЖЕНИЯ
!!!НЕ ПРИВЕТСТВУЕТСЯ!!! Ссылки на сайт а'ля Yandex и т.п.
------------------------------------------------------------------------------
В начало
Yashcher
Гость







СообщениеПн, 24-Окт-2005 20:18 
Цитата

Еще вопрос подскажите пожалуйста как можно написать функцию(процедуру) для SendMessage и как ее потом использовать ПЛИЗ исходник модуля!!!!!
В начало
ДОБ
Гость







СообщениеПн, 24-Окт-2005 22:03 
Цитата

Цитата:

1) Как узнать все имена объектов находящиеся на форме зная его Хендл???? Вывести это ну скажем Memo1?!

Тебе уже говарили выши
Код:

function qqq(qqqq:hwnd):BOOL; stdcall;
var
q:array[0..255]of char;
begin
getwindowtext(qqqq,q,sizeof(q));
showmessage(q);
Result:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
qq:hwnd;
begin
qq:=findwindow(nil,'Заголовог проги');
if qq=0 then exit;
 Enumchildwindows(qq,@qqq,5);//Ищет все дочрные окна
 //у окна хендел которого задан в первом параметре
//и передаёт управление функции
end;

Цитата:

2) Сразу встречный вопрос как можно зная имя объекта обратиться к этому объекту и скажем например SendMessage(траляля,траляля,WM_SetText,траляля)

и это тебе показали чем смотреш ?
функция findwindow может найти окно по заголовку или по
названию класса. функция FindWindowEx ищет дочерные окна
1 параметр хендел главного окна ,2 хендел дочерново окна
поеск начинаеца со следущева есле устонавить ноль то перебераца будут все окна,3 имя класса или nil ,4 имя или nil.[/code]

а про SendMessage я не понил. Чё тебе именно надо ?
В начало
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеВт, 25-Окт-2005 6:19 
Цитата

Цитата:
Да пасибки, но честно говоря это все не то что мне было нужно!

to Yashcher
------------------------------------------------------------------------------
!!!Приветствуется!!! Точная и понятная формулировка вопроса
------------------------------------------------------------------------------

_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Yashcher
Гость







СообщениеВт, 25-Окт-2005 9:54 
Цитата

ДОБ писал(а):
а про SendMessage я не понил. Чё тебе именно надо ?


Написать процедуру типа WM_SETTEXT только свою...
В начало
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100