
08.03.2010, 00:02
|
|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
возможно ли узнать какой трек и группа проигрывается в аимп в данный момент?
если да, то как?
Да, вот простой пример родного плагина для AIMP на ассемблере (masm32):
aimp_plugin.asm:
Код:
.486 ; create 32 bit code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\macros\macros.asm
include \masm32\macros\windows.asm
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
AIMP_CallBack_Set=12+4 ;(dwCBType: DWORD; Proc: Pointer; User: DWORD): Boolean; stdcall;
AIMP_CallBack_Remove=12+8 ;(dwCBType: DWORD; Proc: Pointer): Boolean; stdcall;
AIMP_Status_Get=12+12 ;(StatusType: DWORD): DWORD; stdcall;
AIMP_PLS_Info=12+32 ;(Index: Integer; out PLSInfo: TPLSInfo)
AIMP_PLS_Count=12+36 ;word
AIMP_GetCurrentTrack=12+60 ; dd ? ;(AInfo: PAIMP2FileInfo): Boolean; stdcall;
AIMP_STS_STREAM_TYPE=39
AIMP_STS_Player=4
AIMP_PLAYER_STATE=11
TAIMP2FileInfo STRUCT
cbSizeOf dd ?
nActive dd ?
nBitRate dd ?
nChannels dd ?
nDuration dd ?
nFileSize dd ?
dd ?
nRating dd ?
nSampleRate dd ?
nTrackID dd ?
nAlbumLen dd ?
nArtistLen dd ?
nDateLen dd ?
nFileNameLen dd ?
nGenreLen dd ?
nTitleLen dd ?
sAlbum dd ?
sArtist dd ?
sDate dd ?
sFileName dd ?
sGenre dd ?
sTitle dd ?
TAIMP2FileInfo ENDS
TPLSInfo STRUCT
PLSName dd ?
FileCount dd ?
PLSDuration dd ?
PLSSize dq ?
PlaylistID dd ?
TPLSInfo ENDS
GetSongName PROTO :DWORD,:DWORD,:DWORD,:DWORD
init2 proto :dword
config proto :dword, :dword
PlayFile proto :dword, :dword
TAIMPAddonHeader STRUCT
Version dd ?
DllInstance dd ?
GetPlgName dd ?
GetAuthor dd ?
Init dd ?
Config dd ?
Free dd ?
TAIMPAddonHeader ENDS
.data
plugin2 TAIMPAddonHeader {0,0,offset get_plugin_name,offset get_author,offset init2,offset config,offset quit}
plugin_name db "Test",0
plugin_author db "(c) dx",0
.data?
hInstance dd ?
FileInfo TAIMP2FileInfo {}
AIMP dd ?
PlayList TPLSInfo <>
.code
LibMain proc instance:DWORD,reason:DWORD,reserved:DWORD
.if reason == DLL_PROCESS_ATTACH
invoke GetModuleHandle,NULL
mov hInstance,eax
mov eax,1
.endif
ret
LibMain ENDP
AIMP_QueryAddon PROC
mov eax,offset plugin2
ret
AIMP_QueryAddon ENDP
get_plugin_name PROC
mov eax,offset plugin_name
ret
get_plugin_name ENDP
get_author PROC
mov eax,offset plugin_author
ret
get_author ENDP
config PROC Handle :DWORD, Win: DWORD
xor eax,eax
ret
config ENDP
init2 PROC, xAIMP :DWORD
m2m AIMP,xAIMP
push 0
push offset PlayFile
push AIMP_PLAYER_STATE
mov eax,AIMP
push eax
mov eax,[eax]
call dword ptr [eax+AIMP_CallBack_Set]
xor eax,eax
ret
init2 ENDP
PlayFile PROC User :DWORD, cType :DWORD
LOCAL stitle [512] :BYTE
LOCAL sartist [512] :BYTE
.if cType!=AIMP_PLAYER_STATE
jmp ext
.endif
push AIMP_STS_Player
mov eax,AIMP
push eax
mov eax,[eax]
call dword ptr [eax+AIMP_Status_Get]
cmp eax,1
jne ext
push AIMP_STS_STREAM_TYPE
mov eax,AIMP
push eax
mov eax,[eax]
call dword ptr [eax+AIMP_Status_Get]
test eax,eax
jne ext
invoke RtlZeroMemory,addr sartist,512
invoke RtlZeroMemory,addr stitle,512
invoke RtlZeroMemory,offset FileInfo,88
mov FileInfo.cbSizeOf,88
lea eax,stitle
mov FileInfo.sTitle,eax
mov FileInfo.nTitleLen,126
lea eax,sartist
mov FileInfo.sArtist,eax
mov FileInfo.nArtistLen,512
push offset FileInfo
mov eax,AIMP
push eax
mov eax,[eax]
call dword ptr [eax+AIMP_GetCurrentTrack]
invoke MessageBoxW,0,addr stitle,addr sartist,0
ext:
xor eax,eax
ret
PlayFile ENDP
quit PROC
xor eax,eax
ret
quit ENDP
end LibMain
aimp_plugin.def:
Код:
LIBRARY aimp_plugin
EXPORTS AIMP_QueryAddon
А вообще, в aimp sdk есть простые примеры на дельфи.
|
|
|

