C# windowform Skype發送信息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SKYPE4COMLib;
using System.Collections;

namespace Skype
{
    /// <summary>
    /// 20120804 塗聚文
    /// 締友計算機信息技術有限公司
    /// Geovin Du geovindu@163.com
    /// </summary>
    public partial class Form1 : Form
    {
        string strskypeuser = string.Empty;
        string strskypeid = string.Empty;
        SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();
        /// <summary>
        ///
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }

        


        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //不能發送文件在WEB上可以用
            //string file = @"E:\金蝶KIS系列产品简介.xls";
            //oSkype.Client.OpenFileTransferDialog(strskypeid, file);//打開發送文件
            oSkype.SendMessage(strskypeid, strskypeuser + ":" + textBox1.Text);


        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {


            if (oSkype.Client.IsRunning == false)//判断客户端是否运行
            {
                //是否能免費提供登錄調用的API?不管是DESKTOP或是WEB
                oSkype.Client.Start(true, true);//運行
                MessageBox.Show("請登錄SKPYE再重新操作", "請注意");
                return;

            }
            else
            {
                this.listBox1.DataSource = skyuselist();
                this.listBox1.DisplayMember = "userDisplayName";
                this.listBox1.ValueMember = "userLoginName";
            }
                初始化物件,預設會抓本機的Skype帳號資訊
                //SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();
                //UserCollection tFriends = oSkype.Friends;

                取出所有的朋友資訊
                //foreach (User tUser in oSkype.Friends)
                //{
                //    if (tUser.FullName.Trim() != "")
                //    {
                //        ListItem newItem = new ListItem(tUser.Handle, tUser.FullName);
                //        listBox1.Items.Add(newItem);
                //        this.listBox1.DisplayMember = "Name";
                //        this.listBox1.ValueMember = "ID";
                //        //listBox1.Items.Add(tUser.Handle);//賬號 //tUser.FullName //昵稱
                //        //listBox1.Items.AddRange(tUser.FullName);
                //    }
                        
                //}
        }

        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        private DataTable skyuselist()
        {
            DataTable d = new DataTable();
            //初始化物件,預設會抓本機的Skype帳號資訊
            //SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();
            UserCollection tFriends = oSkype.Friends;
            d.Columns.Add("userLoginName", typeof(string));
            d.Columns.Add("userDisplayName", typeof(string));
            //取出所有的朋友資訊
            foreach (User tUser in oSkype.Friends)
            {
                if (tUser.FullName.Trim() != "")
                {
                    //ListItem newItem = new ListItem(tUser.Handle, tUser.FullName);
                    //listBox1.Items.Add(newItem);
                    //this.listBox1.DisplayMember = "Name";
                    //this.listBox1.ValueMember = "ID";
                    //listBox1.Items.Add(tUser.Handle);//賬號 //tUser.FullName //昵稱
                    //listBox1.Items.AddRange(tUser.FullName);
                    d.Rows.Add(tUser.Handle, tUser.FullName);
                }
                else
                {
                    d.Rows.Add(tUser.Handle, tUser.Handle);
                }
                
            }
            d.Rows.Add("geovindu", "geovindu");
            return d;
        }
        /// <summary>
        /// 選擇SKYPE用戶
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listBox1_Click(object sender, EventArgs e)
        {
            strskypeuser= this.listBox1.Text;
            strskypeid = this.listBox1.SelectedValue.ToString();
            MessageBox.Show(strskypeuser+","+strskypeid);
        }


C#SendMessage和PostMessage的参数传递 在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。两者的区别简单介绍下:返回值的不同,我们先看一下 MSDN 里的声明: LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); 其中 4 个参数的意义是一样的,返回值类型不同(其实从数据上看他们一样是一个 32 位的数,只是意义不一样),LRESULT 表示的是消息被处理后的返回值,BOOL 表示的是消息是不是 Post 成功。 2、PostMessage 是异步的,SendMessage 是同步的。 PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。 3、如果在同一个线程内,SendMessage 发送消息时,由 USER32.DLL 模块调用目标窗口的消息处理程序,并将结果返回。SendMessage 在同一线程中发送消息并不入线程消息队列。PostMessage 发送消息时,消息要先放入线程的消息队列,然后通过消息循环分派到目标窗口(DispatchMessage)。 如果在不同线程内,SendMessage 发送消息到目标窗口所属线程的消息队列,然后发送消息的线程在 USER32.DLL 模块内监视和等待消息处理,直到目标窗口处理完返回。SendMessage 在返回前还做了很多工作,比如,响应别的线程向它 SendMessage。Post 到别的线程时,最好用 PostThreadMessage 代替 PostMessage,PostMessage 的 hWnd 参数可以是 NULL,等效于 PostThreadMessage + GetCurrentThreadId。Post WM_QUIT 时,应使用 PostQuitMessage 代替。 4、系统只整编(marshal)系统消息(0 到 WM_USER 之间的消息),发送用户消息(WM_USER 以上)到别的进程时,需要自己做整编。 用 PostMessage、SendNotifyMessage、SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。 5、在 Windows 2000/XP 里,每个消息队列最多只能存放 10,000 个 Post 的消息,超过的还没被处理的将不会被处理,直接丢掉。这个值可以改得更大:[HKEY_LOCAL_MACHINE/SOFTWARE/ Microsoft/Windows NT/CurrentVersion/Windows] USERPostMessageLimit,最小可以是 4000。 PostMessage只负责将消息放到消息队列中,不确定何时及是否处理 SendMessage要等到受到消息处理的返回码(DWord类型)后才继续 PostMessage执行后马上返回 SendMessage必须等到消息被处理后才会返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值