ShellExecute mit Variablenübergabe?

Thomasio

Erfahrenes Mitglied
Erstmal muss ich Anfänger ganz dumm fragen, kann man, wenn man via ShellExecute eine Anwendung öffnet dieser eine Variable übergeben?
Klar, in eine Datei schreiben, diese von der Anwendung lesen lassen und schon ist sie da, aber geht das auch direkt?
Ich stelle mir das so etwa vor wie in html/php

Eine Seite aufgerufen mit http://URL.php?x=1
bekommt unter $_GET[x] die Variable

Demnach die Frage(n):
1) Wie übergibt man so eine Variable?
2) Wie liest die Anwendung diese aus?

und wenn wir schon dabei sind
3) Gibt es in standard Windows Anwendungen, wie Editor oder Internet Explorer vogegebene Variablen auf die sie hören? Also z.B. Editor öffnen und automatisch einen übergebenen string darin anzeigen
 
Generell kannst du Medien fremder Anwendungen nur ausnutzen wenn du sie kennst.
Um sie kennen zu lernen helfen dir unter Windows folgende API-Funktionen.

Code:
BOOL EnumWindows(

    WNDENUMPROC lpEnumFunc,	// pointer to callback function
    LPARAM lParam 	// application-defined value
   );

... und ...

Code:
BOOL EnumChildWindows(

    HWND hWndParent,	// handle to parent window
    WNDENUMPROC lpEnumFunc,	// pointer to callback function
    LPARAM lParam 	// application-defined value
   );

... bzw auch ...

Code:
HWND FindWindowEx(

    HWND hwndParent,	// handle to parent window
    HWND hwndChildAfter,	// handle to a child window 
    LPCTSTR lpszClass,	// pointer to class name
    LPCTSTR lpszWindow	// pointer to window name
   );

Zum Beispiel im Falle eines leeren Notepads würdest du nach dem Fenster (in der deutschen Windows Version) "Unbenannt - Editor" suchen müssen.
Hast du dessen OS-Handle, so suchst du nach der Window-Class "Edit" und ermittelst dessen OS-Handle.
Nun stehen dir alle Türen offen.
Du kannst nun per WM_Settext Message an dieses Control-Window deinen Text senden.
Bei andern Controls anderer Anwendungen ist das ähnlich, kann aber in Einzelfällen unmöglich sein.

Du musst folgende Dinge über das Control wissen mit dem du komunizieren möchtest:

- Ist es manipulierbar
- Um welche Class handelt es sich
- Ich brauch das Handle
- Wie manipuliere ich das Control (Messages)

MfG

Wolf
 
Erstmal danke für schnelle Antwort, das beantwortet mal die Zusatzfrage
Tatsächlich bin ich aber noch dümmer als es aussieht, oder anders gesagt, meine eigentliche Frage kommt von viel weiter unten aus dem Anfängerbereich

Ich weiss, dass ShellExecute Parameter übergeben kann, laut MSDN:
If the lpFile parameter specifies an executable file, lpParameters is a pointer to a null-terminated string that specifies the parameters to be passed to the application.

Was ich nicht weiss und was MSDN nicht dazu sagt ist, wie meine Anwendung diese Parameter bekommt?
 
Es ist so....
Diese Parameter sind Argumente die zugeschnitten auf die Anforderungen der jeweiligen Applikation sein müssen.
Bei manchen Anwendungen sind das Pfadangaben zu einer Datei die geöffnet werden muss, bei andern sind das Schalter-Infos wie z.b. /s beim DOS Command Dir.

In Cpp kann dein Programm an diese Parameter über die Main-Function gelangen.

Code:
int main(int argc, char *argv[])
{
}



arc - wird dir dabei die Anzahl der übergebenen Parameter zurückgeben
arcv - liefert dir den jeweiligen Parameter String

argv[1] enthielte demnach den ersten angegebenen Parameter.

Allerdings kannst du die gesammte Commandline auch über eine API-Funktion ermitteln.

Code:
LPTSTR GetCommandLine(VOID)

MfG

Wolf
 
Zuletzt bearbeitet:
Zurück