Outlook calendar item clipboard format documentation?

1

Short Version

Is there any documentation on the Outlook RenPrivateAppointment clipboard format used to transfer appointments?

Long version

As a reminder, for anything on the clipboard, the source application can present you the data in a number of different formats. The receiver can go through the list, in order, and decide which format it understands the best.

In the case of my Outlook appointment, the formats are:

  • 0: "RenPrivateSourceFolder" (IStream)
  • 1: "RenPrivateMessages" (IStream)
  • 2: "RenPrivateItem" (HGlobal)
  • 3: "FileGroupDescriptor" (HGlobal)
  • 4: CFSTR_FILEDESCRIPTOR (HGlobal)
  • 5: CFSTR_FILENAME (File)
  • 6: CFSTR_FILECONTENTS (IStream, IStorage)
  • 7: "Object Descriptor" (HGlobal)
  • 8: "RenPrivateAppointment" (IStream)
  • 9: CF_TEXT (HGlobal)
  • 10: CF_UNICODETEXT (HGlobal)

Looking at the content of the various formats, the most promising looks like the RenPrivateAppointment format:

01 00 00 00 C0 C8 1E 0D   60 CE 1E 0D 01 00 00 00    ....ÀÈ.`Î......
6A CB 1E 0D 79 CB 1E 0D   41 00 00 00 41 73 6B 20    jË..yË..A...Ask 
71 75 65 73 74 69 6F 6E   20 61 62 6F 75 74 20 61    question about a
70 70 6F 69 6E 74 6D 65   6E 74 20 63 6C 69 70 62    ppointment clipb
6F 61 72 64 20 66 6F 72   6D 61 74 20 6F 6E 20 53    oard format on S
74 61 63 6B 6F 76 65 72   66 6C 6F 77 00 02 00 00    tackoverflow...
00 02 00 00 00 18 00 00   00 00 00 00 00 BC B9 6E    ............¼¹n
9C 12 F8 D3 43 AC B7 74   81 5E F0 3D FC 04 D2 97    œ.øÓC¬·t.^ð=ü.Ò—
00 00 00 00 00 00 00 00   00 02 00 00 00 00 00 00    ...............
00 01 00 00 00 00 00 00   00 00 00 00 00 00 00 00    ................
00 FF 92 81 02 41 00 73   00 6B 00 20 00 71 00 75    .ÿ’.A.s.k. .q.u
00 65 00 73 00 74 00 69   00 6F 00 6E 00 20 00 61    .e.s.t.i.o.n. .a
00 62 00 6F 00 75 00 74   00 20 00 61 00 70 00 70    .b.o.u.t. .a.p.p
00 6F 00 69 00 6E 00 74   00 6D 00 65 00 6E 00 74    .o.i.n.t.m.e.n.t
00 20 00 63 00 6C 00 69   00 70 00 62 00 6F 00 61    . .c.l.i.p.b.o.a
00 72 00 64 00 20 00 66   00 6F 00 72 00 6D 00 61    .r.d. .f.o.r.m.a
00 74 00 20 00 6F 00 6E   00 20 00 53 00 74 00 61    .t. .o.n. .S.t.a
00 63 00 6B 00 6F 00 76   00 65 00 72 00 66 00 6C    .c.k.o.v.e.r.f.l
00 6F 00 77 00 00 00 01   00 00 00 00 00 FF FF FF    .o.w.........ÿÿÿ
FF                                                   ÿ

Some of this can be interpreted:

Clipboard format "RenPrivateAppointment"

01 00 00 00               ; always 0x00000001 (Version 1?)
C0 C8 1E 0D               ; Start day of appt.  minutes from 1/1/1601 0x0D1EC8C0 = 220,121,280 minutes = 7/11/2019 12:00 am
60 CE 1E 0D               ; End   day of appt.  minutes from 1/1/1601 0x0D1ECE60 = 220,122,720 minutes = 7/12/2019 12:00 am
01 00 00 00               ; 0x00000001 (fixed)
6A CB 1E 0D               ; Start of appt.      minutes from 1/1/1601 0x0D1ECB6A = 220,121,962 minutes = 7/11/2019 11:22 am
79 CB 1E 0D               ; End of appt.        minutes from 1/1/1601 0x0D1ECB79 = 220,121,977 minutes = 7/11/2019 11:37 am

                          ; "Ask question about appointment clipboard format on Stackoverflow.\0"  
41 00 00 00               ; String length prefix, including null terminator (0x00000041 = 65 characters)
41 73 6B 20 71 75 65 73     Ask ques
74 69 6F 6E 20 61 62 6F     tion abo
75 74 20 61 70 70 6F 69     ut appoi
6E 74 6D 65 6E 74 20 63     ntment c
6C 69 70 62 6F 61 72 64     lipboard
20 66 6F 72 6D 61 74 20      format 
6F 6E 20 53 74 61 63 6B     on Stack
6F 76 65 72 66 6C 6F 77     overflow
00                          .

02 00 00 00               ; 0x0000002 = 2
02 00 00 00               ; 0x0000002 = 2

18 00 00 00               ; 0x00000018 = 24
00 00 00 00               ; 0x00000000 = 0
BC B9 6E 9C 12 F8 D3 43   ; always
AC B7 74 81 5E F0 3D FC   ; always
04 D2 97 00               ; varies (~32 ticks per day)  0x0097D204 = 9,949,700

00 00 00 00 
00 00 00 00 

02 00 00 00               ; 0x00000002 = 2
00 00 00 00 
01 00 00 00               ; 0x00000001 = 1
00 00 00 00 
00 00 00 00 
00 00 00 00 
FF 92 81 02               ; always 0x028192FF   

                          ; N"Ask question about appointment clipboard format on Stackoverflow\0"
41 00 73 00 6B 00 20 00 71 00 75 00 65 00 73 00    A.s.k. .q.u.e.s.
74 00 69 00 6F 00 6E 00 20 00 61 00 62 00 6F 00    t.i.o.n. .a.b.o.
75 00 74 00 20 00 61 00 70 00 70 00 6F 00 69 00    u.t. .a.p.p.o.i.
6E 00 74 00 6D 00 65 00 6E 00 74 00 20 00 63 00    n.t.m.e.n.t. .c.
6C 00 69 00 70 00 62 00 6F 00 61 00 72 00 64 00    l.i.p.b.o.a.r.d.
20 00 66 00 6F 00 72 00 6D 00 61 00 74 00 20 00     .f.o.r.m.a.t. .
6F 00 6E 00 20 00 53 00 74 00 61 00 63 00 6B 00    o.n. .S.t.a.c.k.
6F 00 76 00 65 00 72 00 66 00 6C 00 6F 00 77 00    o.v.e.r.f.l.o.w.
00 00                                              ..

01 00                     ; padding to DWORD

00 00 00 00 
FF FF FF FF               ; footer

Is there any documentation on RenPrivateAppointment, or any other the other formats that would allow rich interactions by the user?

Note: This is not automating Outlook. This is handling the IDataObject placed on the clipboard by Outlook. I want to retrieve:

  • start time
  • end time
  • description

See also

winapi
outlook
clipboard
clipboard-interaction
asked on Stack Overflow Jul 11, 2019 by Ian Boyd • edited Jul 11, 2019 by Ian Boyd

2 Answers

2

There is a project on GitHub that parses the RenPrivateAppointment clipboard format: https://github.com/yasoonOfficial/outlook-dndprotocol

answered on Stack Overflow Jul 11, 2019 by Dmitry Streblechenko • edited Jul 11, 2019 by Dmitry Streblechenko
1

The RenPrivateAppointment format isn't documented. You may read about that on the DragDrop Event in Outlook Calendar thread which has an official comment from a VSTO team member. Also, you may take a look at the Drag and Drop with Outlook page.

answered on Stack Overflow Jul 11, 2019 by Eugene Astafiev

User contributions licensed under CC BY-SA 3.0