Lancer l'application associée a un type de fichier (email)

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Lancer l'application associée a un type de fichier (email)

Message par Thyphoon »

Bonjour,
après quelques recherche ici et sur le forum anglais, je me demande si quelqu'un sait comment lancer en ligne de commande (ou autre) une application associé a un type de fichier...
sous windows (mais pour linux et MacOs ça m’intéresse aussi)

Mon but est d'ouvrir la messagerie par défaut et lui joindre des pièces jointe
un peu comme en html avec un lien du type "mailto:monemail@machin.fr"?subject=Sujet&Attach=C:/monfichier.jpg"

si quelqu'un a une idée ...

Merci d'avance :wink:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Lancé Application associé a un type de fichier (email)

Message par Zorro »

ben tu donnes juste le nom du fichier a ouvrir

Code : Tout sélectionner


		RunProgram("c:\mon_image.jpg")
ça va ouvrir le prg qui te sert a ouvrir les images d'habitude ....

pour un email , il suffit d'indiquer le nom du fichier email, et ton client email va s'ouvrir !!

ça marche meme avec le reseau de memoire


et ceci par exemple , ouvre le navigateur par defaut et effectue la recherche des termes se trouvant dans les Data
donc, ici ouvre automatiquement 3 onglets dans Mozilla
un onglet avec les termes "riri fifi loulu"
un autre avec le terme de recherche "toto"
un autre avec le terme de recherche "Zorro"

Code : Tout sélectionner




Restore debut:
For i=1 to 3
		Read.s variable.s
		RunProgram("https://www.google.fr/search?q="+variable.s)
		Delay(5000)
Next i



Datasection
		debut:
		data.s "riri fifi loulou"
		data.s "toto"
		data.s "Zorro"
EndDatasection

; Epb

Dernière modification par Zorro le jeu. 20/juil./2017 12:55, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancé Application associé a un type de fichier (email)

Message par Thyphoon »

Merci Zorro

Oui pour les images et les documents ça marche très bien. Mais je pense que je n'ai pas trop de choix que d'aller voir dans la base de registre l'application mis par defaut pour la messagerie et la lancer. :(
J'éspèrais qu'il y avait une astuce pour la lancer directement comme on le fait pour un autre document genre .. :P
RunProgram("mailto:adress@mail.fr sujet=trucutr attach=c:/doc.doc")

Bon je vais creuser ... :wink:
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancé Application associé a un type de fichier (email)

Message par Thyphoon »

j'ai trouvé cette commande là sur certain forum ...

Code : Tout sélectionner

rundll32.exe url.dll,FileProtocolHandler mailto:%s  &Subject=%s &body=%s
Pas reussi a la faire fonctionner
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lancé Application associé a un type de fichier (email)

Message par djes »

Je sais pas si ça marche encore... http://www.purebasic.fr/english/viewtop ... 12&t=10590
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancé Application associé a un type de fichier (email)

Message par Thyphoon »

djes a écrit :Je sais pas si ça marche encore... http://www.purebasic.fr/english/viewtop ... 12&t=10590
Merci super .... ça marche super pour les fichiers... faut que je regarde si je peux trouver la messagerie a partir de ça :P
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lancé Application associé a un type de fichier (email)

Message par djes »

Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancé Application associé a un type de fichier (email)

Message par Thyphoon »

Merci beaucoup djes Je voir quel est la technique là mieux

Il y a la commande

Code : Tout sélectionner

start "" "mailto:example@rat.it?subject=subject&body=body "

mais aussi

Code : Tout sélectionner

explorer "mailto:lvirden@cas.org?subject=exceptionRpt^&body"
et aussi

Code : Tout sélectionner

rundll32.exe url.dll,FileProtocolHandler mailto:%s  &Subject=%s &body=%s
qui fonctionne aussi...
Disons que ça marche avec tout les applications Outlook,WinMail, Thunderbird etc... mais pas quand on met chrome comme client de messagerie ...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lancer l'application associée a un type de fichier (emai

Message par djes »

Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancer l'application associée a un type de fichier (emai

Message par Thyphoon »

Super c'est parfait ^_^
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancer l'application associée a un type de fichier (emai

Message par Thyphoon »

comment un truc qui je pensais allait me prendre 10 minutes va me prendre une semaine 8O

