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/)
-   -   Delphi ShellExecute() - bei Rückkehr zum Ur-Fensterist die Reihenfolge in TaskBar verschoben (https://www.delphipraxis.net/187184-shellexecute-bei-rueckkehr-zum-ur-fensterist-die-reihenfolge-taskbar-verschoben.html)

JanWe 4. Nov 2015 21:31

ShellExecute() - bei Rückkehr zum Ur-Fensterist die Reihenfolge in TaskBar verschoben
 
Liste der Anhänge anzeigen (Anzahl: 1)
[ Delphi 5, Win 7 ]

Hi,

ist für mich leider nicht so ganz einfach zu beschreiben, aber ich versuche es mal.
Ich schreibe gerade ein älteres Programm von mir nochmal vollkommen neu (from Scratch 8)
und den ShellExecuteBefehl verwende ich wie immer.

Delphi-Quellcode:
ProgPFAD := 'D:\npp\notepad++.exe';
Pfadname := 'E:\hello.cpp';
ShellExecute(0, 'open', pchar(ProgPFAD),
        PChar(AnsiQuotedStr(Pfadname, '"')),
        PChar(ExtractFileDir(Application.Exename)),
        SW_SHOW); // 29.01.2008 - 11.18-49
Doch in meiner neuen Version wird notepad zwar auch korrekt aufgerufen und angezeigt, allerdings , wenn ich npp (oder andere so aufgerufene Programme) wieder schließe, zeigt sich plötzlich nicht mehr MEIN PROGRAMM, sondern es sind 5 weitere Programme in der TaskSwitch nach oben und links gerutscht, sodaß ich erst 5x ALT + TAB drücken muß, um wieder zu meinem Programm zu kommen.
Das war früher nicht so. Da hatte ich einfach das "executete" Programm wieder geschlossen, und sofort hatte mein Programm wieder den Focus.

Hat jemand eine Idee, warum das sein kann?
Ich verwende immer noch Delphi5 und Windows 7. OK, klar MS-Updates sind eingespielt worden.

auf dem Screenshot, zeigt sich nach Execute normal mein Programm an Platz (2),
auf (1) ist das ausgeführte Programm in der TaskSwitch.

doch wie oben angesprochen befindet sich mein Programm jetzt OFT weiter hinten in der Reihenfolge auf (3)
Nicht immer, aber unregelmäßig manchmal.
Nur Warum?

Ich hoffe, ich konnte das einigermaßen verständlich beschreiben
und jemand hat eine Idee, warum das so ist.. wäre wirklich hilfreich - wegen der Ergonomie im Programmablauf.
Danke schon mal

Neutral General 27. Jul 2016 09:40

AW: ShellExecute() - bei Rückkehr zum Ur-Fensterist die Reihenfolge in TaskBar versch
 
Falls das Problem noch besteht (zumindest tut es das noch laut deiner Signatur):

Du könntest im Code auf das Beenden von Notepad warten und danach dein eigenes Programm selbst in den Vordergrund setzen.

KodeZwerg 28. Jul 2018 23:07

AW: ShellExecute() - bei Rückkehr zum Ur-Fensterist die Reihenfolge in TaskBar versch
 
Hiermit könnte es funktionieren:
Delphi-Quellcode:
procedure RunAndWait(const Executable, Parameter: string);
var
  tmpStartupInfo: TStartupInfo;
  tmpProcessInformation: TProcessInformation;
  tmpProcHandle: Cardinal;
begin
  FillChar(tmpStartupInfo, SizeOf(tmpStartupInfo), 0);
  with tmpStartupInfo do
  begin
    cb := SizeOf(TStartupInfo);
    wShowWindow := SW_SHOW;
  end;
  Application.Minimize;
  CreateProcess(PChar(Executable),PChar(Parameter),Nil,Nil,False,CREATE_NO_WINDOW,
    nil,nil,tmpStartupInfo,tmpProcessInformation);
  tmpProcHandle:= tmpProcessInformation.hProcess;
  WaitForSingleObject(tmpProcHandle, INFINITE);
  Application.Restore;
end;
und so Aufrufen
Delphi-Quellcode:
RunAndWait('D:\npp\notepad++.exe','E:\hello.cpp');
@Admins, das Problem bestand immer noch (wegen 2015)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 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