08.03.2010, 00:09
|
|
Постоянный
Регистрация: 26.07.2009
Сообщений: 321
С нами:
8838619
Репутация:
123
|
|
к сожелению, ни асма ни делфи не знаю
мне бы бинарник подошел
|
|
|

08.03.2010, 00:16
|
|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
http://rapidshare.com/files/360332312/aimp_plugin.dll.html
Не знаю, что конкретно должен делать бинарник, и вообще, нужен он в виде плагина или внешнего exe, этот просто выдает при воспроизведении месаджбокс. Положить его в директорию PlugIns и перезапустить AIMP, либо через меню Плагины загрузить его.
|
|
|

08.03.2010, 00:27
|
|
Постоянный
Регистрация: 26.07.2009
Сообщений: 321
С нами:
8838619
Репутация:
123
|
|
желательно записывать название трека и группы в файл....
плагин или exe - без разницы
|
|
|

08.03.2010, 02:05
|
|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
http://slil.ru/28758400
Вот плагин, который создает в папке с плеером файл SONGS.txt и туда пишет названия и исполнителей всех прослушанных песен (в unicode).
|
|
|

08.03.2010, 02:09
|
|
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
С нами:
9129884
Репутация:
240
|
|
Ну так что, ктонить знает ответ на мой вопрос?
|
|
|

08.03.2010, 02:15
|
|
Постоянный
Регистрация: 25.03.2008
Сообщений: 670
С нами:
9541766
Репутация:
2407
|
|
Дали же ссылку на msdn на функцию для установки хуков. Вот еще пример на чистом си:
http://msdn.microsoft.com/en-us/library/ms644960%28VS.85%29.aspx
|
|
|

08.03.2010, 02:19
|
|
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
С нами:
9129884
Репутация:
240
|
|
Я про 4971 пост.
За хуки спс большое.
|
|
|

08.03.2010, 14:08
|
|
Познающий
Регистрация: 23.09.2007
Сообщений: 75
С нами:
9806336
Репутация:
86
|
|
M.W.N.N., чего то я не вижу чтобы в клиенте принимались данные. sHELLO только объявляется и нигде не используется. конечно мусор будет выводится.
|
|
|

08.03.2010, 22:09
|
|
Участник форума
Регистрация: 05.01.2009
Сообщений: 191
С нами:
9129884
Репутация:
240
|
|
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
int main() {
struct sockaddr_in server, client={AF_INET,INADDR_ANY,INADDR_ANY};
memset(&server,0,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(1212);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
int sock;
sock=socket(PF_INET,SOCK_DGRAM,0);
bind(sock,(sockaddr *) & client,sizeof(client));
char buf[81];
memset(buf,0,81);
strcpy(buf,"request");
sendto(sock,&buf,strlen(buf),0,(sockaddr *)&server,sizeof(server));
memset(buf,0,81);
recvfrom(sock,buf,80,0,NULL,0);
puts(buf);
return 0;
}
Код:
laptop:~/C/tc$ gcc -o udpcl udpcl.c
udpcl.c: In function ‘main’:
udpcl.c:18: error: ‘sockaddr’ undeclared (first use in this function)
udpcl.c:18: error: (Each undeclared identifier is reported only once
udpcl.c:18: error: for each function it appears in.)
udpcl.c:18: error: expected expression before ‘)’ token
udpcl.c:18: error: too few arguments to function ‘bind’
udpcl.c:23: error: expected expression before ‘)’ token
udpcl.c:23: error: too few arguments to function ‘sendto’
Подскажите пож-та в чем проблема?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|