Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   DisplaySwitch über ShellExecute oder WinExec funktioniert nicht (https://www.delphipraxis.net/203235-displayswitch-ueber-shellexecute-oder-winexec-funktioniert-nicht.html)

hoika 27. Jan 2020 17:30

AW: DisplaySwitch über ShellExecute oder WinExec funktioniert nicht
 
Hallo,
%SystemRoot%\SysNative\DisplaySwitch.exe

unter 32bit immer noch
file not found

Dalai 27. Jan 2020 17:47

AW: DisplaySwitch über ShellExecute oder WinExec funktioniert nicht
 
Naja, die Umgebungsvariable(n) musst du vorher wahrscheinlich schon auflösen (MSDN-Library durchsuchenExpandEnvironmentStrings).

Grüße
Dalai

martinwk 27. Jan 2020 21:50

AW: DisplaySwitch über ShellExecute oder WinExec funktioniert nicht
 
Besten Dank für die vielen Tipps. Es funktioniert jetzt!
Aber nur in der folgenden Form, als 64-bit Programm compiliert:
ShellExecute(Handle, 'open', PChar('DisplaySwitch.exe'), PChar('/external'), nil, SW_HIDE);
Es funktioniert nicht mit der Pfadangabe: %SystemRoot%\SysNative\DisplaySwitch.exe, auch nicht, wenn ich DisplaySwitch über eine Batch-Datei aufrufe.

Dalai 27. Jan 2020 22:10

AW: DisplaySwitch über ShellExecute oder WinExec funktioniert nicht
 
Also eine Batchdatei wie
Code:
@echo off
set DS=%SystemRoot%\System32\DisplaySwitch.exe
if exist %SystemRoot%\SysNative\*.exe set DS=%SystemRoot%\SysNative\DisplaySwitch.exe
"%DS%"
funktioniert garantiert.

Und wie gesagt: Umgebungsvariablen müssen sehr wahrscheinlich schon aufgelöst an ShellExecute(Ex) übergeben werden. Die CMD macht das selbst und daher funktioniert das dort ohne weitere Maßnahmen. Alternativ zu MSDN-Library durchsuchenExpandEnvironmentStrings kann man auch MSDN-Library durchsuchenGetWindowsDirectory benutzen, und den restlichen Pfad 'SysNative\DisplaySwitch.exe' anhängen; neuere Delphis haben das wahrscheinlich schon in der Klasse TPath oder sowas.

Grüße
Dalai

himitsu 28. Jan 2020 01:18

AW: DisplaySwitch über ShellExecute oder WinExec funktioniert nicht
 
Man könnte auch ganz böse C:\Windows hart einprogrammieren.

Als "Bugfix" für schrottige Programme, mit hartcodierten Pfaden, von saudämlichen Programmierern, heißt die Systempartition schon seit Jahren immer C:\ und das Windows-Rootverzeichnis immer Windows, also C:\Windows wird sich nie verändern. :stipid: (mindestens die nächsten Jahrzehnte)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr.
Seite 2 von 2     12   

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