Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.251.154] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Основная задача такая: зафиксировать изменение системного времени (с какого на какое). 1. В настройках есть ярлык, который запускает cloc.exe. Как мне по клику на этот ярлык запустить свою прогу? К примеру, удалить ярлык на clock.exe и добавить ярлык на свою прогу. 2. Есть Notification типа NOTIFICATION_EVENT_TIME_CHANGE. Я могу подписаться на это событие, но не понял, как мне получить время с которого и на какое были произведены изменения. Если это возможно, то это идеальный вариант. Заранее всем благодарен! |
Сообщ.
#2
,
|
|
|
В реестре нашел такую ветку для подсветки:
HKLM\ControlPanel\Backlight\ Там два параметра: Group - на какой закладке настроек отображать (0 - 2) Redirect - судя по всему, что запускать (там указано имя файла) Для часов ничего подобного там нет. Предполагаю, что надо просто добавить, но не знаю как должно называться Если кто знает - подскажите, плиз |
Сообщ.
#3
,
|
|
|
Цитата -=CAP=- @ Основная задача такая: зафиксировать изменение системного времени (с какого на какое). если я правильно тебя понял, то надо отловить ручное изменение времени? тогда запускаем фоновое приложение, которое делает следующее while () { GetSystemTime(Time1); Sleep(1000); GetSystemTime(Time2); // если разница между Time1 и Time2 намного больше значения Sleep, то время явно поменялось вручную... } |
Сообщ.
#4
,
|
|
|
kvv@home, а как будет работать этот метод после "пробуждения"?
|
Сообщ.
#5
,
|
|
|
Fester, это не метод
так тоже возможно, но очень уж не стабильно |
Сообщ.
#6
,
|
|
|
Цитата Fester @ а как будет работать этот метод после "пробуждения"? будет лажать, разумеется. =) правда попробовать запускать проверяющее приложение по событию Wake_up ( CeRunAppAtEvent(...,NOTIFICATION_EVENT_WAKEUP), и тогда эту ситуацию можно будет разрулить) или вот еще предложение. один процесс сидит в памяти постоянно (запускаем либо по wake_up либо в автостарте) и периодически сохраняет куда-нибудь текущее время (в файл, в реестр, в бд, в shared area, в memory mapped file - в данном случае не важно) проверяющее приложение запускается по изменению системного времени CeRunAppAtEvent(...,NOTIFICATION_EVENT_TIME_CHANGE), и имеет сохраненное время - то, с которого поменяли, текущее время - то, на которое поменяли. |
Сообщ.
#7
,
|
|
|
А вот еще другое предложение.
Почему бы не сделать приложение полноэкранным? И тем самым запретить пользователю выходить/переключаться из программы и менять систему. (ну придется конечно soft keys переопредилить ) |
Сообщ.
#8
,
|
|
|
Все гараздо прощще, kvv@home, но есть некоторые нюансы
В реестре создаем ветку HKLM\ControlPanel\Clock Туда добавляем ключ Group со значением 0, 1 или 2 (номер закладки в настройках, на которой надо отображать ярлык) А дальше одно из двух: 1. Добавляем ключ Redirect со значением - путь к файлу По идее должен запускаться этот файл вместо Clock.exe, но не отрабатывает. 2. Добавляем ключ Hide со значением 0 или 1 (скрыть или отобразитя ярлак, соответственно) А потом в ControlPanel добавляем свою иконку (такую же ) Но загвоздка в том, что я не знаю, как в ControlPanel добавить свою прогу На данном этапе вот такой тупичок Добавлено Цитата Fester @ Почему бы не сделать приложение полноэкранным? Fester, эта идея у меня возникла в первую очередь Но так нельзя |
Сообщ.
#9
,
|
|
|
Цитата -=CAP=- @ Но загвоздка в том, что я не знаю, как в ControlPanel добавить свою прогу http://www.pocketpcdn.com/articles/controlpanelapplet.html |
Сообщ.
#10
,
|
|
|
Цитата kvv@home @ http://www.pocketpcdn.com/articles/controlpanelapplet.html С этим понятно, но не совсем К примеру, часы - это ехе-шник (clock.exe) А в этом примере необходимо создавать cpl Можно ли туда ручками промисать ссылку на ехе-шник? |
Сообщ.
#11
,
|
|
|
Цитата -=CAP=- @ К примеру, часы - это ехе-шник (clock.exe) А в этом примере необходимо создавать cpl ну можно же создать мелкий cpl, который на DlbClick будет запускать нужный тебе exe. Кстати, поглядел у себя на девайсе. \Windows\clock.exe размером 338 байт, \Windows\clоckdll.dll - 37Кб. т.е. так что функционал плагины Часы - все-таки находится в dll. а clock.exe - это непонятно что, возможно просто ссылка. |
Сообщ.
#12
,
|
|
|
Вот небольшое решение:
Цитата kvv@home @ Пускай так, но все-таки не cpl, а dll ! так что функционал плагины Часы - все-таки находится в dll. а clock.exe - это непонятно что, возможно просто ссылка |
Сообщ.
#13
,
|
|
|
Проблема в другом.
Откомпилил пример на C++ - работает. Переписал то же на C# - не работает (в настройках даже не появляется иконки). Хотя лучше бы понять, почему не работает ключ Redirect в реестре для часов (ветка HKLM\ControlPanel\Clock) Помимо кода в ресурсах есть одна иконка и две строки Вот код: using DeviceApplication1.Properties; using System; using System.Drawing; using System.Collections.Generic; using System.Windows.Forms; namespace DeviceApplication1 { public static class My { const Byte NUM_APPLETS = 1; const Byte CPL_INIT = 1; const Byte CPL_GETCOUNT = 2; const Byte CPL_INQUIRE = 3; const Byte CPL_SELECT = 4; const Byte CPL_DBLCLK = 5; const Byte CPL_STOP = 6; const Byte CPL_EXIT = 7; const Byte CPL_NEWINQUIRE = 8; struct NEWCPLINFO { public UInt32 dwSize; public UInt32 dwFlags; public UInt32 dwHelpContext; public Int32 lData; public IntPtr hIcon; public unsafe fixed Char szName[32]; public unsafe fixed Char szInfo[64]; public unsafe fixed Char szHelpFile[128]; } struct CPLINFO { public Int32 idIcon; public Int32 idName; public Int32 idInfo; public Int32 lData; } public static Int32 CplInit(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { //applets.Add(new CApplet1()); return ~0; } public static Int32 CplGetCount(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { return 1;// applets.GetSize(); } public static Int32 CplInquire(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { unsafe { CPLINFO* pInfo = (CPLINFO*)lParam2; pInfo->idIcon = 1; // 2; pInfo->idName = 1; pInfo->idInfo = 2; pInfo->lData = 0; } return ~0; } public static Int32 CplSelect(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { UInt32 uAppNum = (UInt32)lParam1; Int32 lData = (Int32)lParam2; //CSTControlPanelApplet* pApplet = applets[uAppNum]; //if (pApplet) //{ // pApplet->OnClick(); //} return 0; } public static Int32 CplDblClick(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { UInt32 uAppNum = (UInt32)lParam1; Int32 lData = (Int32)lParam2; //CSTControlPanelApplet* pApplet = applets[uAppNum]; //if (pApplet) //{ // pApplet->OnClick(); //} return 0; } public static Int32 CplNewInquire(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { unsafe { NEWCPLINFO* pInfo = (NEWCPLINFO*)lParam2; //CSTControlPanelApplet* pApplet = applets[lParam1]; //if (pApplet) //{ pInfo->dwSize = (UInt32)sizeof(NEWCPLINFO); pInfo->dwHelpContext = 0; pInfo->hIcon = Resources.Icon1.Handle; pInfo->lData = 0; pInfo->szName[0] = '2'; //(LPCTSTR)pApplet->GetName()); pInfo->szName[1] = '\x00'; pInfo->szInfo[0] = '1'; //(LPCTSTR)pApplet->GetInfo()); pInfo->szInfo[1] = '\x00'; pInfo->szHelpFile[0] = '\x00'; //} } return ~0; } public static Int32 CplIdName(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { return 1; } public static Int32 CPlApplet(IntPtr hwndCpl, UInt32 msg, Int32 lParam1, Int32 lParam2) { switch (msg) { case CPL_INIT: MessageBox.Show("CPL_INIT"); return CplInit(hwndCpl, msg, lParam1, lParam2); case CPL_GETCOUNT: MessageBox.Show("CPL_GETCOUNT"); return CplGetCount(hwndCpl, msg, lParam1, lParam2); case CPL_INQUIRE: MessageBox.Show("CPL_INQUIRE"); return CplInquire(hwndCpl, msg, lParam1, lParam2); case CPL_SELECT: MessageBox.Show("CPL_SELECT"); return CplSelect(hwndCpl, msg, lParam1, lParam2); case CPL_DBLCLK: MessageBox.Show("CPL_DBLCLK"); return CplDblClick(hwndCpl, msg, lParam1, lParam2); case CPL_NEWINQUIRE: MessageBox.Show("CPL_NEWINQUIRE"); return CplNewInquire(hwndCpl, msg, lParam1, lParam2); //case CPL_IDNAME: // return CplIdName(hwndCpl, msg, lParam1, lParam2); } return 0; } } } Прикреплённый файлDeviceApplication1.rar (10.45 Кбайт, скачиваний: 119) |