Taskleiste starten



  • Hi,

    folgender Code schliesst die Taskleiste ...

    void closeTraybar()
    {
       HWND handle[2];
    
       // Taskleiste
       handle[0] = FindWindow("Shell_TrayWnd", 0);
    
       // Desktop Icons
       handle[1] = FindWindow("progman", 0);
    
       for(int i=0;i<2;++i) {
    
          if(handle[i])
             SendMessage(handle[i],WM_DESTROY,0,0);
       }
    }
    

    Nun soll nach dem beenden des Programmes die Taskleiste wieder hergestellt werden. Den z.Z. bleibt sie geschlossen und ich bekomm sie nur wieder wenn
    ich mich neu anmelde.

    Einfach SW_HIDE an die Taskleiste schicken und nach dem Programm SW_SHOW geht übrigens nicht da man dann über die Windowstaste das Popupwindow des Starbuttons noch aufrufen kann, und das will ich nicht.

    thx

    [ Dieser Beitrag wurde am 08.02.2003 um 14:53 Uhr von Real_PsychoDAD editiert. ]



  • Wie wäre es, wenn du sie nur versteckst und zum Schluß wieder nazeigst?



  • Das habe ich bereits probiert ...

    Einfach SW_HIDE an die Taskleiste schicken und nach dem Programm SW_SHOW geht übrigens nicht da man dann über die Windowstaste das Popupwindow des Starbuttons noch aufrufen kann, und das will ich nicht.

    Ausserdem verschwinden minimierte Programme dann einfach, wenn ich die Taskleiste aber schliesse sammlen sich minimierte Programme unten am Bildschirm.



  • Du musst einfach den "explorer.exe" - Service wieder starten. Also nicht den WindowsExplorer sondern den Explorer. Dann kommt Desktop, etc wieder...



  • thx!

    folgender Code funktioniert :

    #include <iostream>
    #include <windows.h>
    #include <tlhelp32.h>
    #include <string>
    
    using namespace std;
    
    void closeTraybar()
    {
       HWND handle[2];
    
       // Taskleiste
       handle[0] = FindWindow("Shell_TrayWnd", 0);
    
       // Desktop Icons
       handle[1] = FindWindow("progman", 0);
    
       for(int i=0;i<2;++i) {
    
          if(handle[i])
             SendMessage(handle[i],WM_DESTROY,0,0);
       }
    }
    
    int main()
    {
       closeTraybar();
    
       cout << "press enter to restore the traybar ..." << endl;
    
       cin.get();
    
       // Explorer beenden
       HANDLE hSysSnapshot = NULL;
       PROCESSENTRY32 proc;
    
       proc.dwSize = sizeof(proc);
       hSysSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
       if ( hSysSnapshot == (HANDLE)-1 )
          return 1;
    
       if ( Process32First ( hSysSnapshot, &proc ) )
       {
          proc.dwSize = sizeof(proc);
          do
          {
             // Unter Win98/Me bekommt man den kompletten Pfad ...
             string name=proc.szExeFile;
             for(int i=name.length()-1;i>=0;--i)
             {
                if(name[i] == '\\')
                {
                   name = name.substr(i+1);
                   break;
                }
             }
    
             cout << name << endl;
    
                if(strcmpi(name.c_str(),"explorer.exe") == 0)
               {
                  HANDLE handle = OpenProcess(PROCESS_TERMINATE,TRUE,proc.th32ProcessID);
    
                  if(handle)
                     TerminateProcess(handle,0);
               }
    
          }
          while ( Process32Next ( hSysSnapshot, &proc ) );
       }
    
       CloseHandle ( hSysSnapshot );
    
       // Explorer starten
       cout << endl << endl;
    
       char dir[MAX_PATH];
       char explorer[] = "\\explorer.exe";
       char cwd[MAX_PATH];
    
       GetWindowsDirectory(dir,MAX_PATH-strlen(explorer));
       strcat(dir, explorer);
       GetCurrentDirectory(MAX_PATH,cwd);
    
       ShellExecute(0,"open",dir,cwd,0,SW_SHOWNORMAL);
    
       cin.get();
       return 0;
    }
    

    Das Dumme ist nur unter XP gehen mir beim wiederherstellen der Taskleiste meine
    Schnellstartverknüpfungen weg. Kann man das auch noch irgendwie laden ?



  • Gibts keine elegantere Lösung? Ich weiß nicht ob abschießen und neustarten des Explorers so die schöne Lösung ist 🙂 (Mal davon abgesehen mag ich persönlich als User es garnicht, wenn man mir den Start-Button verweigert...)
    Du könntest z.B. versuchen die Taskleiste wie üblich zu verstecken und dann den Druck der Windows-Taste abzufangen. Einige DirectX-Programme schaffen das definitiv, ich weiß allerdings nicht ob die WinAPI das auch erlaubt (z.B. durch verschlucken der entsprechenden Nachrichten oder Einrichtung eines Taastaturhooks)

    [ Dieser Beitrag wurde am 09.02.2003 um 03:24 Uhr von TriPhoenix editiert. ]



  • Ja das mit dem Explorer abschiessen gefiel mir auch aber ich weiss auch nicht wie es anders gehen soll.

    Ok falls es mir gelänge die Windowstaste abzufangen hätte ich immer noch das Problem das minimierte Programme einfach verschwinden. Wenn die Taskleiste geschlossen ist sammeln sie sich einfach am unteren Bildschirm.
    Dass das nicht ganz user-friendly ist weiss ich auch, ich würde so ein Programm auch nicht benutzen, ich muss es aber programmieren.
    Es soll ein alternative Oberfläche aufbauen und den Benutzer in seinen Rechten einschränken, ihm z.B. nur best. Programme ausführen lassen.
    Gedacht ist das ganze für Internetcafes.



  • ...und den Benutzer in seinen Rechten einschränken, ihm z.B. nur best. Programme ausführen lassen.

    Dafür gibt es Windows 2000


Anmelden zum Antworten