Seite 1 von 2

RunProgramm (mailto)

Verfasst: 15.10.2007 11:15
von dietmar
Tach ich hab da ne Frage zu RunProgram oder genauer zu WriteProgramString. Da bei RunPogram der Text nicht zu groß sein darf wollt ich mit WriteProgramString den Text der Email einfügen, aber leider sagt in dieser From der Compiler "Program is Null[0]!". kann mir einer sagen wie ich die richtige Nummer für Program bekomme?

Code: Alles auswählen

  empfaenger.s = empfaenger
  Text.s = "mailto:"+ empfaenger + "?"
  Text + "subject=Daten"+ FormatDate("%dd.%mm.%yyyy", Date()) + "&"
  Text + "body="

  Mail = RunProgram(Text,"","",#PB_Program_Write)
  For i = 0 To CountGadgetItems(#ListIcon_1)
    For j = 1 To CountList(Spalten())
      Text2.s + GetGadgetItemText(#ListIcon_1, i, j) + " "
    Next
    WriteProgramString(Mail, Text2 + "<br>")
    Text2 = ""
  Next
  
[/code]

Verfasst: 15.10.2007 11:22
von edel
Du hast #PB_Programm_Open bei den Flags vergessen.

Verfasst: 15.10.2007 11:25
von dietmar
Eingefügt und ausprobiert hilft nicht die Meldung bleibt.

Verfasst: 15.10.2007 11:30
von edel
Dann geht dieser Programmaufruf so nicht und du
musst das Mailprogramm direkt aufrufen.

Verfasst: 15.10.2007 12:55
von AND51
> musst das Mailprogramm direkt aufrufen
Kannst du aber nicht, da jeder Typ ein anderes Mailprogramnm benutzt oder eh nur online seine Mails verschickt (Google Mail, Web.de, ...)

Nicht jeder benutzt das vorinstallierte Outlook oder ALternativprodukte.

Wenn man aber Offline-Alternativen nutzt, fährst du mit der mailto:-Lösung am besten, weil sich dann das entsprechende Programm automatisch öffnet, ohne, dass du wissen muss, WAS der User installiert hat und WO er es installiert hat.

> Da bei RunPogram der Text nicht zu groß sein darf
Wer sagt das? Ich wüsste jetzt nciht, dass es a eine Begrenzung gibt.
Außerdem: Ich gehe unwissend einfach davon aus, dass Outloook zum Beispiel es nicht unterstützt, mit WriteProgramString() beschrieben zu werden.

Hinweis: Bei dem vorletzen Absatz lasse ich mich gern eines besseren belehren! :)

Verfasst: 15.10.2007 13:03
von dietmar
Na weil ich Daten aus einem ListIcon verschicken will. Dann wollt ich alle Daten in den Text (String) reinschreiben. Da wurde Thunderbird nicht mehr gestartet, dann mal nur die ersten 10 da gings dann wieder wurde alles korrekt angezeigt. Soll später aber auch mit Outlook funktionieren.

Aber wenn der WriteProgramString() nicht für sowas da ist wofür den dann?

Naja auch egal weis jemand zufällig ne Alternative zu

Code: Alles auswählen


  For i = 0 To CountGadgetItems(#ListIcon_1)
    For j = 1 To CountList(Spalten())
      Text2.s + GetGadgetItemText(#ListIcon_1, i, j) + " "
    Next
    
    Text2 + Chr(13) + Chr(10) 
    SetClipboardText(Text2)

  Next
  
  MessageRequester("Sorry", "Auf OK klicken und danach 'STRG + V' drücken.")
  
  Mail = RunProgram("mailto:"+ empfaenger + "?" + "subject=Kinder"+ FormatDate("%dd.%mm.%yyyy", Date()) + "&body=","","")

Verfasst: 15.10.2007 13:35
von edel
AND51 hat geschrieben:> musst das Mailprogramm direkt aufrufen
Kannst du aber nicht, da jeder Typ ein anderes Mailprogramnm benutzt oder eh nur online seine Mails verschickt (Google Mail, Web.de, ...)

Nicht jeder benutzt das vorinstallierte Outlook oder ALternativprodukte.

Wenn man aber Offline-Alternativen nutzt, fährst du mit der mailto:-Lösung am besten, weil sich dann das entsprechende Programm automatisch öffnet, ohne, dass du wissen muss, WAS der User installiert hat und WO er es installiert hat.

> Da bei RunPogram der Text nicht zu groß sein darf
Wer sagt das? Ich wüsste jetzt nciht, dass es a eine Begrenzung gibt.
Außerdem: Ich gehe unwissend einfach davon aus, dass Outloook zum Beispiel es nicht unterstützt, mit WriteProgramString() beschrieben zu werden.

Hinweis: Bei dem vorletzen Absatz lasse ich mich gern eines besseren belehren! :)

Denk doch mal ein wenig nach. Wenn ein Programmaufruf ala "mailto"
funktioniert, dann muss ja auch irgendwo der Programmpfad abgespeichert
sein. Wenn ich jetzt richtig geguckt habe muesste der Pfad hierliegen :
HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\*programm*\shell\open\command
Mit meinen verkrueppelten Registry Kenntnissen laesst sich dann folgender Code zusammen stoepseln :

Code: Alles auswählen

Procedure.s GetDefaultMailApp()

  Protected szValue.s{1024}
  Protected dwBufLen = 1024
  Protected result.s 
  
  If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE,"SOFTWARE\Clients\Mail", 0,#KEY_QUERY_VALUE,@hKey) = #ERROR_SUCCESS
      
    If RegQueryValueEx_( hKey, 0, 0, 0, @szValue, @dwBufLen) = #ERROR_SUCCESS
      RegCloseKey_(hKey)
     
      If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE,"SOFTWARE\Clients\Mail"+szValue+"\shell\open\command", 0,#KEY_QUERY_VALUE,@hKey) = #ERROR_SUCCESS
        dwBufLen = 1024
        If RegQueryValueEx_( hKey, 0, 0, 0, @szValue, @dwBufLen) = #ERROR_SUCCESS
          result = szValue
        EndIf             
        RegCloseKey_(hKey)
      EndIf 
    EndIf 
  EndIf 

  ProcedureReturn result

EndProcedure


Debug GetDefaultMailApp()

Verfasst: 15.10.2007 13:45
von AND51
> HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\*programm*\shell\open\command
Ja, genau daran habe ich ja gedacht. Da ist ja defineirt, welches Programm mit dem mailto-"Protokoll" verknüpft ist.

Trotzem habe ich Recht, wenn ich sage, dass niemand weiß, was der Benutzer auf seinem PC installiert hat, welche Version, welche EInstellungen der Benutzer in diesem Mailprogramm vorgenommen hat, die die Eingae erschweren (könnten), etc.....

Und selbst wenn, dürfte es schwierig werden, eine Methode zu finden, die mit allen Mail-Programmen zurecht kommt, denn es könnte ja auch ein PureMailer sein, den ich absichtlich nicht von außen "beschreiben" lasse.

Ich will natürlich keinem was vorschreiben, aber ich halte nach wie vor die mailto:-Lösung für die Beste.

Verfasst: 15.10.2007 17:14
von dietmar
Die mailto Lösung ist prima. Ich find auch ganz toll, vor allem weil man die Regestry nicht bemühen muss. Aber das hilft mir leider nicht weiter. Die Frage die sich mir stellt wie kann ich eine LinkedList übergeben?

Verfasst: 15.10.2007 18:44
von AND51
> wie kann ich eine LinkedList übergeben
Genauer, bitte. Ist diese LinkedList strukturiert oder nur vom Typ Zahl/String?

Das ist ziemlich einfahc, so fügst du eine LinkedList zusammen:

Code: Alles auswählen

ForEach element()
    gesamt$+element()
Next

; Übergabe:
Mail = RunProgram("mailto:"+ empfaenger + "?" + "subject=Kinder"+ FormatDate("%dd.%mm.%yyyy", Date()) + "&body="+gesamt$,"","") 
Ist es das, was du meinst?