Les APIs Windows sous Dev C++...

Résolu
Kangourou_Nomade Messages postés 92 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 16 janvier 2007 - 19 mai 2006 à 11:12
Kangourou_Nomade Messages postés 92 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 16 janvier 2007 - 19 mai 2006 à 14:23
Bonjour,
j'ai vraiment du mal a trouver un bout de code avec un CreateProcess QUI MARCHE SOUS DEV C++ !
Pouvez vous m'aider svp ?
Jah bless mycode

6 réponses

fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
19 mai 2006 à 14:07
Bonjour,


Ce code est certe un peu crade (j'ai fait ça vite fait pour vérifier que ça marche)

/* DEBUT ***************************************/

#include <windows.h>


#define CMD_NOTEPAD 1000


/*  Declare Windows procedure  */

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);


/*  Make the class name into a global variable  */

char szClassName[ ] = "WindowsApp";


int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,

                   
LPSTR lpszArgument, int nFunsterStil)


{

   HWND
hwnd;              
/* This is the handle for our window */

   MSG
messages;           
/* Here messages to the application are saved */

   WNDCLASSEX wincl;        /* Data structure for the windowclass */


   /* The Window structure */

   wincl.hInstance = hThisInstance;

   wincl.lpszClassName = szClassName;

   wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */

   wincl.style =
CS_DBLCLKS;                
/* Catch double-clicks */

   wincl.cbSize = sizeof (WNDCLASSEX);


   /* Use default icon and mouse-pointer */

   wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

   wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

   wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

   wincl.lpszMenuName =
NULL;                
/* No menu */

   wincl.cbClsExtra =
0;                     
/* No extra bytes after the window class */

   wincl.cbWndExtra =
0;                     
/* structure or the window instance */

   /* Use Windows's default color as the background of the window */

   wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;


   /* Register the window class, and if it fails quit the program */

   if (!RegisterClassEx (&wincl))

      return 0;


   /* The class is registered, let's create the program*/

   hwnd = CreateWindowEx
(0,                  
/* Extended possibilites for variation */

                         
szClassName,         /*
Classname */

                         
"Windows App",       /* Title Text */

                         
WS_OVERLAPPEDWINDOW, /* default window */

                         
CW_USEDEFAULT,       /* Windows decides
the position */

                         
CW_USEDEFAULT,       /* where the window
ends up on the screen */

                         
544,                
/* The programs width */

                         
375,                
/* and height in pixels */

                         
HWND_DESKTOP,        /* The window
is a child-window to desktop */

                         
NULL,               
/* No menu */

                         
hThisInstance,       /* Program Instance
handler */

                         
NULL);              
/* No Window Creation data */


   /* Make the window visible on the screen */

   ShowWindow (hwnd, nFunsterStil);


   PostMessage(hwnd, WM_COMMAND, CMD_NOTEPAD, 0L);

   /* Run the message loop. It will run until GetMessage() returns 0 */

   while (GetMessage (&messages, NULL, 0, 0))

   {

      /* Translate virtual-key messages into character messages */

      TranslateMessage(&messages);

      /* Send message to WindowProcedure */

      DispatchMessage(&messages);

   }


   /* The program return-value is 0 - The value that PostQuitMessage() gave */

   return messages.wParam;

}


void ExecNotepad(HWND hwnd)

{

   STARTUPINFO         siStartupInfo;

   PROCESS_INFORMATION piProcessInfo;


   memset(&siStartupInfo, 0, sizeof(siStartupInfo));

   memset(&piProcessInfo, 0, sizeof(piProcessInfo));

   siStartupInfo.cb = sizeof(siStartupInfo);

   if(CreateProcess("c:\\windows\\notepad.exe",

                       
"",0,0,FALSE,

                       
CREATE_DEFAULT_ERROR_MODE,0,0,

                       
&siStartupInfo,&piProcessInfo) == FALSE)

   {

      // erreur

      MessageBox(hwnd, "y'a comme un problème!", "Erreur", MB_OK|MB_ICONERROR);

   }

}


/*  This function is called by the Windows function DispatchMessage()  */


LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

   switch
(message)                 
/* handle the messages */

   {

      case WM_DESTROY:

         PostQuitMessage
(0);       /* send a WM_QUIT to the
message queue */

         break;

      case WM_COMMAND:

         if (wParam == CMD_NOTEPAD)

            ExecNotepad(hwnd);

         break;

     
default:                     
/* for messages that we don't deal with */

         return DefWindowProc (hwnd, message, wParam, lParam);

   }


    return 0;

}

/* FIN ***************************************/

J'ai simplement fait Fichier/Nouveau/Projet...

Puis Windows Application dans l'onglet Basic

J'ai enfin ajouter 3 bouts de code pour illustrer ton problème.


A NOTER : il faut impérativement que le programme notepad.exe se trouve sous c:\windows, sinon ça ne marche pas.

Cordialement

Fred Cailleau-Lepetit
Soft In The Box
Forum wxWidgets en français
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mai 2006 à 13:44
Tu cherches vraiment mal alors, car un programme qui marche avec VC++ marchera aussi avec Dev-C++.
Ton problème se situe-t-il au niveau de la compilation ou à l'exécution?
0
Kangourou_Nomade Messages postés 92 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 16 janvier 2007
19 mai 2006 à 13:52
>

"Tu cherches vraiment mal alors"

d'accord.

> "Ton problème se situe-t-il au niveau de la compilation ou à l'exécution?"

Au niveau de l'execution : la plupart des codes mettent le premier paramettre a NULL, ca fait un seg fault avec Dev c++.
En lui envoyant une chaine vide a la place, ca passe mais le process n'est pas cree.

> "un programme qui marche avec VC++ marchera aussi avec Dev-C++"

J'ai teste tout les codes que j'ai trouve ici. Je n'ai jamais mon process cree.

Jah bless mycode
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mai 2006 à 14:05
Le code de CreateProcess est situé dans Kernel32.dll, donc Dev-C++ ou VC++ c'est pareil, donc je trouve ton problème bizarre.
En effet, le premier paramètre peut très bien être 0 (voir MSDN)
Es-tu sûr que ton erreur vient bien du CreateProcess?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kangourou_Nomade Messages postés 92 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 16 janvier 2007
19 mai 2006 à 14:19
Merci, j'ai pris ton bout de code de CreateProcess et ca marche nickel.
Comme ca ressemble beaucoup a ce que j'ai vu sur le site,
je vais essayer maintenant de voir ou etait le probleme.

Jah bless mycode
0
Kangourou_Nomade Messages postés 92 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 16 janvier 2007
19 mai 2006 à 14:23
arf, c'etait une question de dossier. Dev c++ chie si on met "notepad.exe" seulement pour le process. Ca y est souvent sur le site.
Merci encore

Jah bless mycode
0
Rejoignez-nous