python 代码 转换成 perl

Python/PHP/Perl 开发与设计
回复
头像
asluozijun
帖子: 132
注册时间: 2010-05-05 14:24
送出感谢: 0
接收感谢: 0

python 代码 转换成 perl

#1

帖子 asluozijun » 2010-11-26 0:58

想给windows下的朋友写一个插件....
但是不会perl,
用python写插件,又要安装解释器...
其实只是一个 IRC(xchat for win) + winamp 实现的播放歌曲插件。

PS:其实编译xchat 的时候,里面有自带 winamp.dll 的。可以实现播放歌曲。
但是朋友需要全自动的...
所以,想把 这个python 写的转换成 perl 代码。其实就几行代码:))
谢谢了。


Note:使用了**符号框起来的 可要可不要。:)) :em01

=========================================================================

代码: 全选

###########################################################

## winamp.py

## Python Winamp Controller
##  Example:

##    >>> import winamp

##    >>> w = winamp.winamp()

##    >>> w.getPlayingStatus()

##    'stopped'

##    >>> w.play()

##    >>> w.getPlayingStatus()

##    'playing'

##    >>>
#######################################

import win32gui

import win32api



# wonder why win32 imports dont define these

WM_COMMAND = 0x0111

WM_USER    = 0x400



def voidfunc():

    pass



class winamp:



    winamp_commands = { 'prev'    :40044,

                        'next'    :40048,

                        'play'    :40045,

                        'pause'   :40046,

                        'stop'    :40047,

                        'fadeout' :40157,

                        'forward' :40148,

                        'rewind'  :40144,

                        'raisevol':40058,

                        'lowervol':40059}



    def __init__(self):

        self.hWinamp = win32gui.FindWindow('Winamp v1.x', None)



        iVersionNumber = self.usercommand(0)

        sVersionString = hex(iVersionNumber)

        sVersionString = sVersionString[2:3] + '.' + sVersionString[3:]

        self.sVersion = sVersionString



    def command(self, sCommand):

        if winamp.winamp_commands.has_key(sCommand):

            return win32api.SendMessage(self.hWinamp, WM_COMMAND, winamp.winamp_commands[sCommand], 0)

        else:

            raise 'NoSuchWinampCommand'



    def __getattr__(self, attr):

        self.command(attr)

        return voidfunc



    def usercommand(self, id, data=0):

        return win32api.SendMessage(self.hWinamp, WM_USER, data, id)

        

    def getVersion(self):

        "returns the version number of winamp"

        return self.sVersion



    def getPlayingStatus(self):

        "returns the current status string which is one of 'playing', 'paused' or 'stopped'"

        iStatus = self.usercommand(104)

        if iStatus == 1:

            return 'playing'

        elif iStatus == 3:

            return 'paused'

        else:

            return 'stopped'

    


×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××        

×    def getTrackStatus(self):

×        "returns a tuple (total_length, current_position) where both are in msecs"

×        iTotalLength = self.usercommand(105, 1) * 1000 # the usercommand returns the number in seconds

×        iCurrentPos  = self.usercommand(105, 0)

×        return (iTotalLength, iCurrentPos)

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××


×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
×   def setCurrentTrack(self, iTrackNumber):

×       "changes the track selection to the number specified"        

×        return self.usercommand(121, iTrackNumber)


×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××


×    def getCurrentTrack(self):

×        return self.usercommand(125)


×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××



#获取正在收听的歌曲名字。
    def getCurrentTrackName(self):

        return win32gui.GetWindowText(self.hWinamp)




    def dumpList(self):

        "dumps the current playlist into WINAMPDIR/winamp.m3u"

        return self.usercommand(120)











############################################
##上面是控制winamp 的。
###############################################
#下面是输出到 xchat的。

import xchat

Xchat::hook_command("np","np");

w = winamp()
nowplaying = ''

#判断winamp是否播放。如果是就在xchat 输出 歌曲名。
def run():
	while 1:
		status = w.getPlayingStatus()
		if status == 'stopped' or status == 'paused':
			return
		elif status == 'playing':
			nowplay = w.getCurrentTrackName()
                        #判断这首歌曲和上面一首歌曲是不是重复。
                        if nowplay == nowplaying:
                                return
                        nowplaying = nowplay
			npsong(nowplaying)
		else:
			break

#在xchat输出。
def npsong(nowplaying):
	xchat.command("ME is listening to   %s " % (nowplaying)

def np(nowplaying):
	status = w.getPlayingStatus()
	
	if status == 'stopped' or status == 'paused':
		print 'Winamp 没有播放音乐。请播放。'
	elif status == 'playing':
		nowplaying = w.getCurrentTrackName()
		xchat.command("ME is listening to   %s " % (nowplaying)
	else:
		print '代码错误...请联系作者。Email:asluozijun@gmail.com   谢谢。'



==================================================
谢谢了。
小博客,欢迎光临!http://zhonghe.co.de
有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞
头像
asluozijun
帖子: 132
注册时间: 2010-05-05 14:24
送出感谢: 0
接收感谢: 0

Re: python 代码 转换成 perl

#2

帖子 asluozijun » 2010-11-26 1:01

如果大家时间忙,带 * 符号的 就不要翻译了哦。

那几个功能不重要的。

重要的是获取歌曲名字,然后 发送给 xchat:)))

由于没有windows,也没去测试..
应该没有问题的吧??
呵呵

:em01
小博客,欢迎光临!http://zhonghe.co.de
有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞
Kabie
帖子: 26
注册时间: 2008-12-16 14:31
送出感谢: 0
接收感谢: 0

Re: python 代码 转换成 perl

#3

帖子 Kabie » 2010-11-26 21:44

perl不也一样要解释器么。。。。

python用cx_Freeze打包做成exe就好了。。
回复

回到 “Python/Php/Perl”