Clan x86

Technical (Development, Security, etc.) => General Programming => Topic started by: Towelie on September 18, 2005, 03:42:48 pm

Title: Gaim Plugin Request
Post by: Towelie on September 18, 2005, 03:42:48 pm
I was wondering if anyone could write a plugin for me that displays what song im playing in Winamp, if you are interested aim me so I could give you details
Edit
My aim is Towelie4365
Title: Re: Gaim Plugin Request
Post by: Joe on September 18, 2005, 04:00:14 pm
You know, I saw this and I thought "Well, seeing as how we're requesting Gaim plugins, I'll request a Winamp plugin!".

I'd like it too! =)
Title: Re: Gaim Plugin Request
Post by: Sidoh on September 18, 2005, 04:04:30 pm
I thought there already was one?  Maybe I'm mistaken.
Title: Re: Gaim Plugin Request
Post by: Quik on September 18, 2005, 04:05:43 pm
Yoni wrote a pretty nice plugin for Trillian Pro located here: http://yoni.valhallalegends.com/yplugin2.asp

It wouldn't be that hard for you to make it Gaim compatable.
Title: Re: Gaim Plugin Request
Post by: Joe on September 18, 2005, 04:09:44 pm
I thought there already was one?  Maybe I'm mistaken.

I've spent hours searching for one, and never found more than a simple request.

@Quik: Yup, used that when I had trillian.
Title: Re: Gaim Plugin Request
Post by: Sidoh on September 18, 2005, 04:21:33 pm
I've spent hours searching for one, and never found more than a simple request.

@Quik: Yup, used that when I had trillian.

Huh, that's weird.  Oh well.  :p
Title: Re: Gaim Plugin Request
Post by: Joe on September 18, 2005, 04:25:55 pm
The majority of Gaim users with skill in C++ programming are Linux users. Theres about 20 xMMs plugins out there.
Title: Re: Gaim Plugin Request
Post by: Sidoh on September 18, 2005, 04:27:46 pm
The majority of Gaim users with skill in C++ programming are Linux users. Theres about 20 xMMs plugins out there.

Good point.  :p
Title: Re: Gaim Plugin Request
Post by: Newby on September 18, 2005, 04:41:31 pm
Suckers. :)

<3 Ron.

Quote
(13:56:49) Newby1337: I am listening to 10590. Exodus - Fabulous Disaster (3:03 / 4:55 192kbps)
Title: Re: Gaim Plugin Request
Post by: Towelie on September 18, 2005, 04:42:25 pm
except I cant use XMMS, so...
Title: Re: Gaim Plugin Request
Post by: Ergot on September 18, 2005, 04:47:55 pm
Suckers. :)

<3 Ron.

Quote
(13:56:49) Newby1337: I am listening to 10590. Exodus - Fabulous Disaster (3:03 / 4:55 192kbps)
(14:05:34) Jimmy: I am listening to 1171. Sugarcult - I Changed My Name (0:00 / 5:40 [stopped] 0kbps)

<3 x2 Ron.
Title: Re: Gaim Plugin Request
Post by: iago on September 18, 2005, 05:09:13 pm
The problem is that Windows discourages hobby coders.  If somebody is going to invest the hardware and money required to develop software on Windows, they need some kind of return on it.  That's why you rarely see free Windows programs. 

Compiling stuff on Windows takes a lot of set up and configuration, and is over all not fun.  On Linux or Bsd or Unix, I cd into the plugins folder, and tyep "make <pluginname>.so", and it automatically compiled it.  On Windows, I'm not sure what you have to do, but I have yet to figure it out. 

So yeah, Windows is too difficult to compile software on.

