Уважаемые, у меня работает проект на платформе Win2000, отлавливающий сетевые сообщения. Собственно реализован он по след. схеме: Проект смотрит журнал событий, при изменении кол-ва записей там, смотрит последнюю запись, является-ли она "Application popup", если да, то ложит ее в карман, и, внимание, закрывает окно сообщения. Закрытие окна — это принципиально, т.к. следующее сообщение, пришедшее на данный комп. будет записано в журнал событий только в том случае, усли экран свободен от окна сообщения. Предположим я ухожу с работы домой и блокирую комп. на экране нет окон сообщений и первое пришедшее сообщение записывается в журнал и обрабатывается, а закрывать-то нечего. Проверял список окон в режиме блокировки компа. — нет там окна с заголовком "Служба сообщений". Это окно появится только после разблокирования компьютера. И сл-но все последующие сообшения обработаются только после этого. Выход вижу пока только один, написать окно, которое своим телом закроет все программы, работающие на компе, сворачиваться это окно быдет только при вводе пароля, в этом случае блокировка будет фактически не нужна. Проблема в том, что это окно можно закрыть (ALT+F4), можно снять задачу или процесс (CTRL+ALT+DELETE) и можно переключиться на другое приложение (ALT+TAB). Решение в блокировании вышеуказанных комбинаций клавиш. Как это сделать? Это вполне возможно делается даже не средствами Delphi или API, а в реестре. Спасибо... Linx.
Re: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Что-то у вас тут, молодой человек не то...
Вместо того чтобы ловить сетевые сообщения, вы окошки ловите... Я конечно понимаю что не спортивно это через дверь выходить, когда окно на 14м этаже распахнуто, но всё-же...
З.Ы. И почему это половина вопросов начинающих дельфистов (как ни странно от сишников таких вопросов почти не поступает) — "как заблокирвать Alt+Tab, Ctrl+Esc, etc". Не надо мешать нормальной работе виндов, люди. Надо проги писать так, чтобы они работали.
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Re: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Linx, Вы писали:
L>Уважаемые, у меня работает проект на платформе Win2000, отлавливающий сетевые сообщения. Собственно реализован он по след. схеме: Проект смотрит журнал событий, при изменении кол-ва записей там, смотрит последнюю запись, является-ли она "Application popup", если да, то ложит ее в карман, и, внимание, закрывает окно сообщения. Закрытие окна — это принципиально, т.к. следующее сообщение, пришедшее на данный комп. будет записано в журнал событий только в том случае, усли экран свободен от окна сообщения. Предположим я ухожу с работы домой и блокирую комп. на экране нет окон сообщений и первое пришедшее сообщение записывается в журнал и обрабатывается, а закрывать-то нечего. Проверял список окон в режиме блокировки компа. — нет там окна с заголовком "Служба сообщений". Это окно появится только после разблокирования компьютера. И сл-но все последующие сообшения обработаются только после этого. Выход вижу пока только один, написать окно, которое своим телом закроет все программы, работающие на компе, сворачиваться это окно быдет только при вводе пароля, в этом случае блокировка будет фактически не нужна. Проблема в том, что это окно можно закрыть (ALT+F4), можно снять задачу или процесс (CTRL+ALT+DELETE) и можно переключиться на другое приложение (ALT+TAB). Решение в блокировании вышеуказанных комбинаций клавиш. Как это сделать? Это вполне возможно делается даже не средствами Delphi или API, а в реестре. Спасибо... Linx.
Да, это путь настоящего хацкера
Попробуй поковырять SetProcessWindowStation и иже с ними — очень вероятно то, что окто ВЫВОДИТСЯ, но на другой
десктоп (а не на тот, где окно "Комп заблокирован..."). Вот и напиши сервис, который откроет тот десктоп, и будет
пришибать на нем окна.
PS Но все равно, эт — извращение
OK
Re[2]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
ВГ>очень вероятно то, что окто ВЫВОДИТСЯ, но на другой десктоп
Владимир, если Вы про десктоп компа, с которого это сообщение отсылается, то он чист. И к тому же как быть с тем, что когда блокировка снимается, то на экране появляются сообщения, пришедшие во время блокировки, а на том другом десктопе они в это время исчезают что-ли?... linx
Re[2]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте zaiats_2k, Вы писали:
Z2>Вместо того чтобы ловить сетевые сообщения, вы окошки ловите...
Нет, я как раз писал что ловлю сетевые сообщения.
Z2>Не надо мешать нормальной работе виндов, люди.
У начальства свой взгляд на то, что называть нормальной работой виндов.
Z2>Надо проги писать так, чтобы они работали.
Трудно с этим не согласиться.
Z2>Я конечно понимаю что не спортивно это через дверь выходить, когда окно на 14м этаже распахнуто, но всё-же...
Помогли бы лучше... Если есть способ как то еще сетевые сообщения отлавливать, не обращаясь в журнал событий, то что это за способ? И, опять же как быть с окошками?... С уважением linx.
Re[3]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Linx, Вы писали:
ВГ>>очень вероятно то, что окто ВЫВОДИТСЯ, но на другой десктоп
L>Владимир, если Вы про десктоп компа, с которого это сообщение отсылается, то он чист. И к тому же как быть с тем, что когда блокировка снимается, то на экране появляются сообщения, пришедшие во время блокировки, а на том другом десктопе они в это время исчезают что-ли?... linx
В винде существует понятие десктопов. Они могут открываться, создаваться и т.д. Десктоп по умолчанию имеет имя "Default", а его window station — "WinSta0". А SwitchDesktop позволяет переключатся и делать видимым нужный десктоп. Вот система при блокировке и переключается на другой десктоп. Попробуй в своей проге открыть
десктор "Default", вызвать SetThreadDesktop и поискать окна.
PS Почитай про интерактивные сервисыв M$DN — там много интересного
OK
Re[3]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
L>Помогли бы лучше... Если есть способ как то еще сетевые сообщения отлавливать, не обращаясь в журнал событий, то что это за способ? И, опять же как быть с окошками?... С уважением linx.
Я не совсем въехал что за "сетевые сообщения"? Это те что net send посылаются?
И так ли критично что эти сообщения не будут отловлены до прихода пользователя?
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Re: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Linx, Вы писали:
L>Уважаемые, у меня работает проект на платформе Win2000, отлавливающий сетевые сообщения. Собственно реализован он по след. схеме: Проект смотрит журнал событий, при изменении кол-ва записей там, смотрит последнюю запись, является-ли она "Application popup", если да, то ложит ее в карман, и, внимание, закрывает окно сообщения. Закрытие окна — это принципиально, т.к. следующее сообщение, пришедшее на данный комп. будет записано в журнал событий только в том случае, усли экран свободен от окна сообщения. Предположим я ухожу с работы домой и блокирую комп. на экране нет окон сообщений и первое пришедшее сообщение записывается в журнал и обрабатывается, а закрывать-то нечего. Проверял список окон в режиме блокировки компа. — нет там окна с заголовком "Служба сообщений". Это окно появится только после разблокирования компьютера. И сл-но все последующие сообшения обработаются только после этого. Выход вижу пока только один, написать окно, которое своим телом закроет все программы, работающие на компе, сворачиваться это окно быдет только при вводе пароля, в этом случае блокировка будет фактически не нужна. Проблема в том, что это окно можно закрыть (ALT+F4), можно снять задачу или процесс (CTRL+ALT+DELETE) и можно переключиться на другое приложение (ALT+TAB). Решение в блокировании вышеуказанных комбинаций клавиш. Как это сделать? Это вполне возможно делается даже не средствами Delphi или API, а в реестре. Спасибо... Linx. :(
Плозая новость: application popup, отлавливаемый вами, производится Messenger Service. А он реализован с косяками, и Микрософт подтвердила, что на залоченной машине он теряет сообщения.
Хорошая новость: для того, чтобы не париться с закрытием окон, достаточно написать свою версию Messenger Service.
Делается это следующим образом:
Достаточно зарегистрировать два NetBIOS имени — имя машины и имя пользователя. 16й байт имен надо установить в 03 — это идентификатор мессенджера. В общем, рекомендую почитать MSDN в поисках NetBIOS Reference.
Щас попробую нарисовать простенький сервис на своем пятом друге. Получится — выложу код.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
S>Щас попробую нарисовать простенький сервис на своем пятом друге. Получится — выложу код.
В общем, попробовал нарисовать тестовое приложение.
Почти работает.
Трабл: отправка через net send — процесс довольно сложный.
Во-первых, он передает данные в каком-то екзотическом формате, спецификации на который я не нашел. Я думал, что там только сама строка — нифига, там имена отправителя и получателя тоже зашиты.
Этот формат хакается легко, минут за 15 я наколбасил парсер, который вытаскивает имя отправителя, имя получателя и текст. Ессно, нет гарантии, что он правильный, т.к. половину буфера я просто внаглую поскипал. Возможно, даже нет сенд в домен он парсить не будет — у меня нет возможность протестироваться. в моем домене сидят до черта народу, и делать тестовые нет сенды я не могу.
Второй трабл в том, что мессенджер в ответ отправителю кидает что-то еще.
Если этого не делать, то отправитель получит сообщение об ошибке.
Попробовал сам вручную отправить точно такой же буфер, как принимаю я, своему мессенджер сервису, и прочитать респонс. получается такая хрень:
#255'SMBP', потом 30 нулей.
Попытался отправлять ее в ответ нет сенду — все едино еррор. надо дальше хакать.
Но это гораздо ближе, чем перехват Ctrl-Alt-Del, который сделать невозможно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
От:
Аноним
Дата:
19.04.02 09:52
Оценка:
Здравствуйте Владимир Гренадеров, Вы писали:
ВГ>В винде существует понятие десктопов. Они могут открываться, создаваться и т.д. Десктоп по умолчанию имеет имя "Default", а его window station — "WinSta0". А SwitchDesktop позволяет переключатся и делать видимым нужный десктоп. Вот система при блокировке и переключается на другой десктоп. Попробуй в своей проге открыть ВГ>десктор "Default", вызвать SetThreadDesktop и поискать окна.
ВГ>PS Почитай про интерактивные сервисыв M$DN — там много интересного
То есть с помощью SwitchDesktop я могу переключиться на десктоп с именем "Default", window station — "WinSta0", он появиться у меня на экране, далее я отыскиваю окно с заголовком "Служба сообщений", закрываю его, потом перехожу снова на десктоп с окном Блокировки и жду дальнейшего увеличения записей в журнале событий. Я правильно понял? :))
Re[4]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
ВГ>В винде существует понятие десктопов. Они могут открываться, создаваться и т.д. Десктоп по умолчанию имеет имя "Default", а его window station — "WinSta0". А SwitchDesktop позволяет переключатся и делать видимым нужный десктоп. Вот система при блокировке и переключается на другой десктоп. Попробуй в своей проге открыть ВГ>десктор "Default", вызвать SetThreadDesktop и поискать окна.
ВГ>PS Почитай про интерактивные сервисыв M$DN — там много интересного
Владимир, проверьте пожалуйста логику моих действий. Посылаю на свой комп сообщение по net send. С помощью ф-ии EnumProc я получаю список открытых окон. Первое окно в списке — "Служба сообщений /#32770", ура. Не закрывая окно сообщения блокирую комп. CTRL+ALT+DEL и снова получаю списо окон, в этом списке все те же окна, что и были до блокировки(список большой, построчно я не сверял, но списки ПОЧТИ идентичные) однако окна "Служба сообщений" нет. Если оно отобразилось на кокой-то другой десктоп, то на какой? И вообще, как-то с теорией, предложенной Вами, что сообщения отображаются на другом десктопе все это как-то не согласуется... окошко-то я не закрывал...
А вот, что у меня получилось с использованием ф-ий, предложенных Вами. Конструкция: SwitchDesktop(OpenDesktop('Default',DF_ALLOWOTHERACCOUNTHOOK, false, DESKTOP_SWITCHDESKTOP)) должна сделать видимым и активным десктоп, на котором собственно запущено окно приложения. Пока я не блокирую комп., эта конструкция есть — true, как только блокирую, то false, это вполне логично, не представляю себе, чтобы окно блокировки экрана вместе с десктопом на котором оно лежит вдруг спряталось куда-то под низ.
Однако есть идея, наличие на экране компа окна блокировки экрана можно проверять именно с пом. вышеуказанной конструкциино: true — нет окна, false — есть, если попасть на этот десктоп, то можно было бы например закрыть окно блокировки, но как это сделать? Какое у него имя и что такое window station? И что, если с пом. ф-ии SetThreadDesktop я сопоставлю приложение десктопу с окном блокировки, то оно ТАМ ПОЯВИТЬСЯ?
Прошу прощения за возможно ламерские вопросы, но у меня сейчас трудный период, всего месяц я работаю с API знаете-ли. linx. :user:
Re: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте fishb0ne, Вы писали:
F>Попробуй RegisterHotKey. Я таким образом блокировал Alt-F4 & Alt-Tab. А насчёт Ctrl-Alt-Del к сожалению не знаю
F>
Ребята, а вы не пробовали до логина в Win2000 нажать кнопочку help? Там такое окошко еще висит типа Press Ctrl+Alt+Del to login. Это как раз для вас она сделана. И там написано, что Ctrl+Alt+Del защищает ваш логин, потому что НИ ОДНО ДОЛБАНОЕ ПРИЛОЖЕНИЕ В ВИНДАХ не перехватит эти кнопки и не подсунет свой диалог, похожий на логин.
Точка.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Linx, Вы писали:
L>Здравствуйте Владимир Гренадеров, Вы писали:
ВГ>>В винде существует понятие десктопов. Они могут открываться, создаваться и т.д. Десктоп по умолчанию имеет имя "Default", а его window station — "WinSta0". А SwitchDesktop позволяет переключатся и делать видимым нужный десктоп. Вот система при блокировке и переключается на другой десктоп. Попробуй в своей проге открыть ВГ>>десктор "Default", вызвать SetThreadDesktop и поискать окна.
ВГ>>PS Почитай про интерактивные сервисыв M$DN — там много интересного
L>Владимир, проверьте пожалуйста логику моих действий. Посылаю на свой комп сообщение по net send. С помощью ф-ии EnumProc я получаю список открытых окон. Первое окно в списке — "Служба сообщений /#32770", ура. Не закрывая окно сообщения блокирую комп. CTRL+ALT+DEL и снова получаю списо окон, в этом списке все те же окна, что и были до блокировки(список большой, построчно я не сверял, но списки ПОЧТИ идентичные) однако окна "Служба сообщений" нет. Если оно отобразилось на кокой-то другой десктоп, то на какой? И вообще, как-то с теорией, предложенной Вами, что сообщения отображаются на другом десктопе все это как-то не согласуется... окошко-то я не закрывал... L>А вот, что у меня получилось с использованием ф-ий, предложенных Вами. Конструкция: SwitchDesktop(OpenDesktop('Default',DF_ALLOWOTHERACCOUNTHOOK, false, DESKTOP_SWITCHDESKTOP)) должна сделать видимым и активным десктоп, на котором собственно запущено окно приложения. Пока я не блокирую комп., эта конструкция есть — true, как только блокирую, то false, это вполне логично, не представляю себе, чтобы окно блокировки экрана вместе с десктопом на котором оно лежит вдруг спряталось куда-то под низ. L>Однако есть идея, наличие на экране компа окна блокировки экрана можно проверять именно с пом. вышеуказанной конструкциино: true — нет окна, false — есть, если попасть на этот десктоп, то можно было бы например закрыть окно блокировки, но как это сделать? Какое у него имя и что такое window station? И что, если с пом. ф-ии SetThreadDesktop я сопоставлю приложение десктопу с окном блокировки, то оно ТАМ ПОЯВИТЬСЯ? L>Прошу прощения за возможно ламерские вопросы, но у меня сейчас трудный период, всего месяц я работаю с API знаете-ли. linx.
Еще раз пишу, для тех, кто не читает ответы на свои вопросы: Микрософт призналась в некорректной работе сервиса Messenger под Win2k. В частности, он теряет сообщения когда машина залочена. Не надо городить тут всяких сложностей. Пишите свой обработчик присланных по Net Send сообщений, и не партьте мозги журналу событий и оконной станции.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Sinclair, Вы писали:
S>Еще раз пишу, для тех, кто не читает ответы на свои вопросы: Микрософт призналась в некорректной работе сервиса Messenger под Win2k. В частности, он теряет сообщения когда машина залочена. Не надо городить тут всяких сложностей. Пишите свой обработчик присланных по Net Send сообщений, и не партьте мозги журналу событий и оконной станции.
Я читаю,:shuffle: просто ответов очень много, и все разные. А сейчас я уже и сам вижу что через стандартные API эта проблема не решается, и через реестр похоже тоже (хотя опять же, читал четкие рекомендации, что куда прописать, но не работает), остается переписать библиотеку Gina.dll, об этом пишется в статье rsdn.ru->Статьи->Базовые сервисы->Win API->Расширение MSGina — это просто. Или действительно написать собственный обработчик сообщений по Net Send. Но ни первое ни второе мне пока не по силам. С уважением Linx.
Re[3]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
От:
Аноним
Дата:
23.04.02 06:38
Оценка:
Здравствуйте Sinclair, Вы писали:
S>Ребята, а вы не пробовали до логина в Win2000 нажать кнопочку help? Там такое окошко еще висит типа Press Ctrl+Alt+Del to login. Это как раз для вас она сделана. И там написано, что Ctrl+Alt+Del защищает ваш логин, потому что НИ ОДНО ДОЛБАНОЕ ПРИЛОЖЕНИЕ В ВИНДАХ не перехватит эти кнопки и не подсунет свой диалог, похожий на логин. S>Точка.
И не зачем так сердиться :) , я вот например не знаю как подступиться к написанию этого самого обработчика сообщений по Net Send. Где обещаный код?
Re[3]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Sinclair, Вы писали:
S>Ребята, а вы не пробовали до логина в Win2000 нажать кнопочку help? Там такое окошко еще висит типа Press Ctrl+Alt+Del to login. Это как раз для вас она сделана. И там написано, что Ctrl+Alt+Del защищает ваш логин, потому что НИ ОДНО ДОЛБАНОЕ ПРИЛОЖЕНИЕ В ВИНДАХ не перехватит эти кнопки и не подсунет свой диалог, похожий на логин. S>Точка.
И не зачем так сердиться :) , я вот например не знаю как подступиться к написанию этого самого обработчика сообщений по Net Send. Где обещаный код?
Re[4]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Linx, Вы писали:
L>Здравствуйте Sinclair, Вы писали:
S>>Ребята, а вы не пробовали до логина в Win2000 нажать кнопочку help? Там такое окошко еще висит типа Press Ctrl+Alt+Del to login. Это как раз для вас она сделана. И там написано, что Ctrl+Alt+Del защищает ваш логин, потому что НИ ОДНО ДОЛБАНОЕ ПРИЛОЖЕНИЕ В ВИНДАХ не перехватит эти кнопки и не подсунет свой диалог, похожий на логин. S>>Точка.
L>И не зачем так сердиться
Прошу прощения, просто устал. L>я вот например не знаю как подступиться к написанию этого самого обработчика сообщений по Net Send.
Ну... например, можно почитать MSDN на тему NetBIOS L>Где обещаный код?
Выкладываю код:
unit NetSendForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, nb30,
StdCtrls;
type
TNetSendReceiverFrm = class(TForm)
Button1: TButton;
NetSendAliasEdit: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Buffer: PChar;
len: integer;
NCB: TNCB;
public
end;
var
NetSendReceiverFrm: TNetSendReceiverFrm;
implementation
const
MagicReply: array[1..35] of Char = #255'SMBP'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0;
{$R *.DFM}
function Pad(Source: String; Len: integer; PadWith: Char): String;
var i: integer;
begin
Result:= Source;
SetLength(Result, Len); // Allocate the buffer if needed;if Length(Source)>Len then Exit; // Nothing more to dofor i:= Length(Source)+1 to Len do Result[i]:=PadWith;
end;
procedure TNetSendReceiverFrm.Button1Click(Sender: TObject);
var
LE: TLanaEnum;
// count: integer;
Point: PChar;
SSender,
Recipient: String;
StrN: String;
begin
Cursor:= crHourGlass;
Application.ProcessMessages;
try
StrN:= Pad(NetSendAliasEdit.Text, 15, ' ')+#03;
with NCB do
begin
ncb_command:= Chr(NCBENUM);
ncb_retcode:= Chr(NRC_GOODRET);
ncb_lsn:= #0;
ncb_num:= #0;
ncb_buffer:= @LE;
ncb_length:= sizeof(LE);
ncb_post:= nil;
ncb_lana_num:= #0;
ncb_cmd_cplt:= #0;
ncb_reserve:= #0#0#0#0#0#0#0#0#0;
ncb_event:=0;
end;
Netbios(@NCB);
with NCB do
begin
ncb_command:= Chr(NCBRESET);
ncb_retcode:= Chr(NRC_GOODRET);
ncb_lsn:= #0;
ncb_num:= #0;
ncb_callname:= #255#255#0;
ncb_lana_num:=LE.lana[0];
end;
Netbios(@NCB);
with NCB do
begin
ncb_command:= Chr(NCBADDNAME);
ncb_retcode:= Chr(NRC_GOODRET);
ncb_lsn:= #0;
ncb_num:= #0;
ncb_buffer:= Buffer;
ncb_length:= 1024;
ncb_callname:= '';
Move(StrN[1], ncb_name, 16);
end;
Netbios(@NCB);
while True do// Endless message processing loop...
begin
with NCB do
begin
ncb_command:= Chr(NCBLISTEN);
ncb_callname:= '*';
ncb_rto:= #2; //One second
ncb_sto:= #2;
ncb_retcode:= Chr(NRC_GOODRET);
end;
Netbios(@NCB);
// Now we've got the session!
// Read the data:
with NCB do
begin
ncb_command:= Chr(NCBRECV);
ncb_retcode:= Chr(NRC_GOODRET);
ncb_buffer:= Buffer;
ncb_length:= 1024;
end;
Netbios(@NCB);
len:= NCB.ncb_length;
Point:= Buffer+33; // magic;
// count:= ord(Point^);
Inc(Point, 3);
SSender:= Point; // Now scan the sender name
Inc(Point, length(Ssender)+2);
Recipient:= Point;
Inc(Point, length(recipient)+4);
ShowMessageFmt('Message from %s to %s: %s', [SSender, Recipient, Point]);
with NCB do
begin
ncb_command:= Chr(NCBSEND);
ncb_retcode:= Chr(NRC_GOODRET);
ncb_buffer:= @MagicReply;
ncb_length:= sizeof(MagicReply);
end;
Netbios(@NCB);
// Button1.Caption:= inttohex(ord(NCB.ncb_retcode), 2);
with NCB do
begin
ncb_command:= Chr(NCBHANGUP);
ncb_retcode:= Chr(NRC_GOODRET);
end;
Netbios(@NCB);
end;
finally
Cursor:= crDefault;
end;
end;
procedure TNetSendReceiverFrm.FormCreate(Sender: TObject);
begin
GetMem(Buffer, 1024);
FillChar(Buffer^, 1024, #0);
end;
end.
А вот dfm:
object NetSendReceiverFrm: TNetSendReceiverFrm
Left = 192
Top = 107
Width = 283
Height = 80
Caption = 'NetSendReceiverFrm'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 40
Top = 8
Width = 25
Height = 13
Caption = 'Alias:'
end
object Button1: TButton
Left = 184
Top = 8
Width = 65
Height = 21
Caption = 'Listen'
TabOrder = 0
OnClick = Button1Click
end
object NetSendAliasEdit: TEdit
Left = 72
Top = 8
Width = 113
Height = 21
MaxLength = 15
TabOrder = 1
end
end
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Вопрос по блокированию комбинаций CTRL+ALT+DEL
Здравствуйте Linx, Вы писали:
L>Здравствуйте Sinclair, Вы писали:
L>И не зачем так сердиться , я вот например не знаю как подступиться к написанию этого самого обработчика сообщений по Net Send. Где обещаный код?
Положил код.
Некоторые замечания:
1. Компилялось Delphi 5
2. Работает так же криво, как и родной Messenger, т.е. залипает при приходе сообщения, пока не нажата кнопка — фигня, можно сделать по другому. Например, писать в лог.
3. алиас надо указывать уникальный и БОЛЬШИМИ БУКВАМИ. Если мессенджер сервис активен, то имя машины и имя пользователя, а также имямашины$ будут заняты. Надо вводить что-то еще
Посмотреть, что и как, можно при помощи вызова
nbtstat -n
<03> — это наши имена. Во время работы программы в списек будет дополнительное имя, указанное в поле алиас.
на алиас, указанный в программе, можно делать net send обычным обращом.
4. Я не смог полностью воспроизвести диалог messenger service и net send. Чтобы это сделать, есть следующий алгоритм:
1. пишем протокол буферов, приходящих в приложение, которое я запостил.
2. Пытаемся запихать эти буфера обратно, указывая имя своей машины в качестве собеседника. Получаем то, что нам отвечает Messenger (первый отзыв я уже получил — зашит в коде). Пытаемся понять, как они зависят от исходного сообщения. Добавляем из генерацию в нашу замену messenger. Идем на шаг 1 и повторяем все, пока не придет суксесс.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.