Школоло / Говнокод #837 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
Function ShowAddressBook() As String
On Error GoTo ErrorHandler

    Dim miTempItem As MailItem
    Dim inTempInspector As Inspector
    Dim Pomoechka As MAPIFolder
    Dim objNS As outlook.NameSpace
    
    
    ' Загружаем шаблон формы онового сообщения
    ' на нём есть нужная кнопка
    Dim Reg As New CReg
10    Reg.m_MainKey = "Software\Content Manager\MS_OUTLOOK"
    
20    Set miTempItem = Application.CreateItemFromTemplate(Reg.GetValue("path") & "\crutch.oft")
30    Set inTempInspector = miTempItem.GetInspector
    
32      miTempItem.UserProperties.Add("TempItemForAddressBook", olYesNo) = True
             
    ' Убираем инспектор с глаз долой
40    inTempInspector.Left = -20000
50    inTempInspector.Top = -20000
'51    inTempInspector.Width = 0
'52    inTempInspector.Height = 0
    
    ' пока инспектор не покажеться адресбук из него не выдавишь
60    inTempInspector.Activate
    ' если до вызова адресбука пользователь работал
    ' с развёрнутым на весь экран письмом - то хрен мы его куда свинем
    ' нужно, поэтому, вернуть нормальное состояние
70    inTempInspector.WindowState = olNormalWindow

    ' правда, это в некоторых случаях моргает - но поставить olonormalWindow
    ' до того как инспектор показан - нельзя.
    ' рахзвёрнутость ил не развёрнутость задаёться в реестре по пути
    ' HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Message\Frame
    ' там храниться REG_BINARY и внём меняетсья 0xB байт либо на 3 либо на 1
    
    ' подгрузили всё что надо - вызываем саму книгу
'НОВАЯ ВЕРСИЯ
80 inTempInspector.CommandBars.FindControl(Id:=353).Execute
    Dim strBuff As String
    ' Пока не сделаю сейв, поле TO через мапи будет не доступным
90    miTempItem.save
    ' получаю поле ТО через MAPI
    ' если попытаться взять его на прямую - то аутлук будет ругатся
    ' своим ёбанным диалогом безопасности
    
100    strBuff = GetToField(miTempItem)
    
    ' закрываем итемку
110    miTempItem.Close olDiscard
    
    
    ' Теперь, из-за того что вызывали метод save итемка лежит в папке
    ' с черновиами, нахер она там не сдалась - нужно удалять
    ' если её просто удалить .delete то она передвиниться в папку
    ' с удалёнными письмами - тоже нафик не надо
    ' поэтому, сначала переносим её в эту папку самостоятельно
    ' и от туда вызываем .delete - письмо исчезает
    
    ' Получаем доступ к папке с удалёнными письмами
    
120    Set objNS = Application.GetNamespace("MAPI")
    ' вот тут она лежит
130    Set Pomoechka = objNS.GetDefaultFolder(olFolderDeletedItems)

    ' перемещаем туда письмецо
140    miTempItem.Move Pomoechka ' хотя можно и просто     miTempItem.Delete

    ' теперь берём последнее письмо из помойки - это наше
    ' и удаляем его от туда
150    Pomoechka.Items(Pomoechka.Items.Count).Delete
    ' Теперь письма нету
    
    
    ShowAddressBook = strBuff

KillObjects:
    ' Всё подчистим
160   Set miTempItem = Nothing
170   Set inTempInspector = Nothing
180   Set Pomoechka = Nothing
190   Set objNS = Nothing
200   Set Reg = Nothing
        Exit Function
ErrorHandler:
        subGlobalErrorHandler Err.Description, Err.number, Erl, "ShowAddressBook"
        Resume KillObjects
    
End Function

EPIC FAIL

Вызов диалога адресной книги аутлука, и получение выбранных в ней адресов.

Запостил: guest guest, (Updated )

Комментарии (4) RSS

  • www2:
    Аккуратный проход по полю граблей аутлука...
    Ответить
  • Цитата:
    Set miTempItem = Application.CreateItemFromTemplate(Reg.G etValue("path") & "\crutch.oft")

    Crutch это костыль по-английски... 🙂
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8