Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
1

Как соединиться с программой

13.02.2011, 15:34. Показов 4796. Ответов 12
Метки нет (Все метки)

Так я хочу соидинятса с программои. как ето вазможно? SOrry for my grammar : (
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2011, 15:34
Ответы с готовыми решениями:

как соединиться с БД
Здравствуйте, у меня есть вопрос подскажите как соединиться с БД

как соединиться с БД?
Проблема такая: есть два компа 1- windows XP, 2- Windows 2000 server + SQL Server 2000 Подключены...

Как соединиться с БД?
Здрасте! У меня на C:\Webserver стоит денвер. В соответствующей папке (...

Как соединиться с интернетом?
Подскажите как Как соединиться с интернетом, (любым способом) !!! (Напр. как это делает IDM) !!!

12
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
13.02.2011, 18:12 2
SendMessage()
0
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
13.02.2011, 19:58  [ТС] 3
radiohobbyt, Можете код виложитъ?... тачнее я хочу в программе изменитъ чтото... Sorry for my bad Russian ...
0
LK
Заблокирован
13.02.2011, 21:28 4
Цитата Сообщение от radiohobbyt Посмотреть сообщение
SendMessage()
- radiohobbyt , а почему не PostMessage() ? а может - Perform() ?

Programmer - владение языком и знание грамматики - это одно , а умение изложить свою мысль - это совсем другое. Раньше вы делали ошибки в языке, но более-менее понятно излагали свою проблему, теперь вас запугали, вы боитесь , что вас не поймут, говорите мало и вас действительно очень трудно понять .
Скажите по человечески - что необходимо сделать и что вы хотите получить ?
Потому что Ваше "соединиться с программной" уводит мысли в совсем другом направлении :dance3: .
а radiohobbyt имел ввиду посылку сообщений программе, которых очень большое количество и которые посылаются программе в зависимости от необходимости или поставленной задачи , например сообщение :
C++
1
SendMessage( RichEdit1->Handle, EM_SETMARGINS, EC_LEFTMARGIN, 10);
- говорит , что надо в RichEdit1 с левой стороны сделать поле шириной 10, и не сомневаюсь, что вы примеры разных сообщений уже встречали.
0
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
13.02.2011, 23:09  [ТС] 5
Уважаемий LK у меня естъ канкретная програма. Я хочу написат програму с которой можно будет контролироватъ ету програму... На пример маленъкое деиствие той програмои...
0
LK
Заблокирован
13.02.2011, 23:44 6
Уважаемый Programmer.,какое маленъкое деиствие той програмы? Например, так: http://www.cyberguru.ru/progra... age39.html можно получить текст другой программы, зная Handle окна данной программы или Handle того элеманта управления (контрола), текст которого вы хотите получить.
Если вы хотите отслеживать нажатие клавиш, перехватывать определенные действия, смотрите в сторону ловушек (хук, hook) - http://www.cyberguru.ru/operat... age16.html .
Вопрос остается : какое маленъкое действие той програмы вы хотите контролировать или использовать ?
0
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
15.02.2011, 00:48  [ТС] 7
LK, Даите принцип работи далше Я с делаю программу... Garena.exe загуглите пожалуиста... Я хочу контралироватъ ее маленкое деиствие...
0
LK
Заблокирован
15.02.2011, 01:08 8
Цитата Сообщение от Programmer. Посмотреть сообщение
1. Garena.exe загуглите пожалуиста
2. Я хочу контралироватъ ее маленкое деиствие...
1. А смысл ?
2. Спрашиваю последний раз - какое
ее маленкое деиствие
?
0
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
15.02.2011, 01:24  [ТС] 9
У етои программои естъ комнати Max 225 могут заити в 1 комнате ... Я хочу чтоб снят аграду и заити хотя бы 226\225 ... Понятно абяснил?
0
LK
Заблокирован
15.02.2011, 01:40 10
Цитата Сообщение от Programmer. Посмотреть сообщение
У етои программои естъ комнати Max 225 могут заити в 1 комнате ... Я хочу чтоб снят аграду и заити хотя бы 226\225 ... Понятно абяснил?
- да, понятно , конкретно, как сделать это, я вам не скажу, но подобное делается с помощью хуков (hook), посмотрите функцию SetWindowsHookEx , поищите примеры, посмотреть, какие окна (контролы) есть в программе можно, например, при помощи прогарммы Voyeur.

Как сделать хук можно найти здесь

Хуки в Win32
Автор: Kyle Marsh
Перевод: Олег Быков oleg_bykoff@rsdn.ru

Введение

В операционной системе Microsoft® Windows™ хуком называется механизм перехвата особой функцией событий (таких как сообщения, ввод с мыши или клавиатуры) до того, как они дойдут до приложения. Эта функция может затем реагировать на события и, в некоторых случаях, изменять или отменять их. Функции, получающие уведомления о событиях, называются фильтрующими функциями и различаются по типам перехватываемых ими событий. Пример - фильтрующая функция для перехвата всех событий мыши или клавиатуры. Чтобы Windows смогла вызывать функцию-фильтр, эта функция должна быть установлена - то есть, прикреплена - к хуку (например, к клавиатурному хуку). Прикрепление одной или нескольких фильтрующих функций к какому-нибудь хуку называется установкой хука. Если к одному хуку прикреплено несколько фильтрующих функций, Windows реализует очередь функций, причем функция, прикрепленная последней, оказывается в начале очереди, а самая первая функция - в ее конце.

Когда к хуку прикреплена одна или более функций-фильтров и происходит событие, приводящее к срабатыванию хука, Windows вызывает первую функцию из очереди функций-фильтров. Это действие называется вызовом хука. К примеру, если к хуку CBT прикреплена функция и происходит событие, после которого срабатывает хук (допустим, идет создание окна), Windows вызывает CBT-хук, то есть первую функцию из его очереди.

Для установки и доступа к фильтрующим функциям приложения используют функции SetWindowsHookEx и UnhookWindowsHookEx.

Хуки предоставляют мощные возможности для приложений Windows. Приложения могут использовать хуки в следующих целях:

Обрабатывать или изменять все сообщения, предназначенные для всех диалоговых окон (dialog box), информационных окон (message box), полос прокрутки (scroll bar), или меню одного приложения (WH_MSGFILTER).
Обрабатывать или изменять все сообщения, предназначенные для всех диалоговых окон, информационных окон, полос прокрутки, или меню всей системы (WH_SYSMSGFILTER).
Обрабатывать или изменять все сообщения в системе (все виды сообщений), получаемые функциями GetMessage или PeekMessage (WH_GETMESSAGE).
Обрабатывать или изменять все сообщения (любого типа), посылаемые вызовом функции SendMessage (WH_CALLWNDPROC).
Записывать или проигрывать клавиатурные и мышиные события (WH_JOURNALRECORD, WH_JOURNALPLAYBACK).
Обрабатывать, изменять или удалять клавиатурные события (WH_KEYBOARD).
Обрабатывать, изменять или отменять события мыши (WH_MOUSE).
Реагировать на определенные действия системы, делая возможным разработку приложений компьютерного обучения - computer-based training (WH_CBT).
Предотвратить вызов другой функции-фильтра (WH_DEBUG).

Приложения уже используют хуки для следующих целей:

Добавить поддержку кнопки F1 для меню, диалоговых и информационных окон (WH_MSGFILTER).
Обеспечить запись и воспроизведение событий мыши и клавиатуры, часто называемых макросами. Например, программа Windows Recorder использует хуки для записи и воспроизведения (WH_JOURNALRECORD, WH_JOURNALPLAYBACK).
Следить за сообщениями, чтобы определить, какие сообщения предназначены определенному окну или какие действия генерирует сообщение (WH_GETMESSAGE, WH_CALLWNDPROC). Утилита Spy из Win32™ Software Development Kit (SDK) for Windows NT™ использует для этих целей хуки. Исходные тексты Spy можно найти в SDK.
Симулировать мышиный и клавиатурный ввод (WH_JOURNALPLAYBACK). Хуки - единственный надежный способ симуляции этих действий. Если попытаться имитировать их через посылку сообщений, не будет происходить обновление состояния клавиатуры или мыши во внутренних структурах Windows, что может привести к непредсказуемому поведению. Если для воспроизведения клавиатурных или мышиных событий используются хуки, эти события обрабатываются в точности так, как и настоящий ввод с клавиатуры или мыши. Microsoft Excel использует хуки для реализации макрофункции SEND.KEYS.
Сделать возможным использование CBT приложениями Windows (WH_CBT). Хук WH_CBT значительно облегчает разработку CBT-приложений.

Как пользоваться хуками

Чтобы пользоваться хуками, вам необходимо знать следующее:
Как использовать функции Windows для добавления и удаления фильтрующих функций из очереди функций хука.
Какие действия должна будет выполнить фильтрующая функция, которую вы устанавливаете.
Какие существуют виды хуков, что они могут делать, и какую информацию (параметры) они передают вашей функции.
Функции Windows для работы с хуками

Приложения Windows используют функции SetWindowsHookEx, UnhookWindowsHookEx, и CallNextHookEx для управления очередью функций-фильтров хука. До версии 3.1 Windows предоставляла для управления хуками функции SetWindowsHook, UnhookWindowsHook, и DefHookProc. Хотя эти функции до сих пор реализованы в Win32, у них меньше возможностей, чем у их новых (Ex) версий. Всегда старайтесь использовать только эти новые функции в своих проектах.

SetWindowsHookEx и UnhookWindowsHookEx описаны ниже. Обратитесь к разделу "Вызов следующей функции в очереди фильтрующих функций" за информацией по CallNextHookEx.
SetWindowsHookEx

Функция SetWindowsHookEx добавляет функцию-фильтр к хуку. Эта функция принимает четыре аргумента:

Целочисленный код, описывающий хук, к которому будет прикреплена фильтрующая функция. Эти коды определены в WINUSER.H и будут описаны позднее.
Адрес функции-фильтра. Эта функция должна быть описана как экспортируемая включением ее в секцию EXPORTS файла определения приложения или библиотеки динамической линковки (DLL), или использованием соответствующих опций компилятора.
Хэндл модуля, содержащего фильтрующую функцию. В Win32 (в отличие от Win16), этот параметр должен быть NULL при установке хука на поток (см. ниже), но данное требование не является строго обязательным, как указано в документации. При установке хука для всей системы или для потока в другом процессе, нужно использовать хэндл DLL, содержащей функцию-фильтр.
Идентификатор потока, для которого устанавливается хук. Если этот идентификатор ненулевой, установленная фильтрующая функция будет вызываться только в контексте указанного потока. Если идентификатор равен нулю, установленная функция имеет системную область видимости и может быть вызвана в контексте любого потока в системе. Приложение или библиотека могут использовать функцию GetCurrentThreadId для получения идентификатора текущего потока.

Некоторые хуки могут быть установлены только с системной областью видимости, некоторые можно устанавливать как для всей системы, так и для одного потока, как показано в следующей таблице.

Хук Область видимости
WH_CALLWNDPROC Поток или вся система
WH_CBT Поток или вся система
WH_DEBUG Поток или вся система
WH_GETMESSAGE Поток или вся система
WH_JOURNALRECORD Только система
WH_JOURNALPLAYBACK Только система
WH_FOREGROUNDIDLE Поток или вся система
WH_SHELL Поток или вся система
WH_KEYBOARD Поток или вся система
WH_MOUSE Поток или вся система
WH_MSGFILTER Поток или вся система
WH_SYSMSGFILTER Только система

Для любого данного типа хука, первыми вызываются хуки потоков, и только затем системные хуки.

Есть несколько причин, по которым лучше использовать потоковые хуки вместо системных. Хуки потоков:

Не создают лишней работы приложениям, которые не заинтересованы в вызове хука.
Не помещают все события, относящиеся к хуку, в очередь (так, чтобы они поступали не одновременно, а одно за другим). Например, если приложение установит клавиатурный хук для всей системы, то все клавиатурные сообщения будут пропущены через фильтрующую функцию этого хука, оставляя неиспользованными системные возможности многопотоковой обработки ввода. Если эта функция прекратит обрабатывать клавиатурные события, система будет выглядеть зависшей, хотя на самом деле и не зависнет. Пользователь всегда сможет использовать комбинацию CTRL+ALT+DEL для того, чтобы выйти из системы (log-out) и решить проблему, но ему это вряд ли понравится. К тому же, пользователь может не знать, что подобную ситуацию можно решить, войдя в систему под другим именем (log-out/log-in).
Не требуют нахождения функции-фильтра в отдельной DLL. Все системные хуки и хуки для потоков в другом приложении должны находиться в DLL.
Им не нужно разделять данные между DLL, загруженными в разные процессы. Фильтрующие функции с системной областью видимости, которые обязаны находиться в DLL, должны к тому же разделять необходимые данные с другими процессами. Так как такое поведение не является типичным для DLL, вы должны принимать специальные меры предосторожности при реализации системных фильтрующих функций. Если функция-фильтр не умеет разделять данные и неправильно использует данные в другом процессе, этот процесс может рухнуть.

SetWindowsHookEx возвращает хэндл установленного хука (тип HHOOK). Приложение или библиотека должны использовать этот хэндл для вызова функции UnhookWindowsHookEx. SetWindowsHookEx возвращает NULL если она не смогла добавить функцию к хуку. SetWindowsHookEx также устанавливает код последней ошибки в одно из следующих значений для индикации неудачного завершения функции.
ERROR_INVALID_HOOK_FILTER: Неверный код хука.
ERROR_INVALID_FILTER_PROC: Неверная фильтрующая функция.
ERROR_HOOK_NEEDS_HMOD: Глобальный хук устанавливается с параметром hInstance, равным NULL либо локальный хук устанавливается для потока, который не принадлежит данному приложению.
ERROR_GLOBAL_ONLY_HOOK: Хук, который может быть только системным, устанавливается как потоковый.
ERROR_INVALID_PARAMETER: Неверный идентификатор потока.
ERROR_JOURNAL_HOOK_SET: Для регистрационного хука (journal hook) уже установлена фильтрующая функция. В любой момент времени может быть установлен только один записывающий или воспроизводящий хук. Этот код ошибки может также означать, что приложение пытается установить регистрационный хук в то время, как запущен хранитель экрана.
ERROR_MOD_NOT_FOUND: Параметр hInstance в случае, когда хук является глобальным, не ссылался на библиотеку. (На самом деле, это значение означает лишь, что модуль User не смог обнаружить данный хэндл в списке модулей.)
Любое другое значение: Система безопасности не позволяет установить данный хук, либо в системе закончилась память.

Windows сама заботится об организации очереди функций-фильтров (см. рисунок ниже), не доверяя функциям хранение адресов следующих функций в очереди (как поступали Windows до версии 3.1). Таким образом, система хуков в Windows 3.1 и более поздних версий стала гораздо яснее. Плюс к тому, факт хранения цепочки функций-фильтров внутри Windows значительно улучшило производительность.

Цепочка функций-фильтров в Windows

UnhookWindowsHookEx

Для удаления функции-фильтра из очереди хука вызовите функцию UnhookWindowsHookEx. Эта функция принимает хэндл хука, полученный от SetWindowsHookEx и возвращает логическое значение, показывающее успех операции. На данный момент UnhookWindowsHookEx всегда возвращает TRUE.

Фильтрующие функции


Фильтрующие (хуковые) функции - это функции, прикрепленные к хуку. Из-за того, что эти функции вызываются Windows, а не приложением, их часто называют функциями обратного вызова (callback functions). Из соображений целостности изложения, эта статья использует термин фильтрующие функции (или функции-фильтры).

Все фильтрующие функции должны быть описаны следующим образом:

LRESULT CALLBACK FilterFunc(int nCode, WPARAM wParam, LPARAM lParam)

Все функции-фильтры должны возвращать LONG. Вместо FilterFunc должно стоять имя вашей фильтрующей функции.

Параметры

Фильтрующие функции принимают три параметра: nСode (код хука), wParam, и lParam. Код хука - это целое значение, которое передает функции дополнительную информацию. К примеру, код хука может описывать событие, которое привело к срабатыванию хука.

В первых версиях Windows (до 3.1), код хука указывал, должна функция-фильтр обработать событие сама или вызвать DefHookProc. Если код хука меньше нуля, фильтр не должен был обрабатывать событие, а должен был вызвать DefHookProc, передавая ей три своих параметра без изменений. Windows использовала отрицательные коды для организации цепочки функций-фильтров с помощью приложений.

Windows 3.1 также требует при отрицательном коде хука вызывать CallNextHookEx с неизмененными параметрами, плюс к тому функция должна вернуть значение, которое вернет CallNextHookEx. Но Windows 3.1 никогда не посылает фильтрующим функциям отрицательных кодов.

Второй параметр функции-фильтра, wParam, имеет тип WPARAM, и третий параметр, lParam, имеет тип LPARAM. Эти параметры передают информацию фильтрующим функциям. У каждого хука значения wParam и lParam различаются. Например, фильтры хука WH_KEYBOARD получают в wParam виртуальный код клавиши, а в lParam - состояние клавиатуры на момент нажатия клавиши. Фильтрующие функции, прикрепленные к хуку WH_MSGFILTER получают в wParam значение NULL, а в lParam - указатель на структуру, описывающую сообщение. За полным описанием значений аргументов каждого типа хука обратитесь к Win32 SDK for Windows NT, руководствуясь списком фильтрующих функций, приведенным ниже.

Хук Имя статьи с описанием фильтрующей функции в SDK
WH_CALLWNDPROC CallWndProc
WH_CBT CBTProc
WH_DEBUG DebugProc
WH_GETMESSAGE GetMsgProc
WH_JOURNALRECORD JournalRecordProc
WH_JOURNALPLAYBACK JournalPlaybackProc
WH_SHELL ShellProc
WH_KEYBOARD KeyboardProc
WH_MOUSE MouseProc
WH_MSGFILTER MessageProc
WH_SYSMSGFILTER SysMsgProc

Вызов следующей функции в цепочке фильтрующих функций

Когда хук уже установлен, Windows вызывает первую функцию в очереди, и на этом ее ответственность заканчивается. После этого функция ответственна за то, чтобы вызвать следующую функцию в цепочке. В Windows имеется функция CallNextHookEx для вызова следующего фильтра в очереди фильтров. CallNextHookEx принимает четыре параметра.

Первый параметр - это значение, возвращенное функцией SetWindowsHookEx. В настоящее время Windows игнорирует это значение, но в будущем это может измениться.

Следующие три параметра - nCode, wParam, и lParam - Windows передает дальше по цепочке функций.

Windows хранит в своих внутренних структурах цепочку фильтрующих функций и следит за тем, какая функция вызывается в настоящий момент. При вызове CallNextHookEx Windows определяет следующую функцию в очереди и вызывает ее.

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

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

Фильтры в DLL

Фильтрующие функции с системной областью видимости должны быть реализованы в DLL. В Win16 было возможно (хотя и не рекомендовалось) установить системный хук, находящийся в приложении. Это не сработает в Win32. Ни в коем случае не устанавливайте глобальных фильтров, не находящихся в отдельной DLL, даже если это где-нибудь и работает. Регистрационные хуки, WH_JOURNALRECORD и WH_JOURNALPLAYBACK, являются исключением из правила. Из-за того, как Windows вызывает эти хуки, их фильтрующим функциям не обязательно находиться в DLL.

Фильтрующие функции для хуков с системной областью видимости должны быть готовы разделять свои данные между разными процессами, из которых они запускаются. Каждая DLL отображается в адресное пространство использующего ее клиентского процесса. Глобальные переменные в DLL будут таковыми лишь в пределах одного экземпляра приложения, если только они не будут находиться в разделяемом сегменте данных (shared data section). Например, библиотека HOOKSDLL.DLL в примере Hooks использует две глобальные переменные:

Хэндл окна для отображения сообщений.

Высоту строк текста в этом окне.

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

Использует директивы компилятора (pragma) для помещения данных в именованный сегмент данных. Заметьте, что при этом переменные должны быть обязательно инициализированы.
C++
1
2
3
4
5
   // Shared DATA
    #pragma data_seg(".SHARDATA")
    static HWND hwndMain = NULL;  // Главный hwnd. Мы получим его от приложения.
    static int nLineHeight = 0;  // Высота строк в окне.
    #pragma data_seg()
Добавляет блок SECTIONS в .DEF-файл библиотеки:

SECTIONS
.SHARDATA Read Write Shared

Создает .EXP-файл из .DEF-файла:
C++
1
2
3
4
5
    hooksdll.exp: hooksdll.obj hooksdll.def
        $(implib) -machine:$(CPU) \
       -def:hooks.def             \
       hooksdll.obj               \
       -out:hooksdll.lib
Прилинковывает получившийся файл HOOKSDLL.EXP:
C++
1
2
3
4
5
6
7
8
hooksdll.dll: hooksdll.obj hooksdll.def hooksdll.lib hooksdll.exp
       $(link) $(linkdebug)              \
       -base:0x1C000000 \
       -dll                              \
       -entry:LibMain$(DLLENTRY)         \
       -out:hooksdll.dll            \
       hooksdll.exp hooksdll.obj hooksdll.rbj \
       $(guilibsdll)
Типы хуков

WH_CALLWNDPROC

Windows вызывает этот хук при каждом вызове функции SendMessage. Фильтрующей функции передается код хука, показывающий, была ли произведена посылка сообщения из текущего потока, а также указатель на структуру с информацией о сообщении.

Структура CWPSTRUCT описана следующим образом:
C++
1
2
3
4
5
6
typedef struct tagCWPSTRUCT {
    LPARAM  lParam;
    WPARAM  wParam;
    DWORD   message;
    HWND    hwnd;
} CWPSTRUCT, *PCWPSTRUCT, NEAR *NPCWPSTRUCT, FAR *LPCWPSTRUCT;
Фильтры могут обработать сообщение, но не могут изменять его (хотя это было возможно в Win16). Сообщение затем отсылается той функции, которой и предназначалось. Этот хук использует значительное количество системных ресурсов, особенно, когда он установлен с системной областью видимости, поэтому используйте его только в целях отладки.

WH_CBT

Чтобы написать приложение для интерактивного обучения (CBT application), разработчик должен координировать его работу с работой приложения, для которого оно разрабатывается. Для достижения этой цели Windows предоставляет разработчикам хук WH_CBT. Windows передает фильтрующей функции код хука, показывающий, какое произошло событие, и соответствующие этому событию данные.

Фильтр для хука WH_CBT должен знать о десяти хуковых кодах:

HCBT_ACTIVATE
HCBT_CREATEWND
HCBT_DESTROYWND
HCBT_MINMAX
HCBT_MOVESIZE
HCBT_SYSCOMMAND
HCBT_CLICKSKIPPED
HCBT_KEYSKIPPED
HCBT_SETFOCUS
HCBT_QS
HCBT_ACTIVATE

Windows вызывает хук WH_CBT с этим кодом при активации какого-нибудь окна. Когда хук WH_CBT установлен как локальный, это окно должно принадлежать потоку, на который установлен хук. Если фильтр в ответ на это событие вернет TRUE, окно не будет активизировано.

Параметр wParam содержит хэндл активизируемого окна. В lParam содержится указатель на структуру CBTACTIVATESTRUCT, которая описана следующим образом:
C++
1
2
3
4
5
6
7
8
typedef struct tagCBTACTIVATESTRUCT
{
   BOOL    fMouse;      // TRUE, если активация наступила в результате
                        //  мышиного клика; иначе FALSE.
   HWND    hWndActive;  // Содержит хэндл окна, активного
                        //  в настоящий момент.
} CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT;
HCBT_CREATEWND
Windows вызывает хук WH_CBT с этим при создании окна. Когда хук установлен как локальный, это окно должно создаваться потоком, на который установлен хук. Хук WH_CBT вызывается до того, как Windows пошлет новому окну сообщения WM_GETMINMAXINFO, WM_NCCREATE, или WM_CREATE. Таким образом, фильтрующая функция может запретить создание окна, вернув TRUE.

В параметре wParam содержится хэндл создаваемого окна. В lParam - указатель на следующую структуру.
C++
1
2
3
4
5
6
7
8
9
10
/*
 * данные для HCBT_CREATEWND, на которые указывает lParam
 */
struct CBT_CREATEWND
{
    struct tagCREATESTRUCT *lpcs; // Данные для создания
                                  //  нового окна.
    HWND  hwndInsertAfter;        // Хэндл окна, после которого будет
                                  //  добавлено это окно (Z-order).
} CBT_CREATEWND, *LPCBT_CREATEWND;
Функция-фильтр может изменить значение hwndInsertAfter или значения в lpcs.

HCBT_DESTROYWND

Windows вызывает хук WH_CBT с этим кодом перед уничтожением какого-либо окна. Если хук является локальным, это окно должно принадлежать потоку, на который установлен хук. Windows вызывает хук WH_CBT до посылки сообщения WM_DESTROY. Если функция-фильтр вернет TRUE, окно не будет уничтожено.

Параметр wParam содержит хэндл уничтожаемого окна. В lParam находится 0L.

HCBT_MINMAX

Windows вызывает хук WH_CBT с этим кодом перед минимизацией или максимизацией окна. Когда хук установлен как локальный, это окно должно принадлежать потоку, на который установлен хук. Если фильтр вернет TRUE, действие будет отменено.

В wParam передается хэндл окна, которое готовится к максимизации/минимизации. lParam содержит одну из SW_*-констант, определенных в WINUSER.H и описывающих операцию над окном.

HCBT_MOVESIZE

Windows вызывает хук WH_CBT с этим кодом перед перемещением или изменением размеров окна, сразу после того, как пользователь закончил выбор новой позиции или размеров окна. Если хук установлен как локальный, это окно должно принадлежать потоку, на который установлен хук. Если фильтр вернет TRUE, действие будет отменено.

В wParam передается хэндл перемещаемогоизменяемого окна. lParam содержит LPRECT, который указывает на новые координаты окна.

HCBT_SYSCOMMAND

Windows вызывает хук WH_CBT с этим кодом во время обработки системной команды. Если хук установлен как локальный, окно, чье системное меню вызвало данное событие, должно принадлежать потоку, на который установлен хук. Хук WH_CBT вызывается из функции DefWindowsProc. Если приложение не передает сообщение WH_SYSCOMMAND функции DefWindowsProc, это хук не получит управление. Если функция-фильтр вернет TRUE, системная команда не будет выполнена.

В wParam содержится системная команда (SC_TASKLIST, SC_HOTKEY, и так далее), готовая к выполнению. Если в wParam передается SC_HOTKEY, в младшем слове (LOWORD) lParam содержится хэндл окна, к которому относится горячая клавиша. Если в wParam передается любое другое значение и если команда системного меню была выбрана мышью, в младшем слове lParam будет находиться горизонтальная позиция, а в старшем слове (HIWORD) - вертикальная позиция указателя мыши.

Следующие системные команды приводят к срабатыванию этого хука изнутри DefWindowProc:

SC_CLOSE Закрыть окно.
SC_HOTKEY Активировать окно, связанное с определенной горячей клавишей.
SC_HSCROLL Горизонтальная прокрутка.
SC_KEYMENU Выполнить команду меню по комбинации клавиш.
SC_MAXIMIZE Распахнуть окно.
SC_MINIMIZE Минимизировать окно.
SC_MOUSEMENU Выполнить команду меню по щелчку мыши.
SC_MOVE Переместить окно.
SC_NEXTWINDOW Перейти к следующему окну.
SC_PREVWINDOW Перейти к предыдущему окну.
SC_RESTORE Сохранить предыдущие координаты (контрольная точка - checkpoint).
SC_SCREENSAVE Запустить хранитель экрана.
SC_SIZE Изменить размер окна.
SC_TASKLIST Запустить или активировать Планировщик Задач (Windows Task Manager).
SC_VSCROLL Вертикальная прокрутка.
HCBT_CLICKSKIPPED

Windows вызывает хук WH_CBT с этим кодом при удалении события от мыши из входной очереди потока, в случае, если установлен хук мыши. Windows вызовет системный хук, когда из какой-либо входной очереди будет удалено событие от мыши и в системе установлен либо глобальный, либо локальный хук мыши. Данный код передается только в том случае, если к хуку WH_MOUSE прикреплена фильтрующая функция. Несмотря на свое название, HCBT_CLICKSKIPPED генерируется не только для пропущенных событий от мыши, но и в случае, когда событие от мыши удаляется из системной очереди. Его главное назначение - установить хук WH_JOURNALPLAYBACK в ответ на событие мыши. (За дополнительной информацией обратитесь к секции "WM_QUEUESYNC".)

В wParam передается идентификатор сообщения мыши - например, WM_LBUTTONDOWN или любое из сообщений WM_?BUTTON*. lParam содержит указатель на структуру MOUSEHOOKSTRUCT, которая описана следующим образом:
C++
1
2
3
4
5
6
7
typedef struct tagMOUSEHOOKSTRUCT {
    POINT   pt;          // Позиция курсора мыши в координатах экрана
    HWND    hwnd;        // Окно, получающее сообщение
    UINT wHitTestCode;   // Результат проверки координат (hit-testing)
    DWORD   dwExtraInfo; // Доп.информация о сообщении
} MOUSEHOOKSTRUCT, FAR *LPMOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT;
HCBT_KEYSKIPPED
Windows вызывает хук WH_CBT с этим кодом при удалении клавиатурного события из системной очереди, в случае, если установлен клавиатурный хук. Windows вызовет системный хук, когда из какой-либо входной очереди будет удалено событие от клавиатуры и в системе установлен либо глобальный, либо локальный клавиатурный хук. Данный код передается только в том случае, если к хуку WH_KEYBOARD прикреплена фильтрующая функция. Несмотря на свое название, HCBT_KEYSKIPPED генерируется не только для пропущенных клавиатурных событий, но и в случае, когда клавиатурное событие удаляется из системной очереди. Его главное назначение - установить хук WH_JOURNALPLAYBACK в ответ на клавиатурное событие. (За дополнительной информацией обратитесь к секции "WM_QUEUESYNC".)

В wParam передается виртуальный код клавиши - то же самое значение, что и в wParam функций GetMessage или PeekMessage для сообщений WM_KEY*. lParam содержит то же значение, что и lParam функций GetMessage или PeekMessage для сообщений WM_KEY*.
WM_QUEUESYNC

Часто приложение интерактивного обучения (Computer Based Training application или CBT-приложение) должно реагировать на события в процессе, для которого оно разработано. Обычно такими событиями являются события от клавиатуры или мыши. К примеру, пользователь нажимает на кнопку OK в диалоговом окне, после чего CBT-приложение желает послать главному приложению серию клавиатурных нажатий. CBT-приложение может использовать хук мыши для определения момента нажатия кнопки OK. После этого, CBT-приложение должно выждать некоторое время, пока главное приложение не закончит обработку нажатия кнопки OK (CBT-приложение вряд ли хочет послать клавиатурные нажатия диалоговому окну).

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

Для определения момента окончания обработки события, CBT-приложение делает следующее:

1. Ждет от Windows вызова хука WH_CBT с кодом HCBT_CLICKSKIPPED или HCBT_KEYSKIPPED. Это происходит при удалении из системной очереди события, которое приводит к срабатыванию обработчика в главном приложении.

2. Устанавливает хук WH_JOURNALPLAYBACK. CBT-приложение не может установить этот хук, пока не получит код HCBT_CLICKSKIPPED или HCBT_KEYSKIPPED. Хук WH_JOURNALPLAYBACK посылает CBT-приложению сообщение WM_QUEUESYNC. Когда CBT-приложение получает такое сообщение, оно может выполнить необходимые действия, например, послать главному приложению серию клавиатурных нажатий.

HCBT_SETFOCUS

Windows вызывает хук WH_CBT с таким кодом, когда Windows собирается передать фокус ввода какому-либо окну. Когда хук установлен как локальный, это окно должно принадлежать потоку, на который установлен хук. Если фильтр вернет TRUE, фокус ввода не изменится.

В wParam передается хэндл окна, получающего фокус ввода. lParam содержит хэндл окна, теряющего фокус ввода.

HCBT_QS

Windows вызывает хук WH_CBT с этим кодом когда из системной очереди удаляется сообщение WM_QUEUESYNC, в то время как происходит изменение размеров или перемещение окна. Ни в каком другом случае этот хук не вызывается. Если хук установлен как локальный, это окно должно принадлежать потоку, на который установлен хук.

Оба параметра - и wParam, и lParam - содержат ноль.

WH_DEBUG

Windows вызывает этот хук перед вызовом какой-либо фильтрующей функции. Фильтры не могут изменять значения, переданные этому хуку, но могут предотвратить вызов фильтрующей функции, возвратив ненулевое значение.

В wParam передается идентификатор вызываемого хука, например, WH_MOUSE. lParam содержит указатель на следующую структуру:
C++
1
2
3
4
5
6
7
8
typedef struct tagDEBUGHOOKINFO
{
    DWORD   idThread;  // Идентификатор текущего потока
    LPARAM  reserved;
    LPARAM  lParam;    // lParam для фильтрующей функции
    WPARAM  wParam;    // wParam для фильтрующей функции
    int     code;
} DEBUGHOOKINFO, *PDEBUGHOOKINFO, NEAR *NPDEBUGHOOKINFO, FAR* LPDEBUGHOOKINFO;
WH_FOREGROUNDIDLE

Windows вызывает этот хук, когда к текущему потоку не поступает пользовательский ввод для обработки. Когда хук установлен как локальный, Windows вызывает его только при условии отсутствия пользовательского ввода у потока, к которому прикреплен хук. Данный хук является уведомительным, оба параметра - и wParam, и lParam - равны нулю.

WH_GETMESSAGE

Windows вызывает этот хук перед выходом из функций GetMessage и PeekMessage. Фильтрующие функции получают указатель на структуру с сообщением, которое затем (вместе со всеми изменениями) посылается приложению, вызвавшему GetMessage или PeekMessage. В lParam находится указатель на структуру MSG:
C++
1
2
3
4
5
6
7
8
9
typedef struct tagMSG {     /* msg */
    HWND   hwnd;     // Окно, чья Winproc получит сообщение
    UINT   message;  // Номер сообщения
    WPARAM wParam;
    LPARAM lParam;
    DWORD  time;     // Время посылки сообщения
    POINT  pt;       // Позиция указателя мыши (в экранных координатах)
                     //  для этого сообщения
} MSG;
WH_HARDWARE

Этот хук в Win32 пока не реализован.

Регистрационные хуки

Регистрационные хуки (journal hooks) используются для записи и воспроизведения событий. Они могут устанавливаться только как системные, и, следовательно, должны использоваться как можно реже. Эти хуки воздействуют на все приложения Windows; хотя десктоп и не позволяет такого другим хукам, регистрационные хуки могут записывать и воспроизводить последовательности событий и от десктопа, и для десктопа. Другой побочный эффект регистрационных хуков в том, что все системные входные очереди проходят через один поток, который установил такой хук.

В Win32 предусмотрена специальная последовательность действий, с помощью которой пользователь может убрать регистрационный хук (например, в случае, если он завесил систему). Windows отключит записывающий или воспроизводящий регистрационный хук, когда пользователь нажмет CTRL+ESC, ALT+ESC, или CTRL+ALT+DEL. Windows оповестит приложение, установившее этот хук, посылкой ему сообщения WM_CANCELJOURNAL.

WM_CANCELJOURNAL

Это сообщение посылается с хэндлом окна, равным NULL, чтобы оно не попало в оконную процедуру. Лучший способ получить это сообщение - прикрепить к WH_GETMESSAGE фильтрующую функцию, которая бы следила за входящими сообщениями. В документация по Win32 упоминается, что приложение может получить сообщение WM_CANCELJOURNAL между вызовами функций GetMessage (или PeekMessage) и DispatchMessage. Хотя это и так, нет гарантий, что приложение будет вызывать эти функции, когда будет послано сообщение. Например, если приложение занято показом диалогового окна, главный цикл обработки сообщений не получит управление.

Комбинации клавиш CTRL+ESC, ALT+ESC, и CTRL+ALT+DEL встроены в систему, чтобы пользователь всегда смог остановить регистрационный хук. Было бы неплохо, если каждое приложение, использующее регистрационные хуки, также предусматривало для пользователя способ остановки тотальной регистрации. Рекомендуемый способ - использовать код VK_CANCEL (CTRL+BREAK).

WH_JOURNALRECORD

Windows вызывает этот хук при удалении события из системной очереди. Таким образом, фильтры этого хука вызываются для всех мышиных и клавиатурных событий, кроме тех, которые проигрываются регистрационным хуком на воспроизведение. Фильтрующие функции могут обработать сообщение (то есть, записать или сохранить событие в памяти, на диске, или и там, и там), но не могут изменять или отменять его. Фильтры этого хука могут находиться и внутри DLL, и в .EXE-файле. В Win32 для этого хука реализован только код HC_ACTION.

HC_ACTION

Windows вызывает хук WH_JOURNALRECORD с этим кодом при удалении события из системной очереди. Этот код сигнализирует фильтрующей функции о том, что это событие является нормальным. В lParam при этом передается указатель на структуру EVENTMSG. Обычная процедура записи состоит в сохранении всех пришедших хуку структур EVENTMSG в памяти или на диске.

Структура EVENTMSG описана в WINDOWS.H следующим образом:
C++
1
2
3
4
5
6
7
typedef struct tagEVENTMSG {
    UINT    message;
    UINT    paramL;
    UINT    paramH;
    DWORD    time;
    HWND     hwnd;
} EVENTMSG;
typedef struct tagEVENTMSG *PEVENTMSG, NEAR *NPEVENTMSG, FAR *LPEVENTMSG;

Элемент message является идентификатором сообщения, одним из значений WM_*. Значения paramL и paramH зависят от источника события - мышь это или клавиатура. Если это событие мыши, в paramL и paramH передаются координаты x и y события. Если это клавиатурное событие, в paramL находятся два значения: скан-код клавиши в HIBYTE и виртуальный код клавиши в LOBYTE, а paramH содержит число повторений. 15-й бит числа повторений служит индикатором дополнительной клавиши. В элементе time хранится системное время (наступления события), которое возвращается функцией GetTickCount. hwnd - это хэндл окна, получившего событие.

Промежуток времени между событиями определяется сравнением элементов time этого события с элементом time последующего события. Разница во времени нужна для корректного проигрывания записанных событий.

WH_JOURNALPLAYBACK

Этот хук используется для посылки Windows клавиатурных и мышиных сообщений таким образом, как будто они проходят через системную очередь. Основное назначение этого хука - проигрывание событий, записанных с помощью хука WH_JOURNALRECORD, но его можно также с успехом использовать для посылки сообщений другим приложениям. Когда к этому хуку прикреплены фильтрующие функции, Windows вызывает первый фильтр в цепочке, чтобы получить событие. Windows игнорирует движения мыши, пока в системе установлен хук WH_JOURNALPLAYBACK. Все остальные события от клавиатуры и мыши сохраняется до тех пор, пока у хука WH_JOURNALPLAYBACK не останется функций-фильтров. Фильтры для этого хука могут располагаться как в DLL, так и в .EXE-файле. Фильтры этого хука должны знать о существовании следующих кодов:

HC_GETNEXT
HC_SKIP
HC_GETNEXT

Windows вызывает WH_JOURNALPLAYBACK с этим кодом, когда получает доступ к входной очереди потока. В большинстве случаев Windows посылает этот код несколько раз для одного и того же сообщения. В lParam фильтру передается указатель на структуру EVENTMSG (см. выше). Фильтрующая функция должна занести в эту структуру код сообщения message, paramL, и paramH. Обычно эти значения копируются из структур, записанных ранее с помощью хука WH_JOURNALRECORD.

Фильтрующая функция должна сообщить Windows когда нужно начинать обработку посланного сообщения. Windows необходимо для этого два значения: (1) период времени, на которое Windows должно задержать обработку сообщения; либо (2) точное время, когда это сообщение должно быть обработано. Обычно время ожидания обработки вычисляется как разница элементов time структуры EVENTMSG предыдущего сообщения и элемента time той же структуры текущего сообщения. Такой прием позволяет проигрывать сообщения на той же скорости, на которой они были записаны. Если сообщение необходимо проиграть немедленно, функция должна вернуть значение периода времен, равное нулю.

Точное значение времени, в которое нужно обработать сообщение, обычно вычисляется сложением времени, которое Windows должна подождать до начала обработки сообщения и текущего системного времени, получаемого функцией GetTickCount. Для немедленного проигрывания сообщения используйте значение, возвращаемое функцией GetTickCount.

Если система не находится в активном состоянии, Windows использует значения, переданные фильтром, для обработки события. Если система находится в активном состоянии, Windows проверяет системную очередь. Каждый раз, когда она это делает, Windows запрашивает то же самое событие с кодом HC_GETNEXT. Каждый раз, когда функция-фильтр получает код HC_GETNEXT, она должна вернуть новое значение времени ожидания, принимая во внимание время, прошедшее между вызовами функций. Элементы message, paramH и paramL, скорее всего, не потребуют изменений между вызовами.

HC_SKIP

Windows вызывает хук WH_JOURNALPLAYBACK после окончания обработки сообщения, полученного от WH_JOURNALPLAYBACK. Это происходит в момент мнимого удаления события из системной очереди (мнимой, так как событие не находилось в системной очереди, а было сгенерировано хуком WH_JOURNALPLAYBACK). Этот код хука сигнализирует фильтрующей функции о том, что событие, возвращенное фильтром во время вызова предыдущего HC_GETNEXT, попало в приложение. Фильтрующая функция должна приготовиться вернуть следующее событие по приходу кода HC_GETEVENT. Когда фильтрующая функция определяет, что больше нечего проигрывать, она должна удалиться из цепочки фильтров хука во время обработки кода HC_SKIP.

WH_KEYBOARD

Windows вызывает этот хук когда функции GetMessage или PeekMessage собираются вернуть сообщения WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN, или WM_CHAR. Когда хук установлен как локальный, эти сообщения должны поступать из входной очереди потока, к которому прикреплен хук. Фильтрующая функция получает виртуальный код клавиши и состояние клавиатуры на момент вызова клавиатурного хука. Фильтры имеют возможность отменить сообщение. Фильтрующая функция, прикрепленная к этому хуку, должна знать о существовании следующих кодов:

HC_ACTION
HC_NOREMOVE
HC_ACTION

Windows вызывает хук WH_KEYBOARD с этим кодом при удалении события из системной очереди.

HC_NOREMOVE

Windows вызывает хук WH_KEYBOARD с этим кодом, когда клавиатурное сообщение не удаляется из очереди, потому что приложение вызвало функцию PeekMessage с параметром PM_NOREMOVE. При вызове хука с этим кодом не гарантируется передача действительного состояние клавиатуры. Приложение должно знать о возможности возникновения подобной ситуации.

WH_MOUSE

Windows вызывает этот хук после вызова функций GetMessage или PeekMessage при условии наличия сообщения от мыши. Подобно хуку WH_KEYBOARD фильтрующие функции получают код - индикатор удаления сообщения из очереди (HC_NOREMOVE), идентификатор сообщения мыши и координаты x и y курсора мыши. Фильтры имеют возможность отменить сообщение. Фильтры для этого хука должны находиться в DLL.

WH_MSGFILTER

Windows вызывает этот хук, когда диалоговое окно, информационное окно, полоса прокрутки или меню получают сообщение, либо когда пользователь нажимает комбинацию клавиш ALT+TAB (или ALT+ESC) при активном приложении, установившем этот хук. Данный хук устанавливается для конкретного потока, поэтому его безопасно размещать как в самом приложении, так и в DLL. Фильтрующая функция этого хука получает следующие коды:

MSGF_DIALOGBOX: Сообщение предназначено либо диалоговому, либо информационному окну.
MSGF_MENU: Сообщение предназначено меню.
MSGF_SCROLLBAR: Сообщение предназначено полосе прокрутки.
MSGF_NEXTWINDOW: Происходит переключение фокуса на следующее окно.

В WINUSER.H определено больше MSGF_-кодов, но в настоящее время они не используются хуком WH_MSGFILTER.

В lParam передается указатель на структуру, содержащую информацию о сообщении. Хуки WH_SYSMSGFILTER вызываются перед хуками WH_MSGFILTER. Если какая-нибудь из фильтрующих функций хука WH_SYSMSGFILTER возвратит TRUE, хуки WH_MSGFILTER не будут вызваны.

WH_SHELL

Windows вызывает этот хук при определенных действиях с окнами верхнего уровня - top-level windows (то есть, с окнами, не имеющими владельца). Когда хук установлен как локальный, он вызывается только для окон, принадлежащих потоку, установившему хук. Этот хук является информирующим, поэтому фильтры не могут изменять или отменять событие. В wParam передается хэндл окна; параметр lParam не используется. Для данного хука в WINUSER.H определены три кода:

HSHELL_WINDOWCREATED: Windows вызывает хук WH_SHELL с этим кодом при создании окна верхнего уровня. Когда фильтр получает управление, это окно уже создано.
HSHELL_WINDOWDESTROYED: Windows вызывает хук WH_SHELL с этим кодом перед удалением окна верхнего уровня.
HSHELL_ACTIVATESHELLWINDOW: На данный момент этот код не используется.
WH_SYSMSGFILTER

Этот хук идентичен хуку WH_MSGFILTER за тем исключением, что он имеет системную область видимости. Windows вызывает этот хук, когда диалоговое окно, информационное окно, полоса прокрутки или меню получает сообщение, либо когда пользователь нажимает комбинации клавиш ALT+TAB или ALT+ESC. Фильтр получает те же коды, что и фильтры хука WH_MSGFILTER.

В lParam передается указатель на структуру, содержащую информацию о сообщении. Хуки WH_SYSMSGFILTER вызываются до хуков WH_MSGFILTER. Если любая из фильтрующих функций хука WH_SYSMSGFILTER вернет TRUE, фильтры хука WH_MSGFILTER не будут вызваны.[/QUOTE]Может, не совсем по теме, но некоторое понятие про хуки составить можно.
Вложения
Тип файла: rar Voyeur.rar (73.8 Кб, 82 просмотров)
2
LK
Заблокирован
15.02.2011, 01:44 11
Если это, если я правильно понял, сетевая игра, то плюньте вы на эту затею .
Похоже, вопрос волнует не только вас, а если так, то решение уже существует, поищиту, я и то кое-что накопал за три секунды
http://www.hackzone.ru/news/view/id/5408/
0
103 / 74 / 10
Регистрация: 29.05.2010
Сообщений: 192
15.02.2011, 08:15 12
ну вообще это как бы хак, и в гарене карается баном
не тот форум выбрали
0
Прогер
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
15.02.2011, 13:29  [ТС] 13
Цитата Сообщение от -LeV- Посмотреть сообщение
ну вообще это как бы хак, и в гарене карается баном
Ето не вашв проблема... Знаю что бан за ето...
LK, Аии что я би без вас делал.. спасибо агромное ))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2011, 13:29
Помогаю со студенческими работами здесь

Как соединиться с запароленной БД
Подскажите, как быть с паролем? В ходе привязки ввожу пароль, жму запомнить - а он не хочет...

Как соединиться через tcpClient?
Код: static void ListenServer() { string listenIP =...

Как соединиться с сервером по сети?
подскажите пожалуйста как скачать или получить доступ к файлу на сервере, использую сетевое...

Как соединиться и работать с mySQL сервером
Доброго времени суток. Пишу приложение на silverlight. Нужно соединиться с mySQL 5.1.х версии....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru