Bonjour ! J'essaie de résoudre le problème suivant.

Soit une application console, Upper.exe, qui renvoie en majuscules tout ce qu'elle reçoit.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program Upper;
 
uses
  SysUtils;
 
var
  s: string;
 
begin
  while not EOF do
  begin
    ReadLn(s);
 
    if s = 'quit' then
      Break
    else
      WriteLn(UpperCase(s));
  end;
end.
Soit une deuxième application, UpperInterface.exe, qui sera l'application effectivement utilisée par... l'utilisateur, et qui devra se comporter extérieurement comme Upper.exe, après l'avoir lancé.

J'ai un code basé sur l'API Windows qui fait presque cela, sauf qu'il reste bloqué. Si je lance UpperInterface.exe et que je saisis quelque chose dans la console. Rien ne se passe. C'est lorsque j'appuie sur Ctrl+Z puis entrée que je vois apparaître la "réponse" de Upper.exe.

Qu'est-ce que je dois faire ? Mettre le ReadLn dans un thread aussi ? Utiliser WaitForSingleObject, PeekNamedPipe, PeekConsoleInput... Je me perds dans tout ça.

J'espère que j'ai été clair. Ci-joint le code des deux programmes. Voir plus loin un exemple qui fonctionne.