As another example, from the xchat website:
Quote
Q. Why isn't the Windows version free?
A. Building X-Chat for Windows is a difficult process, it requires quite some skill and expertise to accomplish. It takes time, and is by no means automated.
There you have it :)
Title: Re: Gaim Plugin Request
Post by: Towelie on September 18, 2005, 08:01:03 pm
so... no one wants to make it for me :-( Make it on linux, but make it compatible for windows... if thats possible
Title: Re: Gaim Plugin Request
Post by: Quik on September 18, 2005, 08:43:44 pm
The problem is that Windows discourages hobby coders. If somebody is going to invest the hardware and money required to develop software on Windows, they need some kind of return on it. That's why you rarely see free Windows programs.

Compiling stuff on Windows takes a lot of set up and configuration, and is over all not fun. On Linux or Bsd or Unix, I cd into the plugins folder, and tyep "make <pluginname>.so", and it automatically compiled it. On Windows, I'm not sure what you have to do, but I have yet to figure it out.

So yeah, Windows is too difficult to compile software on.

As another example, from the xchat website:
Quote
Q. Why isn't the Windows version free?
A. Building X-Chat for Windows is a difficult process, it requires quite some skill and expertise to accomplish. It takes time, and is by no means automated.
There you have it :)

Show me where that is on X-Chat's site.
Title: Re: Gaim Plugin Request
Post by: rabbit on September 18, 2005, 08:44:32 pm
http://www.xchat.org/windows/
Title: Re: Gaim Plugin Request
Post by: Quik on September 18, 2005, 08:46:28 pm
http://www.xchat.org/windows/

Yeah, found it. Thanks, had to prove a point.
Title: Re: Gaim Plugin Request
Post by: Towelie on September 18, 2005, 11:39:36 pm
Could you guys not go off topic........... I just want to know is
A) is it doable with reasonable amount of work?
B) If anyone is willing to do it?
Title: Re: Gaim Plugin Request
Post by: iago on September 18, 2005, 11:41:20 pm
Could you guys not go off topic........... I just want to know is
A) is it doable with reasonable amount of work?
Yes.  A lot of work, but not unreasonable. 

Quote
B) If anyone is willing to do it?
Probably not.  People around here don't seem to care about Windows. 

If anybody is interested, however, I might be able to get some information on how to compile Gaim plugins for Windows.  I don't want to bug the guy, but I will if somebody here wants me to find out. 
Title: Re: Gaim Plugin Request
Post by: Newby on September 18, 2005, 11:52:48 pm
Probably not.  People around here don't seem to care about Windows. 

And yet the majority of "people" use Windows! :P
Title: Re: Gaim Plugin Request
Post by: Joe on September 18, 2005, 11:58:07 pm
I'm going to laugh when I end up being the one who writes this. -sigh-
Title: Re: Gaim Plugin Request
Post by: Towelie on September 19, 2005, 12:16:30 am
start now!
Title: Re: Gaim Plugin Request
Post by: Quik on September 19, 2005, 12:19:20 am
Could you guys not go off topic........... I just want to know is
A) is it doable with reasonable amount of work?
Yes. A lot of work, but not unreasonable.

Quote
B) If anyone is willing to do it?
Probably not. People around here don't seem to care about Windows.

If anybody is interested, however, I might be able to get some information on how to compile Gaim plugins for Windows. I don't want to bug the guy, but I will if somebody here wants me to find out.

I might be interested in writing this, please contact me with any information you can get.
Title: Re: Gaim Plugin Request
Post by: Newby on September 19, 2005, 12:30:42 am
I'm going to laugh when I end up being the one who writes this. -sigh-

