Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 06.12.2010, 00:01   #1
 Разведчик
Аватар для Tem1q
 
Tem1q на правильном пути
Регистрация: 24.08.2010
Сообщений: 12
Популярность: 26
Сказал(а) спасибо: 5
Поблагодарили 8 раз(а) в 5 сообщениях
 
По умолчанию Смена пользователя 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;
  // ВСЕЕЕ!!!!
end; 
3. Заключение
Ну вот и все… Я научил кого-либо автоматизировать авторизацию в Skype!
В заключении скажу, что любое использование материалов с данного сайта, без моего соглашения и с отсутствием с ссылкой на данный веб-сайт, будет караться!

Удачи в кодинге!

(c) Zemus (aka AlexTheC0d3r)
  Ответить с цитированием
Пользователь сказал cпасибо:
Богомол (19.04.2011)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Пушка пользователя KOSYAK32 Общение и обсуждение Perfect World 9 17.08.2010 18:18
Блокировка пользователя Newbie Ivan_32 PVP Room 9 30.01.2009 20:17

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 16:38.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net