AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Handle/Window wird nich erkannt

Ein Thema von krueemel · begonnen am 18. Sep 2007 · letzter Beitrag vom 19. Sep 2007
Antwort Antwort
krueemel

Registriert seit: 18. Sep 2007
15 Beiträge
 
#1

Handle/Window wird nich erkannt

  Alt 18. Sep 2007, 12:04
Hallo,
ich hab ein Programm welches aus 2 Teilen besteht.
Zuerst gibt der Benutzer die .exe Datei an, dann wird der Handle dazu erkannt.

Des weiteren klick der Benutzer auf einen Button und das Window zur .exe Datei soll minimiert werden. Doch leider wird immer nur das Programm selber minimiert:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, TLHelp32;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  WindowHandle: THandle;
    h:HWnd;

implementation

{$R *.DFM}



function GetWindowThreadProcessId(hWnd: HWND; var dwProcessId: DWORD): DWORD;
stdcall; external 'user32.dllname 'GetWindowThreadProcessId';

function MyEnumWindowProc(AHandle: THandle; LParam: LongWord): boolean;
stdcall;
var
  ProcessID: THandle;
begin
  ProcessID := 0;
  GetWindowThreadProcessID(AHandle, ProcessID);
  Result := not (ProcessID = LParam);
  if not Result then
    WindowHandle := AHandle;
end;

function GetWindowHandleByExeName(const AExeName: string): THandle;
var
  SnapShot: THandle;
  p: TProcessEntry32;
  ProcessHandle: THandle;
begin
  Result := 0;
  WindowHandle := 0;
  ProcessHandle := 0;
  p.dwSize := SizeOf(p);
  SnapShot := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0);
  try
    if Process32First(SnapShot, p) then
      repeat
      if AnsiLowerCase(AExeName) = AnsiLowerCase(p.szExeFile) then
        ProcessHandle := p.th32ProcessID;
      until (ProcessHandle <> 0) or not Process32Next(SnapShot, p);
    EnumWindows(@MyEnumWindowProc, ProcessHandle);
    Result := WindowHandle;
  finally
    CloseHandle(SnapShot);
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
m_exe:string;
begin
m_exe := Edit1.Text;
GetWindowHandleByExeName(m_exe);

end;


procedure TForm1.Button1Click(Sender: TObject);

begin
  h:=WindowHandle;
  postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);

// SC_CLOSE = Fenster schließen
//(beim Hauptfenster wird die Anwendung beendet)
//SC_MINIMIZE = Fenster minimieren
//SC_MAXIMIZE = Fenster maximieren
//SC_RESTORE = Fenster wiederherstellen

end;

end.
Im DAteianhang habe ich noch ein Bild wie es ausschaut.

Vielleicht kann mir ja jemand helfen, danke. =)
Angehängte Grafiken
Dateityp: bmp delpihi_minimieren_841.bmp (156,6 KB, 25x aufgerufen)
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: Handle/Window wird nich erkannt

  Alt 18. Sep 2007, 13:17
Hallo,

Du musst das Ergebnis der Funktion 'GetWindowHandleByExeName' auch irgendetwas zuweisen. In Deinem Fall der globalen Variable 'WindowHandle'.

Delphi-Quellcode:
Procedure TForm1.Button2Click(Sender: TObject);
Var
   m_exe: String;
Begin
   m_exe := Edit1.Text;
   WindowHandle := GetWindowHandleByExeName(m_exe);
End;
Du könntest Dir den gesamten ersten Schritt aber auch sparen, indem Du es so machst:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
   PostMessage(GetWindowHandleByExeName(Edit1.Text), WM_SYSCOMMAND, SC_MINIMIZE, 0);
End;
  Mit Zitat antworten Zitat
krueemel

Registriert seit: 18. Sep 2007
15 Beiträge
 
#3

Re: Handle/Window wird nich erkannt

  Alt 18. Sep 2007, 13:39
Ah ja ist klar, dankeschön.

Aber ich versteh nicht, es funktioniert immer noch nicht, es wird immer das Programm selber geschlossen, aber warum?!

//Edit
ich muss mich korrigieren, es funktioniert, wenn ich den Button 3ma drücke, aber warum erst dann?!
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#4

Re: Handle/Window wird nich erkannt

  Alt 18. Sep 2007, 13:57
Zitat von krueemel:
Aber ich versteh nicht, es funktioniert immer noch nicht, es wird immer das Programm selber geschlossen, aber warum?!
Mit Deinem Beispiel musst Du erst Button2 drücken, um Dir das Handle zu holen, und anschließend Button1, um das zu dem Handle gehörende Fenster zu minimieren; klar, oder?

Ablauf:
Delphi-Quellcode:
m_exe := Edit1.Text; //weist Deiner Variablen 'm_exe' den Namen der Exe zu, der im Edit1 steht
WindowHandle := GetWindowHandleByExeName(m_exe); //Holt das Handle zu m_exe und weist dieses der Variablen 'WindowHandle' zu
h := WindowHandle; //Weist den Inhalt der Variablen 'WindowHandle' der Variablen 'h' zu
postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0); //Sendet eine Fensternachricht an das Fenster mit dem Handle 'h', sich zu minimieren
Das ist alles.
Du könntest aber diese vier Schritte auf eine Zeile Code herunterbrechen und Dir zwei Variablen sparen, wenn Du das Beispiel von oben nimmst.
  Mit Zitat antworten Zitat
krueemel

Registriert seit: 18. Sep 2007
15 Beiträge
 
#5

Re: Handle/Window wird nich erkannt

  Alt 18. Sep 2007, 15:12
ja das ist schon klar.
Ich glaube ichkann einfach nur manche eine .exe Datei nicht problemlos schließen bzw. minimieren. (so z.b. den Firefox)
  Mit Zitat antworten Zitat
krueemel

Registriert seit: 18. Sep 2007
15 Beiträge
 
#6

Re: Handle/Window wird nich erkannt

  Alt 18. Sep 2007, 20:42
ich möchte, den PArameter
SC_MINIMIZE

in

PostMessage(GetWindowHandleByExeName(Edit1.Text), WM_SYSCOMMAND,SC_MINIMIZE,0); gerne per Combobox steuern, sprich ich wähle in der Box aus zwischen Minimize, Close etc. Dies wird im label1.Caption gespeichert, nun geben ich folgendes ein:

PostMessage(GetWindowHandleByExeName(Edit1.Text), WM_SYSCOMMAND, Label1.Caption, 0); Doch leider kommt folgende Fehlermeldung:
Code:
[Hinweis] Unit1.pas(61): Auf 'GetWindowHandleByExeName' zugewiesener Wert wird niemals benutzt
[Fehler] Unit1.pas(126): Inkompatible Typen: 'Integer' und 'TCaption'

Viele liebe grüße
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Handle/Window wird nich erkannt

  Alt 19. Sep 2007, 09:01
Huhu,

dieses ist eine neue Frage - bitte eröffne dafür einen neuen Beitrag
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 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