Я безумен

2009-02-2

Как программно позвонить в WM5, WM6

Filed under: .NET,Разработка,Windows Mobile — thekillerfox @ 1:40 пп
Tags: , , , , ,

В Windows Mobile 6 был значительно расширен .Net Compact Framework и то для чего раньше требовалось много шаманство теперь делается в две строчки.
Например чтобы позвонить надо всего лишь подключить пространство имен конструкцией :

using Microsoft.WindowsMobile.Telephony;

А в коде создать экземпляр класса Microsoft.WindowsMobile.Telephony.Phone:

Phone phone = new Phone();phone.Talk("ваш номер тут");

Это очень удобно, но если вы пишете программы под Windows Mobile желательно не ориентироваться только на последнюю версию этой ОС, и обратить внимание еще на предыдущию версию, так как многие девайсы не имеют прошивок на WM6 или же прошивки неоффициальные и не каждый согласиться лишить себя гарантии прошивая непойми что.
Для этого можно подкючить OpenNet CF где уже реализована поддержка необходимых классов. Старая версия фреймворка доступна на бесплатной основе. Покопавшись в ней я выдернул класс отвечающий за звонки.
Для его работы надо подключить Пространство имен System.Runtime.InteropServices.

using System.Runtime.InteropServices;
public class PhoneTools {
   
    /// <summary>
    /// Make a voice call to the specified number.
    /// </summary>
    /// <param name=”destination”>A valid phone number to be dialled.</param>
    /// <returns>True if successful else False</returns>
    public static bool MakeCall(string destination)
    {
        return MakeCall(destination, false, null);
    }
   
    /// <summary>
    /// Make a voice call to the specified number optionally prompting the user before dialling.
    /// </summary>
    /// <param name=”destination”>A valid phone number to be dialled.</param>
    /// <param name=”prompt”>If True user will be prompted before call is made, else call will be made without user intervention.</param>   
    /// <returns>True if successful else False</returns>
    public static bool MakeCall(string destination, bool prompt)
    {
        return MakeCall(destination, prompt, null);
    }

    /// <summary>
    /// Make a voice call to the specified number optionally prompting the user before dialling.
    /// </summary>
    /// <param name=”destination”>A valid phone number to be dialled.</param>
    /// <param name=”prompt”>If True user will be prompted before call is made, else call will be made without user intervention.</param>
    /// <param name=”calledParty”>A display name for the party being called.</param>
    /// <returns>True if successful else False</returns>
   
    public static bool MakeCall(string destination, bool prompt, string calledParty)
    {
        //setup structure for native call
        MakeCallInfo mci = new MakeCallInfo();
        mci.cbSize = 24;
        mci.pszDestAddress = Apps.StringToHGlobalUni(destination);
        if(calledParty!=null)
        {
            mci.pszCalledParty = Apps.StringToHGlobalUni(calledParty);
        }
        if(prompt)
        {
            mci.dwFlags = CallFlags.PromptBeforeCalling;
        }
        else
        {
            mci.dwFlags = CallFlags.Default;
        }

        //call native function
        int result = PhoneMakeCall(ref mci);

        //free strings
        if(mci.pszDestAddress!=IntPtr.Zero)
        {
            Apps.FreeHGlobal(mci.pszDestAddress);
        }

        if(mci.pszCalledParty!=IntPtr.Zero)
        {
            Apps.FreeHGlobal(mci.pszCalledParty);
        }

        //check return value
        if(result==0) { return true; } else { return false; }
    }
    [DllImport("phone.dll", SetLastError = true)]
    private static extern int PhoneMakeCall(ref MakeCallInfo ppmci);
     //used internally by PhoneMakeCallInfo
    private struct MakeCallInfo
    {
        public int cbSize;
        public CallFlags dwFlags;
        public IntPtr pszDestAddress;
        IntPtr pszAppName;
        public IntPtr pszCalledParty;
        IntPtr pszComment;
    }

    /// <summary>
    /// Flags which determine the behaviour of the <see cref=”M:OpenNETCF.Phone.Phone.MakeCall”/> function.
    /// </summary>
    private enum CallFlags : int {
        /// <summary>
        /// Do not prompt, dial the supplied number.
        /// </summary>
        Default = 0&x00000001,
        /// <summary>
        /// Prompt the user whether to dial the supplied number.
        /// </summary>
         PromptBeforeCalling = 0&x00000002,
    }

}

Размещаем этот класс в собственной библиотеке, подключаем и используем просто:

PhoneTools phone = new PhoneTools();
PhoneTools.MakeCall("ваш номер");

Возможно этот трюк прокатит и в WM 2003, но я не проверял.

Реклама

2008-11-1

Размер директорий в меню mc

Filed under: Linux — thekillerfox @ 8:27 дп
Tags: , , ,

После перехода на Linux мне очень не хватало возможности тотала быстро посчитать размер папки. Krusader меня не устраивал, а в mc такой возможности не было либо я плохо искал. Поэтому я решил добавить в меню MC вызываемое по F2 функцию подсчета размера директории.
В ubuntu и debian настройки меню храняться в /etc/mc/mc.menu
Открываем этот файл и дописываем

= t d
s       Calculate directory size
Pwd=`basename "%f" /`
du -hs "$Pwd"

Теперь вместо того чтобы вводить du -hs и имя каталога можно просто нажать F2, а затем s.
Но есть минус решения чтобы посмотреть результат надо нажимать Ctrl+o, пока не придумал как это обойти.

Вот нашел ссылку на небольшое описание как делать меню для mc
Встроенные меню Midnight Commander

← Предыдущая страница

Блог на WordPress.com.