Partage
  • Partager sur Facebook
  • Partager sur Twitter

a

a

Sujet résolu
8 juillet 2016 à 2:23:00

a

-
Edité par 238 7 juillet 2024 à 11:59:53

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2016 à 3:32:13

ShowWindow(GetConsoleWindow(), SW_HIDE);
  • Partager sur Facebook
  • Partager sur Twitter
J-1 avant demain
8 juillet 2016 à 9:03:22

Si tu veux simplement que le terminal disparaisse, tu peux compiler avec -mwindows pour GCC (MinGW) et /SUBSYSTEM:windows /ENTRY:mainCRTStartup pour VS. En général on active ces options quand on compile en release.

Si tu veux le faire dynamiquement, comme Woly montre, avec GetConsoleWindow().

  • Partager sur Facebook
  • Partager sur Twitter

git is great because Linus did it, mercurial is better because he didn't.

8 juillet 2016 à 11:19:52

a

-
Edité par 238 7 juillet 2024 à 11:59:57

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2016 à 11:49:21

> "GetConsoleWindows was not declared in this scope"

C'est quoi ce "s" en fin de "GetConsoleWindow" du message d'erreur ?

Y aurait pas une vieille typo bien pourri ?

>et d'ou viens l'argument "GetConsoleWindow()" ?

RTFM

https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms683175(v=vs.85).aspx

Le paragraphe "Remarks", c'est pas de la décoration.

"Handle", c'est poignée de porte.

Concrètement, c'est un machin qui permet d'identifier un élément, généralement du Kernel.

Très souvent, un handle, c'est un nombre qui correspond à un indice dans un tableau contenant tous les éléments d'un type données. C'est le cas des handles de fichier, ou 0 indique handle du premier "fichier" ouvert (depuis UNIX, les 3 premiers handle de fichier sont réservés pour la console), etc...

Le handle peut aussi être une adresse qui définit sans équivoque un élément. Dans le cas des Dll, l'handle est l'adresse de début du code de la Dll.

-
Edité par bacelar 8 juillet 2016 à 13:58:00

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
8 juillet 2016 à 12:15:07

a

-
Edité par 238 7 juillet 2024 à 12:00:01

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2016 à 13:57:38

>Non j'ai trouvé mon erreur, juste un include qui manquait!

Ouais, bof, que l'inclusion d'un fichier d'en-tête change la plateforme cible du projet (c'est le sens de la remarque dans la documentation), c'est très très moyen.

> je ne vois pas la difference entre GetConsoleWindow et GetForegroundWindow..

Vous confondez la fenêtre ayant le focus clavier (ForegroundWindow), qui n'est donc pas forcement une fenêtre de l'application de la fenêtre associé à la console de l'application courante (ConsoleWindow).

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
8 juillet 2016 à 14:43:06

a

-
Edité par 238 7 juillet 2024 à 12:00:04

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2016 à 15:24:34

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
8 juillet 2016 à 16:00:53

Artanno62 a écrit:

Alors je viens de tester le code pour agrandir la fenêtre avec le focus clavier mais cela ne fais que agrandir ma console et non pas le notepad..

-
Edité par Artanno62 il y a environ 1 heure


Je suppose que tu as testé avec le code que tu as posté précédemment :

HWND hwnd;
hwnd = GetForegroundWindow();
Sleep(3000);
ShowWindow(hwnd, SW_MAXIMIZE);

Tu as surement dû mettre un "Sleep(3000)" en pensant que tu pourrais sélectionner la fenêtre de Notepad.

Le problème c'est que là dés que tu exécutes le programme, GetForegroundWindow() est appelée avant le Sleep(3000) donc c'est la fenêtre de console qui va être prise en compte en premier.

Il faudrait donc inverser ces deux lignes:

// On a 3 secondes pour sélectionner la fenêtre Notepad par ex
Sleep(3000);

HWND hwnd;
hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_MAXIMIZE);


Après comme l'a dit bacelar, à toi de rajouter les vérifications de valeurs de retour.

  • Partager sur Facebook
  • Partager sur Twitter
J-1 avant demain
8 juillet 2016 à 17:26:16

a

-
Edité par 238 7 juillet 2024 à 12:00:13

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2016 à 17:34:57

S'il est hide, il n'a pas le focus clavier, s'il n'a pas le focus clavier, il ne reçoit pas "automatiquement" des touches clavier.

Il fonctionne, mais ne reçoit pas les touches clavier car c'est l'application en avant-plan, avec le focus clavier, qui reçoit les touches du clavier.

Que cherchez-vous à faire, concrètement ?

-
Edité par bacelar 8 juillet 2016 à 17:37:39

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
8 juillet 2016 à 18:07:40

