Avdump GUI: Difference between revisions

3,738 bytes added ,  13 November 2007
no edit summary
No edit summary
Line 4: Line 4:
==Changelog==
==Changelog==
<pre>
<pre>
v1.05 - 13.11.2007
thx to rar for fixing dumping of files with characters in non local codepage
  v1.04 - 10.11.2007
  v1.04 - 10.11.2007
  fix for not being able to dump files with japanese characters in the filename
  fix for not being able to dump files with japanese characters in the filename
Line 29: Line 32:


<pre  style="font-size: 60%;">
<pre  style="font-size: 60%;">
import wx,os,subprocess
import wx,os,subprocessw,sys


class mainFrame(wx.Frame):
class mainFrame(wx.Frame):
Line 81: Line 84:
         dialog.Destroy()
         dialog.Destroy()
         self.filepath.write(path)
         self.filepath.write(path)
         self.__options['scanpath'] = path.encode("cp932")
         self.__options['scanpath'] = path


     def startClick(self, event):
     def startClick(self, event):
Line 106: Line 109:
             '''debug option to see what avdump actually get's fed'''
             '''debug option to see what avdump actually get's fed'''
             #self.child.info(('%s%s -ac:%s:%s %s') %(self.__options['avdump'], self.__options['param'], self.__options['user'], self.__options['pass'], self.__options['scanpath']))
             #self.child.info(('%s%s -ac:%s:%s %s') %(self.__options['avdump'], self.__options['param'], self.__options['user'], self.__options['pass'], self.__options['scanpath']))
             subprocess.call(('%s%s -ac:%s:%s %s') %(self.__options['avdump'], self.__options['param'], self.__options['user'], self.__options['pass'], self.__options['scanpath']))
             arg = (u'%s%s -ac:%s:%s %s') %(self.__options['avdump'], self.__options['param'], self.__options['user'], self.__options['pass'], self.__options['scanpath'])
            print arg
            subprocessw.Popen(arg)


     def optionsClick(self, event):
     def optionsClick(self, event):
Line 365: Line 370:
     app = App(True)
     app = App(True)
     app.MainLoop()
     app.MainLoop()
</pre>
<pre  style="font-size: 60%;">
import subprocess
from subprocess import call, PIPE, STDOUT, list2cmdline, mswindows, STARTF_USESTDHANDLES
import ctypes
import ctypes.wintypes
CreateProcessW = ctypes.windll.kernel32.CreateProcessW
CloseHandle = ctypes.windll.kernel32.CloseHandle
__all__ = ["Popen", "PIPE", "STDOUT", "call"]
class STARTUPINFOW(ctypes.Structure):
_fields_ = (("cb", ctypes.wintypes.DWORD), # should init to 17*4 maybe?
("lpReserved", ctypes.wintypes.LPWSTR),
("lpDesktop", ctypes.wintypes.LPWSTR),
("lpTitle", ctypes.wintypes.LPWSTR),
("dwX", ctypes.wintypes.DWORD),
("dwY", ctypes.wintypes.DWORD),
("dwXSize", ctypes.wintypes.DWORD),
("dwYSize", ctypes.wintypes.DWORD),
("dwXCountChars", ctypes.wintypes.DWORD),
("dwYCountChars", ctypes.wintypes.DWORD),
("dwFillAttribute", ctypes.wintypes.DWORD),
("dwFlags", ctypes.wintypes.DWORD),
("wShowWindow", ctypes.wintypes.WORD),
("cbReserved2", ctypes.wintypes.WORD),
("lpReserved2", ctypes.wintypes.LPSTR), # actually LPBYTE
("hStdInput", ctypes.wintypes.HANDLE),
("hStdOutput", ctypes.wintypes.HANDLE),
("hStdError", ctypes.wintypes.HANDLE))
class PROCESS_INFORMATION(ctypes.Structure):
_fields_ = (("hProcess", ctypes.wintypes.HANDLE),
("hThread", ctypes.wintypes.HANDLE),
("dwProcessId", ctypes.wintypes.DWORD),
("dwThreadId", ctypes.wintypes.DWORD))
class Popen(subprocess.Popen):
"""def __init__(self, args, bufsize=0, executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=False, shell=False,
cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0):
print "BOOM"
subprocess.Popen.__init__(self, args, bufsize, executable,
stdin, stdout, stderr, preexec_fn, close_fds, shell,
cwd, env, universal_newlines, startupinfo, creationflags)"""
if mswindows:
def _execute_child(self, args, executable, preexec_fn, close_fds,
cwd, env, universal_newlines,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite):
if not isinstance(args, basestring):
args = list2cmdline(args)
if not isinstance(args, unicode):
subprocess.Popen._execute_child(self, args, executable,
preexec_fn, close_fds, cwd, env, universal_newlines,
startupinfo, creationflags, shell, p2cread, p2cwrite,
c2pread, c2pwrite, errread, errwrite)
return
default_startupinfo = STARTUPINFOW()
if startupinfo == None:
startupinfo = default_startupinfo
else:
raise NotImplementedError("Can't pass startup stuff")
if not None in (p2cread, c2pwrite, errwrite):
raise NotImplementedError("Can't pass file object bits")
startupinfo.dwFlags |= STARTF_USESTDHANDLES
startupinfo.hStdInput = p2cread #.Detatch()
startupinfo.hStdOutput = c2pwrite
startupinfo.hStdError = errwrite
if shell:
raise NotImplementedError("Can't pick your own shell for unicode args")
margs = ctypes.create_unicode_buffer(args)
processinfo = PROCESS_INFORMATION()
CreateProcessW(executable, margs,
None, None,
1,
creationflags,
env, cwd,
ctypes.byref(startupinfo), ctypes.byref(processinfo))
hp, ht, pid, tid = (processinfo.hProcess, processinfo.hThread,
processinfo.dwProcessId, processinfo.dwThreadId)
# can't wrap this as a _subprocess_handle so scuppered, need sp_handle_new()
self._handle = hp
self.pid = pid
CloseHandle(ht) # ht.Close()
if p2cread != None:
p2cread.Close()
if c2pwrite != None:
c2pwrite.Close()
if errwrite != None:
errwrite.Close()
</pre>
</pre>


[[Category:Avdump]]
[[Category:Avdump]]
MediaWiki spam blocked by CleanTalk.
MediaWiki spam blocked by CleanTalk.