Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Anderes Programm verschieben und vergrößern (https://www.delphipraxis.net/196247-anderes-programm-verschieben-und-vergroessern.html)

Dumpfbacke 4. Mai 2018 13:01

Anderes Programm verschieben und vergrößern
 
Hallo Leute,
ich möchte die Position von einen anderen Programmes welches schon läuft ändern und Vergrößeren.
Beispiel:
Es läuft Nodepad auf dem Rechner. Nun möchte ich es in die obere Linke Ecke schieben auf 10,10 und auf 200,300 vergößern. Hat das schon einmal jemand gemacht und kann mir sagen wie es es angehen soll / kann ?

Danke Tanja

ManBu 4. Mai 2018 13:11

AW: Anderes Programm verschieben und vergrößern
 
Hi,

erstmal musst du an das richtige Fensterhandle kommen.

Siehe hierzu (z.B. FindWindow):
https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx

Anschließend kannst du mit dem Fensterhandle Position und Größe ändern:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Der schöne Günther 4. Mai 2018 13:19

AW: Anderes Programm verschieben und vergrößern
 
Als erstes muss dir klar sein was genau deine Definition von "Programm" ist. Ein Programm kann ein Fenster haben, aber auch mehrere oder keins. Woran machst du es fest? Am Fenstertitel (z.B. "Unbenannt - Editor")? Oder am Namen der .exe-Datei ("notepad.exe")? Was ist wenn das Programm mehrere male läuft?

sakura 4. Mai 2018 13:21

AW: Anderes Programm verschieben und vergrößern
 
Für Notepad gilt:
Delphi-Quellcode:
program ProjectNpMove;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Winapi.Windows,
  Winapi.PsAPI;

type
  TFindWindowRec = record
    ModuleToFind: string;
    FoundHWnd: HWND;
  end;

function EnumWindowsCallBack(Handle: hWnd; var FindWindowRec: TFindWindowRec): BOOL; stdcall;
const
  C_FileNameLength = 256;
var
  WinFileName: string;
  PID, hProcess: DWORD;
  Len: Byte;
begin
  Result := True;
  SetLength(WinFileName, C_FileNameLength);
  GetWindowThreadProcessId(Handle, PID);
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  Len := GetModuleFileNameEx(hProcess, 0, PChar(WinFileName), C_FileNameLength);
  if Len > 0 then
  begin
    SetLength(WinFileName, Len);
    if SameText(WinFileName, FindWindowRec.ModuleToFind) then
    begin
      Result := False;
      FindWindowRec.FoundHWnd := Handle;
    end;
  end;
end;

function MoveNotepad(const Left, Top, Width, Height: Integer): Boolean;
var
  FindWindowRec: TFindWindowRec;
begin
  FindWindowRec.ModuleToFind := 'c:\windows\system32\notepad.exe';
  FindWindowRec.FoundHWnd := 0;
  EnumWindows(@EnumWindowsCallback, integer(@FindWindowRec));
  Result := FindWindowRec.FoundHWnd <> 0;

  if Result then
    SetWindowPos(FindWindowRec.FoundHWnd, 0, Left, Top, Width, Height, 0);
end;

begin
  try
    Writeln(MoveNotepad(10, 10, 200, 300));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

sakura 4. Mai 2018 13:21

AW: Anderes Programm verschieben und vergrößern
 
Siehe auch: https://stackoverflow.com/questions/...y-process-name

...:cat:...

HolgerX 4. Mai 2018 13:45

AW: Anderes Programm verschieben und vergrößern
 
Hmm...


Zitat:

Zitat von sakura (Beitrag 1401297)
Delphi-Quellcode:
function MoveNotepad(const Left, Top, Width, Height: Integer): Boolean;
var
  FindWindowRec: TFindWindowRec;
begin
  FindWindowRec.ModuleToFind := 'c:\windows\system32\notepad.exe';
  FindWindowRec.FoundHWnd := 0;
  EnumWindows(@EnumWindowsCallback, integer(@FindWindowRec));
  Result := FindWindowRec.FoundHWnd <> 0;

  if Result then
    SetWindowPos(FindWindowRec.FoundHWnd, 0, Left, Top, Width, Height, 0);
end;


Oder auch (etwas) Kürzer ;)

Delphi-Quellcode:
function MoveNotepad(const Left, Top, Width, Height: Integer): Boolean;
var
  hWindow: HWND;
begin
  hWindow := FindWindow('notepad',nil);
  if hWindow > 0 then
    SetWindowPos(hWindow, 0, Left, Top, Width, Height, 0);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz