在處理WINCE Kiosk 方面的問題的時候
最近又修改了一些地方 順便也Review了一遍
Summary
1. HKEY_LOCAL_MACHINE\Init
"Launch30"="gwes.exe"
"Depend30"=hex:14,00
LaunchXX XX 是啟動順序
DependXX = hex:14,00 表示 要等 Launch20 和 Launch00 "結束"之後才會Launch
2. 怎知道LaunchXX 結束了呢? (程式怎麼通知系統說 I'm ready?)
就是在程式裏呼叫 SignalStarted(xx)
一般的寫法是 SignalStarted(_wtol(lpCmdLine));
由這邊可以看到,由 WinMain傳進來的第三個參數 LPWSTR lpCmdLine 就是LaunchXX的 XX
3. ShellExecuteEx
ShellExecuteEx 用來載入程式
假如找不到該路徑下的程式 會顯示一個dialogbox 按ok 會回傳0 (Error)
假如找到該程式並執行 會一直往下run(Non-block)
4. 今天如果要等程式執行完才做下個動作(如回到桌面...)
要用 WaitForSingleObject( sei.hProcess, INFINTE );
並且在呼叫 ShellExecuteEx之前 sei.fMask 要設定 SEE_MASK_NOCLOSEPROCESS
不然 sei.hProcess 會是NULL
WaitForSingleObject( hProcess, xx );
hProcess是NULL時 會signaled
5. ProcessStartupFolder()
這個是Explorer (WINCE 的Shell) 處理 startup folder 的 routine
Source Code 在 \WINCE500\PUBLIC\SHELL\OAK\HPC\EXPLORER\MAIN\EXPLORER.CPP 裏,很有參考的價值
其中一段
// Process the items in the start up folder
if (!GetAsyncKeyState(VK_SHIFT))
{
DoStartupTasks();
}
else
{
DEBUGMSG(ZONE_WARNING, (TEXT("Bypassing startup files.\r\n")));
DWORD dw = 0;
if (ERROR_SUCCESS != RegQueryValueEx(HKEY_LOCAL_MACHINE,
TEXT("CalibrationData"),
(LPDWORD) TEXT("HARDWARE\\DEVICEMAP\\TOUCH"),
NULL, NULL, &dw))
{
TouchCalibrate();
}
}
可以看出 在啟動的時候 按住shift鍵 就不會去處理 start up folder裡面的東西
上面 也可以看到 Touch Panel 的 Calibration 流程 如果bapass startup file 之後
會去讀 HKLM\HARDWARE\\DEVICEMAP\\TOUCH
然後做 Calibration 的動作
Lyg.p: Layout Manager successfully initialized to 1
這個message 在 public\common\oak\drivers\keybd\LayMgr\LayMgr.cpp 裏
Lyg.p 應該 是 LayMgr.cpp (但是因為 unicode output , bug )
Explorer(V2.0) taskbar thread started.
在 public\shell\oak\hpc\explorer\taskbar\taskbar.cpp 裏
Fuck, 假如在 build image 的時候沒有用 DCOM (用COM不行)
在 explorer.exe 會停住
沒有留言:
張貼留言