a

-
Edité par 238 7 juillet 2024 à 12:00:16

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2016 à 18:22:07

>D'accord bah écoute je vais me diriger vers "GetAsynKey()"

Pour ça, faut faire un pooling tout moisi et cela ne désactivera pas la notification à l'application en avant-plan.

Je ne comprends pas pourquoi vous voulez faire un truc aussi tordu pour l'utilisateur final.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
8 juillet 2016 à 20:04:33

a

-
Edité par 238 7 juillet 2024 à 12:00:19

  • Partager sur Facebook
  • Partager sur Twitter
11 juillet 2016 à 11:44:29

>Alors tu as surement une autre solution?

Commencez par répondre à mes questions :

>Pourquoi vous voulez faire un truc aussi tordu pour l'utilisateur final ?

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
11 juillet 2016 à 12:26:15

bacelar a écrit:

Pourquoi vous voulez faire un truc aussi tordu pour l'utilisateur final ?

Moi je sens soit :

  • keylogger
  • clone de zhider
  • Partager sur Facebook
  • Partager sur Twitter

git is great because Linus did it, mercurial is better because he didn't.

7 juillet 2024 à 14:19:18

Bonjour, on ne supprime pas ses message après avoir reçu de l'aide cela rend la discussion incompréhensible. Je recopie pour archive les messages d'origine et ferme ce sujet.

238 a écrit:

Bonjour,

Je jetté un coup d'oeil sur les fonctions Windows : https://msdn.microsoft.com/en-us/library/aa383688(VS.85).aspx

Et je suis tombé sur la fonction ShowWindows : https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx

Cependant je n'arrive pas à l'utiliser, je ne vois pas quelle sont les paramétres à donner pour faire tourner la console en fond ou la faire de nouveau apparaitre..

Jusque la je le fais avec FreeConsole();

Mais si j'ai envie de la faire apparaitre il n'est plus possible il me semble. C'est donc pourquoi cette fonction m'interesse..

C'est quoi d'ailleurs un Handle? Je ne suis pas sur de tout comprendre..

Voici le code, ça compile, mais la fenêtre reste visible..

#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    ShowWindow(SW_HIDE, 0);
    Sleep(500);
    return 0;
}

et encore ceci qui lui ne compile plus du tout..

#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
    HWND hWn;
 
    ShowWindow(Hwn, 0);
    Sleep(500);
    return 0;
}

-----------------------------------------------------

Merci pour la réponse, cependant c'est quoi un HWND? Je ne comprends pas vraiment... Si j'ai bien compris c'est une class qui permet de gérer des fenêtres..? Merci!

Pour compiler j'ai du rajouter :

#define _WIN32_WINNT 0x0500

Merci.

markand a écrit:

Si tu veux simplement que le terminal disparaisse, tu peux compiler avec -mwindows pour GCC (MinGW) et /SUBSYSTEM:windows /ENTRY:mainCRTStartup pour VS. En général on active ces options quand on compile en release.

Si tu veux le faire dynamiquement, comme Woly montre, avec GetConsoleWindow().

Trés bien merci je vais essayer

-----------------------------------------------

Merci pour la réponse,

Non j'ai trouvé mon erreur, juste un include qui manquait!

Je viens aussi d'essayer ce code :

HWND hwnd;
    hwnd = GetForegroundWindow();
    Sleep(3000);
    ShowWindow(hwnd, SW_MAXIMIZE);

et cela compile, je ne vois pas la difference entre GetConsoleWindow et GetForegroundWindow..

Et d'accord je comprends un peu mieux, merci!

Edit: Normalement c'est la fenêtre en premier plan qui est agrandi, mais cela ne change que la console..

-
Edité par 238 8 juillet 2016 à 12:18:06

------------------------------------------------------

Alors je viens de tester le code pour agrandir la fenêtre avec le focus clavier mais cela ne fais que agrandir ma console et non pas le notepad..

------------------------------------------------------

Ok c'est super merci bien! J'ai une dernière question, j'ai l'impression que le programme ne tourne pas en fond, une fois que je le "hide", je veux qu'il joue des son différents quand je tape sur une touche du clavier, comme un piano avec des beep, mais une fois hide, le programme ne fonctionne pas, j'ai essayé avec FreeConsole(); aussi mais rien à faire..

Merci pour l'aide!

-------------------------------------------------------

D'accord bah écoute je vais me diriger vers "GetAsynKey()" Apparemment cela fonctionne même avec l'appli en arrière plan, je vais essayer de chercher pour avoir de meilleurs son que des Beep maintenant, enfin bref problème résolu!

Je vous remercie :)

-------------------------------------------------------



  • Partager sur Facebook
  • Partager sur Twitter