ShellExecute

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Bytedevil
Beiträge: 34
Registriert: 30.12.2004 21:37

ShellExecute

Beitrag 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
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Nimm doch einfach RunProgram(). Ist viel simpler und kann das selbe...
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: ShellExecute

Beitrag 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)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Bytedevil
Beiträge: 34
Registriert: 30.12.2004 21:37

Beitrag 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.
Bytedevil
Beiträge: 34
Registriert: 30.12.2004 21:37

Beitrag 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
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Bytedevil
Beiträge: 34
Registriert: 30.12.2004 21:37

Beitrag von Bytedevil »

Na, sag ich doch... :wink:
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Antworten