Zum Inhalt springen

WinAPI Problem: Fehler beim erzeugen von Prozessen...


Empfohlene Beiträge

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*

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...