Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Взаимодействие с Winamp'ом

13K
18 октября 2006 года
skf
9 / / 07.11.2005
Подскажите, как из моего приложения получить заголовок песни, которая в данный момент воспроизводится в винампе.
Нашел функцию которая умеет такое, но её можно использовать только в плагинах для винампа :(
12K
18 октября 2006 года
rjx
55 / / 11.03.2006
[QUOTE=skf]Нашел функцию которая умеет такое, но её можно использовать только в плагинах для винампа :([/QUOTE]

Да, в SDK описано как получить заголовок песни, но возвращается адрес строки в арресном пространстве Winamp-овского процесса.

На самом деле решение проще:
 
Код:
char buf[1024];
GetWindowText(FindWindow("Winamp v1.x", NULL), buf, 1024);
// в buf - строка типа "... - Winamp", где "..." - заголовок текущего элемента плейлиста
713
18 октября 2006 года
Ap0k
360 / / 13.03.2006
Код:
using System;

class EntryPoint
{

    [System.Runtime.InteropServices.DllImport("user32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto)]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [System.Runtime.InteropServices.DllImport("user32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto)]
    public static extern int GetWindowText(IntPtr hwnd, string lpString, int cch);

    const string lpClassName = "Winamp v1.x";
    const string strTtlEnd = " - Winamp";

    static string GetSongTitle()
    {
        IntPtr hwnd = FindWindow(lpClassName, null);
        if (hwnd.Equals(IntPtr.Zero)) return "Not running";

        string lpText = new string((char) 0, 100);
        int intLength = GetWindowText(hwnd, lpText, lpText.Length);
       
        if ((intLength <= 0) || (intLength > lpText.Length)) return "unknown";

        string strTitle = lpText.Substring(0, intLength);
        int intName = strTitle.IndexOf(strTtlEnd);
        int intLeft = strTitle.IndexOf("[");
        int intRight = strTitle.IndexOf("]");

        if ((intName >= 0) && (intLeft >= 0) && (intName < intLeft) &&
            (intRight >= 0) && (intLeft + 1 < intRight))
            return strTitle.Substring(intLeft + 1, intRight - intLeft - 1);

        if ((strTitle.EndsWith(strTtlEnd)) && (strTitle.Length > strTtlEnd.Length))
            strTitle = strTitle.Substring(0, strTitle.Length - strTtlEnd.Length);

        int intDot = strTitle.IndexOf(".");
        if ((intDot > 0) && IsNumeric(strTitle.Substring(0, intDot)))
            strTitle = strTitle.Remove(0, intDot + 1);

        return strTitle.Trim();
    }

    static bool IsNumeric(string Value)
    {
        try
        {
            double.Parse(Value);
            return true;
        }
        catch
        {
            return false;
        }
    }

    [STAThread]
    static void Main(string[] args)
    {
        Console.WriteLine(GetSongTitle());
        Console.ReadLine();
    }
}
13K
18 октября 2006 года
skf
9 / / 07.11.2005
Всем спасибо за помощь ! :)

Способ и вправду прост :)
21K
17 августа 2007 года
teCa
16 / / 07.06.2007
А можно по подробней об этом, оформленый скрипт есть у кого VBS или JS?
92
29 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
Цитата: teCa
А можно по подробней об этом, оформленый скрипт есть у кого VBS или JS?


пошутил?

32K
10 сентября 2007 года
Василий Соколов
3 / / 10.09.2007
Весьма полезно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог