Здравствуйте, xednay89, Вы писали:
X>Сегодня посетил собеседование на должность c++ developer.
X>Вроде все нормально: компания понравилась, готов там поработать.
X>Пообещали прислать тестовое задание. Я в целом не против небольшого тестового задания, которое поможет оценить мою культуру кода, но то, что мне прислали — попахивает каким-то издевательством. Пришлось сразу отписаться, что не готов я столько времени убивать на задания, которые должны выявить непонятно что.
X>обоснованно ли мое недоумение?
Решил попробовать чисто для себя вспомнить как это программировать, ибо уже давно не брал в руки шашек так сказать. Получилось
вот это. Код конечно тихий ужас, но я ж не претендую на гуру программирования (опыта разработки 0, в студенчестве курсачи ваял и на этом всё, дальше занимался админством-аникейством, программирование для себя как хобби скорее), так что какой есть. Весь "проект" сплошное читерство и откровенное упрощение, но это ж тестовое задание с которым слишком много времени тратить жаль (по факту я убил где-то 2 вечера + 1 ночь), т.к. много чего вспоминать пришлось и подглядывать в MSDN). Ваял я его с минималистичным подходом практически на голом API в стиле дилетанта в программировании и с кучей хаков.
И да, меня тоже смущает момент грамотного выяснения объекта клика с точностью до элемента. В мышином хуке мы можем отловить HWND окна, которое получит сообщение и экранные координаты курсора. А вот идентификацией конкретного элемента уже непонятки — можно выдрать класс окна (GetClassName) и его текст (GetWindowText), можно выяснить id процесса и потока которому принадлежит окно (GetWindowThreadProcessId), можно в иерархии окон покопаться (GetParent/GetAncestor/GetWindow/etc). Обработку конкретного случая с рабочим столом и ярлыками можно конечно захардкодить покопавшись со Spy++ и выловив конкретные нужные WM_NOTIFY (типа NM_CLICK, правда там уже простым мышиным хуком по идее не обойдёшься), но хочется ж универсально сделать, правда неясно как, например если это будет клик по какой-нибудь кнопке "Войти" в браузере (подозреваю что никак, ибо DOM в браузере — отдельная песня).
Плюс возникнут отдельные заморочки с правильной реализации этой аппликухи на 64 битных системах, ибо глобальный хук должен жить в dll, а 32 битная dll грузится только в 32 битные процессы, для "захучивания" 64 битных процессов нужна 64 битная dll (причём с другим именем), которую будет грузить 64 битная же версия аппликухи. Так что 32 битная версия аппликухи должна проверять битность системы и на 64 битных системах запускать ещё и свою облегчённую 64 битную версию (без GUI и т.д.), которая вместо непосредственной обработки кликов (запись в лог и отсылка на сервер) будет пересылать посредством какого-нить IPC (например через пайп) данные о кликах в 32 битную версию, в которой уже будет GUI и честная обработка всех данных как от 32 битных процессов так и из пайпа. Почему не честная обработка в 64 битной версии ? А чтоб 2 процесса в 1 файл лога ерунды не понаписали независимо друг от друга, хотя конечно вариант синхронизировать это дело. Управление 64 битным процессом из 32 битного по кнопкам старт/стоп можно реализовать например на событиях. Естественно это сложнее чем просто 32 битное решение, требует больше времени на разработку и отладку, а так же средств разработки поновее чем имеющаяся под рукой VS2003, которая из коробки под x64 компилить не умеет. Будем считать что отмазался почему на x64 нормально работать оно не будет
Так вот, собственно,
у меня глупый вопрос — "доктор, я буду жить ?" —
какие шансы устроиться начинающим программистом С++ в default city если учесть отсутсвие опыта разработки как такового, возраст 27 лет и небольшой вцелом опыт работы (аникейство). Ну и общие знания достаточные чтобы ваять г*внокод вышеприведённого стиля. Всякая шаблонная магия, современные веяния типа C++11, функциональщина и прочие крутые модные штучки — пока выше моего понимания и с наскока оно не поддаётся, возможно банально мозга не хватает. При этом WinAPI в целом понятно, базовые принципы функционирования системы Windows тоже. И если шансы есть, то как лучше их реализовать ? Ибо как показала практика на резюме без опыта разработки никто не смотрит, даже отказ ленятся прислать. Или лучше забить на эту идею и идти дальше админить-аникействовать ?