Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm ferngesteuert aktivieren (https://www.delphipraxis.net/31112-programm-ferngesteuert-aktivieren.html)

Cobra 4. Okt 2004 15:24


Programm ferngesteuert aktivieren
 
Hallo @all

Folgendes Problem: Habe ein Programm (nicht von mir) das den Bildschrim kompett ausfüllt und ich möchte zwischen meinem und dem anderen Programm hin und herwechseln.
Meine Idee ist ein Programm was die Funktionstasten sagen wir F7 und F8 überwacht und dann zwischen den beiden Programmen schaltet.
So weit so gut habe also die Tasten abgefangen und bekomme auch das Handle auf das Hauptfenster jetzt will ich das Fenster in den Vordergrund holen mit SetForgroundWindow das geht auch jedenfals bei Win NT bei Win 2000 nicht warum
Also bei Win 2000 wird mein Hauptfenster nach vorn gebracht aber verdeckt dann andere Modale Fenster. schei.....
Frage wie kann ich es so machen wie bei Windows ALT-Tab Programmwechsel denn das Programm was den Bildschirm verdeckt schaltet auch einige Funktionen von Windows ab auch ALT+Tab und den Taskmanager. Hat was mit Sicherheit zutun das Programm ist eine Maschinensteuerung und mein Programm macht die Auswertung für das Büro soll aber auch an der Maschine laufen. (Ich habe keinen Plan wie das Programm das macht ist aber so und ich will und darf das nicht ändern)

Hat jemand eine Idee :gruebel:

gekmihesg 4. Okt 2004 15:32

Re: Programm ferngesteuert aktivieren
 
versuch mal BringWindowToTop() oder SetFucus()

Cobra 4. Okt 2004 16:10

Re: Programm ferngesteuert aktivieren
 
Zitat:

Zitat von gekmihesg
versuch mal BringWindowToTop() oder SetFucus()

Wie soll ich das nutzen es ist ein fremdes Programm von dem ich nur die Exe habe ???

Aber ich habe da noch was gefunden.
Mit GetWindow bekomme ich alle Fenster die das Hauptfenster als Owner haben und wenn ich das weiterdenke
komme ich an alle Fenster und kann die Owner Reihenfolge nutzen um die Fenster in der richtigen Reihenfolge anzuzeigen oder nicht.

Warte mal auf einspruch von jemanden hier und teste mal ob das funktioniert.
:gruebel: :drunken: alles wird gut :-D

freak4fun 4. Okt 2004 16:13

Re: Programm ferngesteuert aktivieren
 
Hallo,

zwischen Programmen kannst du mit Alt + Tab wechseln.

mfg
freak

:coder:

alcaeus 4. Okt 2004 16:15

Re: Programm ferngesteuert aktivieren
 
Hi freak,

Zitat:

Zitat von freak4fun
zwischen Programmen kannst du mit Alt + Tab wechseln.

:roll: er will aber eine programmtechnische Lösung

Greetz
alcaeus

ipworks 4. Okt 2004 16:19

Re: Programm ferngesteuert aktivieren
 
Hallo.
Vielleicht hilft's:

Delphi-Quellcode:
function ForceForegroundWindow(hwnd: THandle): WordBool;
const
  SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
  ForegroundThreadID: DWORD;
  ThisThreadID: DWORD;
  timeout: DWORD;
begin
  if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

  if GetForegroundWindow = hwnd then Result := True
  else
  begin
    // Windows 98/2000 doesn't want to foreground a window when some other
    // window has keyboard focus

    if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
      ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
      ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
      (Win32MinorVersion > 0)))) then
    begin
      // Code from Karl E. Peterson, [url]www.mvps.org/vb/sample.htm[/url]
      // Converted to Delphi by Ray Lischner
      // Published in The Delphi Magazine 55, page 16 

      Result := False;
      ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
      ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
      if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
      begin
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hwnd);
        AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
        Result := (GetForegroundWindow = hwnd);
      end;
      if not Result then
      begin
        // Code by Daniel P. Stasinski
        SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
          SPIF_SENDCHANGE);
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hWnd);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
      end;
    end
    else
    begin
      BringWindowToTop(hwnd); // IE 5.5 related hack
      SetForegroundWindow(hwnd);
    end;

    Result := (GetForegroundWindow = hwnd);
  end;
end; { ForceForegroundWindow }
Enjoy

Cobra 4. Okt 2004 16:54

Re: Programm ferngesteuert aktivieren
 
Zitat:

Zitat von freak4fun

zwischen Programmen kannst du mit Alt + Tab wechseln.

:coder:

siehe #1 das Programm oder die Rechnerkonfiguration lässt keine Windows-Tasten zu du kannst drücken auf die Wintaste bis der Finger blutet da kommt keine Taskleiste. Das Programm ist eine Maschinensteuerung und in WinCC (von Siemens) geschrieben wenn das jemanden was sagt. Da geht kein Takmanager und kein ALT+TAB das ist ja das Hauptproblem.

Aber was mich fröhlich stimmt ist das dieses Programm nur aus dem Hauptfenster besteht also irgendwie sind die anderen Fenster also z.B. Messages oder so keine Fenster sind irgendwie Panel oder so jedenfals in dem Teil bekomme ich alles richtig angezeigt immer. :mrgreen:


@ all THX :thumb: für die Hilfe werde alles testen aber erst morgen !!!

PS: :coder2: Habe da einen einfachen Plan ich sende meinen Programm einfach eine selbstdefinierte Message dann mach ich das aktivieren im Progamm obwohl das mit dem GetWindow mir schonmal das erste (Hauptfenster) und das letzte z.B. eine Passwortabfrage richtig zurückgibt. (Aber alles erst Morgen @all :cheers: bis morgen)

Cobra 5. Okt 2004 08:21

Re: Programm ferngesteuert aktivieren
 
Hallo zusammen (neuer Tag neues glück ;-))

@ipworks THX
Der Code von dir sieht dem Code den ich auf dem Entwicker-Forum gefunden habe sehr ähnlich. Mein Code ist also auch fast das Gleiche ich sehe es mir jetzt mal genauer an.

Hat jemand noch eine Idee ?

Cobra 5. Okt 2004 10:18

Re: Programm ferngesteuert aktivieren
 
@ipworks
Dein Code läuft :thumb: THX!

:gruebel: Habe wohl bei der ersten Version was falsch gemacht jetzt gehts super gut. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 Uhr.

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