j'arrive maintenant très bien a ouvrir le client email .... mais les pièces jointes ne veulent pas se rajouter ... :(

Code : Tout sélectionner

RunProgram("rundll32", "url.dll,FileProtocolHandler mailto:" + "?&subject=Photos&attachment=" + Chr(34) + "D:\Sanstitre-4.jpg" + Chr(34),"")
sans doute un problème de sécurité... :?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lancer l'application associée a un type de fichier (emai

Message par djes »

D'après ce que j'ai lu, soit il faut un chemin réseau, soit un chemin absolu (?), soit il faut encoder le fichier, voir si tu ne peux pas utiliser la nouvelle lib mail pour ça...
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancer l'application associée a un type de fichier (emai

Message par Thyphoon »

djes a écrit :D'après ce que j'ai lu, soit il faut un chemin réseau, soit un chemin absolu (?), soit il faut encoder le fichier, voir si tu ne peux pas utiliser la nouvelle lib mail pour ça...
Le but étant de faire au plus simple pour que l'utilisateur évite de configurer le serveur smtp

C'est pas très claire l'histoire de la pièce jointe, j'ai vraiment lu tout et n'importe quoi... mais des applications arrivent bien a le faire .. on devrait y arriver quand même.
Sur le forum anglais j'étais tombé sur un gars qui avait essayé de faire ça en s'inspirant d'un programme en Delfi
http://codes-sources.commentcamarche.ne ... pisendmail

Des qu'on touche aux API de Microsoft ... j'ai vraiment du mal. :lol: mais j'ai pas dis mon dernier mot :mrgreen:
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Lancer l'application associée a un type de fichier (emai

Message par Thyphoon »

Voilà un code que j'ai trouvé un peu ancien ... faut juste trouver pourquoi il marche plus :lol:

Code : Tout sélectionner

; Code by the.weavster
; Source http://www.purebasic.fr/english/viewtopic.php?f=13&t=14722&hilit=mapi32

;declare some MAPI constants...
#SUCCESS_SUCCESS = 0
#MAPI_USER_ABORT = 1
#MAPI_E_FAILURE = 2
#MAPI_E_LOGIN_FAILURE = 3
#MAPI_E_DISK_FULL = 4
#MAPI_E_INSUFFICIENT_MEMORY = 5
#MAPI_E_BLK_TOO_SMALL = 6
#MAPI_E_TOO_MANY_SESSIONS = 8
#MAPI_E_TOO_MANY_FILES = 9
#MAPI_E_TOO_MANY_RECIPIENTS = 10
#MAPI_E_ATTACHMMENT_NOT_FOUND = 11
#MAPI_E_ATTACHMENT_OPEN_FAILURE = 12
#MAPI_E_ATTACHMENT_WRITE_FAILURE = 13
#MAPI_E_UNKNOWN_RECIPIENT = 14
#MAPI_E_BAD_RECITYPE = 15
#MAPI_E_NO_MESSAGES = 16
#MAPI_E_INVALID_MESSAGE = 17
#MAPI_E_TEXT_TOO_LARGE = 18
#MAPI_E_INVALID_SESSION = 19
#MAPI_E_TYPE_NOT_SUPPORTED = 20
#MAPI_E_AMBIGUOUS_RECIPIENT = 21
#MAPI_E_MESSAGE_IN_USE = 22
#MAPI_E_NETWORK_FAILURE = 23
#MAPI_E_INVALID_EDITFIELDS = 24
#MAPI_E_INVALID_RECIPS = 25
#MAPI_E_NOT_SUPPORTED = 26

#MAPI_E_NO_LIBRARY = 999
#MAPI_E_INVALID_PARAMETER = 998

#MAPI_ORIG = 0
#MAPI_TO = 1
#MAPI_CC = 2
#MAPI_BCC = 3

#MAPI_UNREAD = 1
#MAPI_RECEIPT_REQUESTED = 2
#MAPI_SENT = 4

#MAPI_LOGON_UI          = $00000001
#MAPI_DIALOG            = $00000008                 

;enumerate other constants...
Enumeration
  #MAPI32_DLL
EndEnumeration

;define MAPI structures...
Structure MAPIMessage
  Reserved.l
  Subject.s
  NoteText.s
  MessageType.s
  DateReceived.s
  ConversationID.s
  Flags.l
  Originator.s
  RecipCount.l
  Recips.l
  FileCount.l
  Files.l
