Seite 1 von 1

ShellExecute

Verfasst: 17.12.2007 16:50
von Bytedevil
Hallo!

Die ShellExecute speichert das Handle des aufgerufenen Programms in der als ersten Parameter angegebenen Variable, oder?

HINSTANCE ShellExecute( HWND hwnd, char *lpOperation, char *lpFile, char *lpParameters, char *lpDirectory, int nShowCmd );

Das klappt bei mir irgendwie nicht, die Variable bleibt immer Null.

Kann mir bitte jemand helfen?


LG, Bytedevil

Verfasst: 17.12.2007 18:17
von milan1612
Nimm doch einfach RunProgram(). Ist viel simpler und kann das selbe...

Re: ShellExecute

Verfasst: 17.12.2007 18:30
von Fluid Byte
Bytedevil hat geschrieben:Die ShellExecute speichert das Handle des aufgerufenen Programms in der als ersten Parameter angegebenen Variable, oder?
Nein, dieser Parameter identifiziert das Fenster Handle.

Code: Alles auswählen

Debug ShellExecute_(0,"open","notepad",0,"",#SW_SHOW)

Verfasst: 17.12.2007 20:38
von Bytedevil
Nimm doch einfach RunProgram(). Ist viel simpler und kann das selbe...
Das einzige, was RunProgram() kann, ist einen Wert zurückgeben. Dieser entspricht wohl kaum dem Handle des Fensters.

Code: Alles auswählen

Debug RunProgram("Notepad.exe")
Ausgabe = 1

Nein, dieser Parameter identifiziert das Fenster Handle.
Und was heißt das?

Code: Alles auswählen

Debug ShellExecute_(0,"open","notepad",0,"",#SW_SHOW)
liefert bei mir den Rückgabewert 42 - soll das das Handle sein?

---

Worum geht es mir eigentlich?

Ich möchte ein Programm öffnen und dieses, wenn es im RAM liegt, manipulieren ("Loader"). Dazu brauche ich die ProcessID und wollte diese über den Umweg ShellExecute bewerkstelligen.

Anscheinend klappt das direkt (und somit besser) per CreateProcess.

Verfasst: 17.12.2007 21:06
von Bytedevil
@Milan1612

Hast natürlich recht.

Ich habe noch PB 3.x auf'm Rechner gehabt und wundere - nein, freue mich gerade über die neuen Möglichkeiten mit Version 4.

So geht's (und zwar wie immer kinderleicht in PureBasic):

Code: Alles auswählen

hWnd = RunProgram ("notepad.exe","","",#PB_Program_Open)
PID = ProgramID(hWnd)
Debug PID

Verfasst: 17.12.2007 21:10
von Fluid Byte
Bytedevil hat geschrieben:Dazu brauche ich die ProcessID und wollte diese über den Umweg ShellExecute bewerkstelligen.

Code: Alles auswählen

Result  = RunProgram("notepad","","",#PB_Program_Open)

Debug ProgramID(Result)

Verfasst: 17.12.2007 21:12
von Bytedevil
Na, sag ich doch... :wink:

Verfasst: 17.12.2007 21:15
von Kiffi
Bytedevil hat geschrieben:Das einzige, was RunProgram() kann, ist einen Wert zurückgeben.
tun das nicht die meisten Funktionen? ;-)
Bytedevil hat geschrieben:[...] Dazu brauche ich die ProcessID

Code: Alles auswählen

Programm = RunProgram("Notepad.exe", "", "", #PB_Program_Open)
Debug ProgramID(Programm)
Grüße ... Kiffi