011
24.03.2006, 19:27 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
achja, was wichtig ist:
C++: |
void CMyDialog::CheckShell(LPVOID lpvParam) { CMyDialog*dlg = (CMyDialog*)lpvParam;
while(true) { DWORD ex; if(GetExitCodeProcess(dlg->m_hExplorer,&ex)) { if(ex != STILL_ACTIVE) { dlg->StartShell(); } } Sleep(5000); } }
void CMyDialog::StartShell(void) { STARTUPINFO si; PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) );
CRegKey Key; if(ERROR_SUCCESS == Key.Open(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon")) { Key.SetStringValue("Shell","explorer.exe"); Key.Close(); }
Sleep(1000);
if(!CreateProcess(NULL, EXPLORER, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) ) MessageBox("Kritischer Fehler: Konnte \"explorer.exe\" nicht ausführen!","ERROR",MB_OK|MB_ICONSTOP);
m_hExplorer = pi.hProcess;
Sleep(1000);
if(ERROR_SUCCESS == Key.Open(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon")) { Key.SetStringValue("Shell","mypreshell.exe"); Key.Close(); } }
|
du solltest prüfen ob der explorer abgeschossen wurde und dann ggf die shell neustarten, sonst kriegste nämlich auf "normalem" wege keine startleiste mehr
(CheckShell ist ein ThreadProc) -- class God : public ChuckNorris { }; |