Autor Beitrag
Kasko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74



BeitragVerfasst: Di 12.02.19 13:24 
Ich bin grad dabei ein mehr oder weniger eigenes Consolen-Fenster mit entsprechenden draw und print Funktionen zu erstellen. Jetzt möchte ich aber dafür sorgen, dass der Benutzer entscheiden kann ob man das Fenster vergrößern/verkleinern kann und anderes. Dafür hab ich die Funktionen SetConsoleLong und SetConsolePos gefunden. Allerdings benötigen diese ein HWND und für mein Fenster benötige ich nur das Consolen Input und Output HANDLE.

Wie kann ich diese Funktionen mit einem HANDLE aufrufen oder gibt es andere dafür?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3930
Erhaltene Danke: 803

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Di 12.02.19 13:48 
GetConsoleWindow sollte dir helfen.
Kasko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74



BeitragVerfasst: Di 12.02.19 14:41 
Erstmal danke für die schnelle Antwort. Zumindest hab ich keinen Syntaxfehler mehr auch wenn das Ergebnis ziemlich komisch ist. Nach dem Ausführen dieser Zeilen, läuft so einiges falsch.

ausblenden C++-Quelltext
1:
2:
3:
4:
if (!SetWindowLong(GetConsoleWindow(), GWL_STYLE, WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU)) {
  ERROR_LOG(SetWindowLong);
  return;
}


1. Sobald man das Fenster anklickt, schließt sich das Fenster, egal wo man klickt.
2. Mitten auf dem Fenster sind Scrollbars aufgetaucht, die da nichts zu suchen haben.
3. Das Fenster ist nicht mehr in der Taskleiste sichtbar.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2162
Erhaltene Danke: 399

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 12.02.19 16:11 
Guten Tag Kasko,

schau doch mal, welche Parameter die Funktion SetWindowLong() verlangt!

Die Funktion scheint das Konsolen-Fenster im Anschluss in den Hintergrund zu bringen. Das Fenster kann man z.B. mit ShowWindow() wieder in den Vordergrund bringen.
Ich hab's unter Delphi getestet, alles gut:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function GetConsoleWindow: HWND; stdcallexternal kernel32;

procedure TForm1.Button1Click(Sender: TObject);
var
  hConsole: HWND;
begin
  hConsole := GetConsoleWindow();
  SetWindowLong(hConsole, GWL_STYLE, WS_SYSMENU or WS_CAPTION or WS_VISIBLE);
  //ShowWindow(hConsole, SW_SHOW);  // nicht notwendig, wenn der Wert "WS_VISIBLE" gesetzt wurde.
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeConsole();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AllocConsole();
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: Kasko