const Num = 13; Spec = Num - 10; keys: array[1..Num] of byte = (byte('X'), byte('V'), byte('C'), byte('B'), byte('Z'), byte('L'), VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN, byte('Q'), byte('S'), byte('N')); var msg: TMsg; id: array[1..Num] of integer; st: string; WA3, handle: THandle; i, key: integer; begin handle:= GetModuleHandle('WAHotKeys'); st:= 'hk '; for i:= 1 to Num do begin st[3]:= char(64+i); id[i]:= GlobalAddAtom(PAnsiChar(st)); RegisterHotKey(handle, id[i], MOD_WIN,
keys[i]); end; while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); WA3:= findwindow(PAnsiChar(RC_Winamp3), nil); // WinAmp3 window if WA3=0 then WA3:=findwindow(PAnsiChar(RC_Winamp), nil); // WinAmp window if (WA3<>0) then begin if ((msg.LParam shl 16) shr 16)=MOD_WIN then begin // MOD_WIN key:= (msg.LParam shr 16); if key=byte('S') then begin if IsWindowVisible(WA3) then ShowWindow(WA3, sw_minimize) else ShowWindow(WA3, sw_restore); end else if key=byte('N') then begin postmessage(WA3, wm_keydown, byte('B'), 0); postmessage(WA3, wm_keyup, byte('B'), 0); end else if key=byte('Q') then begin // UnRegisterHotKeys for i:= 1 to Num do UnRegisterHotKey(handle, id[i]); Halt(Msg.wParam);
end else begin for i:= 1 to (Num-Spec) do begin // for i if key=keys[i] then begin postmessage(WA3, wm_keydown, keys[i], 0); postmessage(WA3, wm_keyup, keys[i], 0); end; end; // for i end; end; // MOD_WIN end; DispatchMessage(Msg); end; Halt(Msg.wParam); end. эта прграмма позволяет управлять винампом. измените код. надеюсь у вас получится Ответ отправлен: 20.10.2003, 18:28 Отправитель: Cybernetic Creature Отвечает THE_PRO
Добрый день, Кирилл! Vidimo Win ix ne prinemayet... , no ya kakta takoye proboval: Budto kokayata proga zaqrujayetsya na autorun-e i zakrivayet ves ekran, a user nicheqo ne mojet podelat! Tak chto navernoye ti chto tam ne to sdelal! Ответ отправлен: 21.10.2003, 09:34 Отправитель: THE_PRO Отвечает samum2000
Доброе время суток, Кирилл! Если я правильно тебя понял, то ты пишешь клавиатурный hook. Тогда убедись, что ты не вызываешь следующую функцию-фильтр. Ответ отправлен: 20.10.2003, 11:30 Отправитель: samum2000
Вопрос № 1050
Здравствуйте, уважаемые эксперты! Разрабатывается система контроля версий исходных кодов на ВСВ 5. Технология клиент/сервер. СУБД - InterBase 6. Сервер хранит базу данных (БД) исходных кодов, которая содержит ссылки на местоположение исходников (файлов), описание файлов, кто их менял, когда менял и зачем это сделал. Исходники располагаются в виде файлов в различных каталогах. Клиент при коннекте с сервером должен видеть эту БД, отметить какие-нибудь файлы и получить их с сервера. Затем внести изменения, отметить их и отправить измененные файлы снова на сервер. Так вот, возникли следующие вопросы: 1. Как при помощи SQL (использую технологию IBX - компоненты ВСВ 5) получить определенные файлы, а также каталог с сервера на клиентскую машину? 2. Как обратно отправить их на сервер? 3. Можно ли это (легко) реализовать через BLOB-поля? Заранее
огромное спасибо!
Доброе время суток, Эдуард! Da mojno! Ответ отправлен: 21.10.2003, 09:21 Отправитель: THE_PRO
Вопрос № 1051
Здравствуйте, эксперты! 1. Поскажите, как программно получить имя папки, из которой запущена программа. 2. Почему при упаковке программы UPX она занимает в памяти больше места (данные Norton System Information). Можно ли как-нибудь уменьшить занимаемую память, кроме как не пользоваться UPX. Спасибо.
Доброе время суток, iron! 1) Полный путь с именем программы передается ей первым параметром, т.е. paramstr(0); 2) На мой взгляд это логично, т.к. чтобы привести сжатую программу снова в рабочий вид, необходимо ее распаковать, а код распаковщика тоже должен занять в памяти место. Когда ты пользуешься UPX, ты сжимаешь ну память, а размер программы на диске, чтобы уменьшить память, надо программу оптимизировать. Ответ отправлен: 22.10.2003, 08:21 Отправитель: samum2000 Отвечает Cybernetic Creature
Доброе время суток, iron! function ExtractFilePath(FileName:String):String; eg Caption:=ExtractFilePath(ParamStr(0)) Ответ отправлен: 23.10.2003, 18:20 Отправитель: Cybernetic Creature Отвечает Marouder
Здравствуйте, iron! 1. Получить имя exe-файла c помощью GetModuleFileName и выделить из этой строки путь. Это - очень просто - просматривай с конца строку пока не встретишь бэкслэш. То, что будет слева от бэкслэша - имя папки. 2. Жалко тебе нескольких килобайт что-ли? Ответ отправлен: 23.10.2003, 13:59 Отправитель: Marouder Отвечает THE_PRO
Доброе время суток, iron! 1. ExtractFilePath(ParamStr(0)) Ответ отправлен: 22.10.2003, 09:55 Отправитель: ART_43
Вопрос № 1052
Привет, народ! Почему код в приложении вылетает, полдня голову ломаю понять не могу, дело, вероятно в какой-то мелочи, поэтому взгляните свежим взглядом и подскажите. Процедура выводит в ListView список текущих процессов.
Здравствуйте, Dick Wint! А второй индекс массива разве не обязательно указывать? И может быть лучше сразу добавлять название в Item у ListView: Item.Caption=ppe.szExeFile; ListView.Items.Add; что-нибудь типа этого. Ответ отправлен: 21.10.2003, 15:46 Отправитель: sir henry Отвечает Marouder
Доброе время суток, Dick Wint! Builder'а нет, проверить не могу, но код очень замудренный. Можно проще сделать. Сказал бы, хоть на какой строке вылетает. Ответ отправлен: 23.10.2003, 14:00 Отправитель: Marouder
Вопрос № 1053
Привет CJ, Bob, Cyber! Сразу же прошу прощения, - никого не хотел обидеть, особенно Cybernetic Creature. Прости за "не оригинальность", я не то совершенно думал когда писал. Мне правда интересно узнать чем ты пользуешься. Это никак не обижает тебя, т.к правильно (по моему URiS писал, не помню) что запомнить всё нельзя а написать можно - главное, что бы литература была. Выложил бы на своём сайте - сразу половина вопросов у народа отпала бы. И тебе ещё раз спасибо за работу. Bob Johnson - у Криса Касперского я и так в списке читателей. Мне вообще интересны идеи по защите. Программирование мне не так уж и интересно, мне главное идеи!, остальное уж сам нарисую. Вот смотри, если встречался с 4-м диском LG караоке, сделанным нашими умельцами с CDcom'a, как они просто обошли копирование файлов подправив TOC. Хотя
я понимаю, что хорошую мысль никто не расскажет, а вдруг? CJ - то же извини. Если отвечаешь - значит стараешься. Но, как правило, спрашивающий уже порылся где-то и не нашёл, а ты на "дозвон по модему " отвечаешь "Есть много исходников!". Или код регистрации мне советуешь зашить в программу, что бы ты его же и нашёл:). Ладно, не обижайся. Ребята, извините, я больше не буду.
Добрый день, Igor! Без обид. Правда критика нужна. а то можем взлететь вверх и не заметим как падаем. Дело в том что мой сайт не готов. и времени нету дорабатывать. как только освобожусь сделаю. Работа жмет . а беру я ответы с различных книг в частности Фаронов, Архангельский, Бобровский. эти три книги супер там про все написано. это не говорит что я ничего не знаю кое что я из головы пишу. ЗЫ А критиковать ты имееш право. критикуй и дальше. только по делу. а если сможещь пришли ответы всех экспертов на твое пред. письмо MHE Danke Schön Ответ отправлен: 23.10.2003, 18:20 Отправитель: Cybernetic Creature Отвечает CJ
Доброе время суток, Igor! Че-то ты добрым стал! То настроение портишь, то нате вам! Конечно стараюсь! Это я согласен, но по повторному вопросу я предложил исходники, которые потом послал. А в письме еще и объяснил! Код? Ну а ты сделай что-бы ни дебагером ни чем подобным просмотреть не смогли. Или ты вообще хочешь создать текствоый файл с паролем? :-) Но то что я ничего не знаю, это было очень обидно так как это ни так! Все нормально! Ответ отправлен: 22.10.2003, 20:01 Отправитель: CJ Отвечает sir henry
Добрый день, Igor! Можно мне сказать? :)) По поводу защиты программ - не совет, а так, голая идея, как Вы любите :)). Хотя реестр уже и оплевали со всех сторон, но думаю, для защиты его можно использовать. Например записать свой ключ не в HKEY_LOCAL_MACHINE\SOFTWARE (где его все могут найти), а куда-нибудь в неожиданное место, например в HKEY_CLASSES_ROOTDEGetBlockFmtNamesParam.DEGetBlockFmtNamesParam :))) В реестре черти сколько напихано и искать ключ поэтому можно только по какому-нибудь шаблону, типа MyProgramProtect. А если отойти от шаблона? Тем более что в программе своей, Вы можете зашифровать обращение к этому ключу. Ответ отправлен: 21.10.2003, 15:21 Отправитель: sir henry Отвечает THE_PRO
Доброе время суток, Igor! THE_PRO Ответ отправлен: 22.10.2003, 16:18 Отправитель: THE_PRO
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.