You won't finish it. :)
Title: Re: Gaim Plugin Request
Post by: Joe on September 19, 2005, 12:48:08 am
Sure I will. It'll be a leached combo of yPlugin and iago's encoding thing. =)
Title: Re: Gaim Plugin Request
Post by: iago on September 19, 2005, 02:36:42 pm
I'm guessing that what you need is to install cygwin, go into the "plugins" directory, make your plugin called <pluginname>.c, then compile it by doing "make <pluginname>.dll
Title: Re: Gaim Plugin Request
Post by: rabbit on September 19, 2005, 05:29:28 pm
Or you could use MinGW and do "gcc -c -DBUILD_DLL winamp_plugin.c; gcc -shared -o winamp_plugin.dll -Wl,--out-implib,libwinamp_plugin.a winamp_plugin.o"
Title: Re: Gaim Plugin Request
Post by: Joe on September 19, 2005, 06:31:14 pm
char *GetWinampSongTitle(HWND Winamp, DWORD Index) // Winamp 2.04+, pointer is in local address space {
   static char SongTitle[1024];

   DWORD WinampProcessID;
   HANDLE WinampProcess;
   char *SongTitleRemote;
   char *Ret = NULL; // Return value

   GetWindowThreadProcessId(Winamp, &WinampProcessID); // get pid

   if(WinampProcess = OpenProcess(PROCESS_VM_READ, FALSE, WinampProcessID)) { // open process
      if(SongTitleRemote = GetWinampSongTitleRemote(Winamp, Index)) { // get pointer
         if(ReadProcessMemory(WinampProcess, SongTitleRemote, SongTitle, sizeof(SongTitle), NULL)) { // read it
            Ret = SongTitle; // success
         }
      }
      CloseHandle(WinampProcess);
   }

   return Ret;
}


From yPlugin2.
Title: Re: Gaim Plugin Request
Post by: Newby on September 19, 2005, 06:56:00 pm
From yPlugin2.

Now all you have to do is stick that in a plugin, make all the appropriate hooks / calls, compile it, and release it, and you'll be done!
Title: Re: Gaim Plugin Request
Post by: iago on September 19, 2005, 06:57:06 pm
Or you could use MinGW and do "gcc -c -DBUILD_DLL winamp_plugin.c; gcc -shared -o winamp_plugin.dll -Wl,--out-implib,libwinamp_plugin.a winamp_plugin.o"
Don't forget, you have to add Gaim's libraries and include files.  That's why make is handy. 

Title: Re: Gaim Plugin Request
Post by: rabbit on September 19, 2005, 07:18:51 pm
This is my entire (incomplete) C++ Winamp code.  There are a few minor things I have left to do, but, whatever:
Code: [Select]
#include <windows.h>
#include <stdio.h>
#include <iostream.h>

HWND__ *hwnd_winamp;

const long IPC_ISPLAYING = 104;
const long IPC_GETOUTPUTTIME    = 105;
const long IPC_SETPLAYLISTPOS   = 121;
const long IPC_SETVOLUME        = 122;
const long IPC_GETLISTLENGTH = 124;
const long IPC_GETLISTPOS = 125;
const long IPC_GETINFO          = 126;
const long IPC_GETPLAYLISTTITLE = 212;
const long WM_WA_IPC = 0x400;
const long WA_DIALOGJUMPTOFILE  = 0x9D02;
const long WA_SENDCUSTOMDATA    = 0x111;
const long WINAMP_BUTTON1       = 40044;
const long WINAMP_BUTTON2       = 40045;
const long WINAMP_BUTTON3       = 40046;
const long WINAMP_BUTTON4       = 40047;
const long WINAMP_BUTTON5       = 40048;
const long xPROCESS_VM_READ = 0x10;

enum playState
{
paused,
playing,
stopped
};

void DoEvents();
long findwinamp();
playState getPlayState();
long GetPlayListLength();
long GetPlayListPosition();
void GetCurrentSongPosition(char *&outbuf);
void GetSongLength(char *&outbuf);
bool JumpToFile(char *sFile);
long SetPlaylistPosition(int pos);
long SetVolume(int vol);
long GetBitrate();
long PrevTrack();
long PlayTrack();
long PauseTrack();
long StopTrack();
long NextTrack();
long GetWinampSongTitleRemote(int index);
char *GetWinampSongTitle(int index);

int main(int argc, char **argv)
{
// it's meant to be a command line driven program!
/*if(argc == 1 || (argc == 2 && argv[1] == "/?"))
{
printf("Invalid arguments.  Use is \n\tclamp <switch> [extra]\n\n");
printf("\tSWITCHES\tDESCRIPTION\n");
printf("\t  /?\t\tList this help\n");
return 1;
}*/

char *buffer = new char[1024];

// get winamp's handle
if(findwinamp() == 0)
{
printf("Error: winamp not found\n");
return 2;
}

// get the title of song 2414 in the playlist ^^
// best used with GetPlayListPosition()
cout << GetWinampSongTitle(2414) << endl;

// get the current playstate
playState check = getPlayState();

if(check == paused)
sprintf(buffer, "%s", "Winamp: Paused");
if(check == playing)
sprintf(buffer, "%s", "Winamp: Playing");
if(check == stopped)
sprintf(buffer, "%s", "Winamp: Stopped");

long pos = GetPlayListPosition();
long len = GetPlayListLength();

// start building the output
sprintf(buffer, "%s; [%i / %i] (", buffer, pos, len);
GetCurrentSongPosition(buffer);
sprintf(buffer, "%s)", buffer);

printf("%s\n", buffer);
return 0;
}

void DoEvents()
{
// stolen from the public DMBot source code
MSG Msg;
while(PeekMessage(&Msg,NULL,0,0,PM_REMOVE))
{
if(Msg.message == WM_QUIT) break;
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}

long findwinamp()
{
hwnd_winamp = FindWindow("Winamp v1.x", NULL);
if(hwnd_winamp != 0)
return 1;
else
return 0;
}

playState getPlayState()
{
long res = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_ISPLAYING);
if(res == 0)
return stopped;
else if(res == 1)
return playing;
else
return paused;
}

long GetPlayListLength()
{
long ret = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_GETLISTLENGTH);
return ret;
}

long GetPlayListPosition()
{
long ret = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_GETLISTPOS) + 1;
return ret;
}

void GetCurrentSongPosition(char *&outbuf)
{
long sec = 0;
long min = 0;
long total = 0;
   
total = SendMessage(hwnd_winamp, WM_WA_IPC, 0, IPC_GETOUTPUTTIME);
min = total / 1000 / 60;
sec = total / 1000 % 60;
if(min < 10) sprintf(outbuf, "%s%i", outbuf, 0);
sprintf(outbuf, "%s%i:", outbuf, min);

if(sec < 10) sprintf(outbuf, "%s%i", outbuf, 0);
sprintf(outbuf, "%s%i", outbuf, sec);

return;
}

void GetSongLength(char *&outbuf)
{
long sec = 0;
long min = 0;
long total = 0;
   
total = SendMessage(hwnd_winamp, WM_WA_IPC, 1, IPC_GETOUTPUTTIME);
min = total / 1000 / 60;
sec = total / 1000 % 60;
if(min < 10) sprintf(outbuf, "%s%i", outbuf, 0);
sprintf(outbuf, "%s%i:", outbuf, min);

if(sec < 10) sprintf(outbuf, "%s%i", outbuf, 0);
sprintf(outbuf, "%s%i", outbuf, sec);

return;
}

bool JumpToFile(char *sFile)
{
HWND__ *jumpTo = 0;
HWND__ *edit = 0;
HWND__ *listBox = 0;

if(hwnd_winamp == 0x0)
return false;

PostMessage(hwnd_winamp, WA_SENDCUSTOMDATA, WA_DIALOGJUMPTOFILE, 0x0);

do
{
DoEvents();
jumpTo = FindWindow("#32770", "Jump to file");
edit = FindWindowEx(jumpTo, 0x0, "Edit", NULL);
listBox = FindWindowEx(jumpTo, 0x0, "ListBox", NULL);
} while(jumpTo == 0x0 || edit == 0x0 || listBox == 0x0);

SendMessage(edit, 0x0c, 0x0, (LPARAM)sFile);
DoEvents();
if(SendMessage(listBox, 0x18b, 0x0, 0x0) == 0x0)
PostMessage(jumpTo, 0x10, 0x0, 0x0);
else
SendMessage(listBox, 0x203, 0x0, (long)0x0);

return true;
}

long SetPlaylistPosition(int pos)
{
return SendMessage(hwnd_winamp, WM_WA_IPC, pos - 1, IPC_SETPLAYLISTPOS);
}

long SetVolume(int vol)
{
return SendMessage(hwnd_winamp, WM_WA_IPC, vol, IPC_SETVOLUME);
}

long GetBitrate()
{
return SendMessage(hwnd_winamp, WM_WA_IPC, 1, IPC_GETINFO);
}

char *GetChannels()
{
char *ret = new char[15];
long check = SendMessage(hwnd_winamp, WM_WA_IPC, 2, IPC_GETINFO);
switch(check)
{
case 0:
ret = "No Speakers";
break;
case 1:
ret = "Mono";
break;
case 2:
ret = "Stereo";
break;
default:
ret = "Surround-Sound";
break;
}

return ret;
}

long PrevTrack()
{
return SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON1, 0);
}

long PlayTrack()
{
return SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON2, 0);
}

long PauseTrack()
{
return SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON3, 0);
}

long StopTrack()
{
return SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON4, 0);
}

long NextTrack()
{
return SendMessage(hwnd_winamp, WM_COMMAND, WINAMP_BUTTON5, 0);
}

long GetWinampSongTitleRemote(int index)
{
return SendMessage(hwnd_winamp, WM_WA_IPC, index, IPC_GETPLAYLISTTITLE);
}

char *GetWinampSongTitle(int index)
{
char *title = new char[1024];
DWORD ProcessID = 0;
HANDLE ProcessHandle = 0;
long TitleRemote = 0;

ProcessID = GetWindowThreadProcessId((HWND)hwnd_winamp, (LPDWORD)ProcessID);
cout << "ProcessID: " << ProcessID << endl;
ProcessHandle = OpenProcess((DWORD)0x10, false, ProcessID);
cout << "ProcessHandle: " << ProcessHandle << endl;
if(ProcessHandle != 0)
{
TitleRemote = GetWinampSongTitleRemote(index);
cout << "TitleRemote: " << TitleRemote << endl;
if(TitleRemote != 0)
{
if(ReadProcessMemory((HANDLE)ProcessHandle, (LPCVOID)TitleRemote, (LPVOID)title, (DWORD)sizeof(title), (LPDWORD)0) != 0)
{
CloseHandle(ProcessHandle);
return title;
}
}
CloseHandle(ProcessHandle);
}
return "Error: Song Not Found";
}
Title: Re: Gaim Plugin Request
Post by: Newby on September 19, 2005, 07:22:21 pm
You guys have the easy shit down.

Writing the gaim plugin is the hard part. =P
Title: Re: Gaim Plugin Request
Post by: Joe on September 19, 2005, 07:49:13 pm
http://www.javaop.com/~joe/gaimwinamp.c

IAGO I AM SO SO SO SO SORRY

EDIT -
For those of you who just got lost, poke (http://www.javaop.com/~iago/xmms-plugin.c).
Title: Re: Gaim Plugin Request
Post by: Newby on September 19, 2005, 07:52:05 pm
Compile a DLL!

Once Towelie has a DLL and sends his current playing song to me, I bow to you.
Title: Re: Gaim Plugin Request
Post by: Joe on September 19, 2005, 07:53:25 pm
Damn straight you will. *taps foot impatiently at cygwin's download speed*
Title: Re: Gaim Plugin Request
Post by: Joe on September 19, 2005, 09:30:02 pm
String mp3() {
   String title;
   HWND HwndWamp;
   int len;
   
   HwndWamp = FindWindow("Winamp v1.x", "");
   if(HwndWamp = 0) {
      return "Winamp not found.";
   }else{
     len = GetWindowTextLength(HwndWamp) + 1;
     GetWindowText(HwndWamp, title, len);
     title = title.substr(0, strlen(title) - 1);
     title = title.substr(0, strlen(title) - 9);
     return title;
   }
}


I have three dollars on newby. =)
Title: Re: Gaim Plugin Request
Post by: Newby on September 19, 2005, 09:38:50 pm
String? Ick.

Get this working and compiled, you bum. If you get it working, I'll install Windows on VMWare and make the plugin sexy. I've wanted to write one for Windows, but lack of a good start / now using Linux stopped me. :O
Title: Re: Gaim Plugin Request
Post by: Joe on September 19, 2005, 09:49:08 pm
Heres your good start (http://www.javaop.com/~iago/xmms-plugin.c).

Heres your motivation. (http://www.javaop.com/~joe/images/winampgiveup.jpg[/url)
Title: Re: Gaim Plugin Request
Post by: iago on September 19, 2005, 09:52:01 pm
Gaim is C, and Gaim plugins are C.  I couldn't see String working, for 2 reasons: There is only a String class in C++, and it's "string" or "std::string", not "String".  C/C++ are case sensitive. 
Title: Re: Gaim Plugin Request
Post by: Joe on September 19, 2005, 10:31:59 pm
I was going by Java. =)
Title: Re: Gaim Plugin Request
Post by: MyndFyre on September 19, 2005, 10:54:07 pm
I was going by Java. =)
...which was wrong.
Title: Re: Gaim Plugin Request
Post by: Towelie on September 19, 2005, 11:22:25 pm
so...... anyone else want to attempt? :-(
Title: Re: Gaim Plugin Request
Post by: iago on September 20, 2005, 12:05:17 am
C and Java are quite different, especially when it comes to stringing. 
Title: Re: Gaim Plugin Request
Post by: Joe on September 21, 2005, 05:17:58 pm
I changed it to a *char. Anyhow, I give up. Again. Heres my code:
Requires the winamp headers from yPlugin.

Code: [Select]
// Credit -
// Joe[e2]: Author
// iago[x86]: Original XMMS Plugin

#include <unistd.h>
#include <ctype.h>
#include <string.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "WinampFunctions.h"

#include "internal.h"
#include "gtkgaim.h"

#include "debug.h"
#include "signals.h"
#include "util.h"
#include "version.h"
#include "cmds.h"
#include "conversation.h"

#include "gtkplugin.h"
#include "gtkutils.h"

#include <windows.h>

//Plugin info - iago[x86]
#define VERSION "0.1.1"
#define ME "Winamp Plugin"
#define MAXLENGTH 1024
#define XMMS_PLUGIN_VERSION "I am using Winamp Plugin v1.0.1 written by Joe with very special thanks to iago and Yoni."

//Handle to the procedures to handle commands - iago[x86]
static GaimCmdId noargcmd;

//write_conversation - iago[x86]
void write_conversation(GaimConversation *conv, const char *message) {
  gaim_conversation_write(conv, "", message, GAIM_MESSAGE_NO_LOG, time( NULL ));
}

// WampNoParams - Joe[e2]/iago[x86]
gboolean WampNoParams(GaimConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data) {
  write_conversation("Current MP3: " + mp3());
  return GAIM_CMD_STATUS_OK;
}

// plugin_load - Joe[e2]/iago[x86]
static gboolean plugin_load(GaimPlugin *plugin) {
  noargcmd  = gaim_cmd_register("winamp", "",   GAIM_CMD_P_DEFAULT, GAIM_CMD_FLAG_IM, NULL, (GaimCmdFunc)WampNoParams,    "/Wamp", NULL);
  return TRUE;
}

static gboolean plugin_unload(GaimPlugin *plugin) {
  gaim_cmd_unregister (noargcmd);
  return TRUE;
}


static GaimPluginInfo info = {
  GAIM_PLUGIN_MAGIC,
  GAIM_MAJOR_VERSION,
  GAIM_MINOR_VERSION,
  GAIM_PLUGIN_STANDARD,                                     /* type             */
  NULL,                                                     /* ui_requirement   */
  0,                                                        /* flags            */
  NULL,                                                     /* dependencies     */
  GAIM_PRIORITY_DEFAULT,                                    /* priority         */
  NULL,                                                     /* id               */
  N_("Winamp Plugin"),                                      /* name             */
  VERSION,                                                  /* version          */
  N_("Allows use of the /mp3 command."),                    /* summary          */
  N_("Allows use of the /mp3 command."),                    /* description      */
  "Joe <joetheodd@gmail.com",                               /* author           */
  "http://www.x86labs.org",                                 /* homepage         */
  plugin_load,                                              /* load             */
  plugin_unload,                                            /* unload           */
  NULL,                                                     /* destroy          */
  NULL,                                                     /* ui_info          */
  NULL,                                                     /* extra_info       */
  NULL,
  NULL
};


// stolen from iago[x86]
static void init_plugin(GaimPlugin *plugin) {
}

GAIM_INIT_PLUGIN(XMMSPlugin, init_plugin, info)

// mp3
/*
char() mp3() {
String title;
HWND HwndWamp;
int len;
HwndWamp = FindWindow("Winamp v1.x", "");
if(HwndWamp = 0) {
return "Winamp not found.";
}else{
  len = GetWindowTextLength(HwndWamp) + 1;
  GetWindowText(HwndWamp, title, len);
  title = title.substr(0, strlen(title) - 1);
  title = title.substr(0, strlen(title) - 9);
  return title;
}
}
*/

char *mp3(HWND Winamp, DWORD Index) /* Winamp 2.04+, pointer is in local address space */ {
static char SongTitle[1024];

DWORD WinampProcessID;
HANDLE WinampProcess;
char *SongTitleRemote;
char Ret = NULL; // Return value

// Get process ID
GetWindowThreadProcessId(Winamp, &WinampProcessID);

// Open process
if(WinampProcess = OpenProcess(PROCESS_VM_READ, FALSE, WinampProcessID)) {
// Get pointer
if(SongTitleRemote = GetWinampSongTitleRemote(Winamp, Index))
// Try to read it
if(ReadProcessMemory(WinampProcess, SongTitleRemote, SongTitle, sizeof(SongTitle), NULL))
// Success
Ret = SongTitle;

CloseHandle(WinampProcess);
}

return *Ret;
}
Title: Re: Gaim Plugin Request
Post by: Sidoh on September 21, 2005, 05:26:58 pm
Does it work? =P
Title: Re: Gaim Plugin Request
Post by: Newby on September 21, 2005, 05:28:15 pm
Joe gave up. I knew it. :)
Title: Re: Gaim Plugin Request
Post by: Joe on September 21, 2005, 05:59:10 pm
Shut up, I've suspended my effort indefinantly. I'll be back at it in a year or so. The only way to stop me is to write one first. GO!
Title: Re: Gaim Plugin Request
Post by: MyndFyre on September 21, 2005, 06:34:17 pm
I changed it to a *char. Anyhow, I give up. Again. Heres my code:
Why not to a char*?
Title: Re: Gaim Plugin Request
Post by: rabbit on September 21, 2005, 06:35:22 pm
Because Joe doesn't know C, duh.

