1. VisualBasic / Говнокод #837

    −276.6

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 09 Апреля 2009

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

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

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

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