RunShell

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

RunShell

Beitrag von Muecke »

Hallo,

Gibt es noch eine andere möglichkeit das Programm aufzurufen ohne Runshell ?

Code: Alles auswählen

RunShell( '"c:\wasserabrechnung Herr Leuthold.xls"', cPrg , .T. )
gruss Thomas
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Thomas,
ja - gibt es! :D

z.B.:

Code: Alles auswählen

ort := "url.dll,FileProtocolHandler " + textpfad + "\" +katalog + "\" + katalog + ".rtf"
RunShell( ort, 'Rundll32.exe' )
oder

Code: Alles auswählen

ort := textpfad + "\" +katalog + "\" + katalog + ".rtf"
RUN START &ort
oder

Code: Alles auswählen

DLLFUNCTION ShellExecuteA( nHWND, cOperation, cFile, cParms, cDirectory, nOpenMode  ) USING OSAPI FROM SHELL32.DLL
ort := textpfad + "\" +katalog + "\" + katalog + ".rtf"
ShellExecuteA( AppDesktop():GetHWND(), "open", ort, "", CurDir(), SW_NORMAL )
Viele Grüße,
Martin
Zuletzt geändert von Martin Altmann am Di, 29. Jan 2008 19:20, insgesamt 1-mal geändert.
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Boh, bist Du gemein....

