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 Windows 98 und Shellexecute (https://www.delphipraxis.net/31840-windows-98-und-shellexecute.html)

emsländer 14. Okt 2004 16:46


Windows 98 und Shellexecute
 
Hallo,

ich rufe per shellexecute ein weiteres Programm auf. Klappt bei mir (XP) und auf einem frisch installierten 98 SE in der VM wunderbar.
Bei einem Kollegen (W98 SE) klappt das nicht.

Hat jemand eine Idee?

Hier mein Aufruf: shellexecute(1,'OPEN',pchar('updatemanager.exe'),N IL,NIL,SW_NORMAL);


Gruss

EL

Dax 14. Okt 2004 16:48

Re: Windows 98 und Shellexecute
 
Nimm 0 oder Delphi-Referenz durchsuchenTForm.Handle als ersten Parameter, denn der ist eigentlich das Handle des Fensters, das den Prozess startet.

emsländer 14. Okt 2004 17:07

Re: Windows 98 und Shellexecute
 
Hi,

habs eingebaut. Hoffe es klappt.

Danke

Gruss

EL

Zacherl 14. Okt 2004 17:08

Re: Windows 98 und Shellexecute
 
oder gib doch einfach mal den gesamten pfad zum programm, oder wenn es sich im gleichen ordner befindet
Delphi-Quellcode:
extractfilepath(application.exename)+'PROGRAMMNAME')
an.

emsländer 14. Okt 2004 19:59

Re: Windows 98 und Shellexecute
 
sowas mach ich ja. Aber wusstet Ihr, das Windows9x beim Dateinamen (lang) Gross/Klein unterscheidet? Daran lag es.


Böse Falle!

Gruss

EL

FAlter 14. Okt 2004 20:08

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von emsländer
Aber wusstet Ihr, das Windows9x beim Dateinamen (lang) Gross/Klein unterscheidet?

:shock:

Irgendwann können wir Windows und Linux nicht mehr unterscheiden. Linux wird immer bunter und Windows übernimmt erst längere Dateinamen als 8.3 und dann sowas

Luckie 15. Okt 2004 04:15

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von emsländer
Aber wusstet Ihr, das Windows9x beim Dateinamen (lang) Gross/Klein unterscheidet.

Nein.
Zitat:

Daran lag es.
Glaube ich nicht. Lag wohl eher daran, dass du dich vertippt hast oder der Pfad falsch war.

Windows 98 basiert noch immer auf DOS und DOS unterscheidet nicht zwischen Groß- und Kleinschreibung,

emsländer 15. Okt 2004 09:52

Re: Windows 98 und Shellexecute
 
Nein - ich konnte es definitiv nachvollziehen.

If hab da so eine Routine (in einer Updateprozedur):