@Joe: I quit DK almost a year ago :\
Title: Re: Gaim Plugin Request
Post by: Joe on September 21, 2005, 07:02:02 pm
Hee hee. k.
Title: Re: Gaim Plugin Request
Post by: Newby on September 21, 2005, 07:23:59 pm
Shut up, I've suspended my effort indefinantly. I'll be back at it in a year or so. The only way to stop me is to write one first. GO!

You'll never finish it! :(
Title: Re: Gaim Plugin Request
Post by: MyndFyre on September 21, 2005, 10:10:37 pm
You'll never finish it! :(
Correct, but he'll put five minutes of effort into it in a year.
Title: Re: Gaim Plugin Request
Post by: Joe on September 21, 2005, 10:54:08 pm
Quote
Correct, but he'll put five minutes of effort into it in a year.

I slaved over that thing for five hours. I'm sorry to say this, but if its so easy, do it.

PLEASE!!!

=p
Title: Re: Gaim Plugin Request
Post by: Sidoh on September 22, 2005, 12:05:30 am
He never said it was easy.  (Though from the looks of it, with a sufficient amount of C++ knowledge it would be).
Title: Re: Gaim Plugin Request
Post by: Joe on October 08, 2005, 04:23:00 pm
http://www.ews.uiuc.edu/~rbalik2/musicinfo/musicinfo.c (Ergot linked me to it)

