Главная страница
    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
14-58308
DeMoN-777
2002-06-19 18:18
2002.07.18
Программист


1-58204
Lin Grey
2002-07-06 19:41
2002.07.18
Как удалить из StringGrid выделенную строку


7-58357
KPV-10k
2002-04-25 22:24
2002.07.18
Загрузка/Сохранение веток реестра


1-58147
diww
2002-07-05 13:09
2002.07.18
Как узнать разделитель для дат в Windows?


1-58160
Maikl
2002-07-05 09:54
2002.07.18
Анализ файлов (Формат Doc)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский