Attaching files in windows using Python.
Roger Upole
rupole at hotmail.com
Sat Mar 11 16:35:42 EST 2006
You might want to try using win32gui.GetOpenFileNameW.
It uses keyword arguments and doesn't require that you
build a struct yourself:
win32gui.GetOpenFileNameW(File='myfile.txt', Filter='Texts and scripts\0*.txt;*.py\0Py stuff\0*.py\0')
Roger
"sri2097" <srikar2097 at gmail.com> wrote in message news:1141752053.029483.42540 at p10g2000cwp.googlegroups.com...
> Hi all,
> I have got this far till now -
>
> import win32gui, struct, array, string
>
> OFN_ALLOWMULTISELECT=0x00000200
> OFN_EXPLORER=0x00080000
>
> def arrayToStrings(resultArray):
> """return list-of-strings corresponding to a char array,
> where each string is terminated by \000, and the whole
> list by two adjacent \000 bytes
> """
> astr=resultArray.tostring()
> manyStrings=[]
> # perhaps a loop of string.split would be faster...
> while len(astr) and astr[0]!='\000':
> i=astr.index('\000')
> manyStrings.append(astr[:i])
> astr=astr[i+1:]
> return manyStrings
>
> def szFrom(anarray):
> """return the string-pointer (sz) corresponding to a char
> array, 0 (null pointer) if no array
> """
> if anarray: return anarray.buffer_info()[0]
> else: return 0
>
> def arrayFrom(astring,additional=0):
> """return a char array built from a string, plus 0
> or more \000 bytes as filler
> """
> if not astring: astring=''
> return array.array('c',astring+additional*'\000')
>
> def arrayMulti(stringlist):
> """return a char array built from many strings, each
> separated by a \000 byte, and two \000's at the end
> """
> return arrayFrom(string.join(stringlist,'\000'),2)
>
> def buildOfn(resultarray,filters=None,initdir=None,title=None,
> multisel=1,oldlook=0):
> """build an OPENFILENAME struct as a string, with several
> options and a given result-array for the string[s] that
> will result from the GetOpenFileName call
> """
> flags=OFN_EXPLORER
> if multisel: flags=flags|OFN_ALLOWMULTISELECT
> if oldlook: flags=flags&~OFN_EXPLORER
> szfile,maxfile=resultarray.buffer_info()
> szfilter=szFrom(filters)
> szinitdir=szFrom(initdir)
> sztitle=szFrom(title)
> return struct.pack(
> "3i2P2iPiPi2PI2hPi2P",
> 76, 0, 0, # size, owner-hwnd, hinstance
> szfilter, 0, 0, 0, # filter, custom-filter,
> max-cust-filter,filter-index
> szfile, maxfile, # file, max-file
> 0, 0, # file-title, max-file-title
> szinitdir, sztitle, # initial-dir, dialog-title
> flags, 0, 0, # flags, file-offset, file-extension
> 0, # def-ext
> 0, 0, 0) # cust-data, func-hook, template-name
>
> def openNames(forsave=0,filters=None,initdir=None,title=None,
> initfile=None,multisel=1,oldlook=0):
> """return a list of filenames for open or save, given
> interactively by the user through a common-dialog; if
> more than 1 string is returned, the first is the directory,
> followed by the filenames.
> """
> resultBuffer=arrayFrom(initfile,8192)
> title=arrayFrom(title)
> initdir=arrayFrom(initdir)
> filters=arrayMulti(filters)
> ofn=buildOfn(resultBuffer,filters,initdir,title,multisel,oldlook)
> if forsave: isok=win32gui.GetSaveFileName(ofn)
> else: isok=win32gui.GetOpenFileName(ofn)
> if not isok: return []
> return arrayToStrings(resultBuffer)
>
> def _test():
> return openNames(
> filters=('Texts and scripts','*.txt;*.py','Py stuff','*.py*')
> )
>
> if __name__=='__main__':
> print _test()
>
> But hear the Dialogue_box stops and waits for the user to select a
> file. But Since I have the entire path of the file, How do I pass it to
> the file name to populate the box automatically instead of the user
> manually selecting a file.
>
> Any further help will be appreciated.
>
----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----
http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
----= East and West-Coast Server Farms - Total Privacy via Encryption =----
More information about the Python-list
mailing list