W
Wu Nan
[Note: parts of this message were removed to make it a legal post.]
Hi,
I just write a ruby program to change the MSN Now Playing Text,
however it's not working, could anybody check it for me that why it's not
working.
I also wrote it in VC, and it works well.
Here is the codes:
First VC:
#include "stdafx.h"
#include "windows.h"
#include <string.h>
#include <iostream>
int main(int argc, char* argv[])
{
HWND msnui = NULL;
COPYDATASTRUCT msndata;
WCHAR * utf16buffer=L"\\0Music\\01\\0{Lalalalalalal}\\0\\0\\0\\0\\0<file://0Music//01//0%7BLalalalalalal%7D//0//0//0//0//0>
";
msndata.dwData = 0x547;
msndata.lpData = (void*)utf16buffer;
msndata.cbData = lstrlenW(utf16buffer)*2+2;
while (msnui = FindWindowEx(NULL, msnui, "MsnMsgrUIManager", NULL))
{
SendMessage(msnui, WM_COPYDATA, (WPARAM)NULL,(LPARAM)&msndata);
}
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------------------------------
Then Ruby:
require 'Win32API'
require 'dl/import'
require 'dl/struct'
module Win32
extend DL::Importable
dlload 'user32'
CopyData = struct ["DWORD dwData","DWORD cbData","PVOID lpData",]
WM_COPYDATA = 0x004a
#extern "BOOL SendMessage(HWND, UINT, WPARAM, LPARAM)"
findWindow=Win32API.new("user32.dll", "FindWindow", ['P','P'], 'N')
Result=findWindow.call("MsnMsgrUIManager",0)
str ="\\0Music\\01\\0{test}\\0\\0\\0\\0\\0<file://0Music//01//0%7Btest%7D//0//0//0//0//0>
"
ostr = "\0" * 256
multiByteToWideChar =Win32API.new
('kernel32','MultiByteToWideChar',['L','L','P','L','P','L'],'L')
multiByteToWideChar.Call(0,0,str,-1,ostr,128)
#t=(ostr.strip + "\0").unpack("S*").pack("U*")
cds = CopyData.malloc
cds.dwData = 0x547
cds.cbData = 256
cds.lpData = ostr
SendMessage=Win32API.new("user32.dll", "SendMessage", ['L','L','L','P'],
'L')
SendMessage.Call(Result, 0x004a, 0, cds.to_ptr)
end
Hi,
I just write a ruby program to change the MSN Now Playing Text,
however it's not working, could anybody check it for me that why it's not
working.
I also wrote it in VC, and it works well.
Here is the codes:
First VC:
#include "stdafx.h"
#include "windows.h"
#include <string.h>
#include <iostream>
int main(int argc, char* argv[])
{
HWND msnui = NULL;
COPYDATASTRUCT msndata;
WCHAR * utf16buffer=L"\\0Music\\01\\0{Lalalalalalal}\\0\\0\\0\\0\\0<file://0Music//01//0%7BLalalalalalal%7D//0//0//0//0//0>
";
msndata.dwData = 0x547;
msndata.lpData = (void*)utf16buffer;
msndata.cbData = lstrlenW(utf16buffer)*2+2;
while (msnui = FindWindowEx(NULL, msnui, "MsnMsgrUIManager", NULL))
{
SendMessage(msnui, WM_COPYDATA, (WPARAM)NULL,(LPARAM)&msndata);
}
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------------------------------
Then Ruby:
require 'Win32API'
require 'dl/import'
require 'dl/struct'
module Win32
extend DL::Importable
dlload 'user32'
CopyData = struct ["DWORD dwData","DWORD cbData","PVOID lpData",]
WM_COPYDATA = 0x004a
#extern "BOOL SendMessage(HWND, UINT, WPARAM, LPARAM)"
findWindow=Win32API.new("user32.dll", "FindWindow", ['P','P'], 'N')
Result=findWindow.call("MsnMsgrUIManager",0)
str ="\\0Music\\01\\0{test}\\0\\0\\0\\0\\0<file://0Music//01//0%7Btest%7D//0//0//0//0//0>
"
ostr = "\0" * 256
multiByteToWideChar =Win32API.new
('kernel32','MultiByteToWideChar',['L','L','P','L','P','L'],'L')
multiByteToWideChar.Call(0,0,str,-1,ostr,128)
#t=(ostr.strip + "\0").unpack("S*").pack("U*")
cds = CopyData.malloc
cds.dwData = 0x547
cds.cbData = 256
cds.lpData = ostr
SendMessage=Win32API.new("user32.dll", "SendMessage", ['L','L','L','P'],
'L')
SendMessage.Call(Result, 0x004a, 0, cds.to_ptr)
end