Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Вниз

Замена системных часов   Найти похожие ветки 

 
FinDelDev   (2002-04-26 11:59) [0]

Уважаемые мастера Delphi, пожалуйста подскажите как вместо обычных часов на SysTray поставить свои. У меня получилось добавить их в автозагрузку и расположить около SysTray, а большего, увы, я не смог. Огромное спасибо всем, кто откликнется на мой вопрос, очень жду ответа.

Небольшое пояснение: в Delphi начал работать совсем недавно, и на Вашем форуме впервые, поэтому извините если вопрос задан некорректно.


 
Cobalt   (2002-04-26 19:50) [1]

Попробуй поискать в MSDN на ключевое слово TrayClockWClass
http://msdn.microsoft.com/library/default.asp


 
Almaz   (2002-04-27 00:37) [2]


> FinDelDev ©

Это довольно проблематично, но решаемо - необходимо внедряться в адресное пространство explorer"a и создавать окно часов уже оттуда, предварительно отключив стандартные.

Удачи.


 
Cobalt   (2002-04-27 08:26) [3]

Хорошая идея, я как-то не подумал о таком ходе. Мне казалось, что должен быть какой-то стандартный интерфейс "для замены".

Только зачем же отключать и создавать заново? Может лучше менять точку входа в оконную функцию, которая будет отрисовывать изображение?


 
PavelOKES   (2002-04-27 10:04) [4]

А мож просто перекрыть цифири часов Explorera своими? Тогда вопрос встает так - как сунуть часы в systray на место стандартных?


 
Nikolay   (2002-04-27 18:27) [5]

нет ппросто сунуть нельзя... обновление идет каждую секунду...
и твои часы будут стираться. :(


 
Cobalt   (2002-04-27 21:49) [6]

У меня есть одна такая прога (не моя) - TClockEx - позволяет задавать форматирование времени и даты по собственному желанию (формат типа "d MMM HH:mm:ss"), а также показывает текущую загрузку памяти и процессора!
На сколько я понял, она именно внедряет ДЛЛ-ку в Эксплорер и заменяет функцию его окна. (Проверено с помощью Visual Studio"s SpyXX).
Насчет внедрения - подробно:
1) находишь хэндл окна класса TrayClockWClass(см. FindWindow)
2)находишь поток (thread), которому принадлежит это окно (см. GetWindowThreadProcessId)
3)Ставишь хук на этот поток (см. ФАК и Win32 Programm Reference (в миру - Win32.hlp)), соответственно, нужна ДЛЛ-ка (из экзешника почему-то ну не ставится хук, хоть плачь;((()
4) посылаешь этому окну сообщение типа WM_NULL
5) сообщение перехватывается твоим хуком, устанавливаешь свою функцию для окна (есть идея дополнительно проверять класс окна, или искать заново, а то еще установишь не тому окну ;))))(см. SetWindowLong)
Да, кстати, не забудь загрузить свою ДЛЛ-ку( LoadLibrary)ещё раз, а то после снятия хука она ведь будет один раз выгружена из Проводника.
6) убираешь хук (идея - посылаешь из хука сообщение своему окну, по которому оно снимает хук)

-------- Вот, в принципе, и все.--------------
Можно выгружать свою прогу (если она не нужна - все ведь делается из ДЛЛ-ки, т.е. отрисовка окна, да и если пользователь убьет прогу, то ДЛЛ-ка будет работать до перезагрузки)

К модератору - претендую если не на добавление в ФАК (вроде первый раз встречаю такой вопрос), то хотя бы в какую-нибудь базу алгоритмов.

С уважением, Cobalt.


 
cok   (2002-04-28 13:50) [7]

Чёто вы загнались
Вставь в свои часы (это убирает виндовые часы, точнее закрывает):

procedure TForm1.FormCreate(Sender: TObject);
var
Wnd:THandle;
begin
Wnd := FindWindow("Shell_TrayWnd", nil);
Wnd := FindWindowEx(Wnd, HWND(0),"TrayNotifyWnd", nil);
Wnd := FindWindowEx(Wnd, HWND(0),"TrayClockWClass", nil);
{ прячем часы }
ShowWindow(Wnd, SW_hide);
height:=1;
width:=1;
end;



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
3-57967
Фантом
2002-06-25 13:33
2002.07.18
Поиск в сетке по части слова


1-58225
ricks
2002-07-07 21:16
2002.07.18
Поворот картинки.


14-58291
Voldemar2
2002-06-21 17:30
2002.07.18
Как изменить свойство о кучи однотипных элементов?


3-57930
Alban
2002-06-24 13:08
2002.07.18
Мастера подскажите новичку как базу формата gdb перевести в bdf


1-58227
Alex
2002-07-07 18:56
2002.07.18
DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский