ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Смена пользователя Skype
  #1  
Старый 12.05.2010, 15:23
Аватар для AlexTheC0d3r
AlexTheC0d3r
Постоянный
Регистрация: 25.07.2008
Сообщений: 454
Провел на форуме:
1229135

Репутация: 425
Отправить сообщение для AlexTheC0d3r с помощью ICQ
По умолчанию Смена пользователя Skype

Выкладываю из своих сорцов способ смены пользователя Skype:


1:Пролог
Решил написать небольшую статью опять про тот-же Skype
На этот раз я автоматизирую смену аккаунтов Skype с помощью WinAPI, т.к. с помощью обертки от девелоперов Skype ничего сделать не получится (Будем идти через зад )

2:Действия
Я не буду заострять внимание на создании проекта, расстановки баттонов, мемо и т.д., а сразу начну по-делу. Для того, чтобы завершить процесс (в нашем случае Skype) я использую следущую функцию, найденную на просторах инета:

PHP код:
function KillTask(ExeFileNamestring): integer;
const
  
PROCESS_TERMINATE = $0001;
var
  
CoBOOL;
  
FSTHandle;
  
FPTProcessEntry32;
begin
  result 
:= 0;
  
FS := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS0);
  
FP.dwSize := Sizeof(FP);
  
Co := Process32First(FSFP);
  while 
integer(Co) <> do
  
begin
    
if ((UpperCase(ExtractFileName(FP.szExeFile)) = UpperCase(ExeFileName)) or
      (
UpperCase(FP.szExeFile) = UpperCase(ExeFileName))) then
      Result 
:= Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATEBOOL(0),
        
FP.th32ProcessID), 0));
    
Co := Process32Next(FSFP);
  
end;
  
CloseHandle(FS);
end
Далее интересснее. Функция запуска Skype:

PHP код:
function runSkype(sLoginstringsPassstring): Boolean;
var
  
// Переменные для хранения дескрипторов окон
  
hParenthChildHWND;
  
// Переменная счетчика цикла
  
iinteger;
begin
  
// Запускаем Skype. Не забываем указать путь к Skype на машине...
  // Можно считывать его автоматически по ключу реестра, который находится по адресу:
  // HKEY_LOCAL_MACHINE\SOFTWARE\Skype\Phone\SkypePath
  
WinExec(PChar('C:\Program Files\Skype\Phone\Skype.exe' ' /secondary'),
    
SW_NORMAL);
  
hParent := 0;
  
:= 0;
  
// Пока нет окна для входа в учетку
  
while hParent do
  
begin
    inc
(i);
    
hParent := FindWindow(PChar('TLoginForm.UnicodeClass'), PChar('Skype'));
    
Sleep(1000);
    
// Если его нет более ~20 секунд, выходим из функции
    
if 20 then
    begin
      result 
:= false;
      Exit;
    
end;
  
end;
 
  
//Добираемся до наших полей Логин и Пароль
  
hChild := FindWindowEx(hParent0PChar('TLoginControl'), nil);
  
hParent := hChild;
  
hChild := FindWindowEx(hParent0,
    
PChar('TNavigableTntComboBox.UnicodeClass'), nil);
  
// Вводим логин
  
SendMessage(hChildWM_SETTEXT0lparam(PChar(sLogin)));
  
hChild := FindWindowEx(hParent0PChar('TNavigableTntEdit.UnicodeClass'),
    
nil);
  
// Вводим пароль
  
SendMessage(hChildWM_SETTEXT0lparam(PChar(sPass)));
  
// И, вуаля, посылаем Return(Enter) в само окно чтобы подтвердить логин!
  
PostMessage(FindWindow(PChar('TLoginForm.UnicodeClass'), PChar('Skype')),
    
WM_KEYDOWNVK_RETURN0);
end
Далее самый сок, функция смены пользователя:

PHP код:
procedure changeAcc;
var
  
loginpasscurrHandlestring;
  
// Дескриптор хранения подтверждения авторизации
  
hAcceptHWND;
  
iInteger;
begin
  
По желанию можно удалить историю аккаунта Skype полностью
    С которого он был авторизирован до закрытия
   currHandle 
:= getAppDataPath 'Skype\' + skype.CurrentUser.Handle +
    '
\main.db'; }
    // Убиваем процессы
  KillTask('
skype.exe');
  KillTask('
skypePM.exe');
  { Как раз таки само удаление этого файла main.db
  if FileExists(currHandle) then
    DeleteFile(currHandle); }
 
  login := '
Ваш логин';
  pass := '
Ваш пароль';
 
  // Если логин не удался, выходим из функции
  if not runSkype(login, pass) then
    Exit;
 
  // Пока не можем приаттачиться, ждем
  while not skype.AttachmentStatus = SKYPE4COMLib_TLB.apiAttachAvailable do
  begin
    Sleep(100);
  end;
 
  // Далее обходим авторизацию Skype. Как, что и зачем
  // Описано в статье: http://zemus.us/05/obxod-avtorizacii-skypeapi.html
  skype.Attach(8, false);
  hAccept := 0;
  i := 0;
  while hAccept = 0 do
  begin
    Inc(i);
    hAccept := FindWindowEx(FindWindow(PChar('
tSkMainForm.UnicodeClass'), nil),
      0, PChar('
TZapCommunicator'), nil);
    sleep(1000);
    if i = 40 then
      Break;
  end;
 
  PostMessage(hAccept, WM_KEYDOWN, VK_TAB, 0);
  PostMessage(hAccept, WM_KEYDOWN, VK_RETURN, 0);
 
  // Ждем удачного аттача
  while not skype.AttachmentStatus = SKYPE4COMLib_TLB.apiAttachSuccess do
  begin
    Sleep(100);
  end;
 
  // Ждем пока пользователь не будет онлайн
  while not skype.CurrentUser.OnlineStatus = SKYPE4COMLib_TLB.olsOnline do
  begin
    Sleep(100);
  end;
  // ВСЕЕЕ!!!!
end; 
3:Заключение
Ну вот и все… Я научил кого-либо автоматизировать авторизацию в Skype!
В заключении скажу, что любое использование материалов с данного сайта, без моего соглашения и с отсутствием с ссылкой на данный веб-сайт, будет караться!

Удачи в кодинге!)
(c) Zemus (aka AlexTheC0d3r) http://zemus.us/
http://zemus.us/05/smena-polzovatelya-skype.html
 
Ответить с цитированием

  #2  
Старый 12.05.2010, 17:31
Аватар для Sin3v
Sin3v
Участник форума
Регистрация: 16.07.2008
Сообщений: 159
Провел на форуме:
1063538

Репутация: 240
Отправить сообщение для Sin3v с помощью ICQ
По умолчанию

Вообще зачет, большое спасибо алексу)
Щас начну SinMobile обновлять)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ebay перепишет Skype с нуля tux Мировые новости 3 31.07.2009 11:23
Сотовики vs Skype: битва началась jerrri Мировые новости 26 15.05.2009 10:58
FAQ&Hack – Skype И.Г. Авторские статьи 31 16.11.2007 16:54



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