Programm auf neuem Desktop starten



  • Hallo,
    ich verzweifel irgendwie daran auf meinem neu erstelltem Desktop ein Programm zu starten...
    Ich hab schon einige Posts hier und im I-Net gelesen aber leider nichts gefunden was mir hilft.
    Also unten seht ihr meinen Code und wenn die Funktion ThreadFunc aufgerufen wird soll eigentlich das Programm auf dem neuem Desktop starten.
    Dies klappt aber leider nicht. Da ich mich noch nicht soo gut auskenn weiß ich einfach nicht weiter. Ich muß irgendwo dem CreateProcess mitteilen, dass der den Process auf dem neuen Desktop anzeigen soll aber wie?
    Also wäre Top wenn mir jemand helfen könnte.

    LG
    Sponky

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
     DWORD dwThreadID;
     HANDLE hThread;
     HANDLE thread;
    
    DWORD WINAPI ThreadFunc(LPVOID Data) 
    {
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
     ZeroMemory( &si, sizeof(si) );
     si.cb = sizeof(si);
     ZeroMemory( &pi, sizeof(pi) );
     CreateProcess(NULL, "C:\\test.exe",  NULL, NULL, FALSE, dwThreadID, NULL, NULL, &si, &pi );
     return((DWORD)Data);
    }
    
    void main ()
    {
      // Save original desktop
      HWND hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
      HWND hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
    
      // Create a new Desktop and switch to it
      HWND hNewDesktop = CreateDesktop("NewDesktopName", NULL, NULL, 0, GENERIC_ALL, NULL);
      SetThreadDesktop(hNewDesktop);
      SwitchDesktop(hNewDesktop);
    
      // Execute thread/process in the new desktop
      Sleep(1000);
      thread = CreateThread( NULL, 0, ThreadFunc, NULL, 0, &dwThreadID);
    
      Sleep(2500);
      // Restore original desktop
      SwitchDesktop(hOriginalInput);
      SetThreadDesktop(hOriginalThread);
    
      // Close the Desktop
      CloseDesktop(hNewDesktop);
    }
    


  • So jetzt hab ichs aber:

    #include <vcl.h>
    #pragma hdrstop
    
    HANDLE OpenProc( TCHAR *CmdLine,TCHAR *Desktop)
    {
        DWORD	dwExitCode;
    	STARTUPINFO si;
    	PROCESS_INFORMATION pi;
    	BOOL ProcCreated;
    	ZeroMemory(&si,sizeof(si));
    	si.cb			= sizeof(si);
    	si.dwFlags		= STARTF_USESHOWWINDOW;
    	si.wShowWindow	= SW_SHOWMAXIMIZED;
    	ZeroMemory(&pi,sizeof(pi));
    
    	si.lpDesktop	=	Desktop;
    	ProcCreated =CreateProcess( NULL,CmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi );
    	GetExitCodeProcess(pi.hProcess,&dwExitCode);
    	return pi.hProcess;
    }
    //---------------------------------------------------------------------------
    void main ()
    {
      // Save original desktop
      HWND hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
      HWND hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
    
      // Create a new Desktop and switch to it
      HWND hNewDesktop = CreateDesktop("NewDesktopName", NULL, NULL, 0, GENERIC_ALL, NULL);
      SetThreadDesktop(hNewDesktop);
      SwitchDesktop(hNewDesktop);
    
      // Execute thread/process in the new desktop
      OpenProc("D:\\Program Files\\Mozilla Firefox\\firefox.exe","NewDesktopName");
      Sleep(10000);
    
      // Restore original desktop
      SwitchDesktop(hOriginalInput);
      SetThreadDesktop(hOriginalThread);
      // Close the Desktop
      CloseDesktop(hNewDesktop);
    }
    

    Danke trotzdem.
    LG
    Sponky


Anmelden zum Antworten