Click here to Skip to main content
15,887,676 members
Articles / Programming Languages / SQL

Remove Skype Chat History for Single Contact

Rate me:
Please Sign up or sign in to vote.
4.63/5 (22 votes)
17 Feb 2013CPOL2 min read 272.6K   23.8K   56   77
A small C# utility to clear a single contact chat history, since Skype by default only deletes full chat history.
Image 1

Introduction

I wanted to clear the Skype chat history for a single user, but Skype only allows you to clear the complete chat history, not a single user's contact history.

I searched for 3rd party tools on the net but nothing worked for me on Windows 7 / Skype 4.1

At the beginning, I knew nothing about how Skype stored chat history and just entered my username and password to login and chat with friends.

After spending a few hours asking Google many questions, I found that Skype was using the following SQLite database to store its messages.

System Drive:\<Current User’s application data folder>/Skype/<Skype username>/main.db

I tried to read it with SQLitespy, but it was a pain to find and clear messages each time. Then, decided to develop a small C# utility to clear a single contact chat history.

Using the Code

First of all, I had to find a method to deal with an SQLite database file using C#. This is where the System.Data.SQLite plays a role in my application. You may download it from http://sqlite.phxsoftware.com/

Reference System.Data.SQLite.dll (Located in C:\Program Files\SQLite.NET\bin\System.Data.SQLite.dll) to allow C# to deal with the SQLite database file.

Once I knew I was going to dirty my hands with development, I wanted to find the Skype username(s) to reach to the database file. In System Drive:\<Current User’s application data folder>/Skype/ folder, Other than Skype user folder(s), there are 3 folders that Skype use for its operations, “Content”, “My Skype received files” and “Pictures”. I wrote codes to read subfolders and filter-out those 3 Skype standard folders.

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);
                }
            }

The Usernamecb variable will be used to populate the dropdown box in the UI.

Based on the selected username we can reach the Skype message database (main.db) and read chat participants. Chat messages are stored in the "Messages" table.

The following code reads the database and fetches chat participnts (Contacts) who has messages in it.

C#
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 command
participants.DataSource = dt;
participants.ValueMember = "dialog_partner";

Where participants is a dropdown box in UI that displays chat participants.

When the user selects the participant from the dropdown box, the following SQL command deletes all messages for a selected participant from the database.

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

Then I realized that the database file is been locked while Skype is running. Therefore, I added code to terminate the Skype process when the program starts running, and starts up Skype again when the program closes.

C#
// Terminate Skype
foreach (Process p in Process.GetProcesses(Environment.MachineName))
            {
                if (p.ProcessName.Equals("Skype"))
                {
                    p.Kill();
                }
          }
 
//Start Skype when the programe is exiting
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
            // open Skype again
            String program = Environment.GetEnvironmentVariable("ProgramFiles");
            try
            {

                System.Diagnostics.ProcessStartInfo psi =
                new System.Diagnostics.ProcessStartInfo(program + @"\Skype\Phone\Skype.exe");
                System.Diagnostics.Process.Start(psi);
            }
            catch (Exception ex){}
  }

When all the code comes together, it is a nice and painless tool for clearing a single user's chat history. 

Revision (2013/02/18) 


1. Updated utility to working with Skype 5.1 and later folder structure while searching skype user accounts

2. Application will automatically remove conversation from recent conversation tab

3. Published setup files for both 32bit and 64 systems 

 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Sri Lanka Sri Lanka
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionHello is this working for 5.5 skype? Pin
iplocker26-Nov-11 2:04
iplocker26-Nov-11 2:04 
GeneralMy vote of 4 Pin
Vladimir Svyatski17-Nov-11 9:48
professionalVladimir Svyatski17-Nov-11 9:48 
QuestionSkype message cleaner not working Pin
tutingjhayr7-Sep-11 21:29
tutingjhayr7-Sep-11 21:29 
AnswerRe: Skype message cleaner not working Pin
lkgamage8-Sep-11 5:01
lkgamage8-Sep-11 5:01 
Questionfile does not download Pin
amangrewal7-Sep-11 0:24
amangrewal7-Sep-11 0:24 
AnswerRe: file does not download Pin
lkgamage8-Sep-11 4:55
lkgamage8-Sep-11 4:55 
NewsNew version of skype message cleaner. Pin
lkgamage17-Jul-10 14:31
lkgamage17-Jul-10 14:31 
GeneralDoesn't work for me Pin
bowesmana13-Jun-10 17:41
bowesmana13-Jun-10 17:41 
Tool sounded promising. I downloaded the sources and ran Helper.exe. It pops up a window saying "Could not find database in c:\Documents and Settings\Antony\Application Data\Skype\xxx\main.db, where xxx is one of the Skype user names on the machine. When I press OK, it gives me the main dialog with the Skype Username drop down box with 5 users names, 3 are ones I know and one is shared_dynco and another is shard_httpfe. However, it shows no contacts in the Contact name drop down, whatever Skype user name I select.

The initial message box shows the 'Could not find...' for a user that I never use, which was set up incorrectly, but is just there.

If I just click on the clear history, then it gives me an unhandled exception, "Object reference not set to an instance of an object", which I guess is not surprising as there are no contacts to choose from.

Any idea how to check why it cannot load my contacts? I looked at the sources but can't spot anything obvious.

Antony
GeneralRe: Doesn't work for me Pin
bowesmana13-Jun-10 17:49
bowesmana13-Jun-10 17:49 
GeneralRe: Doesn't work for me Pin
substance9014-Jun-10 21:17
substance9014-Jun-10 21:17 
GeneralRe: Doesn't work for me Pin
bowesmana28-Jun-10 0:00
bowesmana28-Jun-10 0:00 
GeneralRe: Doesn't work for me Pin
lkgamage29-Jun-10 5:10
lkgamage29-Jun-10 5:10 
GeneralRe: Doesn't work for me Pin
speedxxx11-Apr-12 4:58
speedxxx11-Apr-12 4:58 
GeneralAdd new feature - Remove partial skype chat history Pin
Loic C7-Jun-10 22:16
Loic C7-Jun-10 22:16 
GeneralRe: Add new feature - Remove partial skype chat history Pin
lkgamage7-Jun-10 22:25
lkgamage7-Jun-10 22:25 
GeneralRe: Add new feature - Remove partial skype chat history Pin
Loic C30-Jun-10 5:18
Loic C30-Jun-10 5:18 
GeneralMy vote of 2 Pin
Alejandro Xalabarder1-May-10 2:44
Alejandro Xalabarder1-May-10 2:44 
Questioncant download Pin
hubertsk19-Jan-10 10:55
hubertsk19-Jan-10 10:55 
AnswerRe: cant download Pin
lkgamage20-Jan-10 0:09
lkgamage20-Jan-10 0:09 
QuestionWhere backup is stord when checkbox is selected? Pin
Niraj Parikh12-Jan-10 2:21
Niraj Parikh12-Jan-10 2:21 
AnswerRe: Where backup is stord when checkbox is selected? Pin
lkgamage12-Jan-10 6:54
lkgamage12-Jan-10 6:54 
GeneralRe: Where backup is stord when checkbox is selected? Pin
Niraj Parikh20-Jan-10 3:02
Niraj Parikh20-Jan-10 3:02 
Generalohhhhh Pin
Jipat6-Jan-10 17:37
Jipat6-Jan-10 17:37 
GeneralGood Work Pin
R-O-C-K-Y6-Jan-10 6:49
R-O-C-K-Y6-Jan-10 6:49 
GeneralRe: Good Work Pin
lkgamage6-Jan-10 9:50
lkgamage6-Jan-10 9:50 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.