r0ash

Skype Contacts Backup

4 posts in this topic

#1 ·  Posted

Hi guys,

I am trying to backup Skype contacts when the Skype window is minimized or machine is locked. But ControlSend is not working.

However when I run program, when Skype is active & focused, same program works.

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

$pid    = Run("skype.exe")
$hWnd   = WinWait("[CLASS:tSkMainForm]", "", 10)
WinSetState($hWnd, "", @SW_SHOW)
Sleep( 1000 )
ControlSend($hWnd,"","TConversationsControl1", "!cdb")

If I change 

WinSetState($hWnd, "", @SW_SHOW)

to 

WinSetState($hWnd, "", @SW_MINIMIZE)

The file dialog to save contact as file will never appear. Where FAQs says ControlSend() instead of Send() will work even computer is locked.

Thanks for your time.

 

P.S: I've tried to find if backing up Skype contacts violate any EULA but do not find anything. Kindly enlighten me if this post is against forum rules in any sense.

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Hello r0ash and welcome to the AutoIT forums :)

Skype contacts are linked to the skype account they were added to. Skype accounts details including contacts are saved in Microsoft's cloud.

This means if the computer where skype is installed is completely destroyed, just setup a new computer, install skype, log in with the same skype user ID and password and the contacts will still be there.

So why do you try to backup the contacts manually?

Anyway if you still need to do it you just have to backup the file main.db located in %appdata%/roaming/skype/<user skype ID>/main.db

It contains all contacts and all chat log. You can view what's inside with http://sqlitebrowser.org/ or any other SQL lite database viewer.

Here is an example of how to backup the main.db file automaticly with AutoIT:

#include <File.au3>

$save_location = "C:\" ;change this to anywhere you want the file to be saved

; find the main.db in the user profile

$database_filepath = _FileListToArrayrec(@UserProfileDir & "\AppData\roaming\skype", "main.db", 5, 1)

if IsArray($database_filepath) Then ;if the file main.db was found then we save it

    $database_filepath = @UserProfileDir & "\AppData\roaming\skype\" & $database_filepath[1]

    filecopy($database_filepath, $save_location, 1)

EndIf

PS: When a computer is locked, any GUI interaction like ControlSend() will most likely fail because the Windows lock is kinda made to disable them as a security system. So it's better to use another way when you want to automate things (like the example above).

Edited by Neutro
1 person likes this

Share this post


Link to post
Share on other sites

#3 ·  Posted

Thanks a bunch mate @Neutro

2 hours ago, Neutro said:

Hello r0ash and welcome to the AutoIT forums 

Thanks a bunch mate :)

 

2 hours ago, Neutro said:

So why do you try to backup the contacts manually?

My employer have comparatively large list of contacts (5000+) contacts in his list keep adding & blocking, he wants to accept new contacts automatically, thats why.

2 hours ago, Neutro said:

Anyway if you still need to do it you just have to backup the file main.db located in %appdata%/roaming/skype/<user skype ID>/main.db

Neat! Thanks a bunch

 

2 hours ago, Neutro said:

PS: When a computer is locked, any GUI interaction like ControlSend() will most likely fail because the Windows lock is kinda made to disable them as a security system. So it's better to use another way when you want to automate things (like the example above).

As posted under FAQs;

Quote

 

In Windows locked state applications runs hidden (behind that visible dialog) and haven't focus and active status.

 

So generally don't use Send() MouseClick() WinActivate() WinWaitActive() WinActive() etc.

Instead use ControlSend() ControlSetText() ControlClick() WinWait() WinExists() WinMenuSelectItem() etc.

 

This way you may have your script resistive against another active windows.

and it's possibe to run such script from scheduler on locked Windows station.

 

Does this mean, its outdated? or the @Zedna got covered because he said *may*?

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

You're welcome :)

Locked or not it's never a good idea to use control interactions as it's not very reliable. Always try to find a way to do what you want with a reliable method (command line, file copy, ect...). 

Use control interaction as a last resort if you really have no other way to do it :)

