Entwickler-Ecke

Windows API - *.exe Starten


deagle - Sa 21.09.02 17:23
Titel: *.exe Starten
Hallo

Der soll die Exe Starten aber was der Starten soll der aus ner ComboBox nehmen!!!


Quelltext
1:
2:
3:
ShellExecute(Application.Handle, 'open',
             PChar('ComboBox1.Text'), nil, nil,
             SW_ShowNormal);


tommie-lie - Sa 21.09.02 18:33

Versuch mal die Quotes ( ' ) im PChar wegzulassen. Und hinter dem Combobox.Text solltest du's mal mit 'nem ^probieren...
Vielleicht klappt's dann...

Tschüß
Thomas


Delete - Sa 21.09.02 18:39

tommie-lie hat folgendes geschrieben:
Versuch mal die Quotes ( ' ) im PChar wegzulassen.

Das is´n guter Rat.
Zitat:
Und hinter dem Combobox.Text solltest du's mal mit 'nem ^ probieren...

Das allerdings nicht.
Zitat:
Vielleicht klappt's dann.

Ja! Wenn er deinen ersten Rat befolgt und in der ComboBox die Namen von vernünftigen und existierenden Dateinamen drin stehen. :wink:


Delete - Sa 21.09.02 20:33

Eigentlich macht man sowas ja mit CreateProcess. :roll:


DeCodeGuru - Sa 21.09.02 20:42

Zitat:
Eigentlich macht man sowas ja mit CreateProcess.


Sicherlich haste Recht. ShellExecute wird meines Wissens nach nur zum "Starten" von Datein verwendet. ALso, dass das dazugehörigen Programm gestartet wird und die Datei dann läd, aber ich denk, dass man einen Anfänger nicht gleich mit CreateProcess "erschlagen" sollte. :wink:


Delete - Sa 21.09.02 20:51

DeCodeGuru hat folgendes geschrieben:
Zitat:
Eigentlich macht man sowas ja mit CreateProcess.
aber ich denk, dass man einen Anfänger nicht gleich mit CreateProcess "erschlagen" sollte.


Du hälts es also für besser ihm etwas falsches bei zu bringen?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
function RunProcess(FileName: string): Longword;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.dwFlags     := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
  StartupInfo.wShowWindow := SW_SHOW;
  if not CreateProcess(nil,
    @Filename[1],
    nil,
    nil,
    False,
    CREATE_NEW_CONSOLE or
    NORMAL_PRIORITY_CLASS,
    nil,
    nil,
    StartupInfo,
    ProcessInfo)
    then
      Result := WAIT_FAILED;
end;

Ich hoffe, ich habe da auf die Schnelle nichts übersehen. Das läßt sich übrigens noch ausbauen. Aber weil es ja für einen Anfänger sein soll.


DeCodeGuru - Sa 21.09.02 21:09

Zitat:
Du hälts es also für besser ihm etwas falsches bei zu bringen?

Das habe ich so nicht gesagt!!! Ich meinte nur, dass Leute, die noch nicht so gut programmieren können, auch die Sachen, die wir/du posten auch verstehen sollten. Und du musst zugeben, dass CreateProcess doch relativ komplex ist.

Zitat:
Aber weil es ja für einen Anfänger sein soll.


Du betonst es so, als ob ich den, der das Thema eröffnet hat, als Anfänger abstufen würde, was ich allerdings nicht getan habe. Es lesen auch noch andere Leute, die vielleicht noch Anfänger sind, diesen Thread und wollen daraus lernen.


Delete - Sa 21.09.02 21:13

Na dann. Warum sollen sie es nicht gleich richtig lernen?


Delete - So 22.09.02 08:42

DeCodeGuru hat folgendes geschrieben:
Du betonst es so, als ob ich den, der das Thema eröffnet hat, als Anfänger abstufen würde, was ich allerdings nicht getan habe.

Bei allem Respekt, DeCodeGuru, aber jemand, der den Text einer ComboBox in Anführungszeichen stellt und sich dann wundert, dass nichts passiert, der ist ein Anfänger und sollte vielleicht lieber erst noch mal in die Hilfe gucken bevor er sich Themen wie "ShellExecute" oder "CreateProcess" widmet.