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