Jetzt erst recht. Schnell was hinterherschreiben und ich stehe auch noch als Depp da..... :( ,weil keiner weiß warum ich es geschrieben habe.....
Zuletzt geändert von Manfred am Di, 29. Jan 2008 19:22, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

@Thomas: Schau Dir mal die Active-X-Samples der 1.9 an. Instanzen von Ecxel als AX-Komponente (auch in Xbase-Dialoge eingebettet) zu erzeugen und Dateien darin zu öffnen ist sehr simpel.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Manfred hat geschrieben:Boh, bist Du gemein....
konnte ich mir nicht verkneifen :lol:
Er hatte ja nicht nach dem "Wie" gefragt...
Aber ich habe dann doch noch ein wenig was nachgetragen - bin halt doch ab und an nachtragend :wink:

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Martin,

werde die DLLFUNCTION mal testen.Das ist das was ich suchte.

@Tom. Ja das stimmt, aber wenn ich pdf oder bmp.... Files habe muss ich ja zuerst das Programm wieder suchen. So wie ich dies versteh, kann ich direkt das Files öffnen mit der DLLFUNKTION.

Gruss Thomas
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Thomas,
das kannst Du - vorausgesetzt, Dein Windows kennt ein Programm für das entsprechende Format...
Ist dafür bei Dir kein Standardprogramm definiert, geht es nicht.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

@Martin: Eben! Es kann durchaus sein, daß jemand irgendein PDF-Bearbeitungstool als Standard für die Extension .PDF eingestellt hat, und dann ist man Nese mit RunShell oder RunDLL.

@Thomas: Du mußt von den Active-X-Komponenten nur die CLSIDs (bei Acrobat wechseln sie, oder haben das bis zur Version 7 getan) wissen - und abfragen, ob sie installiert sind (was unproblematisch ist). Dann aber hast Du die volle Kontrolle. Ist durchaus eleganter.
Herzlich,
Tom
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Tom,

Danke,werde dies auch nocht testen.

Gruss Thomas
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Tom,

mein Programm um das File zu öffnen

Code: Alles auswählen

C:\Programme\Microsoft Office\OFFICE11\EXCEL.EXE" 
aber wie soll ich jetzt das dazugehörende CLSID finden.

Hab mal mit GetObject und CreateObject versucht, funkt aber nicht.

Gibt es da eine Funktion, wie man im HKEY_CLASSES_ROOT den schlüssel auslesen kann???

Gruss Thomas
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Thomas.

Die CLSIDs der installierten Active-X-Komponenten findet man mit einem Tool wie OLEVIEW32 relativ fix.

Aber bei Excel ist es einfacher:

Code: Alles auswählen

#PRAGMA LIBRARY( "ASCOM10.LIB" )

oApplication := CreateObject("Excel.Application")
oApplication:Visible:=.T.
oBook := oApplication:Workbooks:Open(cMyExcelFile)
Schau Dir einfach mal die Beispiele in ..\Samples\Activex\Msexcel an!
Herzlich,
Tom
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hallo Tom

diesen Aufruf mach ich auch bereits

Code: Alles auswählen

oApplication := CreateObject("Excel.Application") 
aber mein Problem ist, wenn ich mails bekomme und die einen Anhang haben mit verschiedenen Files, so muss ich ja zuerst schauen, ist ein Prg auf Pc vorhanden und danach das Programm des Files starten.

Wenn ich jetzt weiss, dass ein Programm vorhanden ist, kann ich dan irgend wie die CLSIDs abfragen.
Ich brauch ja für ein bmp ein anderes Progamm als für eine xls.

Darum hab ich dies bis jetzt mit Runshell gemacht.

Das ist eigentlich mein Problem, was ich zu lösen versuche.

Gruss Thomas
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Thomas.

Wie gesagt, die CLSIDs (die sich international gleichen) findest Du mit OLEVIEW32 oder ähnlichen Tools heraus. Ob die Komponenten installiert sind, kann man dann leichterdings feststellen, indem man in der Registry (HKEY_CLASSES_ROOT) nach der jeweiligen CLSID sucht. Das macht man über die Windows-DLL ADVAPI32 und die eingebetteten Funktionen RegOpenKeyExA() und RegQueryValueExA(). Ich glaube, dafür müßte es Beispiele im Forum oder bei den Alaska-Samples geben. Ich kann Dir meinen Code leider nicht zur Verfügung stellen, weil es nicht meiner ist, da ich DC_RegQuery() aus der eXpress++-Bibliothek von Roger Donnay nutze.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Thomas,

wenn du das Standardprogramm für eine bestimmte Datei verwenden willst, das der Anwender dafür auf seinem PC festgelegt hat, dann ist ActiveX nicht der richtige Weg - und zudem oft sehr langsam.

Martin hat weiter oben folgenden Befehl vorgeschlagen:

Code: Alles auswählen

DLLFUNCTION ShellExecuteA( nHWND, cOperation, cFile, cParms, cDirectory, nOpenMode  ) USING OSAPI FROM SHELL32.DLL 
ort := textpfad + "\" +katalog + "\" + katalog + ".rtf" 
ShellExecuteA( AppDesktop():GetHWND(), "open", ort, "", CurDir(), SW_NORMAL ) 
wenn du in SUCHEN nach ShellExecuteA suchst, wirst du gut 3 Threads zu dem Thema im Vergleich zu RunShell finden. Gerade bei BMP bleibt dir gar nichts anderes übrig, da - soweit ich weiß - Paint kein ActiveX Server ist.

Außerdem sollte man ja als Programmierer sich an die Vorauswahl des Standardprogrammes halten.
Gruß
Hubert
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Hubert,

Hab diesen Code von Martin bereits in funktion und läuft sehr gut.

wo find ich das?

Code: Alles auswählen

wenn du in SUCHEN nach ShellExecuteA suchst
möcht ja dies auch verstehen was da alles abgeht und nicht nur verwenden!!!!

Gruss Thomas
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ich meine damit die SUCHEN-Funktion von diesem Forum, sieh mal unter das Foto vom IdXF++ Eisbären:

Profil Private Nachrichten FAQ Mitgliederliste Suchen ...

dort kann man dann z.B. diesen Suchbegriff eingeben und er zeigt alle Threads an in denen dieser Befehl vorkommt. LEWI hat in einem sehr ausführlich diese API Shell Funktion erläutert.
Gruß
Hubert
Benutzeravatar
Muecke
1000 working lines a day
1000 working lines a day
Beiträge: 623
Registriert: Di, 24. Okt 2006 7:19
Wohnort: Samstagern CH
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Beitrag von Muecke »

Super, besten Dank für die Hilfe.

Gruss Thomas
Antworten