Почта с КПК - програмно.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Berejnoy
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.02.2005 (Ср) 15:11

Почта с КПК - програмно.

Сообщение Berejnoy » 21.03.2005 (Пн) 13:29

Есть жуткая необходимость отправки почты из программы.
Хотел вызвать покет Оутлук с параметрами вложений, кому и остальное. Нашел функцию Process.Start("почтовая программа") - но она как я понял не катит под Pocket PC, под обычное Вин-приложение - работает (кроме Win98).
Слышал про функции АPI. Ищу инфу - ничего путного не найду.
Неужели остается только вариант - создание своего почтового клиента.
Но в этом случае юзера не увидят когда и что отправляли .......
Может кто подскажет другой вариант ? :D
Berejnoy Andrey

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 21.03.2005 (Пн) 22:30

Поможет функция ShellExecuteEx. Я тут набросал модуль для ее использования. Добавляешь модуль к проекту, вставляешь код и используешь: либо URL.GotoURL("mailto:somebody@somewhere.com"), либо URL.GotoURL("http://www.somewhere.com"). (второй вариант откроет браузер на нужной странице).
Код: Выделить всё
Imports System.Runtime.InteropServices
Module URL
    <StructLayout(LayoutKind.Sequential)> _
    Private Structure SHELLEXECUTEEX
        Public cbSize As Integer
        Public fMask As Integer
        Public hwnd As IntPtr
        Public lpVerb As IntPtr
        Public lpFile As IntPtr
        Public lpParameters As IntPtr
        Public lpDirectory As IntPtr
        Public nShow As Integer
        Public hInstApp As IntPtr
        Public lpIDList As IntPtr
        Public lpClass As IntPtr
        Public hkeyClass As IntPtr
        Public dwHotKey As Integer
        Public hIcon As IntPtr
        Public hProcess As IntPtr
    End Structure
    <DllImport("coredll.dll", EntryPoint:="ShellExecuteEx", SetLastError:=True)> _
    Private Function ShellExecuteExCE(ByRef ex As SHELLEXECUTEEX) As Integer
    End Function
    <DllImport("coredll.dll", EntryPoint:="LocalAlloc", SetLastError:=True)> _
    Private Function LocalAllocCE(ByVal uFlags As Integer, ByVal uBytes As Integer) As IntPtr
    End Function
    <DllImport("coredll.dll", EntryPoint:="LocalFree", SetLastError:=True)> _
    Private Function LocalFreeCE(ByVal hMem As IntPtr) As IntPtr
    End Function
    Public Sub GotoURL(ByVal strURL As String)
        Dim see As SHELLEXECUTEEX
        Dim nSize As Integer = strURL.Length * 2 + 2
        Dim pFile As IntPtr = LocalAllocCE(&H40, nSize)
        Marshal.Copy(System.Text.Encoding.Unicode.GetBytes(strURL), 0, pFile, nSize - 2)
        Dim pVerb As IntPtr = LocalAllocCE(&H40, 10)
        Marshal.Copy(System.Text.Encoding.Unicode.GetBytes("open"), 0, pVerb, 8)
        With see
            .cbSize = 60
            .fMask = 0 '&H400
            .hwnd = IntPtr.Zero
            .lpVerb = pVerb
            .lpFile = pFile
            .lpParameters = IntPtr.Zero
            .lpDirectory = IntPtr.Zero
            .lpIDList = IntPtr.Zero
            .nShow = 0
            .hInstApp = IntPtr.Zero
            .lpClass = IntPtr.Zero
            .hkeyClass = IntPtr.Zero
            .dwHotKey = 0
            .hIcon = IntPtr.Zero
            .hProcess = IntPtr.Zero
        End With
        ShellExecuteExCE(see)
        LocalFreeCE(pFile)
        LocalFreeCE(pVerb)
    End Sub
End Module

Если нужно формировать еще и тело сообщения, или что-нибудь еще посложнее, то придется использовать MAPI. Поищи, примеров должно быть навалом.

Berejnoy
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.02.2005 (Ср) 15:11

Огромное Спасибо !

Сообщение Berejnoy » 22.03.2005 (Вт) 10:10

НУ спасибо огромное !
Я бы до такого не додумался :shock:
И самое интересное - работает.
Только осталось разобраться как файл вкладывать.
Супер.
Berejnoy Andrey


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 78

    TopList