EndStructure

Structure MAPIRecip
  Reserved.l
  RecipClass.l
  Name.s
  Address.s
  EIDSize.l
  EntryID.s
EndStructure

Structure MAPIFile
  Reserved.l
  Flags.l
  Position.l
  PathName.s
  FileName.s
  FileType.l
EndStructure

;declare global variables...
Global lSession.l
Global ErrorDecsription.s
Global udtMessage.MAPIMessage
Global udtRecip.MAPIRecip
Global udtFile.MAPIFile

;open the MAPI library...
Result.l = OpenLibrary(#MAPI32_DLL,"MAPI32.DLL")
If Result = 0
  MessageRequester("Error","Could Not Load MAPI Library",0)
  End
EndIf

;set pointers to the required functions...
Global MAPILogOff.l        : MAPILogOff = GetFunction(#MAPI32_DLL,"MAPILogoff")
Global MAPILogOn.l         : MAPILogOn = GetFunction(#MAPI32_DLL,"MAPILogon")
Global MAPISendMail.l      : MAPISendMail = GetFunction(#MAPI32_DLL,"MAPISendMail")

If MAPILogOff And MAPILogOn And MAPISendMail
Else
  MessageRequester("Error","Function Did Not Load",0)
  CloseLibrary(#MAPI32_DLL)
  End
EndIf

;error definition function...
Procedure.s MAPIError(lError.l)
  Select lError
    Case #MAPI_USER_ABORT
      text$ = "MAPI User Cancel"
    Case #MAPI_E_FAILURE
      text$ = "MAPI Failure"
    Case #MAPI_E_LOGIN_FAILURE
      text$ = "MAPI Login Failure"
    Case #MAPI_E_DISK_FULL
      text$ = "MAPI Disk Full"
    Case #MAPI_E_INSUFFICIENT_MEMORY
      text$ = "MAPI Insufficient Memory"
    Case #MAPI_E_BLK_TOO_SMALL
      text$ = "MAPI Block Too Small"
    Case #MAPI_E_TOO_MANY_SESSIONS
      text$ = "MAPI Too Many Sessions"
    Case #MAPI_E_TOO_MANY_FILES
      text$ = "MAPI Too Many Files"
    Case #MAPI_E_TOO_MANY_RECIPIENTS
      text$ = "MAPI Too Many Attachments"
    Case #MAPI_E_ATTACHMMENT_NOT_FOUND
      text$ = "MAPI Attachment Not Found"
    Case #MAPI_E_ATTACHMENT_OPEN_FAILURE
      text$ = "MAPI Attachment Open Failure"
    Case #MAPI_E_ATTACHMENT_WRITE_FAILURE
      text$ = "MAPI Attachment Write Failure"
    Case #MAPI_E_UNKNOWN_RECIPIENT
      text$ = "MAPI Unknown Recipient"
    Case #MAPI_E_BAD_RECITYPE
      text$ = "MAPI Bad Recipient Type"
    Case #MAPI_E_NO_MESSAGES
      text$ = "MAPI No Messages"
    Case #MAPI_E_INVALID_MESSAGE
      text$ = "MAPI Invalid Message"
    Case #MAPI_E_TEXT_TOO_LARGE
      text$ = "MAPI Text Too Large"
    Case #MAPI_E_INVALID_SESSION
      text$ = "MAPI Invalid Session"
    Case #MAPI_E_TYPE_NOT_SUPPORTED
      text$ = "MAPI Type Not Supported"
    Case #MAPI_E_AMBIGUOUS_RECIPIENT
      text$ = "MAPI Ambiguous Recipient"
    Case #MAPI_E_MESSAGE_IN_USE
      text$ = "MAPI Message In Use"
    Case #MAPI_E_NETWORK_FAILURE
      text$ = "MAPI Network Failure"
    Case #MAPI_E_INVALID_EDITFIELDS
      text$ = "MAPI Invalid Edit Fields"
    Case #MAPI_E_INVALID_RECIPS
      text$ = "MAPI Invalid Recipients"
    Case #MAPI_E_NOT_SUPPORTED
      text$ = "MAPI Not Supported"
    Case #MAPI_E_NO_LIBRARY
      text$ = "MAPI No Library"
    Case #MAPI_E_INVALID_PARAMETER
      text$ = "MAPI Invalid Parameter"
  EndSelect
  text$ = text$ + " [Error No: " + Str(lError) + "]"
  ProcedureReturn text$
EndProcedure

;connect and send mail function...
Procedure.l SendEMail(UserName.s,Password.s,Recipient.s,Subject.s,Message.s,Attachment.s)
  Dim udtRecips.MAPIRecip(0)
  Dim udtFiles.MAPIFile(0)
  ErrorDecsription = "No Problem"
  
  If Recipient <> "" And Right(Recipient,1) <> ";"
    Recipient = Recipient + ";"
  EndIf
  lRecipientCount.l = CountString(Recipient,";")
  If lRecipientCount > 0
    Dim udtRecips.MAPIRecip(lRecipientCount)
    For k = 0 To lRecipientCount - 1
      udtRecips(k)\Reserved = 0
      udtRecips(k)\RecipClass = #MAPI_TO
      udtRecips(k)\Name = StringField(Recipient,k + 1,";")
      udtRecips(k)\Address = ""
      udtRecips(k)\EIDSize = 1000
      udtRecips(k)\EntryID = ""
    Next k
  EndIf 
  
  If Attachment <> "" And Right(Attachment,1) <> ";"
    Attachment = Attachment + ";"
  EndIf
  lFileCount.l = CountString(Attachment,";")
  If lFileCount > 0
    Dim udtFiles.MAPIFile(lFileCount)
    For k = 0 To lFileCount - 1
      udtFiles(k)\Reserved = 0
      udtFiles(k)\Flags = 0
      udtFiles(k)\Position = 0
      udtFiles(k)\PathName = StringField(Attachment,k + 1,";")
      udtFiles(k)\FileName = GetFilePart(StringField(Attachment,k + 1,";"))
      udtFiles(k)\FileType = 0 
    Next k
  EndIf
  
  udtMessage\Reserved = 0  
  udtMessage\Subject = Subject
  udtMessage\NoteText = Message
  udtMessage\MessageType = ""
  udtMessage\DateReceived = FormatDate("%yyyy/%mm/%dd %hh:%ii",Date())
  udtMessage\ConversationID = ""
  udtMessage\Flags = 0
  udtMessage\Originator = UserName
  udtMessage\RecipCount = lRecipientCount
  udtMessage\Recips = @udtRecips()
  udtMessage\FileCount = lFileCount
  udtMessage\Files = @udtFiles()
  

  lResult.l = CallFunctionFast(MAPILogOn,0,UserName,Password,#MAPI_LOGON_UI,0,@lSession)
  If lReturn <> #SUCCESS_SUCCESS
    ErrorDecsription = MAPIError(lResult)
    ProcedureReturn #False
  EndIf
  
  lResult.l = CallFunctionFast(MAPISendMail,lSession,0,udtMessage,0,0) ;could use #MAPI_DIALOG as parameter 4 to display the e-mail
  If lResult <> #SUCCESS_SUCCESS
    ErrorDecsription = MAPIError(lResult)
    ProcedureReturn #False
  EndIf
  
  lResult.l = CallFunctionFast(MAPILogOff,lSession,0,0,0)
  If lResult <> #SUCCESS_SUCCESS
    ErrorDecsription = MAPIError(lResult)
    ProcedureReturn #False
  EndIf
  
  ProcedureReturn #True
    
  Dim udtRecips.MAPIRecip(0)
  Dim udtFiles.MAPIFile(0)  
  
EndProcedure

;give it a little try...
MyAccount.s = InputRequester("User Name","Please Input Your SMTP User Name","")
MyPassword.s = InputRequester("Password","Please Input Your SMTP Password","")
MyRecipients.s = "falsename@falseaddress.com;somebodyelse@falseaddress.com"
MySubject.s = "Subject Goes Here"
MyText.s = "Message Goes Here"
MyAttachments.s = OpenFileRequester("Attachment","*.*","All Files | *.*",0)                                        

lTest.l = SendEMail(MyAccount,MyPassword,MyRecipients,MySubject,MyText,MyAttachments)
If lTest = #True
  MessageRequester("Confirmation","EMail Created OK",0)
Else
  MessageRequester("Error",ErrorDecsription,0)
EndIf
CloseLibrary(#MAPI32_DLL)

End
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lancer l'application associée a un type de fichier (emai

Message par djes »

Ca demande le serveur smtp aussi...
Répondre