OVH Cloud OVH Cloud

Exe tout simple

18 réponses
Avatar
Ulrich
Bonjour,

Je voudrais coder un petit wrapper rapidos pour lancer mon appli. Java.
Seulement, quelque soit la fonction utilisées ("system()", execl(), ...)
j'ai toujours la console MSDos qui s'ouvre (même avec javaw) !

Auriez-vous une piste pour m'épargner le lancement de cette console.

Bon code,
Ulrich.

8 réponses

1 2
Avatar
Cyrille \cns\ Szymanski
>> C'est bien Javaw que j'utilise, et c'est là le problème. Pour
clarifier le tout voici mon code :

---
#include <windows.h>

using namespace std;

int main(int argc, char *argv[]) {





...

}

Merci pour votre soutient,
Bon code,
Ulrich.



Mais tu compiles ça en application console ? Tu devrait plutot
utiliser WinMain non ?



Effectivement, la fenêtre que tu vois est sûrement celle de l'appli qui
lance javaw et non celle de java.


--
_|_|_| CnS
_|_| for(n=0;b;n++)
_| b&=b-1; /*pp.47 K&R*/
Avatar
Ulrich
En effet, c'était mon problème ! Je n'ai plus de console qui apparait ! OUF
!

Le semaine dernière, j'avais essayé cette solution sans resultat probant. Le
hic c'est que j'utilisais le flag de la structure "STARTUPINFO" pour "hider"
la frame. Alors qu'il suffisais juste d'utiliser le paramètre
"dwCreationFlags.CREATE_NO_WINDOW" de "CreateProcess".

Merci de votre aide les gars !
Pour les codeurs Java qui veulent faire un Wrapper rapidos il y a le source
en bas.

Bon code,
Ulrich.

PS : A+ Nicolas sur FCLJ ;-)



------------------------
#include <windows.h>

/* 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);

STARTUPINFO si ;
PROCESS_INFORMATION pi ;

ZeroMemory(&si, sizeof(si)) ;
si.cb = sizeof(si) ;
ZeroMemory(&pi, sizeof(pi)) ;

bool b = CreateProcessA(NULL, "javaw.exe TA_MAIN_CLASS", NULL, NULL,
false, CREATE_NO_WINDOW, NULL, NULL, &si, &pi) ;

CloseHandle(pi.hThread) ;
CloseHandle(pi.hProcess) ;

/* 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;
}


/* 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;
default: /* for messages that we don't deal
with */
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}
---------------













"Nicolas Repiquet" a écrit dans le message de
news: 3f8a768e$0$28914$

"Ulrich" a écrit dans le message news:
bmdra4$slp$
> C'est bien Javaw que j'utilise, et c'est là le problème. Pour clarifier


le
> tout voici mon code :
>
> ---
> #include <windows.h>
>
> using namespace std;
>
> int main(int argc, char *argv[]) {
> STARTUPINFO si ;
> PROCESS_INFORMATION pi ;
>
> ZeroMemory(&si, sizeof(si)) ;
> si.cb = sizeof(si) ;
> ZeroMemory(&pi, sizeof(pi)) ;
>
> bool b = CreateProcessA(NULL, "javaw.exe -Xms64m -classpath


skinlf.jar;.
> Skinit -pack aquathemepack.zip main", NULL, NULL, false,


CREATE_NO_WINDOW,
> NULL, NULL, &si, &pi) ;
>
> CloseHandle(pi.hThread) ;
> CloseHandle(pi.hProcess) ;
>
> return(0) ;
> }
>
> Merci pour votre soutient,
> Bon code,
> Ulrich.

Mais tu compiles ça en application console ? Tu devrait plutot utiliser
WinMain non ?

-- Nicolas Repiquet




Avatar
Dominique Vaufreydaz
Bonjour,

Je voudrais coder un petit wrapper rapidos pour lancer mon appli. Java.
Seulement, quelque soit la fonction utilisées ("system()", execl(), ...)
j'ai toujours la console MSDos qui s'ouvre (même avec javaw) !
Auriez-vous une piste pour m'épargner le lancement de cette console.



Tu utilises CRedirect, une classe que tu trouve sur www.codeguru.com

Voila. Doms.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/
Avatar
Ulrich
Thx, mais j'ai enfin résolu le pb !

Bon code,
Ulrich.



"Dominique Vaufreydaz" a écrit dans le
message de news: bme44n$jgp$
Bonjour,

> Je voudrais coder un petit wrapper rapidos pour lancer mon appli. Java.
> Seulement, quelque soit la fonction utilisées ("system()", execl(), ...)
> j'ai toujours la console MSDos qui s'ouvre (même avec javaw) !
> Auriez-vous une piste pour m'épargner le lancement de cette console.

Tu utilises CRedirect, une classe que tu trouve sur www.codeguru.com

Voila. Doms.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/




Avatar
adebaene
"Ulrich" wrote in message news:<bmdumk$9hb$...
En effet, c'était mon problème ! Je n'ai plus de console qui apparait ! OUF
!

Le semaine dernière, j'avais essayé cette solution sans resultat probant. Le
hic c'est que j'utilisais le flag de la structure "STARTUPINFO" pour "hider"
la frame. Alors qu'il suffisais juste d'utiliser le paramètre
"dwCreationFlags.CREATE_NO_WINDOW" de "CreateProcess".

Merci de votre aide les gars !
Pour les codeurs Java qui veulent faire un Wrapper rapidos il y a le source
en bas.


<snip>

Y'a surement un truc qui m'échappe, mais quel intérêt de créer une fenêtre?

Arnaud
Avatar
Ulrich
Bien sur le code n'est pas clean à 100%. Mais c'est logique, on a pas besoin
de créer une fenêtre. Mais il s'agit de mon IDE "Dev-C++" qui a généré le
squelette...


"Arnaud Debaene" a écrit dans le message de
news:
"Ulrich" wrote in message


news:<bmdumk$9hb$...
> En effet, c'était mon problème ! Je n'ai plus de console qui apparait !


OUF
> !
>
> Le semaine dernière, j'avais essayé cette solution sans resultat


probant. Le
> hic c'est que j'utilisais le flag de la structure "STARTUPINFO" pour


"hider"
> la frame. Alors qu'il suffisais juste d'utiliser le paramètre
> "dwCreationFlags.CREATE_NO_WINDOW" de "CreateProcess".
>
> Merci de votre aide les gars !
> Pour les codeurs Java qui veulent faire un Wrapper rapidos il y a le


source
> en bas.
<snip>

Y'a surement un truc qui m'échappe, mais quel intérêt de créer une


fenêtre?

Arnaud


Avatar
Arnaud Debaene
Ulrich wrote:
Bien sur le code n'est pas clean à 100%. Mais c'est logique, on a pas
besoin de créer une fenêtre. Mais il s'agit de mon IDE "Dev-C++" qui
a généré le squelette...



Ben oui, mais supprimer cette fenêtre ca fait passer le code de 108 à 18
lignes :-)

#include <windows.h>

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR
lpszArgument, int nFunsterStil)
{
STARTUPINFO si ;
PROCESS_INFORMATION pi ;

ZeroMemory(&si, sizeof(si)) ;
si.cb = sizeof(si) ;
ZeroMemory(&pi, sizeof(pi)) ;

bool b = CreateProcessA(NULL, "javaw.exe TA_MAIN_CLASS", NULL, NULL,
false, CREATE_NO_WINDOW, NULL, NULL, &si, &pi) ;

CloseHandle(pi.hThread) ;
CloseHandle(pi.hProcess) ;

return 0;
}

Arnaud
Avatar
Ulrich
Je suis d'une paresse incommensurable. Bien sur, je l'avais cleané pour mon
code perso.

Merci pour le clean.
Ulrich.


"Arnaud Debaene" a écrit dans le message de
news: 3f8c26f0$0$4495$
Ulrich wrote:
> Bien sur le code n'est pas clean à 100%. Mais c'est logique, on a pas
> besoin de créer une fenêtre. Mais il s'agit de mon IDE "Dev-C++" qui
> a généré le squelette...

Ben oui, mais supprimer cette fenêtre ca fait passer le code de 108 à 18
lignes :-)

#include <windows.h>

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,


LPSTR
lpszArgument, int nFunsterStil)
{
STARTUPINFO si ;
PROCESS_INFORMATION pi ;

ZeroMemory(&si, sizeof(si)) ;
si.cb = sizeof(si) ;
ZeroMemory(&pi, sizeof(pi)) ;

bool b = CreateProcessA(NULL, "javaw.exe TA_MAIN_CLASS", NULL, NULL,
false, CREATE_NO_WINDOW, NULL, NULL, &si, &pi) ;

CloseHandle(pi.hThread) ;
CloseHandle(pi.hProcess) ;

return 0;
}

Arnaud




1 2