На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Надпись на часах в трее , Решил я подурачиться... ;)
    Переписал код по другому. Сейчас стал использовать 1 exe файл и 1 dll файл. При завершении exe dll тоже выгружается из процесса, даже не использовал LoadLibrary. Исправил процедуру updateSize, т.к. исчезало окно выбора языка при запуске программы. Для выхода из программы щёлкаем правой кнопкой по часам в трее и появится окно из exe файла в нём щелкаем выход и должно выходить нормально. Тестировал пока только в Windows 7. Вот есть программа Clock Tray Skins для замены часов в трее, она похоже использует кок раз такой подход, как я написал, но в добавок она создаёт окно под окном часов с чёрным фоном, чтобы часы было лучше видеть.
    Прикреплённый файлПрикреплённый файлClock.RAR (7,9 Кбайт, скачиваний: 129)
      Этот код не во всех системах Windows 7 будет работать, надо подменять не только оконную процедуру часов, но и у компонента TrayNotifyWnd. В следующие выходные думаю допишу как-надо и протестирую на других компах с Windows 7.
        Переписал код по другому. Сейчас опять вернулся к тому что подгружаю dll через LoadLibrary и выключаю хук, если этого не делать то dll будет болтаться в других процессах тоже. Но проблема остаётся в выгрузке dll из процесса, т.к. выгрузка не всегда происходит(можно наверно использовать отдельную dll именно для выгрузки dll по такому принципу как загрузка, т.к. в одной dll пришлось использовать хук для загрузки WH_CALLWNDPROC, а для выгрузки WH_GETMESSAGE). В XP не правильно работает процедура updateSize - надо её переписать. Но в целом код работает только бывают небольшие проблемы.
        Прикреплённый файлПрикреплённый файлClock.RAR (9,96 Кбайт, скачиваний: 130)
          Переписал код как раньше. Использую теперь exe для загрузки dll и выгрузки. Всего 1 exe и 3 dll. Код работает в Windows 7 и Windows XP. Загружается и выгружается без проблем, но в Windows 7 нужны права Администратора, без них не будет запускаться.

          Недостаток:

          Если панель задач расположить вертикально то часы не отображаются, думаю это легко можно исправить, изменив процедуру UpdateSize(вместо left задавать top). Не во всех системах Windows 7 запускается программа, подозреваю что может блокировать брандмауэр или просто надо ставить какие-то привилегии, если учетная запись не администратор.
          Прикреплённый файлПрикреплённый файлClock.rar (9,77 Кбайт, скачиваний: 162)
          Сообщение отредактировано: Nikfel -
            Nikfel, мой тебе совет - не выкладывай свои промежуточные решения.
            Доведи прогу до ума, сделай её такой, какой ты её хочешь видеть. И уже тогда выкладывай код.
            Обсуждать тут буквально каждый твой шаг никому особо не интересно. Интересен конечный результат - готовый проект. На него обратит внимание гораздо больше народу, чем сейчас. Соответс-но, всякие там ошибки/проблемы/недочёты/etc. будут быстрее исправляться. Отсюда - и код будет лучше, и проект будет быстрее развиваться (если ты, конечно, именно какой-то свой проект делаешь).

            ЗЫ а по большому счёту - никому это нафиг не нужно :no: Просто когда-то я написАл эту прогу для XP после какого-то ДР, с жуткой похмелюги, чисто на спор (в том состоянии мне казалось это прикольным).
            Ну а сейчас я думаю, что ты зря тратишь время, которое мог бы потратить его на что-то более полезное..

            ЗЫЗЫ хотя, конечно, дело твоё. Просто программ, заменяющих часы в трее очень много. Зачем изобретать очередной лисопед? Или у тебя есть какие-то оригинальные решения? Тогда welcome! ;)
              Цитата aster_x @
              Alex Forth
              Цитата Alex Forth @
              А как свое окошко в трей внедрить?


              Может быть вот так...
              ExpandedWrap disabled
                procedure TForm1.FormCreate(Sender: TObject);
                var h,tnd:THandle;
                    R:TRect;
                begin
                Color:=clRed;
                BorderStyle:=bsNone;
                h := FindWindow('Shell_TrayWnd',nil);
                tnd :=FindWindowEx(h,0,'TrayNotifyWnd',nil);
                 GetWindowRect(tnd,r);
                 SetWindowPos(form1.Handle,HWND_TOPMOST,
                 r.Left,r.Top,r.Right,r.Bottom, SWP_SHOWWINDOW);
                end;


              P.S. попробуй вызвать вот так если верить MSDN то должен вставить прямо в трей.
              SetWindowPos(form1.Handle,
              tnd,//Дескриптор окна куду будет вставленна окошко после позиционирования
              //Но я лично не очень сильно верю. Хотя ... ты можешь проверить сам. :yes:
              r.Left,r.Top,r.Right,r.Bottom, SWP_SHOWWINDOW);

              а как раздвинуть (сделать больше) по ширине панель?

              у меня не влазит, сделал таким макаром
              ExpandedWrap disabled
                  TextOut(DC, r.Left-20, r.Top, Pchar(cdr), length(cdr));
                  TextOut(DC2, r.Left-20, r.Top+16, Pchar(day), length(day));
                  TextOut(DC3, r.Left-20, r.Top+32, Pchar(date), length(date));

              но при таком варианте часы "вылазят" на соседний значек...
              Сообщение отредактировано: Spirit -
                Цитата Spirit @
                а как раздвинуть (сделать больше) по ширине панель?

                Какую панель? Вообще ничего раздвигать не нужно. Просто указываешь нужный размер в CreateWindow/SetWindowPos/etc.
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:
                Страницы: (3) 1 2 [3]  все


                Рейтинг@Mail.ru
                [ Script execution time: 0,0783 ]   [ 21 queries used ]   [ Generated: 20.05.24, 00:44 GMT ]