Mail-Body mit Attachment erzeugen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
dige
Beiträge: 1183
Registriert: 08.09.2004 08:53

Re: Mail-Body mit Attachment erzeugen

Beitrag von dige »

Hier mal ein Beispiel, wie du laufende Prozesse ermitteln kannst (weiss leider nicht mehr wo/wer das gepostet hat)

Code: Alles auswählen

EnableExplicit

Define a, event
Global PID
Global MODULEENTRY32.MODULEENTRY32
Global Snapshot

Procedure ListWindows(hwnd,lParam)
  Protected.s title = Space(1000),class = Space(1000)
  If GetWindowLong_(hwnd,#GWL_EXSTYLE) ! #WS_EX_TOOLWINDOW And GetWindowLong_(hwnd,#GWL_STYLE) & #WS_VISIBLE
    GetClassName_(hwnd,class,1000)
    GetWindowText_(hwnd,title,1000)
    If title <> ""
      MODULEENTRY32\dwSize = SizeOf(MODULEENTRY32)
      GetWindowThreadProcessId_(FindWindow_(0,title), @PID)
      Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, PID)
      If Module32First_(Snapshot, MODULEENTRY32)
        ;Debug PeekS(@MODULEENTRY32\szExePath)
        ;Debug "Title: "+title+" | Class: "+class+" | Handle: "+Str(hwnd)+" | App: "+GetFilePart(PeekS(@MODULEENTRY32\szExePath))+" | Path: "+PeekS(@MODULEENTRY32\szExePath)
        AddGadgetItem (0, -1, title+Chr(10)+class+Chr(10)+Str(hwnd)+Chr(10)+GetFilePart(PeekS(@MODULEENTRY32\szExePath))+Chr(10)+PeekS(@MODULEENTRY32\szExePath))
        Define a
      EndIf
      CloseHandle_(Snapshot)
    EndIf
  EndIf
  ProcedureReturn #True
EndProcedure

Procedure.I GetSelectedColumn(ListIconID.I)
  Protected CursorLocation.POINT
  Protected HitInfo.LVHITTESTINFO
  GetCursorPos_(CursorLocation)
  MapWindowPoints_(0, GadgetID(ListIconID), CursorLocation, 1)             
  Hitinfo\pt\x = CursorLocation\x
  HitInfo\pt\y = CursorLocation\y
  SendMessage_(GadgetID(ListIconID), #LVM_SUBITEMHITTEST, 0, HitInfo)
  ProcedureReturn HitInfo\iSubItem
EndProcedure

If OpenWindow(0, 0, 0, 1010, 250, "Process Info:", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
  ; WindowBounds(0, 1010, 200, #PB_Ignore, #PB_Ignore)
  TextGadget(1, 5, 5, 1000, 20, "RightClick to copy cell content to clipboard", #PB_Text_Center)
  ListIconGadget(0, 5, 30, 1000, 190, "Title", 200, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines)
  AddGadgetColumn(0, 1, "Class", 240)
  AddGadgetColumn(0, 2, "Handle", 60)
  AddGadgetColumn(0, 3, "Program", 200)
  AddGadgetColumn(0, 4, "Path", 500)
  ButtonGadget(2, 455, 225, 100, 20, "Refresh")
  EnumChildWindows_(FindWindow_("ToolbarWindow32",0),@ListWindows(),0)
  ;SetGadgetState(0, 0)
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        If EventGadget() = 0 And EventType() = #PB_EventType_RightClick
          Debug GetGadgetItemText(0, -1, GetSelectedColumn(0)) + ": " + GetGadgetItemText(0, GetGadgetState(0), GetSelectedColumn(0))
          SetClipboardText(GetGadgetItemText(0, GetGadgetState(0), GetSelectedColumn(0)))
          MessageRequester("Information", "Copied " + GetGadgetItemText(0, -1, GetSelectedColumn(0)) + ": " + Chr(13) + Chr(13) + GetGadgetItemText(0, GetGadgetState(0), GetSelectedColumn(0)) + Chr(13) + Chr(13) + "to clipboard!")
        EndIf
        If EventGadget() = 2 And EventType() = #PB_EventType_LeftClick
          RunProgram(ProgramFilename())
          End
        EndIf
    EndSelect
  ForEver
 
EndIf

"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Fordey_ra
Beiträge: 71
Registriert: 17.08.2010 22:30

Re: Mail-Body mit Attachment erzeugen

Beitrag von Fordey_ra »

Hey.

Würde sicher die Lösung sein.

Aber leider zeigt das Programm außer sich selber nichts an bzw. nicht Outlook.
Fordey_ra
Beiträge: 71
Registriert: 17.08.2010 22:30

Re: Mail-Body mit Attachment erzeugen

Beitrag von Fordey_ra »

Die Lösung des Problem ist gar nicht das Outlook nicht gestartet war sondern der Zugriff zu schnell folgte.

Hier die meine Lösung nur mit Delay(100) erweitert.
Jetzt läuft es sauber ohne Absturz.

Code: Alles auswählen

XIncludeFile "C:\Programme\PureBasic\Include\COMatePlus.pbi"

Define.COMateObject  OutlookObject.COMateObject, olMsg.COMateObject

sub.s="*** Attachment ***"
standard.s= "Hello"
tomail.s="leodh@mail.at"
add.s=#PB_Compiler_Home+"PureBasic.chm"

OutlookObject = COMate_CreateObject("Outlook.Application")
If OutlookObject

  Delay(100)
  olMsg = OutlookObject\GetObjectProperty("CreateItem(0)")
   If olMsg
    olMsg\SetProperty("to='"+tomail+"'")
    olMsg\SetProperty("Subject='"+sub+"'")
    olMsg\SetProperty("Body='"+standard+"'")
   
   If FileSize(add)<>-1
    olMsg\Invoke("Attachments\Add('"+add+"')")
   EndIf
   
    olMsg\Invoke("Display")
    olMsg\Release()
    Else
      MessageRequester("Sorry", COMate_GetLastErrorDescription())
  EndIf
OutlookObject\Release() 
Else
  MessageRequester("Sorry - CreateObject", COMate_GetLastErrorDescription())
EndIf
Benutzeravatar
kpeters58
Beiträge: 25
Registriert: 16.12.2014 18:51

Re: Mail-Body mit Attachment erzeugen

Beitrag von kpeters58 »

Du könntest mit den FindWindow Funktionen aus dem WinAPI checken, ob ein Outlook Window aktiv ist ...
Antworten