if existsfile('testname.old') then deletefile('testname,old');
if existsfile('testname.exe') then renamefile('testname.exe','testname.old');
if existsfile('testname.new') then renamefile('testname.new',testname.exe');


der Name von von testfile.xxx war: TestName.xxx

nachdem ich die Prozedur so abgeändert habe:

if existsfile('TestName.old') then deletefile('TestName,old');
if existsfile('TestName.exe') then renamefile('TestName.exe','TestName.old');
if existsfile('TestName.new') then renamefile('TestName.new',TestName.exe');

gings..... => Nun auf zur Diskussion

Gruss

EL

Luckie 15. Okt 2004 10:02

Re: Windows 98 und Shellexecute
 
Äh:
Delphi-Quellcode:
if existsfile('testname.old') then deletefile('testname,old');
Dir ist klar, dass er die Datei nur dann findet, wenn das momentane Verzeichnis, das Verzeichnis der Datei ist? Ein mal mit einem OpenDialog eine Datei irgendwo anders ausgewählt und das aktuelle Verzeichnis ist nicht mehr das Verzeichnis aus dem das Programm gestartet wurde und in dem sich vermutlich obige Datei befindet.

Probier das ganze noch mal, aber mit kompltter Pfadangabe.

Ich kann es leider nicht mehr testen, da ich kein Windows 98 System zur mehr Verfügung habe.

emsländer 15. Okt 2004 10:04

Re: Windows 98 und Shellexecute
 
jaja der Pfad war komplett mit dabei.

Anwort ans Callcenter: Ja mein Bildsdchirm ist eingeschaltet. Ja der kleine Knopf da unten rechts...


Gruss

EL

Luckie 15. Okt 2004 10:15

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von emsländer
jaja der Pfad war komplett mit dabei.

Sorry, das meine Glaskugel kaputt ist und ich nicht gewußt habe, dass du uns in dem Codeschnippsel relevante Informationen vorenthälts.

Zitat:

Anwort ans Callcenter: Ja mein Bildsdchirm ist eingeschaltet. Ja der kleine Knopf da unten rechts...
OK. Ich klinke mich dann mal aus. So muss ich mich nicht behandeln lassen.

emsländer 15. Okt 2004 10:20

Re: Windows 98 und Shellexecute
 
He,

sorry .. :roll:

ich hatte ja bereits geschrieben, das das Problem erfolgreich gelöst ist. Das ist ja nur eine Nachdiskussion.

Wenn Du Dich durch meine "forsche" Antwort auf den Schlips getreten fühlst, dann entschuldige ich mich dafür. :duck:


Ich übrigens bisher auch noch nix mit Windows 98 zu tuen gehabt. Ich habs hier zum Testen in einer VMWare Box laufen.


Gruss

EL

roderich 15. Okt 2004 11:03

Re: Windows 98 und Shellexecute
 
@emsländer:

was ist "existsfile" für eine Funktion ? Eine von Euch geschriebene, die Groß/Kleinschreibung unterscheidet ? Es ist jedenfalls keine VCL oder API-Routine.

Ich finde es übrigens auch ziemlich daneben, jemanden schwach anzuquatschen, der sich Zeit für Dich genommen hat und weiß Gott nicht ahnen kann, wo Du was falsch programmierst, wenn Du nur Phantasie-Fragmente postest.

Roderich

fkerber 15. Okt 2004 11:05

Re: Windows 98 und Shellexecute
 
Hi!

Ich tippe mal, dass FileExists gemeint ist, oder?

Ciao Frederic

emsländer 15. Okt 2004 11:06

Re: Windows 98 und Shellexecute
 
jupp - sorry - vertippt.


Gruss

EL

emsländer 15. Okt 2004 11:07

Re: Windows 98 und Shellexecute
 
Hallo Roderich,

ich habe mich dafür entschuldigt. Jeder hat mal nen schlechten Tag. Ok - hab meine Prügel bekommen und nehme sie hin.

Es war übrigens fileexists gemeint. Hab mich da vertippelt.


Gruss

EL

tommie-lie 15. Okt 2004 11:14

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von emsländer
jupp - sorry - vertippt.

Gut, nachdem du jetzt zweimal zugegeben hast, daß der Code, den du gepostet hast, nicht dem Code entspricht, den du tatsächlich ausgeführt hast, würde ich dich darum bitten, deinen echten Code zu posten, der nicht funktioniert :roll:

Und DOS und Windows waren schon immer und sind noch immer case-insensitiv, was Datei- und Verzeichnisnamen angeht.

Luckie 15. Okt 2004 11:19

Re: Windows 98 und Shellexecute
 
Entschuldigung ist angenommen. Ändert aber nichts an der Tatsache, dass der Fehle rbei dir liegt. Wie tommie-lie eben betsätigt hat, ist Windows, auch NT ff., nicht casesensitiv.

emsländer 15. Okt 2004 11:22

Re: Windows 98 und Shellexecute
 
Hi zusammen,


Hier der originalcode:

deletefile(sappdir+'\FDFinanzdeskManager.old');
renamefile(sappdir+'\FDFinanzdeskManager.exe',sapp dir+'\FDFinanzdeskManager.old');
renamefile(sappdir+'\fdm_user_update.exe', sappdir+'\FDFinanzdeskManager.exe');


Als ich die Dateinamen im Code klein geschrieben hatte, hat es nicht funktioniert.

Gruss

EL

emsländer 15. Okt 2004 11:25

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von Luckie
Entschuldigung ist angenommen. Ändert aber nichts an der Tatsache, dass der Fehle rbei dir liegt. Wie tommie-lie eben betsätigt hat, ist Windows, auch NT ff., nicht casesensitiv.


Danke!

das NT/2000/XP nicht case sensitiv ist, ist mir klar.

Der Fehler trat nur bei Windows98 auf (Welches ich allerdings in einer VMWare-Box laufen habe).

Nachdem ich den Quelltext dem Case der Dateinamen angepasst hatte, ging alles.

Gruss

EL

Luckie 15. Okt 2004 11:28

Re: Windows 98 und Shellexecute
 
Was ist sappdir?

emsländer 15. Okt 2004 11:31

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von Luckie
Was ist sappdir?

var sAppdir : string;

..
.
.
.
.
sAppDir := ExtractFileDir(Application.ExeName); // Updatemanager steht im Applicationfolder



Gruss

EL

SubData 15. Okt 2004 11:45

Re: Windows 98 und Shellexecute
 
heißt das nich ExtractFilePath?

Matze 15. Okt 2004 11:48

Re: Windows 98 und Shellexecute
 
@emsländer: verwende doch bitte die [delphi]-Tags, um deinen Code formatiert darzustellen. Dank.

Matze 15. Okt 2004 11:52

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von SubData
heißt das nich ExtractFilePath?

Zitat:

Zitat von OH (Diamondback)
Extracts the drive and directory parts from FileName.

Namespace
SysUtils

Syntax

[Delphi] function ExtractFileDir(const FileName: string): string;

Description

The resulting string is a directory name suitable for passing to the CreateDir, GetCurrentDir, RemoveDir, and SetCurrentDir functions. This string is empty if FileName contains no drive and directory parts.


tommie-lie 15. Okt 2004 11:58

Re: Windows 98 und Shellexecute
 
Angeber!

Matze 15. Okt 2004 12:04

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von tommie-lie
Angeber!

Ich wusste, dass das blöd kommt, nur zeigt bei mir D7 personal nichts in der oh an, egal, was ich eingebe, es findet nichts, da blieb mir nichts anderes übrig. Und falls es bei euch anders aussehen sollte, hab ich's dazugeschrieben.

Also hör auf, so einen Stuss zu behaupten!

tommie-lie 15. Okt 2004 12:11

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von Matze
Also hör auf, so einen Stuss zu behaupten!

Hui, heute mit dem falschen Fuß aufgestanden? Es sollte ein Spaß sein und war nicht so gemeint.

Zitat:

Zitat von Matze
nur zeigt bei mir D7 personal nichts in der oh an

Delphi6 PE findet ExtractFilePath, wenn man es im Editor eingibt, den Cursor draufsetzt und F1 drückt und auch im Hilfeindex.

Luckie 15. Okt 2004 12:15

Re: Windows 98 und Shellexecute
 
:warn:

Matze 15. Okt 2004 12:15

Re: Windows 98 und Shellexecute
 
Zitat:

Zitat von tommie-lie
Hui, heute mit dem falschen Fuß aufgestanden? Es sollte ein Spaß sein und war nicht so gemeint.

Bin ganz normal aufgestanden, nur find ich's ne Frechheit zu sagen, ich sei ein Angeber, nur weil ich das hingeschrieben habe, das hat nur die oben genannten Gründe.

Klang zwar nicht nach Spaß, aber gut.

Zitat:

Zitat von tommie-lie
Delphi6 PE findet ExtractFilePath, wenn man es im Editor eingibt, den Cursor draufsetzt und F1 drückt und auch im Hilfeindex.

bei mir zeigt es leider gar nichts an, egal, nach was ich suche. :?

Und nun Back to topic :!:

FAlter 15. Okt 2004 13:30

Re: Windows 98 und Shellexecute
 
Das lässt sich doch ganz leicht klären:

Delphi-Quellcode:
  ShowMessage(ExtractFileDir ('C:\Daten\Test.dat')); // C:\Daten
  ShowMessage(ExtractFilePath('C:\Daten\Test.dat')); // C:\Daten\

  ShowMessage(ExtractFileDir ('C:\Test.dat')); // C:\
  ShowMessage(ExtractFilePath('C:\Test.dat')); // C:\
ExtractFileDir ist für die Anzeige (z. B. auf Labels) gedacht, ExtractFilePath für tas weiterarbeiten.

Das kommt saher, dass Windows 95 Probleme mit Pfadangaben wie C:\\text.ini hatte und man deshalb nicht mit der Anzeigefunktion arbeiten konnte. Also brauchte man eine Funktion, die einfach das \ noch da lässt, und man fügt beim Dateinamen kein \ mehr hinzu, wenn man ihn mit dem Verzeichnis verknüpft. Windows 98 kommt schon mit \\ klar, da könnte das dann wegfallen (ist aber unschön und ein Vergleich wird komplizierter, weil eines \\ und das andere \ enthalten könnte und trotzdem dir gleiche Datei gemeint ist).

Übrigens ist so eine Funktion ziemlich einfach selbst zu schreiben, beispielsweise, wenn man ein Archivformat erfindet und dann das Trennzeichen / verwendet:

Delphi-Quellcode:
function ExtractArchiveFilePath(const Archiv: String): String;
begin
  Result := Copy(Archiv, 1, LastDelimiter('/', Archiv)); //Kopiert alle Zeichtn bis zum letzten /
end;


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