Seite 2 von 2

Re: Mail-Body mit Attachment erzeugen

Verfasst: 13.04.2022 09:50
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


Re: Mail-Body mit Attachment erzeugen

Verfasst: 13.04.2022 14:33
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.

Re: Mail-Body mit Attachment erzeugen

Verfasst: 13.04.2022 21:30
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

Re: Mail-Body mit Attachment erzeugen

Verfasst: 05.06.2022 19:06
von kpeters58
Du könntest mit den FindWindow Funktionen aus dem WinAPI checken, ob ein Outlook Window aktiv ist ...