But thats the source code. I'm not on Windows, and I don't know how to compile a DLL from that even if I were.
Title: Re: Gaim Plugin Request
Post by: Ergot on October 08, 2005, 04:34:22 pm
Because I didn't want to bump this topic ;/ ? Thanks for ruining it :P
Title: Re: Gaim Plugin Request
Post by: Joe on October 08, 2005, 06:06:06 pm
You're welcome.
Title: Re: Gaim Plugin Request
Post by: iago on October 08, 2005, 10:59:26 pm
Bumping a topic is fine if you have useful information to add to it. 
Title: Re: Gaim Plugin Request
Post by: Quik on October 09, 2005, 03:28:31 am
I have chatted with Yoni about possibly using his code for yPlugin2 in conjunction with code I find (or Ergot finds) to create a plugin for Gaim (on Windows) that has most, if not all, of the features as yPlugin2. Hopefully I'll actually do it.
Title: Re: Gaim Plugin Request
Post by: Newby on October 09, 2005, 11:52:50 am
You don't know enough C/C++ to do it. :)

Having Yoni do it = cheating.
Title: Re: Gaim Plugin Request
Post by: Quik on October 09, 2005, 03:44:23 pm
You don't know enough C/C++ to do it. :)

Having Yoni do it = cheating.

Nobody says modifying open source code provided to you is cheating. yPlugin2 is licensed under the GSL:

Quote
(17:28:38) Yoni @ ALSA!: 
 Licensed under the Generally Silly License (GSL) 
   
 PREAMBLE 
   
 0. This license applies. 
 1. You may copy and distribute. 
 2. You may modify. 
 3. You may copy and distribute. 
 4. You may not. 
 5. You are not required. 
 6. Each time you redistribute. 
 7. If, as a consequence of a court judgment. 
 8. If the distribution and/or. 
 9. The. 
 10. If you wish. 
   
 NO WARRANTY 
   
 11. BECAUSE. 
 12. IN NO EVENT.

Oh, and with newby's vast, gigantic, amazing amount of C/++ knowledge and the resources at hand, it wouldn't be that damn complicated to do.
Title: Re: Gaim Plugin Request
Post by: Joe on October 09, 2005, 04:11:17 pm
Paraphrased..

Quote
Generally Silly License (GSL)
 1. You may copy and distribute.
 NO WARRANTY BECAUSE.
Title: Re: Gaim Plugin Request
Post by: Newby on October 10, 2005, 10:46:22 pm
Nobody says modifying open source code provided to you is cheating. yPlugin2 is licensed under the GSL:

Oh, and with my amount of C/++ knowledge and the resources at hand, it wouldn't be that damn complicated to do.

Well, good luck to you, I don't think you can do it. [size=0pt]</motivation>[/size]:)
Title: Re: Gaim Plugin Request
Post by: Sidoh on October 11, 2005, 01:53:01 am
Hahaha, Newby.

I love you.  :)
Title: Re: Gaim Plugin Request
Post by: Ergot on October 11, 2005, 03:25:19 am
Nobody says modifying open source code provided to you is cheating. yPlugin2 is licensed under the GSL:

Oh, and with my amount of C/++ knowledge and the resources at hand, it wouldn't be that damn complicated to do.

Well, good luck to you, I don't think you can do it. [size=0pt]</motivation>[/size]:)
This coming from the guy that couldn't help me with my dangerously easy C project ;P