C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Опять нужна помощь., Клики по координатам.
Test3R
Отправлено: 18.01.2007, 20:20


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Нужно сделать программу, которая бы кликала по нужным координатам через определённое время. Перед кликом была проверка на цвет. Кликать надо будет по инет-страницам в Опере. Прошу помочь с её написанием.
aquanet sk
Отправлено: 18.01.2007, 21:56


Станционный диспетчер

Группа: Участник
Сообщений: 87



пол месяца назад делал такую же прогу, из чего вытекла моя тема http://www.rxlib.ru/forums/index.php?act=S...7cc0ccf22ec1670

А а с кликами это намучаетесь, во-первых разрешение разное везде, во-вторых надо держать Оперу на F11, чтоб ничё не мешало, так что лучше Tab-бами по кнопкам и галкам перемещаться, но остается ещё одна проблема, которую я не смог решить, надо отслеживать, когда следующая страница загрузилась, на которую я осуществлял переход, дабы не мучаться с тайм-аутами, а четко знать время, когда произвести следующий клик. НО, в Опере используется какой-т динамический элемент, ID которого я не смог отследить, и соответственно не могу получать информацию о 100% загрузке страницы.
Если согласен, давай вместе решать эту проблему.
Test3R
Отправлено: 19.01.2007, 16:24


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Разрешение у меня будет всегда одинаковое, делаю для себя прогу. А без ID разве нельзя? Можно ведь проверку на цвет поставить? И вобще, у вас есть ася?

Отредактировано Test3R — 19.01.2007, 16:25
Test3R
Отправлено: 20.01.2007, 16:54


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Всё ещё нужна помощь...

Я тут нашёл что-то:

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); // нажали левую кнопку мыши.
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); // отпустили левую кнопку мыши.

Это то, что мне надо? И объясните, какие параметры означают нули в функции mouse_event?
aquanet sk
  Отправлено: 20.01.2007, 23:50


Станционный диспетчер

Группа: Участник
Сообщений: 87



код выложу на днях, а что за проверка на цвет?
Test3R
Отправлено: 21.01.2007, 13:04


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Жду кода. smile.gif
Ну я хотел бы сделать проверку координаты на цвет перед нажатием на неё, пока не будет нужного цвета, чтоб не кликало. Сделай, если сможешь.
Test3R
Отправлено: 22.01.2007, 18:55


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Так, прогу я сделал себе. Но остался один вопрос, как сделать так, чтоб при сворачивании приложения моего, фокус клавиатуры оставался на нём?

Например, при активном окне, нажимая CTRL, я вызываю функцию. Я делаю активным другое окно и CTRL уже не вызывает функции из моего приложения, а нужно, чтоб вызывал.

Плиз, ответьте.
Test3R
Отправлено: 22.01.2007, 18:59


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Добавлю, только мне нужно, чтобы окно, приобретая фокус клавы, разворачивалось. Просто свернул моё приложения, и чтоб фокус остался в нём.
aquanet sk
Отправлено: 22.01.2007, 22:16


Станционный диспетчер

Группа: Участник
Сообщений: 87



QUOTE
Так, прогу я сделал себе
, с проверкой на цвет? выложи тогд код проверки на цвет, если не трудно, добавить хочу в свою прогу "Простых примеров".

А окно когда сворчивется, имхо, по-определению должно фокус терять, можно, например, сделать его невдимым, эффект как при сворачивани, но фокус не будет теряться.

Отредактировано aquanet sk — 22.01.2007, 22:35
Test3R
Отправлено: 23.01.2007, 13:16


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Проверку на цвет не сделал в своей проге. Мне она оказалась не столь нужна, но не помешала бы.

Поподробней про невидимость. Как я только не пробовал, прога всегда теряет у мну фокус клавиатуры. Например, так:

ShowWindow(Application,SW_HIDE);

Мож подскажешь... Мне нужно, чтоб при сворачивании проги, на ней оставался фокус клавы.

Отредактировано Test3R — 23.01.2007, 13:17
Test3R
Отправлено: 24.01.2007, 12:30


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Ап. По-любому кто-то знает, но молчит. :)
aquanet sk
  Отправлено: 24.01.2007, 23:47


Станционный диспетчер

Группа: Участник
Сообщений: 87



Так, значит какие у нас варианты есть (для будущих посетителей данного форума):
1. Form1->Visible=false;
2. Form1->Hide();
3. Если главная форма, то можно ещё Application->ShowMainForm =false;

Ничего из этого фокус у меня не сохранило, оно и логично -)

Теперь про видимость, о котором я в прошлом посте писал. Можно использовать "вырезание" формы, оставляя видимыми те элементы, которые требуется (просто не знаю, какая конкретно перед Вами задача стоит). Вот пример использования такого метода (сразу при создании формы):
CODE
void __fastcall TForm1::FormCreate(TObject *Sender)
{
HRGN R1=CreateRectRgn(0, 0, Width, Height);
HRGN R2=CreateRectRgn(11, 11, Width-11, Height-11);
CombineRgn(R1, R1, R2,RGN_DIFF);
SetWindowRgn(Handle, R1, TRUE);
}


А можно использовать полупрозрачность:
CODE

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int Transparency = 55;      //чем выше цифра, тем ниже полупрозрачность, можно использовать любую переменную, сразу подставляя её в SetLayeredWindowAttributes, ну это очевидно я думаю :r
long ExtStyle = GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, ExtStyle | WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0 , (255 * Transparency) / 100,
LWA_ALPHA);
}


Теперь вкратце о координатах из предыдущих постов, я захватываю их так (например, в обработчик события нажатия Button):
TPoint pix;
GetCursorPos(&pix);
Form1->Memo1->Lines->Clear();
Form1->Memo1->Lines->Insert(0, "x = "+IntToStr(pix.x));
Form1->Memo1->Lines->Insert(1, "y = "+IntToStr(pix.y));

Примерчик Lite прилагаю.

---
Надеюсь не в пустую старался smile.gif , новым гостям сайта должно помочь..

User Attached Image Скачать файл
Capture_X_Y_with_Ctrl_Z.rar


aquanet sk
Отправлено: 25.01.2007, 00:04


Станционный диспетчер

Группа: Участник
Сообщений: 87



QUOTE (Test3R @ 23.01.2007, 13:16)
Как я только не пробовал, прога всегда теряет у мну фокус клавиатуры. Например, так:

ShowWindow(Application,SW_HIDE);

Мож подскажешь...

На счет этого кода подскажу тоже. Функция ShowWindow использует дескриптор окна (своего или "чужого"), поэтому использовать её надо следующим образом (ну мы свою форму скрываем..)
ShowWindow(Handle, SW_HIDE);
Test3R
Отправлено: 25.01.2007, 12:10


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Немного не то, что мне надо. Дело вот в чём, и как я делаю клики...
Я запускаю прогу, нажимаю клавишу вызова функции кликов (методом OnKeyDown), мышка кликает по координатам. А так как клики происходят по другому окну (в моём случае окно Оперы), то окно моей проги становится неактивно и теряет фокус клавиатуры, т.к. активным становится окно Оперы.
Что мне надо — чтоб, после первого нажатия на клавишу, которая вызывает клики по другому окну, фокус клавиатуры оставался в моей проге (хотя её окно будет неактивно), т.е. я мог дальше нажимать клавишу вызова функции кликов при неактивном окне моей проги.
А решил для себя эту проблему этим — SetForegroundWindow(Form1->Handle);
После кликов, программа становится активной и можно нажимать дальше клавишу, но хотелось бы сделать так, чтоб при другом активном окне функции из моей проги вызывалась. Если так можно сделать, подскажите как.
aquanet sk
  Отправлено: 25.01.2007, 21:50


Станционный диспетчер

Группа: Участник
Сообщений: 87



аа, ну Вы не в ту сторону просто оттолкнулись, есть
RegisterHotKey(Handle,25,MOD_CONTROL, int('Z'));

Я её специально оставил в примере, Вы просто необратили внимания.

А как Вы справились с задачей определения того, что Опера загрузила следующую необходимую страничку?
Я так и не смог прослеживат 100% загрузку страницы, поэтому сейчас выставляю тайм-уты побольше, но это не дело.
Вы как это решили?
Test3R
Отправлено: 26.01.2007, 14:26


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Сперва, спасибо за ответ на вопрос про ХотКей. Всё работает, когда прога свёрнута, но мне бы хотелось узнать ещё:
1. Где Вы указывали код клавишы CTRL, просто я перенёс часть Вашего скрипта, кое-где изменил, но как CTRL поменять, например, на ALT не нашёл. smile.gif
2. И можно ли сделать ХотКей, состоящий из одной клавиши, т.е. например, F1? Если да, то жду пример. smile.gif

Про Ваш вопрос:
Моя задача видимо отличается от Вашей, т.к. мне не нужно определение того, когда Опера загрузила страницу. Я сам сижу и, когда надо, нажимаю ХотКеи, которые используют функции различных кликов. Хотя можно было попробовать сделать так, чтоб вообще сидеть за компом, прога бы делала всё сама, но там, где я использую мою прогу, стоит проверка — ввод чисел с картинок, так что определение загрузки страницы мне не нужно. Вашу проблему решить не смогу. sad.gif
aquanet sk
Отправлено: 27.01.2007, 00:48


Станционный диспетчер

Группа: Участник
Сообщений: 87



Alt — это MENU, т.к. он ассоциируется с меню, т.е. в любом приложении клавиша Alt призвана предоставлять доступ к MainMenu, поэтому и в кодах она числится как VK_MENU,
но если Вы пользовались именно этой функций (RegisterHotKey), то тогда должно было сработать MOD_ALT.

Можно и для одной клавиши, совет: вообще в таких случаях методом тыка подставляйте NULL, false и т.п., во-многих случаях может сработать, вот сейчас NULL подошел.

Вот пример на Ваш запрос: RegisterHotKey(Handle,25,NULL, VK_F1);

И чтобы избежать последующих вопросов данного характера, нарыл сейчас в инете инфу по клавишам biggrin.gif

