PDA

Просмотр полной версии : отправка нажатия клавиш в свёрнутое окно


Meg(0)
15.05.2012, 18:16
здравствуйте,подскажите пожалуйста,как в отправить нажатие клавиши в свёрнутое окно??
вот написал такое:

v:=FindWindow(nil, PChar(Edit1.Text));
postMessage(v, wm_char, VK_TAB, 0);

но нажатие происходит,только когдда окно активно, а в свёрнутое ничего не послает..

Kitsune
15.05.2012, 18:25
Meg(0), сначала окно разморозить надо.

Meg(0)
15.05.2012, 21:37
а как его разморозить через делфи?

zaparca
15.05.2012, 21:45
найти Unfreeze адрес для ПВ это
Unfreeze=00420204 (84 C0 > B0 01) /B0 00 - заморожен/ или 00420206 (88 75 > C6 01)
или UnfreezeFlag
9C1984 - UnfreezeFlag (0 - Inactive; 1 - Active)
адрес старый

krukovis
15.05.2012, 22:01
а как его разморозить через делфи?
Можно разморозить моим патчером. У меня в подписи.

AEBus
16.05.2012, 00:14
сначала окно разморозить надо.
если через инжекты можно и не размораживать

Kitsune
16.05.2012, 00:42
если через инжекты можно и не размораживать
Инжект нажатия клавиши? /kidding

Meg(0)
16.05.2012, 01:39
найти Unfreeze адрес для ПВ это

или UnfreezeFlag

как это записать?

я записал,что:
unfreeze_flag: Byte;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
v:=FindWindow(nil, PChar(Edit1.Text));
unfreeze_flag := 1;
PostMessage(v, WM_KEYDOWN, VK_F1, 0);

но ничего не размораживается..

а если так,то не выходит..вообще ошибку пишет..(

procedure Tform1.unfreeze;
var
BytesCountOfWrite: DWORD;
begin
unfreeze_flag := 1;
WriteProcessMemory(hProcess, ptr(unfreeze_addr), @unfreeze_flag, 1, BytesCountOfWrite);
end;

Zo_Om4eG
16.05.2012, 06:42
Попробуй так.

var
unfreeze_flag: Byte;
unfreeze_addr: dword;
ProcessId, hProcess: Integer;
Wnd: HWND;
begin
Wnd:=FindWindow('Elementclient Window', nil);
if Wnd <> 0
then
begin
unfreeze_flag:=1;
GetWindowThreadProcessId(Wnd,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,Pro cessId);
WriteProcessMemory(hProcess, ptr(unfreeze_addr), @unfreeze_flag, 1, BC);
end;
end;

AEBus
16.05.2012, 09:28
Инжект нажатия клавиши?
инжект нужного действия, он же чего то хочет добиться нажимая ту или иную клавишу

Kitsune
16.05.2012, 09:49
Nitrogen, проще кнопку послать, чем инжект делать ;)

Meg(0)
16.05.2012, 15:28
Zo_Om4eG, во...спасибо, очень помогло))

Добавлено через 8 часов 31 минуту
ничё не пойму... запустил,всё работает как надо,выключил,снова запустил,не работает... как и раньше если окно активно,то нажимает кнопочку,видимо не размораживается?
procedure TForm1.Timer1Timer(Sender: TObject);
var
v:HWnd;
unfreeze_flag: Byte;
unfreeze_addr: dword;
ProcessId, hProcess: Integer;
BC : dword;
begin

v:=FindWindow(nil, PChar(Edit1.Text));
if v <> 0 then
begin
v:=FindWindow(nil, PChar(Edit1.Text));
unfreeze_flag:=1;
GetWindowThreadProcessId(v,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,Pro cessId);
WriteProcessMemory(hProcess, ptr(unfreeze_addr), @unfreeze_flag, 1, BC);
unfreeze_flag:=1;
PostMessage(v,WM_KEYDOWN,VK_F1,0);

dwa83
17.05.2012, 04:26
видимо не размораживается?
Когда окно не в фокусе, анимация в нём идёт? Если нет то не разморозилось, если даже если фокус на другом окне, но анимация в окне ПВ идёт, то разморозилось.