Edited by Neutro
1 person likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Similar Content

    • WannaBeGut
      By WannaBeGut
      Hey,
      I want to make a application which calls a User and returns the error / status of the call. I don't think it works, the status stays "routing". Not 100% sure what that means for me.
      $oSkype = ObjCreate("Skype4COM.Skype") $oUser = $oSkype.User("User") $oSkypeEvent = ObjEvent($oSkype,"Skype_") $oError = ObjEvent("AutoIt.Error","MyErrFunc") $cUserStatus_Offline = $oSkype.Convert.TextToUserStatus("OFFLINE") $cUserStatus_Online = $oSkype.Convert.TextToUserStatus("ONLINE") $cCallStatus_Ringing = $oSkype.Convert.TextToCallStatus("RINGING") $cCallStatus_Inprogress = $oSkype.Convert.TextToCallStatus("INPROGRESS") $cCallStatus_Failed = $oSkype.Convert.TextToCallStatus("FAILED") $cCallStatus_Refused = $oSkype.Convert.TextToCallStatus("REFUSED") $cCallStatus_Cancelled = $oSkype.Convert.TextToCallStatus("CANCELLED") $cCallStatus_Finished = $oSkype.Convert.TextToCallStatus("FINISHED") $cCallStatus_Busy = $oSkype.Convert.TextToCallStatus("BUSY") $cAttachmentStatus_Available = $oSkype.Convert.TextToAttachmentStatus("AVAILABLE") If Not $oSkype.Client.IsRunning Then $oSkype.Client.Start() EndIf Func Skype_AttachmentStatus($aStatus) MsgBox(0,"","Attachment status " & $oSkype.Convert.AttachmentStatusToText($aStatus)) If $aStatus = $oSkype.Convert.TextToAttachmentStatus("AVAILABLE") Then $oSkype.Attach() EndIf EndFunc While 1 If $oSkype.CurrentUserStatus = $oSkype.Convert.TextToUserStatus("ONLINE") Then ExitLoop Else $oSkype.ChangeUserStatus($oSkype.Convert.TextToUserStatus("ONLINE")) EndIf Sleep(1000) WEnd If $cUserStatus_Offline = $oSkype.CurrentUserStatus Then $oSkype.ChangeUserStatus($cUserStatus_Online) EndIf $oCall = $oSkype.PlaceCall($oUser.Handle); Start Call $callstatusraw = $oCall.Status;Raw Call Status $callstatus = $oSkype.Convert.CallStatusToText($callstatusraw);Call Status converted to Text While $callstatusraw <> $cCallStatus_Inprogress MsgBox(0, "", ""&$callstatus);Displays the Call Status WEnd The part until the $oCall Variable is from Andy Flesner (Airwolf123). But works fine.
    • WannaBeGut
      By WannaBeGut
      Hey,
      I want the program to make different Actions when some persons come online, depending on the priority you choose in the GUI (1-3). It does not seem to work:
      #include <Skype.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region --- GUI START --- $mainwin = GUICreate("Skype Notifier", 290, 186, 899, 341) $label_user1 = GUICtrlCreateLabel("User1:", 16, 16, 63, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $label_user2 = GUICtrlCreateLabel("User2:", 16, 48, 39, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $label_user3 = GUICtrlCreateLabel("User3:", 16, 112, 36, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $label_user4 = GUICtrlCreateLabel("User4:", 16, 80, 34, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $label_user5 = GUICtrlCreateLabel("User5:", 160, 80, 49, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $label_user6 = GUICtrlCreateLabel("User6:", 160, 48, 45, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $label_user7 = GUICtrlCreateLabel("User7:", 160, 16, 32, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $input_priority1 = GUICtrlCreateInput("0", 104, 16, 17, 21) $input_priority2 = GUICtrlCreateInput("0", 104, 48, 17, 21) $input_priority3 = GUICtrlCreateInput("0", 104, 80, 17, 21) $input_priority4 = GUICtrlCreateInput("0", 104, 112, 17, 21) $label_user8 = GUICtrlCreateLabel("User8:", 160, 112, 61, 18) GUICtrlSetFont(-1, 9, 400, 0, "Verdana") $input_priority5 = GUICtrlCreateInput("0", 240, 16, 17, 21) $input_priority6 = GUICtrlCreateInput("0", 240, 48, 17, 21) $input_priority7 = GUICtrlCreateInput("0", 240, 80, 17, 21) $input_priority8 = GUICtrlCreateInput("0", 240, 112, 17, 21) $button_arrowleft1 = GUICtrlCreateButton("<", 86, 16, 16, 22, $WS_GROUP) $button_arrowright1 = GUICtrlCreateButton(">", 123, 16, 16, 22, $WS_GROUP) $button_arrowleft2 = GUICtrlCreateButton("<", 86, 48, 16, 22, $WS_GROUP) $button_arrowright2 = GUICtrlCreateButton(">", 123, 48, 16, 22, $WS_GROUP) $button_arrowleft3 = GUICtrlCreateButton("<", 86, 80, 16, 22, $WS_GROUP) $button_arrowright3 = GUICtrlCreateButton(">", 123, 80, 16, 22, $WS_GROUP) $button_arrowleft4 = GUICtrlCreateButton("<", 86, 112, 16, 22, $WS_GROUP) $button_arrowright4 = GUICtrlCreateButton(">", 123, 112, 16, 22, $WS_GROUP) $button_arrowleft5 = GUICtrlCreateButton("<", 222, 16, 16, 22, $WS_GROUP) $button_arrowright5 = GUICtrlCreateButton(">", 259, 16, 16, 22, $WS_GROUP) $button_arrowleft6 = GUICtrlCreateButton("<", 222, 48, 16, 22, $WS_GROUP) $button_arrowright6 = GUICtrlCreateButton(">", 259, 48, 16, 22, $WS_GROUP) $button_arrowleft7 = GUICtrlCreateButton("<", 222, 80, 16, 22, $WS_GROUP) $button_arrowright7 = GUICtrlCreateButton(">", 259, 80, 16, 22, $WS_GROUP) $button_arrowleft8 = GUICtrlCreateButton("<", 222, 112, 16, 22, $WS_GROUP) $button_arrowright8 = GUICtrlCreateButton(">", 259, 112, 16, 22, $WS_GROUP) $button_apply = GUICtrlCreateButton("Apply", 176, 144, 103, 25, $WS_GROUP) GUICtrlSetFont(-1, 8, 400, 0, "Verdana") $checkbox_busy = GUICtrlCreateCheckbox("Busy Mode", 16, 144, 89, 25) GUICtrlSetFont(-1, 8, 400, 0, "Verdana") $checkbox_logfile = GUICtrlCreateCheckbox("Log File", 112, 144, 65, 25) GUISetState(@SW_SHOW) #EndRegion --- GUI END --- Global $oSkype = ObjCreate("Skype4COM.Skype") Global $oUser1 = $oSkype.User("User1") Global $oUser2 = $oSkype.User("User2") Global $oUser3 = $oSkype.User("User3") Global $oUser4 = $oSkype.User("User4") Global $oUser5 = $oSkype.User("User5") Global $oUser6 = $oSkype.User("User6") Global $oUser7 = $oSkype.User("User7") Global $oUser8 = $oSkype.User("User8") Global $SkypeStatus_Offline = $oSkype.Convert.TextToUserStatus("OFFLINE") Global $SkypeStatus_Online = $oSkype.Convert.TextToUserStatus("ONLINE") Global $SkypeStatus_Ringing = $oSkype.Convert.TextToCallStatus("RINGING") Global $SkypeStatus_Inprogress = $oSkype.Convert.TextToCallStatus("INPROGRESS") Global $SkypeStatus_Failed = $oSkype.Convert.TextToCallStatus("FAILED") Global $SkypeStatus_Refused = $oSkype.Convert.TextToCallStatus("REFUSED") Global $SkypeStatus_Cancelled = $oSkype.Convert.TextToCallStatus("CANCELLED") Global $SkypeStatus_Finished = $oSkype.Convert.TextToCallStatus("FINISHED") Global $SkypeStatus_Busy = $oSkype.Convert.TextToCallStatus("BUSY") Global $SkypeStatus_Available = $oSkype.Convert.TextToAttachmentStatus("AVAILABLE") Global $SkypeStatus_Invisible = $oSkype.Convert.TextToAttachmentStatus("AVAILABLE") Global $mutestatus = $oSkype.Mute Global $inputnumber1 = 0 Global $inputnumber2 = 0 Global $inputnumber3 = 0 Global $inputnumber4 = 0 Global $inputnumber5 = 0 Global $inputnumber6 = 0 Global $inputnumber7 = 0 Global $inputnumber8 = 0 Global $readpriority1 = GUICtrlRead($input_priority1) Global $readpriority2 = GUICtrlRead($input_priority2) Global $readpriority3 = GUICtrlRead($input_priority3) Global $readpriority4 = GUICtrlRead($input_priority4) Global $readpriority5 = GUICtrlRead($input_priority5) Global $readpriority6 = GUICtrlRead($input_priority6) Global $readpriority7 = GUICtrlRead($input_priority7) Global $readpriority8 = GUICtrlRead($input_priority8) Global $readcheckboxbusy = GUICtrlRead($checkbox_busy) Global $readcheckboxlogfile = GUICtrlRead($checkbox_logfile) Global $checkboxbusy = 0 Global $applystart = 0 Global $checkdone1 = 0 If Not $oSkype.Client.IsRunning Then $oSkype.Client.Start() EndIf $oSkype.Attach(5) If $SkypeStatus_Offline = $oSkype.CurrentUserStatus Then $oSkype.ChangeUserStatus($SkypeStatus_Online) EndIf While 1 $nMsg = GUIGetMsg() CheckingProcess() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $button_apply Global $readpriority1 = GUICtrlRead($input_priority1) Global $readpriority2 = GUICtrlRead($input_priority2) Global $readpriority3 = GUICtrlRead($input_priority3) Global $readpriority4 = GUICtrlRead($input_priority4) Global $readpriority5 = GUICtrlRead($input_priority5) Global $readpriority6 = GUICtrlRead($input_priority6) Global $readpriority7 = GUICtrlRead($input_priority7) Global $readpriority8 = GUICtrlRead($input_priority8) Global $readcheckboxbusy = GUICtrlRead($checkbox_busy) Global $readcheckboxlogfile = GUICtrlRead($checkbox_logfile) Global $applystart = 1 Case $button_arrowleft1 $inputnumber1 = $inputnumber1 - 1 If $inputnumber1 < 0 then $inputnumber1 = 0 GUICtrlSetData($input_priority1, $inputnumber1) Case $button_arrowright1 $inputnumber1 = $inputnumber1 + 1 If $inputnumber1 > 3 then $inputnumber1 = 3 GUICtrlSetData($input_priority1, $inputnumber1) Case $button_arrowleft2 $inputnumber2 = $inputnumber2 - 1 If $inputnumber2 < 0 then $inputnumber2 = 0 GUICtrlSetData($input_priority2, $inputnumber2) Case $button_arrowright2 $inputnumber2 = $inputnumber2 + 1 If $inputnumber2 > 3 then $inputnumber2 = 3 GUICtrlSetData($input_priority2, $inputnumber2) Case $button_arrowleft3 $inputnumber3 = $inputnumber3 - 1 If $inputnumber3 < 0 then $inputnumber3 = 0 GUICtrlSetData($input_priority3, $inputnumber3) Case $button_arrowright3 $inputnumber3 = $inputnumber3 + 1 If $inputnumber3 > 3 then $inputnumber3 = 3 GUICtrlSetData($input_priority3, $inputnumber3) Case $button_arrowleft4 $inputnumber4 = $inputnumber4 - 1 If $inputnumber4 < 0 then $inputnumber4 = 0 GUICtrlSetData($input_priority4, $inputnumber4) Case $button_arrowright4 $inputnumber4 = $inputnumber4 + 1 If $inputnumber4 > 3 then $inputnumber4 = 3 GUICtrlSetData($input_priority4, $inputnumber4) Case $button_arrowleft5 $inputnumber5 = $inputnumber5 - 1 If $inputnumber5 < 0 then $inputnumber5 = 0 GUICtrlSetData($input_priority5, $inputnumber5) Case $button_arrowright5 $inputnumber5 = $inputnumber5 + 1 If $inputnumber5 > 3 then $inputnumber5 = 3 GUICtrlSetData($input_priority5, $inputnumber5) Case $button_arrowleft6 $inputnumber6 = $inputnumber6 - 1 If $inputnumber6 < 0 then $inputnumber6 = 0 GUICtrlSetData($input_priority6, $inputnumber6) Case $button_arrowright6 $inputnumber6 = $inputnumber6 + 1 If $inputnumber6 > 3 then $inputnumber6 = 3 GUICtrlSetData($input_priority6, $inputnumber6) Case $button_arrowleft7 $inputnumber7 = $inputnumber7 - 1 If $inputnumber7 < 0 then $inputnumber7 = 0 GUICtrlSetData($input_priority7, $inputnumber7) Case $button_arrowright7 $inputnumber7 = $inputnumber7 + 1 If $inputnumber7 > 3 then $inputnumber7 = 3 GUICtrlSetData($input_priority7, $inputnumber7) Case $button_arrowleft8 $inputnumber8 = $inputnumber8 - 1 If $inputnumber8 < 0 then $inputnumber8 = 0 GUICtrlSetData($input_priority8, $inputnumber8) Case $button_arrowright8 $inputnumber8 = $inputnumber8 + 1 If $inputnumber8 > 3 then $inputnumber8 = 3 GUICtrlSetData($input_priority8, $inputnumber8) EndSwitch WEnd Func CheckingProcess() If $applystart = 0 then return Global $userstatus1 = $oSkype.Convert.OnlineStatusToText($oUser1.OnlineStatus) If $readpriority1 = 1 and $userstatus1 = "Online" or "Busy" then GUICtrlSetData($input_priority1, "!") If $readpriority1 = 2 and $userstatus1 = "Online" or "Busy" then ChatAlert() If $readpriority1 = 3 and $checkboxbusy = 0 and $userstatus1 = "Online" or "Busy" then MsgBox(0, "User Online!", "User1 ist Online!"&Chr(10)) If $readpriority1 = 3 and $checkboxbusy = 1 and $userstatus1 = "Online" or "Busy" then ChatAlert2() If $userstatus1 = "Do not Disturb" then $userstatus1 = "Busy" If $readcheckboxlogfile = 1 and $userstatus1 = "Online" or "Busy" then FileWrite("SkypeLog.txt", @MDAY&"/"&@MON&"/"&@YEAR&"/"&@HOUR&":"&@MIN&":"&@SEC&": "&"User1"&" is "&$userstatus1) Global $userstatus2 = $oSkype.Convert.OnlineStatusToText($oUser2.OnlineStatus) If $readpriority2 = 1 and $userstatus2 = "Online" or "Busy" then GUICtrlSetData($input_priority1, "!") If $readpriority2 = 2 and $userstatus2 = "Online" or "Busy" then ChatAlert() If $readpriority2 = 3 and $checkboxbusy = 0 and $userstatus2 = "Online" or "Busy" then MsgBox(0, "User Online!", "User2 ist Online!") If $readpriority2 = 3 and $checkboxbusy = 1 and $userstatus2 = "Online" or "Busy" then ChatAlert2() If $readcheckboxlogfile = 1 and $userstatus2 = "Online" or "Busy" then FileWrite("SkypeLog.txt", @MDAY&"/"&@MON&"/"&@YEAR&"/"&@HOUR&":"&@MIN&":"&@SEC&": "&"User2"&" is "&$userstatus2) EndFunc Func ChatAlert() EndFunc Func ChatAlert2() EndFunc I hope you can help me! =)
      Edit: I will make it a bit more neat when I get it to work ^^
    • Expansion
      By Expansion
      Hi,
       
      I need a script to change the Skype status available/away/etc.
      I've tried the following, but it doesn't work very well, because quite often, the compiled app remains stuck in task manager without changing the status. 
      #NoTrayIcon #include "SkypeCOM.au3" Opt("GUIOnEventMode", 0) $oSkype.ChangeUserStatus(1) The compiled app is triggered by a perl script each 1-5 minutes. A short switch from available to away and back to available. 
    • Medic873
      By Medic873
      I am curious if someone that understands the Skype UDF could answer a simple question for me. Is it possible for me to make a simple script that would call a phone number play a recording and know if the users presses a button then hang up.
       
      Thanks any help is greatly helpful 
    • Vincor
      By Vincor
      Ever wanted to keep a copy of a video message you got (or sent) through Skype?
      It is actually not so hard to get it manually, but here is a script that does it automatically.
      Before you try it, please note:
      the script has been tested on Skype v.7.x, running on Windows 7, but can be easily modified to work with Skype versions for Windows 8.x (or so I read). I have no Windows 8.x machine, and do not intend to change the script to support it until further notice. the URLs found in the Skype database are dynamic, and get invalidated after a while (within the hour in my experience). To get valid URLs in the database, open Skype and play the video messages you want to download. Once it starts playing within Skype, the link should be valid again. Try running the script after that. if the script takes a while to start, it could be because it didn't find sqlite3.dll, and will download it. If you want it to start without delay, put a copy of sqlite3.dll where the script can find it, e.g. in the same folder as the script. if you have more than one Skype user saved under your profile folder (@UserProfileDir & "AppDataRoamingSkype"), the script will go through all of them. Once again, only valid links will be downloaded.  
      DownloadSkypeVideoMessages.au3