Символическое имя Значение (hex) Мышинные, клавиатурные эквиваленты
VK_LBUTTON 01 Левая кнопка мыши
VK_RBUTTON 02 Правая кнопка мыши
VK_CANCEL 03 Обработка Control-break
VK_MBUTTON 04 Средняя кнопка мыши
VK_XBUTTON1 05 Windows 2000/XP: кнопка мыши X1
VK_XBUTTON2 06 Windows 2000/XP: кнопка мыши X2
- 07 Не определено
VK_BACK 08 BACKSPACE key
VK_TAB 09 TAB key
- 0A-0B Зарезервировано
VK_CLEAR 0C CLEAR key
VK_RETURN 0D ENTER key
- 0E-0F Не определено
VK_SHIFT 10 SHIFT key
VK_CONTROL 11 CTRL key
VK_MENU 12 ALT key
VK_PAUSE 13 PAUSE key
VK_CAPITAL 14 CAPS LOCK key
VK_KANA 15 IME Kana mode
VK_HANGUEL 15 IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
VK_HANGUL 15 IME Hangul mode
- 16 Не определено
VK_JUNJA 17 IME Junja mode
VK_FINAL 18 IME final mode
VK_HANJA 19 IME Hanja mode
VK_KANJI 19 IME Kanji mode
- 1A Не определено
VK_ESCAPE 1B ESC key
VK_CONVERT 1С IME convert (Reserved for Kanji systems)
VK_NONCONVERT 1D IME nonconvert (Reserved for Kanji systems)
VK_ACCEPT 1E IME accept (Reserved for Kanji systems)
VK_MODECHANGE 1F IME mode change request (Reserved for Kanji systems)
VK_SPACE 20 Пробел
VK_PRIOR 21 PAGE UP key
VK_NEXT 22 PAGE DOWN key
VK_END 23 END key
VK_HOME 24 HOME key
VK_LEFT 25 LEFT ARROW key
VK_UP 26 UP ARROW key
VK_RIGHT 27 RIGHT ARROW key
VK_DOWN 28 DOWN ARROW key
VK_SELECT 29 SELECT key
VK_PRINT 2A PRINT key
VK_EXECUTE 2B EXECUTE key
VK_SNAPSHOT 2C PRINT SCREEN key for Windows 3.0 and later
VK_INSERT 2D INS key
VK_DELETE 2E DEL key
VK_HELP 2F HELP key
VK_0 30 0 key
VK_1 31 1 key
VK_2 32 2 key
VK_3 33 3 key
VK_4 34 4 key
VK_5 35 5 key
VK_6 36 6 key
VK_7 37 7 key
VK_8 38 8 key
VK_9 39 9 key
- 3A-40 Не определено
VK_A 41 A key
VK_B 42 B key
VK_C 43 C key
VK_D 44 D key
VK_E 45 E key
VK_F 46 F key
VK_G 47 G key
VK_H 48 H key
VK_I 49 I key
VK_J 4A J key
VK_K 4B K key
VK_L 4C L key
VK_M 4D M key
VK_N 4E N key
VK_O 4F O key
VK_P 50 P key
VK_Q 51 Q key
VK_R 52 R key
VK_S 53 S key
VK_T 54 T key
VK_U 55 U key
VK_V 56 V key
VK_W 57 W key
VK_X 58 X key
VK_Y 59 Y key
VK_Z 5A Z key
VK_LWIN 5B Left Windows key (Microsoft Natural Keyboard)
VK_RWIN 5C Right Windows key (Microsoft Natural Keyboard)
VK_APPS 5D Applications key (Microsoft Natural Keyboard)
- 5E Зарезервировано
VK_SLEEP 5F Computer Sleep key
VK_NUMPAD0 60 Numeric keypad 0 key
VK_NUMPAD1 61 Numeric keypad 1 key
VK_NUMPAD2 62 Numeric keypad 2 key
VK_NUMPAD3 63 Numeric keypad 3 key
VK_NUMPAD4 64 Numeric keypad 4 key
VK_NUMPAD5 65 Numeric keypad 5 key
VK_NUMPAD6 66 Numeric keypad 6 key
VK_NUMPAD7 67 Numeric keypad 7 key
VK_NUMPAD8 68 Numeric keypad 8 key
VK_NUMPAD9 69 Numeric keypad 9 key
VK_MULTIPLY 6A Multiply key (*)
VK_ADD 6B Add key (+)
VK_SEPARATOR 6C Separator key
VK_SUBTRACT 6D Subtract key (-)
VK_DECIMAL 6E Decimal key
VK_DIVIDE 6F Divide key (/)
VK_F1 70 F1 key
VK_F2 71 F2 key
VK_F3 72 F3 key
VK_F4 73 F4 key
VK_F5 74 F5 key
VK_F6 75 F6 key
VK_F7 76 F7 key
VK_F8 77 F8 key
VK_F9 78 F9 key
VK_F10 79 F10 key
VK_F11 7A F11 key
VK_F12 7B F12 key
VK_F13 7C F13 key
VK_F14 7D F14 key
VK_F15 7E F15 key
VK_F16 7F F16 key
VK_F17 80H F17 key
VK_F18 81H F18 key
VK_F19 82H F19 key
VK_F20 83H F20 key
VK_F21 84H F21 key
VK_F22 85H F22 key
VK_F23 86H F23 key
VK_F24 87H F24 key
- 88-8F Не используются
VK_NUMLOCK 90 NUM LOCK key
VK_SCROLL 91 SCROLL LOCK key
VK_OEM_NEC_EQUAL 92 NEC PC-9800 kbd definitions: '=' key on numpad
VK_OEM_FJ_JISHO 92 Fujitsu/OASYS kbd definitions: 'Dictionary' key
VK_OEM_FJ_MASSHOU 93 Fujitsu/OASYS kbd definitions: 'Unregister word' key
VK_OEM_FJ_TOUROKU 94 Fujitsu/OASYS kbd definitions: 'Register word' key
VK_OEM_FJ_LOYA 95 Fujitsu/OASYS kbd definitions: 'Left OYAYUBI' key
VK_OEM_FJ_ROYA 96 Fujitsu/OASYS kbd definitions: 'Right OYAYUBI' key
- 97-9F Не используются
VK_LSHIFT A0 Left SHIFT key
VK_RSHIFT A1 Right SHIFT key
VK_LCONTROL A2 Left CONTROL key
VK_RCONTROL A3 Right CONTROL key
VK_LMENU A4 Left MENU key
VK_RMENU A5 Right MENU key
VK_BROWSER_BACK A6 Windows 2000/XP: Browser Back key
VK_BROWSER_FORWARD A7 Windows 2000/XP: Browser Forward key
VK_BROWSER_REFRESH A8 Windows 2000/XP: Browser Refresh key
VK_BROWSER_STOP A9 Windows 2000/XP: Browser Stop key
VK_BROWSER_SEARCH AA Windows 2000/XP: Browser Search key
VK_BROWSER_FAVORITES AB Windows 2000/XP: Browser Favorites key
VK_BROWSER_HOME AC Windows 2000/XP: Browser Start and Home key
VK_VOLUME_MUTE AD Windows 2000/XP: Volume Mute key
VK_VOLUME_DOWN AE Windows 2000/XP: Volume Down key
VK_VOLUME_UP AF Windows 2000/XP: Volume Up key
VK_MEDIA_NEXT_TRACK B0 Windows 2000/XP: Next Track key
VK_MEDIA_PREV_TRACK B1 Windows 2000/XP: Previous Track key
VK_MEDIA_STOP B2 Windows 2000/XP: Stop Media key
VK_MEDIA_PLAY_PAUSE B3 Windows 2000/XP: Play/Pause Media key
VK_LAUNCH_MAIL B4 Windows 2000/XP: Start Mail key
VK_LAUNCH_MEDIA_SELECT B5 Windows 2000/XP: Select Media key
VK_LAUNCH_APP1 B6 Windows 2000/XP: Start Application 1 key
VK_LAUNCH_APP2 B7 Windows 2000/XP: Start Application 2 key
- B8-B9 Зарезервировано
VK_OEM_1 BA Windows 2000/XP: For the US standard keyboard, the ';:' key
VK_OEM_PLUS BB Windows 2000/XP: For any country/region, the '+' key
VK_OEM_COMMA BC Windows 2000/XP: For any country/region, the ',' key
VK_OEM_MINUS BD Windows 2000/XP: For any country/region, the '-' key
VK_OEM_PERIOD BE Windows 2000/XP: For any country/region, the '.' key
VK_OEM_2 BF Windows 2000/XP: For the US standard keyboard, the '/?' key
VK_OEM_3 C0 Windows 2000/XP: For the US standard keyboard, the '`~' key
- C1-D7 Зарезервировано
- D8-DA Не используются
VK_OEM_4 DB Windows 2000/XP: For the US standard keyboard, the '[{' key
VK_OEM_5 DC Windows 2000/XP: For the US standard keyboard, the '\|' key
VK_OEM_6 DD Windows 2000/XP: For the US standard keyboard, the ']}' key
VK_OEM_7 DE Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
VK_OEM_8 DF
- E0 Зарезервировано
E1 OEM specific
VK_OEM_102 E2 Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
- E3-E4 OEM specific
VK_PROCESSKEY E5 Windows 95/98, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
- E6 OEM specific
VK_PACKET E7 Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT , SendInput , WM_KEYDOWN , and WM_KEYUP
- E8 Не используется
VK_OEM_RESET E9 Only used by Nokia.
VK_OEM_JUMP EA Only used by Nokia.
VK_OEM_PA1 EB Only used by Nokia.
VK_OEM_PA2 EC Only used by Nokia.
VK_OEM_PA3 ED Only used by Nokia.
VK_OEM_WSCTRL EE Only used by Nokia.
VK_OEM_CUSEL EF Only used by Nokia.
VK_OEM_ATTN F0 Only used by Nokia.
VK_OEM_FINNISH F1 Only used by Nokia.
VK_OEM_COPY F2 Only used by Nokia.
VK_OEM_AUTO F3 Only used by Nokia.
VK_OEM_ENLW F4 Only used by Nokia.
VK_OEM_BACKTAB F5 Only used by Nokia.
VK_ATTN F6 Attn key
VK_CRSEL F7 CrSel key
VK_EXSEL F8 ExSel key
VK_EREOF F9 Erase EOF key
VK_PLAY FA Play key
VK_ZOOM FB Zoom key
VK_NONAME FC Reserved for future use.
VK_PA1 FD PA1 key
VK_OEM_CLEAR FE Clear key

Думаю с лихвой Вам хватит
biggrin.gif
Test3R
Отправлено: 27.01.2007, 12:47


Дежурный стрелочник

Группа: Участник
Сообщений: 46



Пасиб большое. wink.gif
Думаю тему можно закрыть. smile.gif

P.S. Инфа по клавишам у мну в скачанном Хелпе есть, но всё равно спасиб, что нашли для меня.
aquanet sk
Отправлено: 27.01.2007, 21:36


Станционный диспетчер

Группа: Участник
Сообщений: 87



Жаль только я не узнал, как отслеживать 100% загрузку Оперы, видать придется до лучших времен оставить.

P.S. ну отвечал на Ваш первый вопрос. wink.gif

Отредактировано aquanet sk — 27.01.2007, 21:38

Вернуться в Вопросы программирования в C++Builder