Fuchur84 Geschrieben 14. Mai 2010 Geschrieben 14. Mai 2010 Hallo Leute... Eigentlich ist die Anwendung sehr klein und für nen Profi vermutlich nen Klacks, aber irgendetwas mache ich wohl einfach falsch... ich bin ein totaler Newbee was C++ angeht, bitte also Nachsicht walten lassen und das Erschießungskommando erstmal nur mit Gummigeschossen schießen lassen Das hier ist mein C++ Code: #include <windows.h> #include <stdlib.h> #include <stdio.h> #include "resources.h" HINSTANCE hInst; LRESULT CALLBACK WindProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); int deskBreite = GetSystemMetrics(SM_CXSCREEN); int deskHoehe = GetSystemMetrics(SM_CYSCREEN); int winBreite = 410; int winHoehe = 130; // OpenCommands // CHAR *cmd_stop = "xampp_stop.exe"; CHAR *cmd_start = "xampp_start.exe"; CHAR *cmd_iexplorer = "start iexplore.exe \"localhost/sales_presenter\""; // Integer defining how long to wait for process at max int waitTime = 50000; int xpos = (int) ((deskBreite/2) - (winBreite/2)); int ypos = (int) ((deskHoehe/2) - (winHoehe/2)); INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX WndCls; static char szAppName[] = "Presenter"; MSG Msg; HICON hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(101)); hInst = hInstance; WndCls.cbSize = sizeof(WndCls); WndCls.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW; WndCls.lpfnWndProc = WindProcedure; WndCls.cbClsExtra = 0; WndCls.cbWndExtra = 0; WndCls.hInstance = hInst; WndCls.hIcon = hIcon; WndCls.hCursor = LoadCursor(hInstance, IDC_ARROW); WndCls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndCls.lpszMenuName = NULL; WndCls.lpszClassName = szAppName; WndCls.hIconSm = hIcon; RegisterClassEx(&WndCls); CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, szAppName, "Presenter is starting...", WS_SYSMENU | WS_VISIBLE, xpos, ypos, winBreite, winHoehe, NULL, NULL, hInstance, NULL); while( GetMessage(&Msg, NULL, 0, 0) ) { TranslateMessage(&Msg); DispatchMessage( &Msg); } return static_cast<int>(Msg.wParam); } LRESULT CALLBACK WindProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { HDC hDC, MemDCBmpImg; PAINTSTRUCT Ps; HBITMAP bmpImg; switch(Msg){ case WM_DESTROY: PostQuitMessage(WM_QUIT); break; case WM_PAINT: hDC = BeginPaint(hWnd, &Ps); // Load the bitmap from the resource bmpImg = LoadBitmap(hInst, MAKEINTRESOURCE(102)); // Create a memory device compatible with the above DC variable MemDCBmpImg = CreateCompatibleDC(hDC); // Select the new bitmap SelectObject(MemDCBmpImg, bmpImg); // Copy the bits from the memory DC into the current dc BitBlt(hDC, 0, 0, 400, 94, MemDCBmpImg, 0, 0, SRCCOPY); // Restore the old bitmap DeleteDC(MemDCBmpImg); DeleteObject(bmpImg); EndPaint(hWnd, &Ps); // Handles for process and processinfos STARTUPINFO si; PROCESS_INFORMATION pi; STARTUPINFO si2; PROCESS_INFORMATION pi2; STARTUPINFO si3; PROCESS_INFORMATION pi3; STARTUPINFO si4; PROCESS_INFORMATION pi4; printf("Trying to create process xampp_stop!"); if(!CreateProcess(NULL, cmd_stop, NULL, NULL, FALSE, 0, NULL, NULL, &si, π)){ printf("Process xampp_stop could not be created!"); return 0; } WaitForSingleObject(π, waitTime); CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); printf("Trying to create process xampp_start!"); if(!CreateProcess(NULL, cmd_start, NULL, NULL, FALSE, 0, NULL, NULL, &si2, &pi2)){ printf("Process xampp_start could not be created!"); return 0; } WaitForSingleObject(&pi2, waitTime); CloseHandle( pi2.hProcess ); CloseHandle( pi2.hThread ); printf("Trying to create process ie!"); if(!CreateProcess(NULL, cmd_iexplorer, NULL, NULL, FALSE, 0, NULL, NULL, &si3, &pi3)){ printf("Process ie could not be created!"); return 0; } else { printf("IE-Process was created!"); } WaitForSingleObject(&pi3, INFINITE); CloseHandle( pi3.hProcess ); CloseHandle( pi3.hThread ); printf("Trying to create process xampp_stop!"); if(!CreateProcess(NULL, cmd_stop, NULL, NULL, FALSE, 0, NULL, NULL, &si4, &pi4)){ printf("Process xampp_stop could not be created!"); return 0; } WaitForSingleObject(&pi3, waitTime); CloseHandle( pi4.hProcess ); CloseHandle( pi4.hThread ); // xamp should be offline, now close the application exit(0); break; default: return DefWindowProc(hWnd, Msg, wParam, lParam); } return 0; } Was ich damit vor habe: 1.) Zeige einen Splash-Screen mit einem Bild. -> Funzt 2.) Öffne eine EXE namens "xampp_stop.exe", die im gleichen Verzeichnis liegen wird wie die erzeugte exe. -> Diese schließt einen Xampp, falls dieser geöffnet ist. 3.) Öffne die EXE namenes "xampp_start.exe", die ebenfalls im gleichen Verzeichnis liegen wird wie die erzeugte exe. -> Diese öffnet den Xampp (wieder). 4.) Öffne den InternetExplorer und öffne eine bestimmte URL. (die lokal liegt) 5.) Warte bis IE geschlossen wird und starte dann "xampp_stop.exe". 6.) Wenn xampp_stop.exe fertig is, schließe die Anwendung. Wichtig dabei ist, dass der XAMPP ein bißchen Zeit braucht um runter oder hochzufahren und die Anwendung deshalb auf ihn warten muss, bevor der nächste Schritt stattfindet. Kompilieren tut das ganze, ich bekomme auch den Splash-Screen angezeigt, leider scheinen die Dateien aber nicht aufgerufen zu werden. Als Ausgabe bekomme ich: "Trying to create process xampp_stop!Process xampp_stop could not be created!"... scheint also was mit der Process-Erstellung schiefzulaufen... (das ist der erste Processaufruf, nicht der letzte, soweit ich feststellen konnte) Weiß jemand was ich falsch mache? Vielen lieben Dank im Voraus an alle die etwas antworten / versuchen mir zu helfen / helfen! *Fuchur* Zitieren
Fuchur84 Geschrieben 14. Mai 2010 Autor Geschrieben 14. Mai 2010 PS: Ein kleiner Bug ist beim letzten mal Warten auf den Prozess... da muss natürlich &pi4 rein... macht aber keinen Unterschied fürs Problem. Zitieren
Klotzkopp Geschrieben 14. Mai 2010 Geschrieben 14. Mai 2010 Die MSDN Library empfiehlt:To get extended error information, call GetLastError. Zumindest solltest du aber deine STARTUPINFO-Strukturen ordentlich initialisieren. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.