Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизДвадцатка самых популярных вопросов. Найти похожие ветки
← →
Юрий Зотов © (2004-03-30 22:29) [200]> Rouse_ © (30.03.04 21:38) [199]
Саш, для твоей же коллекции:
> А вот вопросов по базам нинка не наблюдается...
А казалось бы - ведь такое распространенное имя.
> Что, разве в "Базах" никто не сидит?
Нет, только в "Крестах".
← →
Юрий Зотов © (2004-03-30 22:29) [200]> Rouse_ © (30.03.04 21:38) [199]
Саш, для твоей же коллекции:
> А вот вопросов по базам нинка не наблюдается...
А казалось бы - ведь такое распространенное имя.
> Что, разве в "Базах" никто не сидит?
Нет, только в "Крестах".
← →
Piter © (2004-03-30 23:19) [201]Rouse_ (30.03.04 21:38) [199]
А вот вопросов по базам нинка не наблюдается... Что, разве в "Базах" никто не сидит?
ну Vemer, Vlad как минимум писали про базы.
Игорь Шевченко (30.03.04 21:26) [198]
Есть предложение не вносить вопрос про убийство чужого процесса в FAQ, потому как MS пишет, что использовать его надо очень осторожно и при крайней нужде
ну я за свободу информации :) Это проблема человека, использующего эту функцию, а предупредить - предупредим :)
Rouse_ (30.03.04 21:38) [199]
Ну тогда уж думаю стоит и это вычеркнуть
опять не согласен. Пусть кому надо - разбирается, лично я их не боюсь. А вы? Думаю тоже... ну тогда это и не проблема, пусть себе троянов делают, если им так хочется. Перебесятся и поймут, что все уже написано давно и ничем они не выделились, заодно знаний поднакопится
← →
Piter © (2004-03-30 23:19) [201]Rouse_ (30.03.04 21:38) [199]
А вот вопросов по базам нинка не наблюдается... Что, разве в "Базах" никто не сидит?
ну Vemer, Vlad как минимум писали про базы.
Игорь Шевченко (30.03.04 21:26) [198]
Есть предложение не вносить вопрос про убийство чужого процесса в FAQ, потому как MS пишет, что использовать его надо очень осторожно и при крайней нужде
ну я за свободу информации :) Это проблема человека, использующего эту функцию, а предупредить - предупредим :)
Rouse_ (30.03.04 21:38) [199]
Ну тогда уж думаю стоит и это вычеркнуть
опять не согласен. Пусть кому надо - разбирается, лично я их не боюсь. А вы? Думаю тоже... ну тогда это и не проблема, пусть себе троянов делают, если им так хочется. Перебесятся и поймут, что все уже написано давно и ничем они не выделились, заодно знаний поднакопится
← →
Игорь Шевченко © (2004-03-30 23:47) [202]
> пусть себе троянов делают, если им так хочется. Перебесятся
> и поймут, что все уже написано давно и ничем они не выделились,
> заодно знаний поднакопится
Я против. Здесь не филиал xakep.ru
← →
Игорь Шевченко © (2004-03-30 23:47) [202]
> пусть себе троянов делают, если им так хочется. Перебесятся
> и поймут, что все уже написано давно и ничем они не выделились,
> заодно знаний поднакопится
Я против. Здесь не филиал xakep.ru
← →
Rouse_ © (2004-03-30 23:56) [203]> Перебесятся и поймут,
Если не ошибаюсь - то Юрий приводил пример про чайника который зарабатывает деньги при помощи компьютера на лечение своей старой - больной матери и получает в подарок вирус, который губит все результаты его работы...
> [200] Юрий Зотов © (30.03.04 22:29)
Хотел написать НИКАК :))
Как написал нинка... ума не приложу :) Видать весна :))
← →
Rouse_ © (2004-03-30 23:56) [203]> Перебесятся и поймут,
Если не ошибаюсь - то Юрий приводил пример про чайника который зарабатывает деньги при помощи компьютера на лечение своей старой - больной матери и получает в подарок вирус, который губит все результаты его работы...
> [200] Юрий Зотов © (30.03.04 22:29)
Хотел написать НИКАК :))
Как написал нинка... ума не приложу :) Видать весна :))
← →
lyeh © (2004-03-31 04:02) [204]2 panov ©
Вот пока собирать будем эти жалкие 20 вопросов, на очереди еще добрая сотня появится, а потом еще и еще :).
← →
lyeh © (2004-03-31 04:02) [204]2 panov ©
Вот пока собирать будем эти жалкие 20 вопросов, на очереди еще добрая сотня появится, а потом еще и еще :).
← →
lyeh © (2004-03-31 04:07) [205]Ага, там уже и побольше накопилось :)
← →
lyeh © (2004-03-31 04:07) [205]Ага, там уже и побольше накопилось :)
← →
panov © (2004-03-31 10:04) [206]Еще вопрос по БД.
http://delphimaster.net/view/3-1080651328/
← →
panov © (2004-03-31 10:04) [206]Еще вопрос по БД.
http://delphimaster.net/view/3-1080651328/
← →
panov © (2004-03-31 15:54) [207]Еще вопрос:
http://delphimaster.net/view/3-1080651328/
← →
panov © (2004-03-31 15:54) [207]Еще вопрос:
http://delphimaster.net/view/3-1080651328/
← →
Piter © (2004-03-31 23:45) [208]Игорь Шевченко (30.03.04 23:47) [202]
Здесь не филиал xakep.ru
согласен, но в тоже время практически любой ответ на этом форуме можно применяться во вред, никто не знает что за программу на самом деле пишет автор, верно?
А скрыть приложение от Диспетчера задач... ну внедрение в чужой процесс - это ведь достаточно увлекательно! Плохо что используется практически для вредоносных программ, но мне кажется это не повод об этом не писать. Лично мне это интересно просто с точки зрения понимания устройства как это все работает, хотя в реальных программах вряд ли буду применять такие приемы...
Rouse_ (30.03.04 23:56) [203]
Юрий приводил пример про чайника который зарабатывает деньги при помощи компьютера на лечение своей старой - больной матери и получает в подарок вирус, который губит все результаты его работы...
ну не надо драмматизировать, не думаю, что здесь виноваты те, кто пишет об внедрении своего кода в адресное пространство чужого процесса. Люди если заходят - найдут интересующую информацию... тем более вирус это уже совсем другое. С другой стороны внедрение своей программы в тело Exe"шника - ведь тоже вирусоподобный вопрос, правильно? А я бы почитал - мне кажется это интересным
← →
Piter © (2004-03-31 23:45) [208]Игорь Шевченко (30.03.04 23:47) [202]
Здесь не филиал xakep.ru
согласен, но в тоже время практически любой ответ на этом форуме можно применяться во вред, никто не знает что за программу на самом деле пишет автор, верно?
А скрыть приложение от Диспетчера задач... ну внедрение в чужой процесс - это ведь достаточно увлекательно! Плохо что используется практически для вредоносных программ, но мне кажется это не повод об этом не писать. Лично мне это интересно просто с точки зрения понимания устройства как это все работает, хотя в реальных программах вряд ли буду применять такие приемы...
Rouse_ (30.03.04 23:56) [203]
Юрий приводил пример про чайника который зарабатывает деньги при помощи компьютера на лечение своей старой - больной матери и получает в подарок вирус, который губит все результаты его работы...
ну не надо драмматизировать, не думаю, что здесь виноваты те, кто пишет об внедрении своего кода в адресное пространство чужого процесса. Люди если заходят - найдут интересующую информацию... тем более вирус это уже совсем другое. С другой стороны внедрение своей программы в тело Exe"шника - ведь тоже вирусоподобный вопрос, правильно? А я бы почитал - мне кажется это интересным
← →
Игорь Шевченко © (2004-03-31 23:54) [209]Piter © (31.03.04 23:45)
Согласись, что ответ на форуме и помещение в FAQ это все-таки некоторая разница.
> А скрыть приложение от Диспетчера задач...
> Плохо что используется практически для вредоносных программ,
> но мне кажется это не повод об этом не писать.
Я не вижу другого применения для скрытия от Диспетчера задач - вот в чем причина моего неприятия помещения этого вопроса в FAQ.
Разговоры насчет несчастных админов компьютерных клубов, которым во что бы то ни стало, надо скрыть их контрольно-административную программу, не выдерживают, на мой взгляд, никакой критики и являются довольно наивной отмазкой :))
Про внедрение в процессы написано в книжке Рихтера, довольно неплохо написано, рассматриваются разные способы.
← →
Игорь Шевченко © (2004-03-31 23:54) [209]Piter © (31.03.04 23:45)
Согласись, что ответ на форуме и помещение в FAQ это все-таки некоторая разница.
> А скрыть приложение от Диспетчера задач...
> Плохо что используется практически для вредоносных программ,
> но мне кажется это не повод об этом не писать.
Я не вижу другого применения для скрытия от Диспетчера задач - вот в чем причина моего неприятия помещения этого вопроса в FAQ.
Разговоры насчет несчастных админов компьютерных клубов, которым во что бы то ни стало, надо скрыть их контрольно-административную программу, не выдерживают, на мой взгляд, никакой критики и являются довольно наивной отмазкой :))
Про внедрение в процессы написано в книжке Рихтера, довольно неплохо написано, рассматриваются разные способы.
← →
Юрий Зотов © (2004-04-01 00:17) [210]Согласен с Игорем. Если процесс легальный, то все решается средствами администрирования самой системы - сделайте его сервисом и юзер просто не сможет его срубить. И не надо извращаться. А если процесс нелегальный - то и нефиг такие писать. А если кто взялся писать - так пусть сам и мучается, нефиг ему еще и помогать. Соучастником становиться.
Что же насчет "ну не надо драматизировать" - я приводил РЕАЛЬНЫЙ пример, произошедший когда-то давно с одним из моих знакомых. Драматизировать ту драму еще больше - просто уже некуда. С тех пор я этих подонков-вирусотворцев просто ненавижу.
← →
Юрий Зотов © (2004-04-01 00:17) [210]Согласен с Игорем. Если процесс легальный, то все решается средствами администрирования самой системы - сделайте его сервисом и юзер просто не сможет его срубить. И не надо извращаться. А если процесс нелегальный - то и нефиг такие писать. А если кто взялся писать - так пусть сам и мучается, нефиг ему еще и помогать. Соучастником становиться.
Что же насчет "ну не надо драматизировать" - я приводил РЕАЛЬНЫЙ пример, произошедший когда-то давно с одним из моих знакомых. Драматизировать ту драму еще больше - просто уже некуда. С тех пор я этих подонков-вирусотворцев просто ненавижу.
← →
Тимохов © (2004-04-01 15:03) [211]Еще один очень актуальный вопрос в фак.
Не знаю, правда как его назвать, но задолбался уже отвечать так (точно раз десять отвечал).
Вопрос: как мне распечатать файл word.
Ответ:
1. открываешь word
2. начинаешь запись макроса
3. открываешь файл
4. распечатываешь его
5. останаваливаешь запись макроса
6. жмешь alt+f11
7. переносишь макрос в дельфи и выполняешь его через OLE.
← →
Тимохов © (2004-04-01 15:03) [211]Еще один очень актуальный вопрос в фак.
Не знаю, правда как его назвать, но задолбался уже отвечать так (точно раз десять отвечал).
Вопрос: как мне распечатать файл word.
Ответ:
1. открываешь word
2. начинаешь запись макроса
3. открываешь файл
4. распечатываешь его
5. останаваливаешь запись макроса
6. жмешь alt+f11
7. переносишь макрос в дельфи и выполняешь его через OLE.
← →
Piter © (2004-04-01 18:00) [212]Тимохов (01.04.04 15:03) [211]
это не ответ, нужен код, имхо
Игорь Шевченко (31.03.04 23:54) [209]
Про внедрение в процессы написано в книжке Рихтера, довольно неплохо написано, рассматриваются разные способы
написано, конечно. Но с другой стороны, думаю, любой вопрос в FAQ"е освещен в какой-нибудь книжке
← →
Piter © (2004-04-01 18:00) [212]Тимохов (01.04.04 15:03) [211]
это не ответ, нужен код, имхо
Игорь Шевченко (31.03.04 23:54) [209]
Про внедрение в процессы написано в книжке Рихтера, довольно неплохо написано, рассматриваются разные способы
написано, конечно. Но с другой стороны, думаю, любой вопрос в FAQ"е освещен в какой-нибудь книжке
← →
Игорь Шевченко © (2004-04-01 18:03) [213]Piter © (01.04.04 18:00)
> Но с другой стороны, думаю, любой вопрос в FAQ"е освещен
> в какой-нибудь книжке
Вовсе не обязательно. К тому же, FAQ - это часто задаваемые вопросы, а особой частоты вопроса "как внедриться в другой процесс" я, честно говоря, не наблюдаю.
← →
Игорь Шевченко © (2004-04-01 18:03) [213]Piter © (01.04.04 18:00)
> Но с другой стороны, думаю, любой вопрос в FAQ"е освещен
> в какой-нибудь книжке
Вовсе не обязательно. К тому же, FAQ - это часто задаваемые вопросы, а особой частоты вопроса "как внедриться в другой процесс" я, честно говоря, не наблюдаю.
← →
Плохиш (2004-04-01 19:12) [214]Ходил, ходил по и-нету, смотрю, ба фрицы расстарались ;-)
http://www.delphi-source.de/tipps/
> Piter © (01.04.04 18:00) [212]
> Тимохов (01.04.04 15:03) [211]
>
> это не ответ, нужен код, имхо
Там-же http://www.delphi-source.de/tipps/COM_OLE_DDE/?id=30
← →
Плохиш (2004-04-01 19:12) [214]Ходил, ходил по и-нету, смотрю, ба фрицы расстарались ;-)
http://www.delphi-source.de/tipps/
> Piter © (01.04.04 18:00) [212]
> Тимохов (01.04.04 15:03) [211]
>
> это не ответ, нужен код, имхо
Там-же http://www.delphi-source.de/tipps/COM_OLE_DDE/?id=30
← →
MOA © (2004-04-01 20:27) [215]По MSSQL очень частый вопрос:
Почему (неправильно)(не) передаётся параметр типа Datetime?
Ответ: в 99% случаев - используется ODBC, сбросить флаг "Use regional setting when outputting currency, numbers, dates and times" в свойствах источника данных ODBC, иначе в Client network Utility сбросить флаг "use international setting".
← →
MOA © (2004-04-01 20:27) [215]По MSSQL очень частый вопрос:
Почему (неправильно)(не) передаётся параметр типа Datetime?
Ответ: в 99% случаев - используется ODBC, сбросить флаг "Use regional setting when outputting currency, numbers, dates and times" в свойствах источника данных ODBC, иначе в Client network Utility сбросить флаг "use international setting".
← →
panov © (2004-04-01 22:11) [216]Пример InjectLib из Рихтера, написанный на Delphi, помещать в FAQ?
← →
panov © (2004-04-01 22:11) [216]Пример InjectLib из Рихтера, написанный на Delphi, помещать в FAQ?
← →
blackman © (2004-04-01 22:22) [217]>7. переносишь макрос в дельфи и выполняешь его через OLE.
Это просто праздник.
← →
blackman © (2004-04-01 22:22) [217]>7. переносишь макрос в дельфи и выполняешь его через OLE.
Это просто праздник.
← →
Тимохов © (2004-04-02 10:10) [218]
> blackman © (01.04.04 22:22) [217]
> >7. переносишь макрос в дельфи и выполняешь его через OLE.
> Это просто праздник.
что вам конкретно не нравится.
одно дело понять как вообще использовать объектную модель екселя, другое - как исползовать оле в принципе.
на первый вопрос ответ дан - макросы. на второй вопрос - так его вроде явно никто не задавал. зададут - ответим.
← →
Тимохов © (2004-04-02 10:10) [218]
> blackman © (01.04.04 22:22) [217]
> >7. переносишь макрос в дельфи и выполняешь его через OLE.
> Это просто праздник.
что вам конкретно не нравится.
одно дело понять как вообще использовать объектную модель екселя, другое - как исползовать оле в принципе.
на первый вопрос ответ дан - макросы. на второй вопрос - так его вроде явно никто не задавал. зададут - ответим.
← →
Alexander666 © (2004-04-02 10:51) [219]
> Плохиш (01.04.04 19:12) [214]
Не все по-фрицскому понимают. Была бы у них английская версия.
← →
Alexander666 © (2004-04-02 10:51) [219]
> Плохиш (01.04.04 19:12) [214]
Не все по-фрицскому понимают. Была бы у них английская версия.
← →
Anatoly Podgoretsky © (2004-04-02 10:54) [220]blackman © (01.04.04 22:22) [217]
Зря смеешься, обще принятый метод, только не понимай буквально, что именно макрос будет выполняться, хотя это и возможно.
Макрос используется только для создания последовательности, далее эта последовательность команд реализуется с помошью OLE, с незначительными переделками.
← →
Anatoly Podgoretsky © (2004-04-02 10:54) [220]blackman © (01.04.04 22:22) [217]
Зря смеешься, обще принятый метод, только не понимай буквально, что именно макрос будет выполняться, хотя это и возможно.
Макрос используется только для создания последовательности, далее эта последовательность команд реализуется с помошью OLE, с незначительными переделками.
← →
blackman © (2004-04-02 10:56) [221]>Тимохов © (02.04.04 10:10) [218]
Конечно надо описать сам принцип. Однако то, что вы написали - не ответ. И даже можно сказать неверен сам принцип.
Вы же ривели хорошую ссылку:
var MeinWord: Variant;
begin
...
MeinWord := CreateOleObject("Word.Application");
//Verschiedene Aufrufarten
MeinWord.Run("MeinMakro");
MeinWord.Run("Normal.Module1.MAIN");
MeinWord.Run("MeinProjekt.MeinModul.MeineProzedur");
MeinWord.Run("MeinDokument.doc!DiesesModul.DieseProzedur");
...
end;
Надо только расшифровать :)
← →
blackman © (2004-04-02 10:56) [221]>Тимохов © (02.04.04 10:10) [218]
Конечно надо описать сам принцип. Однако то, что вы написали - не ответ. И даже можно сказать неверен сам принцип.
Вы же ривели хорошую ссылку:
var MeinWord: Variant;
begin
...
MeinWord := CreateOleObject("Word.Application");
//Verschiedene Aufrufarten
MeinWord.Run("MeinMakro");
MeinWord.Run("Normal.Module1.MAIN");
MeinWord.Run("MeinProjekt.MeinModul.MeineProzedur");
MeinWord.Run("MeinDokument.doc!DiesesModul.DieseProzedur");
...
end;
Надо только расшифровать :)
← →
blackman © (2004-04-02 11:01) [222]>Anatoly Podgoretsky © (02.04.04 10:54) [220]
>реализуется с помошью OLE, с незначительными переделками.
Если попробовать, то переделки не будут казаться НЕ значительными :)
А самое главное если только начинаешь, то НЕ знаешь, что именно переделывать и сказать новичку "перенеси и выполни" означает толкнуть его в омут без плавсредств :)
← →
blackman © (2004-04-02 11:01) [222]>Anatoly Podgoretsky © (02.04.04 10:54) [220]
>реализуется с помошью OLE, с незначительными переделками.
Если попробовать, то переделки не будут казаться НЕ значительными :)
А самое главное если только начинаешь, то НЕ знаешь, что именно переделывать и сказать новичку "перенеси и выполни" означает толкнуть его в омут без плавсредств :)
← →
Тимохов © (2004-04-02 11:07) [223]
> то НЕ знаешь, что именно переделывать и сказать новичку
> "перенеси и выполни" означает толкнуть его в омут без плавсредств
> :)
пусть спрашивает.
хотя, согласен, что работающий пример то нужен. но их имхо в сети до фига.
в моем ответе важнее принцип, позволяющий самообразовываться.
← →
Тимохов © (2004-04-02 11:07) [223]
> то НЕ знаешь, что именно переделывать и сказать новичку
> "перенеси и выполни" означает толкнуть его в омут без плавсредств
> :)
пусть спрашивает.
хотя, согласен, что работающий пример то нужен. но их имхо в сети до фига.
в моем ответе важнее принцип, позволяющий самообразовываться.
← →
blackman © (2004-04-02 13:25) [224]>но их имхо в сети до фига...
Но мы же об этом сайте говорим ?
← →
blackman © (2004-04-02 13:25) [224]>но их имхо в сети до фига...
Но мы же об этом сайте говорим ?
← →
Тимохов © (2004-04-02 13:27) [225]
> Но мы же об этом сайте говорим ?
об этом.
тогда надо сделать так:
сначала идет действия приведенные мной ранее, затем идет пример конкретной реализации некоего действа в excel через ole. Так пойдет?
← →
Тимохов © (2004-04-02 13:27) [225]
> Но мы же об этом сайте говорим ?
об этом.
тогда надо сделать так:
сначала идет действия приведенные мной ранее, затем идет пример конкретной реализации некоего действа в excel через ole. Так пойдет?
← →
blackman © (2004-04-02 14:07) [226]Совмести и будет очень хорошо :)
← →
blackman © (2004-04-02 14:07) [226]Совмести и будет очень хорошо :)
← →
panov © (2004-04-02 14:14) [227]>Тимохов © (02.04.04 13:27) [225]
Правильно...
Вроде бы останивились на таком принципе формирования FAQ:
В ответ помещается -
1. Полноценный работающий пример с комментариями.
2. Если необходимо, более подробные объяснения.
3. Если есть - ссылки н статьи и информацию в инете.
← →
panov © (2004-04-02 14:14) [227]>Тимохов © (02.04.04 13:27) [225]
Правильно...
Вроде бы останивились на таком принципе формирования FAQ:
В ответ помещается -
1. Полноценный работающий пример с комментариями.
2. Если необходимо, более подробные объяснения.
3. Если есть - ссылки н статьи и информацию в инете.
← →
blackman © (2004-04-02 14:23) [228]>panov © (02.04.04 14:14) [227]
Вашими бы устами мед пить :)
← →
blackman © (2004-04-02 14:23) [228]>panov © (02.04.04 14:14) [227]
Вашими бы устами мед пить :)
← →
panov © (2004-04-02 16:49) [229]>blackman © (02.04.04 14:23) [228]
Нет пределов совершенствованию-)
← →
panov © (2004-04-02 16:49) [229]>blackman © (02.04.04 14:23) [228]
Нет пределов совершенствованию-)
← →
Diamond Cat © (2004-04-03 00:24) [230]Посмею вмешаться в выш плотный коллектив,
ответ сразу на несколько вопросов а именно
Сворачивание в трей
Установка таймера
Уменьшение размеров программы
И добавленно от себя но тоже довольно часто встречающийся вопрос, создание меню в рантайм
Все на API
program Project1;
uses
windows,shellapi,sysutils,
Messages;
{$R *.RES}
var
WndClassEx: TWndClassEx;
nid: TNotifyIconData;
men:thandle;
timecount:integer=0;
function WinProc (hWnd: THandle; nMsg: UINT; wParam, lParam: Cardinal): Cardinal; export; stdcall;
var
p:Tpoint;
Cds: TCopyDataStruct;
begin
getcursorpos(p);
case nmsg of
wm_Destroy , wm_Close , wm_quit:
begin
Shell_NotifyIcon (NIM_delete, @nid); // удаление иконки
postquitmessage(0);
end;
wm_user+10: //получение нашего сообщения и обработка
begin
if lparam=wm_lbuttonup then // была нажата правая кнопка мышы
begin ;
setforegroundwindow(hwnd);
// показываем системное меню
TrackPopupMenu(GetSystemMenu(hwnd,false),TPM_TOPALIGN ,p.x,p.y,0,hwnd,nil);
end;
if lparam=wm_rbuttonup then // была нажата левая кнопка мышы
begin
setforegroundwindow(hwnd);
TrackPopupMenu(men,TPM_TOPALIGN ,p.x,p.y,0,hwnd,nil);
end;
end;
wm_command:
begin
if hiword(wparam)=0 then nmsg:=wm_syscommand; // если из трея показали системное меню то передаем управление
if wparam=1 then
begin
if iswindowvisible(hwnd) then
begin
showwindow(hwnd,sw_hide);
ModifyMenu(men,1, MF_STRING,1,pchar("Восстановить"));
end else
begin
showwindow(hwnd,SW_RESTORE);
ModifyMenu(men,1, MF_STRING,1,pchar("Свернуть в трей"));
end;
end;
if wparam=2 then
begin
if MF_UNCHECKED=GetMenuState(men,2,mf_bycommand) then
begin
CheckMenuItem (men,2,MF_CHECKED);
Setwindowpos(hwnd,hwnd_topmost,0,0,0,0,swp_nosize or swp_nomove);
end else
begin
CheckMenuItem (men,2,MF_UNCHECKED);
Setwindowpos(hwnd,hwnd_notopmost,0,0,0,0,swp_nosize or swp_nomove);
end;
end;
if wparam=3 then
begin
EnableMenuItem(men,4,MF_enabled) ;
EnableMenuItem(men,3,MF_GRAYED) ;
setwindowtext(hwnd,"0");
settimer(hwnd,3,1000,nil);//запуск таймера
end;
if wparam=4 then
begin
EnableMenuItem(men,3,MF_enabled) ;
EnableMenuItem(men,4,MF_GRAYED) ;
killtimer(hwnd,3);//убиваем таймер
setwindowtext(hwnd,wndclassex.lpszClassName);
end;
if wparam=5 then postmessage(hwnd,wm_close,0,0);
end;
wm_timer: //прием сообщений от таймера
begin
timecount:=timecount+1;
setwindowtext(hwnd,pchar(inttostr(timecount))); //способ установки текста на окна, не единственный
end;
end ;{of case}
Result := DefWindowProc (hWnd, nMsg, wParam, lParam);
end;
procedure iconcreate(wnd:hwnd); //создание иконки в трее
begin
nid.cbSize := sizeof (TNotifyIconData);
nid.wnd := wnd; //определяет окно которое будет принимать сообщения от иконки
nid.uID := 1; //идентификатор иконки
nid.uCallBAckMessage := wm_user+10; //сообщение приходящее окну
nid.hIcon :=LoadIcon(hInstance, MakeIntResource("smolicon")); //загрузка иконки
nid.szTip := "Hint от тестовой программы";
nid.uFlags := nif_Message or nif_Icon or nif_Tip; // описание содержимого структуры
Shell_NotifyIcon (NIM_ADD, @nid); //команда на показывание иконки
end;
procedure menucreate(wnd:hwnd); //сздание меню
begin
men:=CreatePopupMenu;
if men=0 then messagebox(wnd,"не создалось меню","Тестовая программа",mb_ok);
AppendMenu(men,mf_ByCommand, 1, "Свернуть в трей");
AppendMenu(men,mf_ByCommand,2,"Поверх остальных окон");
AppendMenu(men,mf_ByCommand,3,"Запустить таймер");
AppendMenu(men,mf_ByCommand,4,"Остановить таймер");
AppendMenu(men,MF_SEPARATOR,0,nil);
AppendMenu(men,mf_ByCommand,5,"Выход");
EnableMenuItem(men,4,MF_GRAYED);
end;
procedure WinMain;
var
hWnd: THandle;
Msg: TMsg;
begin
WndClassEx.cbSize := sizeOf (TWndClassEx);
WndClassEx.lpszClassName := "Тестовая программа";
WndClassEx.style := CS_PARENTDC or CS_VREDRAW ;
WndClassEx.hInstance := HInstance;
WndClassEx.lpfnWndProc := @WinProc;
WndClassEx.cbClsExtra := 0;
WndClassEx.cbWndExtra := 0;
WndClassEx.hIcon := LoadIcon (hInstance, MakeIntResource ("MAINICON"));
WndClassEx.hIconSm := LoadIcon (hInstance, MakeIntResource ("smolicon"));;
WndClassEx.hCursor := LoadCursor (0, IDC_ARROW);
WndClassEx.hbrBackground := COLOR_WINDOW;
WndClassEx.lpszMenuName :="Тестовая программа";
if RegisterClassEx (WndClassEx) = 0 then begin
MessageBox (0, "Ошибка регистрации класса","Тестовая программа", mb_ok + MB_ICONERROR);
halt;
end ;
hWnd := CreateWindowEx (WS_EX_APPWINDOW ,WndClassEx.lpszClassName,"Тестовая программа",WS_VISIBLE or WS_OVERLAPPEDWINDOW ,0,0,400,300, 0,0, HInstance, nil);
if hWnd = 0 then begin
MessageBox (0, "Window not created","Ошибка создания окна", MB_OK);
halt;
end;
iconcreate(hwnd); //создание иконки
menucreate(hwnd); // создание меню
while GetMessage (Msg, 0, 0, 0) do
begin
TranslateMessage (Msg);
DispatchMessage (Msg);
end;
end;
begin
winmain;
end.
Могу еще (если надо) написАть пример как установить соединение по dialup с помощью RASAPI и спомощью TAPI
← →
Diamond Cat © (2004-04-03 00:24) [230]Посмею вмешаться в выш плотный коллектив,
ответ сразу на несколько вопросов а именно
Сворачивание в трей
Установка таймера
Уменьшение размеров программы
И добавленно от себя но тоже довольно часто встречающийся вопрос, создание меню в рантайм
Все на API
program Project1;
uses
windows,shellapi,sysutils,
Messages;
{$R *.RES}
var
WndClassEx: TWndClassEx;
nid: TNotifyIconData;
men:thandle;
timecount:integer=0;
function WinProc (hWnd: THandle; nMsg: UINT; wParam, lParam: Cardinal): Cardinal; export; stdcall;
var
p:Tpoint;
Cds: TCopyDataStruct;
begin
getcursorpos(p);
case nmsg of
wm_Destroy , wm_Close , wm_quit:
begin
Shell_NotifyIcon (NIM_delete, @nid); // удаление иконки
postquitmessage(0);
end;
wm_user+10: //получение нашего сообщения и обработка
begin
if lparam=wm_lbuttonup then // была нажата правая кнопка мышы
begin ;
setforegroundwindow(hwnd);
// показываем системное меню
TrackPopupMenu(GetSystemMenu(hwnd,false),TPM_TOPALIGN ,p.x,p.y,0,hwnd,nil);
end;
if lparam=wm_rbuttonup then // была нажата левая кнопка мышы
begin
setforegroundwindow(hwnd);
TrackPopupMenu(men,TPM_TOPALIGN ,p.x,p.y,0,hwnd,nil);
end;
end;
wm_command:
begin
if hiword(wparam)=0 then nmsg:=wm_syscommand; // если из трея показали системное меню то передаем управление
if wparam=1 then
begin
if iswindowvisible(hwnd) then
begin
showwindow(hwnd,sw_hide);
ModifyMenu(men,1, MF_STRING,1,pchar("Восстановить"));
end else
begin
showwindow(hwnd,SW_RESTORE);
ModifyMenu(men,1, MF_STRING,1,pchar("Свернуть в трей"));
end;
end;
if wparam=2 then
begin
if MF_UNCHECKED=GetMenuState(men,2,mf_bycommand) then
begin
CheckMenuItem (men,2,MF_CHECKED);
Setwindowpos(hwnd,hwnd_topmost,0,0,0,0,swp_nosize or swp_nomove);
end else
begin
CheckMenuItem (men,2,MF_UNCHECKED);
Setwindowpos(hwnd,hwnd_notopmost,0,0,0,0,swp_nosize or swp_nomove);
end;
end;
if wparam=3 then
begin
EnableMenuItem(men,4,MF_enabled) ;
EnableMenuItem(men,3,MF_GRAYED) ;
setwindowtext(hwnd,"0");
settimer(hwnd,3,1000,nil);//запуск таймера
end;
if wparam=4 then
begin
EnableMenuItem(men,3,MF_enabled) ;
EnableMenuItem(men,4,MF_GRAYED) ;
killtimer(hwnd,3);//убиваем таймер
setwindowtext(hwnd,wndclassex.lpszClassName);
end;
if wparam=5 then postmessage(hwnd,wm_close,0,0);
end;
wm_timer: //прием сообщений от таймера
begin
timecount:=timecount+1;
setwindowtext(hwnd,pchar(inttostr(timecount))); //способ установки текста на окна, не единственный
end;
end ;{of case}
Result := DefWindowProc (hWnd, nMsg, wParam, lParam);
end;
procedure iconcreate(wnd:hwnd); //создание иконки в трее
begin
nid.cbSize := sizeof (TNotifyIconData);
nid.wnd := wnd; //определяет окно которое будет принимать сообщения от иконки
nid.uID := 1; //идентификатор иконки
nid.uCallBAckMessage := wm_user+10; //сообщение приходящее окну
nid.hIcon :=LoadIcon(hInstance, MakeIntResource("smolicon")); //загрузка иконки
nid.szTip := "Hint от тестовой программы";
nid.uFlags := nif_Message or nif_Icon or nif_Tip; // описание содержимого структуры
Shell_NotifyIcon (NIM_ADD, @nid); //команда на показывание иконки
end;
procedure menucreate(wnd:hwnd); //сздание меню
begin
men:=CreatePopupMenu;
if men=0 then messagebox(wnd,"не создалось меню","Тестовая программа",mb_ok);
AppendMenu(men,mf_ByCommand, 1, "Свернуть в трей");
AppendMenu(men,mf_ByCommand,2,"Поверх остальных окон");
AppendMenu(men,mf_ByCommand,3,"Запустить таймер");
AppendMenu(men,mf_ByCommand,4,"Остановить таймер");
AppendMenu(men,MF_SEPARATOR,0,nil);
AppendMenu(men,mf_ByCommand,5,"Выход");
EnableMenuItem(men,4,MF_GRAYED);
end;
procedure WinMain;
var
hWnd: THandle;
Msg: TMsg;
begin
WndClassEx.cbSize := sizeOf (TWndClassEx);
WndClassEx.lpszClassName := "Тестовая программа";
WndClassEx.style := CS_PARENTDC or CS_VREDRAW ;
WndClassEx.hInstance := HInstance;
WndClassEx.lpfnWndProc := @WinProc;
WndClassEx.cbClsExtra := 0;
WndClassEx.cbWndExtra := 0;
WndClassEx.hIcon := LoadIcon (hInstance, MakeIntResource ("MAINICON"));
WndClassEx.hIconSm := LoadIcon (hInstance, MakeIntResource ("smolicon"));;
WndClassEx.hCursor := LoadCursor (0, IDC_ARROW);
WndClassEx.hbrBackground := COLOR_WINDOW;
WndClassEx.lpszMenuName :="Тестовая программа";
if RegisterClassEx (WndClassEx) = 0 then begin
MessageBox (0, "Ошибка регистрации класса","Тестовая программа", mb_ok + MB_ICONERROR);
halt;
end ;
hWnd := CreateWindowEx (WS_EX_APPWINDOW ,WndClassEx.lpszClassName,"Тестовая программа",WS_VISIBLE or WS_OVERLAPPEDWINDOW ,0,0,400,300, 0,0, HInstance, nil);
if hWnd = 0 then begin
MessageBox (0, "Window not created","Ошибка создания окна", MB_OK);
halt;
end;
iconcreate(hwnd); //создание иконки
menucreate(hwnd); // создание меню
while GetMessage (Msg, 0, 0, 0) do
begin
TranslateMessage (Msg);
DispatchMessage (Msg);
end;
end;
begin
winmain;
end.
Могу еще (если надо) написАть пример как установить соединение по dialup с помощью RASAPI и спомощью TAPI
← →
Piter © (2004-04-03 18:13) [231]Что-то все встало на месте. Предлагаю обсудить вопросы № 7,8,9:
7) Как запустить процесс от имени другого пользователя
8) Почему во время выполнения дополнительного потока не обновляются объекты на основной форме (Synchronize аж во весь Execute)
9) Как создать таймер средствами Win32Api
7 - надо использовать, вероятно, CreateProcessAsUser. Я с ней не работал, судя по примеру в интернете найденному, код достаточно громоздкий. Разбираться влом. Если у кого есть заготовки - пишите.
8 - если я правильно понял примечание в скобочках, то ответ очевиден:
Метод, вызванный Synchronize, выполняется в контексте основного потока (в этом же потоке идет обновление компонентов VCL), из-за чего отрисовка контролов приостанавливается
9 - я не знаю. Есть кое-какие соображения, но уверен, что есть и общепринятые способы...
← →
Piter © (2004-04-03 18:13) [231]Что-то все встало на месте. Предлагаю обсудить вопросы № 7,8,9:
7) Как запустить процесс от имени другого пользователя
8) Почему во время выполнения дополнительного потока не обновляются объекты на основной форме (Synchronize аж во весь Execute)
9) Как создать таймер средствами Win32Api
7 - надо использовать, вероятно, CreateProcessAsUser. Я с ней не работал, судя по примеру в интернете найденному, код достаточно громоздкий. Разбираться влом. Если у кого есть заготовки - пишите.
8 - если я правильно понял примечание в скобочках, то ответ очевиден:
Метод, вызванный Synchronize, выполняется в контексте основного потока (в этом же потоке идет обновление компонентов VCL), из-за чего отрисовка контролов приостанавливается
9 - я не знаю. Есть кое-какие соображения, но уверен, что есть и общепринятые способы...
← →
Piter © (2004-04-03 18:20) [232]Кстати, про скрытие процесса от Диспетчера задач... трояны говорите. А между прочит, такие вопросы задают авторы сайта!
Сокрытие программы от Task Manager в NT/2000/XP
J_S © (18.07.03 20:28)
Может быть кто-то сталкивался с подобной задачей?
← →
Piter © (2004-04-03 18:20) [232]Кстати, про скрытие процесса от Диспетчера задач... трояны говорите. А между прочит, такие вопросы задают авторы сайта!
Сокрытие программы от Task Manager в NT/2000/XP
J_S © (18.07.03 20:28)
Может быть кто-то сталкивался с подобной задачей?
← →
Diamond Cat © (2004-04-03 19:44) [233]
> Piter ©
> 9) Как создать таймер средствами Win32Api
смотри чуть выше
← →
Diamond Cat © (2004-04-03 19:44) [233]
> Piter ©
> 9) Как создать таймер средствами Win32Api
смотри чуть выше
← →
Игорь Шевченко © (2004-04-03 19:53) [234]Piter © (03.04.04 18:13)
> 7) Как запустить процесс от имени другого пользователя
Код отослан Панову.
← →
Игорь Шевченко © (2004-04-03 19:53) [234]Piter © (03.04.04 18:13)
> 7) Как запустить процесс от имени другого пользователя
Код отослан Панову.
← →
Piter © (2004-04-03 20:34) [235]Игорь Шевченко (03.04.04 19:53) [234]
Код отослан Панову.
народ, вы хоть говорите - какие ответы уже есть? А то непонятно как с вами работать... зачем писать то, что у вас уже есть? Как-то обязанности распределите что ли...
К тому же на мои письма никто не отвечает. Я посылал на adm@delphimaster.ru окончательный вариант моего ответа на вопрос про иконку в SysTray. Но реакции я так и не получил... блин
← →
Piter © (2004-04-03 20:34) [235]Игорь Шевченко (03.04.04 19:53) [234]
Код отослан Панову.
народ, вы хоть говорите - какие ответы уже есть? А то непонятно как с вами работать... зачем писать то, что у вас уже есть? Как-то обязанности распределите что ли...
К тому же на мои письма никто не отвечает. Я посылал на adm@delphimaster.ru окончательный вариант моего ответа на вопрос про иконку в SysTray. Но реакции я так и не получил... блин
← →
Игорь Шевченко © (2004-04-03 21:07) [236]Piter © (03.04.04 20:34)
Вроде, Саша Панов взялся - ему и карты в руки. Про то, что код у меня есть и я поделюсь, я вроде говорил в начале ветки.
Я предлагаю - нехай Саша периодически выкладывает те вопросы из списка, которые остались без ответа, всем, наверное, будет удобно.
← →
Игорь Шевченко © (2004-04-03 21:07) [236]Piter © (03.04.04 20:34)
Вроде, Саша Панов взялся - ему и карты в руки. Про то, что код у меня есть и я поделюсь, я вроде говорил в начале ветки.
Я предлагаю - нехай Саша периодически выкладывает те вопросы из списка, которые остались без ответа, всем, наверное, будет удобно.
← →
Piter © (2004-04-03 22:38) [237]Игорь Шевченко (03.04.04 21:07) [236]
Я предлагаю - нехай Саша периодически выкладывает те вопросы из списка, которые остались без ответа
Можно так. Просто я исходил из того, что если Панов здесь ответа не выложил - значит, ответа нету. По-моему, так будет удобнее, заодно и люди посмотрят - подправят что-нибудь
← →
Piter © (2004-04-03 22:38) [237]Игорь Шевченко (03.04.04 21:07) [236]
Я предлагаю - нехай Саша периодически выкладывает те вопросы из списка, которые остались без ответа
Можно так. Просто я исходил из того, что если Панов здесь ответа не выложил - значит, ответа нету. По-моему, так будет удобнее, заодно и люди посмотрят - подправят что-нибудь
← →
Piter © (2004-04-03 22:43) [238]Diamond Cat (03.04.04 19:44) [233]
смотри чуть выше
а ты столько кода выложил - что разбираться не хочется.
Насчет таймера - подход может и ламерский, но первое что приходит в голову насчет создания таймера на WinApi - это создать доп. поток в котором вызывать что-то типа Sleep, после чего вызывать обработчик таймера, потом опять Sleep и опять обработчик и т.д.
В чем я не прав?
← →
Piter © (2004-04-03 22:43) [238]Diamond Cat (03.04.04 19:44) [233]
смотри чуть выше
а ты столько кода выложил - что разбираться не хочется.
Насчет таймера - подход может и ламерский, но первое что приходит в голову насчет создания таймера на WinApi - это создать доп. поток в котором вызывать что-то типа Sleep, после чего вызывать обработчик таймера, потом опять Sleep и опять обработчик и т.д.
В чем я не прав?
← →
Rouse_ © (2004-04-03 22:48) [239]> [238] Piter © (03.04.04 22:43)
Стало бытьfunction SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT;
Уже забыли? :))
lpTimerFunc: TFNTimerProc): UINT; stdcall;
← →
Rouse_ © (2004-04-03 22:48) [239]> [238] Piter © (03.04.04 22:43)
Стало бытьfunction SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT;
Уже забыли? :))
lpTimerFunc: TFNTimerProc): UINT; stdcall;
← →
Игорь Шевченко © (2004-04-03 23:05) [240]
> насчет создания таймера на WinApi
1) Реализация TTimer из VCL
2) WaitableTimers (совсем API), начиная с Windows 98 и Windows NT 4
3) Для Win2k и выше - Timer Queues. "Timer-queue timers are lightweight objects that enable you to specify a callback function to be called at a specified time."
← →
Игорь Шевченко © (2004-04-03 23:05) [240]
> насчет создания таймера на WinApi
1) Реализация TTimer из VCL
2) WaitableTimers (совсем API), начиная с Windows 98 и Windows NT 4
3) Для Win2k и выше - Timer Queues. "Timer-queue timers are lightweight objects that enable you to specify a callback function to be called at a specified time."
Страницы: 1 2 3 4 5 6 7 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 1.74 MB
Время: 0.152 c