删除单个联系人的Skype聊天记录

分享于 

4分钟阅读

数据库

  繁體

介绍

我想清除单个用户的Skype聊天记录,但Skype仅允许您清除完整的聊天记录,而不能清除单个用户的联系记录。

花了几个小时Google后,我发现Skype使用下面的SQLite数据库来存储消息。

系统驱动器:< Current User's application data folder > /Skype/ < Skype username > /main.db

使用代码

首先,C#必须有方法来处理SQLite数据库文件,这就是System.Data.SQLite在应用程序中扮演的角色,你可以从http://sqlite.phxsoftware.com/下载

引用System.Data.SQLite.dll (位于C:Program FilesSQLite.NETbinSystem.Data.SQLite.dll ),允许C#处理SQLite数据库文件。

我写了代码来读取子文件夹,并过滤掉Skype标准文件夹。

String sDirName = Environment.GetEnvironmentVariable("APPDATA") + @"Skype";String [] folders = Directory.GetDirectories(sDirName);
String[] names = new String[folders.Length-3];
 foreach (String fname in folders){
 String folder = fname.Replace(Environment.GetEnvironmentVariable("APPDATA") +
 @"Skype", "");
 if (folder!= "Content" && folder!= "My Skype Received Files" && 
 folder!= "Pictures")
 {
 usernamecb.Items.Add(folder);
 }
 }

Usernamecb变量将用于填充UI中的下拉框。

聊天消息存储在"信息"表中。

以下代码读取数据库,并获取其中包含消息的联系人。

database = Environment.GetEnvironmentVariable("APPDATA") + @"Skype" + SkypeUserName + 
 @"main.db";
SQLiteConnection sqlite = new SQLiteConnection("data source=" + database);
SQLiteDataAdapter ad;
DataTable dt = new DataTable();
SQLiteCommand cmd;
sqlite.Open();
cmd = sqlite.CreateCommand();
cmd.CommandText = "select DISTINCT dialog_partner from Messages";
ad = new SQLiteDataAdapter(cmd);
ad.Fill(dt); //execute commandparticipants.DataSource = dt;
participants.ValueMember = "dialog_partner";

当用户从下拉框中选择参与者时,以下SQL命令将从数据库中删除所选参与者的所有消息。

cmd = sqlite.CreateCommand();
cmd.CommandText = "delete from Messages Where dialog_partner = '" + participant + "'";
ad = new SQLiteDataAdapter(cmd);
ad.Fill(dt);//execute command

我发现Skype运行时数据库文件被锁定,因此,我添加了代码以在程序开始运行时终止Skype进程,并在程序关闭时再次启动Skype。

// Terminate Skypeforeach (Process p in Process.GetProcesses(Environment.MachineName))
 {
 if (p.ProcessName.Equals("Skype"))
 {
 p.Kill();
 }
 }//Start Skype when the programe is exitingprivatevoid Form1_FormClosing(object sender, FormClosingEventArgs e)
{
 // open Skype againString program = Environment.GetEnvironmentVariable("ProgramFiles");
 try {
 System.Diagnostics.ProcessStartInfo psi =
 new System.Diagnostics.ProcessStartInfo(program + @"SkypePhoneSkype.exe");
 System.Diagnostics.Process.Start(psi);
 }
 catch (Exception ex){}
 }

SIN  CHAT  Contact  历史  Skype  
相关文章