CRACKL@B Оригинальный DVD-ROM крэкера: CRACKL@B DVD !
Домой | Статьи | RAR-cтатьи | Форум | Программирование | Скачать | DVD-ROM
Новичку | FAQ | Ссылки | Интервью | Архив | Новости | Связь


Русский / Russian English / Английский

Сейчас на форуме: crypto, RaMMicHaeL, Ara, gudvin2, gorelkin (+6 невидимых пользователей)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 CRACKL@B —› Оффтоп —› Ламерская задача покодить
Посл.ответ Сообщение
AlexZ

Ранг: 179.8 (ветеран)
Статус: Участник
UPX Killer -d

Создано: 4 мая 2008 22:49:22
Личное сообщение #1

Столкнулся с такой задачей, как эмулирование действий пользователя. Конкретно - надо даблкликнуть по часам в трее, и получить соответствующий эффект. Надо сказать, не ожидал такого подвоха - никак не получилось проэмулировать.
Окошки отыскал, хендлы правильные, но заслать туда даблклик - нивкакую.

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

XP, SP1

-----
Firefox!
Ara


Ранг: 1165.3 (!!!!)
Статус: Модератор

Создано: 5 мая 2008 00:54:56 · Поправил: Ara
Личное сообщение #2

invoke SendMessage,hWnd,WM_LBUTTONDBLCLK,0,0
tundra37

Ранг: 248.8 (наставник)
Статус: Участник

Создано: 5 мая 2008 09:01:52
Личное сообщение #3

Ara spy++ показывает, что часики даблклик не получают Трей их тоже не получает...
tihiy_grom

Ранг: 199.3 (ветеран)
Статус: Участник

Создано: 5 мая 2008 09:17:00
Личное сообщение #4

AlexZ
Я смотрел в WinSight - трэй (именно весь трэй, а не область часов) получает кучу сообщений на нажатии мышкой (WM_MouseActivate, WM_ActivateApp, WM_NCActivate и т.д.). Попытался в таком же порядке их передавать, но скорее всего туплю с передачей WParam и LParam
Ara


Ранг: 1165.3 (!!!!)
Статус: Модератор

Создано: 5 мая 2008 09:54:33
Личное сообщение #5

Во, точно У мну просто там AlfaClock висела
Stack

Ранг: 107.5 (ветеран)
Статус: Участник

Создано: 5 мая 2008 13:00:06
Личное сообщение #6

Гдето я видел чтото похожее часы это дочернее окно поэтому handle не действителен
попробуй получать хэндл так и на него слать
Wnd := FindWindow('Shell_TrayWnd', nil);
Wnd := FindWindowEx(Wnd, HWND(0), 'TrayNotifyWnd', nil);
Wnd := FindWindowEx(Wnd, HWND(0), 'TrayClockWClass', nil);

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74
AlexZ

Ранг: 179.8 (ветеран)
Статус: Участник
UPX Killer -d

Создано: 5 мая 2008 14:56:50
Личное сообщение #7

Stack
В моём первом комменте сказано, что хендлы найдены правильно. Плюс к тому, в том же комменте обозначено, что для упрощения задачи можно не заниматься отыскиванием хэндлов, потому что задача состоит не в поиске хендлов.
Вариантов посика окошек здесь два (мне известных). Через FindWindow и через Enum'ы. Ещё, наверное можно получить виндов под курсором мыши

tihiy_grom
Я пробовал через подведение курсора к окошку и через передачу координат в Param'е. И оба варианта сразу. Не проходит =(

Чуть позже для проверки решил покликать по ярлыкам десктопа и чёт тоже не получилось, но десктоп я забросил, ибо с часами в трее уже наморочился.

-----
Firefox!
Spirit


Ранг: 270.6 (наставник)
Статус: Участник

Создано: 6 мая 2008 08:50:14
Личное сообщение #8

Можно сделать
SetCursorPos(99999,99999);
GetCursorPos(xy);
SetCursorPos(xy.x-10,xy.y-5);
и
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Кодес действительно ламерский, но зато без использования хэндлов и 100% рабочий

-----
iNTERNATiONAL CoDE CReW
AlexZ

Ранг: 179.8 (ветеран)
Статус: Участник
UPX Killer -d

