RunProgramm (mailto)

Anfängerfragen zum Programmieren mit PureBasic.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

RunProgramm (mailto)

Beitrag 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]
Zuletzt geändert von dietmar am 20.10.2007 08:56, insgesamt 1-mal geändert.
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du hast #PB_Programm_Open bei den Flags vergessen.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag von dietmar »

Eingefügt und ausprobiert hilft nicht die Meldung bleibt.
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Dann geht dieser Programmaufruf so nicht und du
musst das Mailprogramm direkt aufrufen.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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! :)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag 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=","","")
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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()
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag 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?
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten