Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: sinus am 13.12.02 - 20:00:40

Titel: Inhalt von ausgewählen Mails in die Zwischenablage kopieren
Beitrag von: sinus am 13.12.02 - 20:00:40
Hallo,

woher bekomme ich ein Script, mit dem ich den Inhalt ausgewählter Mails in die Zwischenablage kopieren kann??

Oder kann man das relativ einfach selbst programmieren?? Könnte mir vorstellen, dass das nicht gerade einfach ist...

Gruss, Sinus
Titel: Re:Inhalt von ausgewählen Mails in die Zwischenablage kopieren
Beitrag von: sinus am 13.12.02 - 22:26:27
folgendes habe ich in der zwischenzeit gefunden:

im ordner INBOX folgende aktion:

Sub Click(Source As Button)
   Dim session As NotesSession
   Dim doc As NotesDocument
   Dim strSubject As String
   Dim strDummy As String
   Set session = New NotesSession
   Set doc = session.DocumentContext
   SetClipboardText(doc.body)
End Sub



und unter script bibliotheken:

'Deklaration
Const GMEM_MOVEABLE = &H40
Const GMEM_ZEROINIT = &H2
Const CF_TEXT = &H01
Const SRCCOPY = &HCC0020

Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long



Sub Click(Source As Button)
     Dim s As New NotesSession
     Dim ws As New NotesUIWorkspace
     Dim db As NotesDatabase
     Dim uiDoc As NotesUIDocument
     Dim plainText As String
     Set db = s.CurrentDatabase
     Set uiDoc = ws.CurrentDocument
     plainText = uiDoc.FieldGetText("Subject")
     setclipboardtext(plainText)
     Msgbox "Copied to clipboard.", 0+64, "Successful"
End Sub


Sub SetClipboardText(text As String)
     Dim hwnd As Long
     Dim hGlobalMemory As Long
     Dim lpGlobalMemory As Long
     Dim ret As Variant
     On Error Goto error_handler
     hwnd = NEMGetCurrentSubProgramWindow()
     If hwnd Then
           hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(text)+1))
           If hGlobalMemory Then
                 lpGlobalMemory = GlobalLock(hGlobalMemory)
                 If lpGlobalMemory Then
                       ret = lstrcpy(lpGlobalMemory, text)
                       Call GlobalUnlock(hGlobalMemory)
                       If OpenClipboard(hwnd) Then
                             ret = EmptyClipboard()
                             ret = SetClipboardData(CF_TEXT, hGlobalMemory)
                             ret = CloseClipboard()
                       End If
                 Else
                       Msgbox "Can't allocated global memory pointer.", 32, "Error"
                 End If
           Else
                 Msgbox "Can't allocated global memory handle.", 32, "Error"
           End If
     Else
           Msgbox "Can't get window handle.", 32, "Error"
     End If
     Exit Sub
error_handler:
     Print "Error: " + Error$(Err)
     Resume Next
End Sub



DANKE AN EKNORI!!

Nun habe ich leider noch folgendes Problem:

Ich brauche den Inhalt der Mail hintereinanderweg in der Zwischenablage, so als wenn man die Mail aufmachen würde, und dann STRG-A, STRG-C drücken würde, oben genanntes Script fügt leider noch irgendwelche Zeilenumbrüche hinzu...

Hat jemand einen Tip für mich?
Titel: Re:Inhalt von ausgewählen Mails in die Zwischenablage kopieren
Beitrag von: klaussal am 15.12.02 - 12:58:10
... und wie kriegt man das teil aus der zwischenablage wieder raus ?
das wäre nämlich auch noch sehr interessant.
habe z.zt. ähnliches problem.
Titel: Re:Inhalt von ausgewählen Mails in die Zwischenablage kopieren
Beitrag von: Performance am 15.12.02 - 13:19:12
emptyClipboard()

 :)
Titel: Re:Inhalt von ausgewählen Mails in die Zwischenablage kopieren
Beitrag von: tuelb am 07.03.03 - 15:13:05
folgendes habe ich in der zwischenzeit gefunden:

im ordner INBOX folgende aktion:

Sub Click(Source As Button)
   Dim session As NotesSession
   Dim doc As NotesDocument
   Dim strSubject As String
   Dim strDummy As String
   Set session = New NotesSession
   Set doc = session.DocumentContext
   SetClipboardText(doc.body)
End Sub



und unter script bibliotheken:

'Deklaration
Const GMEM_MOVEABLE = &H40
Const GMEM_ZEROINIT = &H2
Const CF_TEXT = &H01
Const SRCCOPY = &HCC0020

Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long



Sub Click(Source As Button)
     Dim s As New NotesSession
     Dim ws As New NotesUIWorkspace
     Dim db As NotesDatabase
     Dim uiDoc As NotesUIDocument
     Dim plainText As String
     Set db = s.CurrentDatabase
     Set uiDoc = ws.CurrentDocument
     plainText = uiDoc.FieldGetText("Subject")
     setclipboardtext(plainText)
     Msgbox "Copied to clipboard.", 0+64, "Successful"
End Sub


Sub SetClipboardText(text As String)
     Dim hwnd As Long
     Dim hGlobalMemory As Long
     Dim lpGlobalMemory As Long
     Dim ret As Variant
     On Error Goto error_handler
     hwnd = NEMGetCurrentSubProgramWindow()
     If hwnd Then
           hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(text)+1))
           If hGlobalMemory Then
                 lpGlobalMemory = GlobalLock(hGlobalMemory)
                 If lpGlobalMemory Then
                       ret = lstrcpy(lpGlobalMemory, text)
                       Call GlobalUnlock(hGlobalMemory)
                       If OpenClipboard(hwnd) Then
                             ret = EmptyClipboard()
                             ret = SetClipboardData(CF_TEXT, hGlobalMemory)
                             ret = CloseClipboard()
                       End If
                 Else
                       Msgbox "Can't allocated global memory pointer.", 32, "Error"
                 End If
           Else
                 Msgbox "Can't allocated global memory handle.", 32, "Error"
           End If
     Else
           Msgbox "Can't get window handle.", 32, "Error"
     End If
     Exit Sub
error_handler:
     Print "Error: " + Error$(Err)
     Resume Next
End Sub






Habe den Code auch mal bei mir verwendet. Er wird auch ohne Probleme ausgeführt:    Msgbox "Copied to clipboard.", 0+64, "Successful" erscheint, doch die Zwischenablage bleibt leer.  ??? Muss da noch irgendwas anderes gemacht werden bzw. funktioniert der bei Euch?

Danke