Meg(0)
17.05.2012, 15:48
Когда окно не в фокусе, анимация в нём идёт? Если нет то не разморозилось, если даже если фокус на другом окне, но анимация в окне ПВ идёт, то разморозилось.

нет анимации,значит не размораживается(

попробуйте плиз кто-нить этот код..(

есть адрес unfreez flaga (00A57F3C) как его можно использовать?

unfreeze_addr := ReadAddr ('Base', 'unfreeze_addr', $00A57F3C));

поидее так,но почему показывается ошибка в ReadAddr ?

dwa83
17.05.2012, 18:56
ReadAddr чситывает значения (read=чтение) а не записывает в память.
unfreeze_addr := ReadAddr ('Base', 'unfreeze_addr', $00A57F3C));
почему тут в параметрах строки "Base" и "Unfreeze_adr"? почему 2 закрывающие скобки?

Итак, открываем OllyDbg. Подключаемся к ПВ. Жмём F9, чтобы продолжить выполнение клиента. Жмём ctrl+g, вводим адрес поиска, тот что выделен
Unfreeze=00420204 (84 C0 > B0 01) /B0 00 - заморожен/ или 00420206 (88 75 > C6 01)
Видим опкод и соответствующие команды:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь щёлкнем правой кнопкой по данной строчке. Выьерем Edit->Bynary edit. В нижнем поле вводим B001.
Получаем:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Развернём окно ПВ и перейдём на другое окошко. Картинка в ПВ двигается? да, разморозили вручную. Теперь по этому адресу нужно записать программно эти самые B0 и 01. Есть у вас функция WriteAddr? Записываем в переменную типа DWORD значение 01B0 (hex) или 432(dec) и пишем(Write) из неё двухбайтовое значение по тому адресу что указан выше. Тем самым мы меняем код клиента так, чтобы после проверки на неактивность окна у нас не происходила его заморозка(посути проверку мы убираем и пишем однозначное 01-разморожен. Если записать 00, будет заморожено всегда). Или записать по адресу 00420204 значение B0 и по следующему адресу 00420205 пишем 01, так же разморозится.

Zo_Om4eG
17.05.2012, 21:14
Meg(0),

var
unfreeze_flag: Byte;
unfreeze: dword;
ProcessId, hProcess: Integer;
Wnd: HWND;
begin
Wnd:=FindWindow('Elementclient Window', nil);
if Wnd <> 0
then
begin
unfreeze_flag:=1;
unfreeze:=$B0;
GetWindowThreadProcessId(Wnd,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,Pro cessId);
WriteProcessMemory(hProcess, ptr($00420204), @unfreeze, 1, BC);
WriteProcessMemory(hProcess, ptr($00420205), @unfreeze_flag, 1, BC);
end;
end;

Meg(0)
17.05.2012, 22:19
WriteAddr? Записываем в переменную типа DWORD значение 01B0 (hex) или 432(dec) и пишем(Write) из неё двухбайтовое значение по тому адресу что указан выше

не знаю,как записать это...
writeaddr пишется так?
WriteAddr := VirtualAllocEx(hProcess, 0, CodeSize, MEM_COMMIT, PAGE_READWRITE);

WriteAddr:= ('01B0','00420204', B0); - но это совсем какой-то бред..(


окно разморозилось,но всёравно отправляет только в активное окно

а.. это если несколько окон одинакового имени,то тогда работает только то,что активно,а если разные имена,то и свёрнутое работает

ASDitsh
22.10.2012, 02:49
Всем доброго времени суток!
Объясните, пожалуйста, каким образом "UnfreezeFlag=00A57F3C" связан с "Unfreeze=00420204 (84 C0 > B0 01)"?
Точнее, как программно получить Unfreeze, зная UnfreezeFlag?

Ginrey
08.02.2013, 19:09
Точнее, как программно получить Unfreeze, зная UnfreezeFlag?
Странный вопрос, Unfreeze - это сам адресс, а UnfreezeFlag это разморожено окно или нет (1 или 0). Через CE можно путем отсеивания найти данный адресс