Создано: 6 мая 2008 16:56:01
Личное сообщение #9

Хм, как-то не подумал про маус- и киборд- (на всякий) эвенты.
А точно, работает. Только надо кликнуть три раза, чтобы первый раз установить фокус ввода и после первого клика поспать милисек так с сотню.

-----
Firefox!
tihiy_grom

Ранг: 199.3 (ветеран)
Статус: Участник

Создано: 6 мая 2008 19:05:38
Личное сообщение #10

все таки интересно, как послать последовательность сообщений трэю без подвода мышки.
AlexZ, пипец ты задачку задал до сих пор колупаюсь
AlexZ

Ранг: 179.8 (ветеран)
Статус: Участник
UPX Killer -d

Создано: 6 мая 2008 22:21:07 · Поправил: AlexZ
Личное сообщение #11

tihiy_grom
Теоритически, в WM_LBUTTONDBLCLK (и может ещё кой где) надо засылать lParam как двойное слово, в котором старшее слово - координата икс, младшее слово - координата игрек.
Но если бы всё так просто.
Кстати, щас покликаю по десктопу через маусэвенты )

О, кликается десктоп. Теперь надо юзать эвенты

-----
Firefox!
tihiy_grom

Ранг: 199.3 (ветеран)
Статус: Участник

Создано: 6 мая 2008 22:44:56
Личное сообщение #12

AlexZ
а в WParam что должно быть? или пустой надо передавать?
AlexZ

Ранг: 179.8 (ветеран)
Статус: Участник
UPX Killer -d

Создано: 6 мая 2008 23:12:28
Личное сообщение #13


WM_LBUTTONDBLCLK
fwKeys = wParam; // key flags
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor

fwKeys

Value of wParam. Indicates whether various virtual keys are down. This parameter can be any combination of the following values:

Value Description
MK_CONTROL Set if the CTRL key is down.
MK_LBUTTON Set if the left mouse button is down.
MK_MBUTTON Set if the middle mouse button is down.
MK_RBUTTON Set if the right mouse button is down.
MK_SHIFT Set if the SHIFT key is down.


-----
Firefox!
MACKLIA


Ранг: 279.1 (наставник)
Статус: Участник
wizard

Создано: 7 мая 2008 19:45:46 · Поправил: MACKLIA
Личное сообщение #14

Spirit пишет:
Можно сделать
SetCursorPos(99999,99999);
GetCursorPos(xy);
SetCursorPos(xy.x-10,xy.y-5);
и
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Кодес действительно ламерский, но зато без использования хэндлов и 100% рабочий


Нет не на 100%,у меня рабочий стол растянут на два монитора,а часики на первом
А зачем именно по часам кликать ,timedate.cpl запустить и сЁ - результат тотже

-----
Что один человек сделал , другой всегда сломать может...
tihiy_grom

Ранг: 199.3 (ветеран)
Статус: Участник

Создано: 7 мая 2008 19:53:44
Личное сообщение #15

MACKLIA
что-то типа этого тебе поможет
var
r: TRect;
begin
GetWindowRect( "хэндл часов" , r);
SetCursorPos(r.left+10,r.top+5);
end;
AlexZ

Ранг: 179.8 (ветеран)
Статус: Участник
UPX Killer -d

Создано: 7 мая 2008 20:24:11
Личное сообщение #16

MACKLIA пишет:
А зачем именно по часам кликать ,timedate.cpl запустить и сЁ - результат тотже

Ну, задача вот такая. Заэмулировать действия юзверя.
Например у меня, на это тимедате.цпл открывается древнючий ресторатор, с внутренностями самого тимедате.

-----
Firefox!
tihiy_grom

Ранг: 199.3 (ветеран)
Статус: Участник

Создано: 7 мая 2008 20:42:35
Личное сообщение #17

AlexZ
Посмотри программки, типа E-Motion, AutoClickExtreme - они записывают все действия пользователя и потом их воспроизводят. Распотроши и посмотри как там это реализовано
 CRACKL@B —› Оффтоп —› Ламерская задача покодить

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

    Для печати 


Оригинальный DVD-ROM крэкера: CRACKL@B DVD !


Вы находитесь на форуме сайта CRACKLAB.RU
Проект ReactOS