 |
06.12.2010, 01:01
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 24.08.2010
 Сообщений: 12
 Популярность: 26
 Сказал(а) спасибо: 5
Поблагодарили 8 раз(а) в 5 сообщениях
|
Смена пользователя Skype
Выкладываю из своих сорцов способ смены пользователя Skype:
1. Пролог
Решил написать небольшую статью опять про тот-же Skype.
На этот раз я автоматизирую смену аккаунтов Skype с помощью WinAPI, т.к. с помощью обертки от девелоперов Skype ничего сделать не получится (Будем идти через зад).
2. Действия
Я не буду заострять внимание на создании проекта, расстановки баттонов, мемо и т.д., а сразу начну по-делу. Для того, чтобы завершить процесс (в нашем случае Skype) я использую следущую функцию, найденную на просторах инета:
PHP код:
function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE = $0001;
var
Co: BOOL;
FS: THandle;
FP: TProcessEntry32;
begin
result := 0;
FS := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FP.dwSize := Sizeof(FP);
Co := Process32First(FS, FP);
while integer(Co) <> 0 do
begin
if ((UpperCase(ExtractFileName(FP.szExeFile)) = UpperCase(ExeFileName)) or
(UpperCase(FP.szExeFile) = UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FP.th32ProcessID), 0));
Co := Process32Next(FS, FP);
end;
CloseHandle(FS);
end;
Далее интересснее. Функция запуска Skype:
PHP код:
function runSkype(sLogin: string; sPass: string): Boolean;
var
// Переменные для хранения дескрипторов окон
hParent, hChild: HWND;
// Переменная счетчика цикла
i: integer;
begin
// Запускаем Skype. Не забываем указать путь к Skype на машине...
// Можно считывать его автоматически по ключу реестра, который находится по адресу:
// HKEY_LOCAL_MACHINE\SOFTWARE\Skype\Phone\SkypePath
WinExec(PChar('C:\Program Files\Skype\Phone\Skype.exe' + ' /secondary'),
SW_NORMAL);
hParent := 0;
i := 0;
// Пока нет окна для входа в учетку
while hParent = 0 do
begin
inc(i);
hParent := FindWindow(PChar('TLoginForm.UnicodeClass'), PChar('Skype'));
Sleep(1000);
// Если его нет более ~20 секунд, выходим из функции
if i = 20 then
begin
result := false;
Exit;
end;
end;
//Добираемся до наших полей Логин и Пароль
hChild := FindWindowEx(hParent, 0, PChar('TLoginControl'), nil);
hParent := hChild;
hChild := FindWindowEx(hParent, 0,
PChar('TNavigableTntComboBox.UnicodeClass'), nil);
// Вводим логин
SendMessage(hChild, WM_SETTEXT, 0, lparam(PChar(sLogin)));
hChild := FindWindowEx(hParent, 0, PChar('TNavigableTntEdit.UnicodeClass'),
nil);
// Вводим пароль
SendMessage(hChild, WM_SETTEXT, 0, lparam(PChar(sPass)));
// И, вуаля, посылаем Return(Enter) в само окно чтобы подтвердить логин!
PostMessage(FindWindow(PChar('TLoginForm.UnicodeClass'), PChar('Skype')),
WM_KEYDOWN, VK_RETURN, 0);
end;
Далее самый сок, функция смены пользователя:
PHP код:
procedure changeAcc;
var
login, pass, currHandle: string;
// Дескриптор хранения подтверждения авторизации
hAccept: HWND;
i: Integer;
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пасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 05:57.
|
 |