SF Plugin Управляем Spotify прямо из сампа

hexando

Известный
Автор темы
50
47
Версия SA-MP
  1. 0.3.7 (R1)
Ну типа да, здрасьте. Написал скрипт, который позволяет управлять Spotify'ем - командами из самого сампа (сам хз зачем это).

Команды:
  • /spc pp - Пуск/Пауза;
  • /spc n - Следующий трек;
  • /spc p - Предыдущий трек/Перемотка в начало трека;
  • /spc u - Увеличить громкость;
  • /spc d - Уменьшить громкость;
Всё работает без API и всяких токенов.
И да, на видео почему то нет разницы, когда я меняю звук, но на деле всё работает.
И ещё при использовании какой либо из этих команд - на экране будет появляться вот такой "тост":
Посмотреть вложение 49413
C++:
#include <Windows.h>
#include "main.h"

enum SPOTIFY
{
    SPOTIFY_MUTE = 524288,
    SPOTIFY_VOLUMEDOWN = 589824,
    SPOTIFY_VOLUMEUP = 655360,
    SPOTIFY_NEXT = 720896,
    SPOTIFY_PREV = 786432,
    SPOTIFY_STOP = 851968,
    SPOTIFY_PLAYPAUSE = 917504
};

SAMPFUNCS *SF = new SAMPFUNCS();

void CALLBACK spc(std::string param)
{
    HWND Window_Handle = FindWindow(L"Chrome_WidgetWin_0", NULL);

    if (param == "pp")
    {
        SendMessage(Window_Handle, WM_APPCOMMAND, 0, SPOTIFY_PLAYPAUSE);
    }
    else if (param == "n")
    {
        SendMessage(Window_Handle, WM_APPCOMMAND, 0, SPOTIFY_NEXT);
    }
    else if (param == "p")
    {
        SendMessage(Window_Handle, WM_APPCOMMAND, 0, SPOTIFY_PREV);
    }
    else if (param == "u")
    {
        SendMessage(Window_Handle, WM_APPCOMMAND, 0, SPOTIFY_VOLUMEUP);
    }
    else if (param == "d")
    {
        SendMessage(Window_Handle, WM_APPCOMMAND, 0, SPOTIFY_VOLUMEDOWN);
    }
    else {
        SF->getSAMP()->getChat()->AddChatMessage(0xff32cd32, "{32CD32}[SPOTIFY CONTROLS]: {FF0000}Аргумент указан неверно!");
    }
};

void __stdcall mainloop()
{
    static bool initialized = false;
    if (!initialized)
    {
        if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
        {
            initialized = true;

            SF->getSAMP()->registerChatCommand("spc", spc);

            SF->getSAMP()->getChat()->AddChatMessage(0xff32cd32, "{32CD32}[SPOTIFY CONTROLS]: {FFFFFF}Скрипт успешно загружен!");
        }
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    if (dwReasonForCall == DLL_PROCESS_ATTACH)
        SF->initPlugin(mainloop, hModule);
    return TRUE;
}
 

Вложения

  • spotify controls by hexando.sf
    83.5 KB · Просмотры: 250
Последнее редактирование:

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,772
11,216
Норм, но зачем, если на клавиатуре есть специальные мультимедийные клавиши?
 
  • Нравится
Реакции: Vespan

hexando

Известный
Автор темы
50
47
Норм, но зачем, если на клавиатуре есть специальные мультимедийные клавиши?
Мне лично удобнее написать в чат /spc n, нежели нажимать на FN + дотягиваться до F8. Да и это просто пример того, что можно реализовать на плюсах
 
  • Bug
Реакции: chapo

Cake_

Известный
Проверенный
263
313
C++:
HWND Window_Handle = FindWindow(L"Chrome_WidgetWin_0", NULL);
1581784462483.png

FindWindow же просто возвращает дескриптор окна, а функция SendMessage вызывает оконную процедуру для окна по его дескриптору. Хуком это назвать нельзя
 

hexando

Известный
Автор темы
50
47
Посмотреть вложение 49492
FindWindow же просто возвращает дескриптор окна, а функция SendMessage вызывает оконную процедуру для окна по его дескриптору. Хуком это назвать нельзя
Угу... Значит обосрался, хз почему назвал это хуком. Но спасибо что поправил