Thks Tim Roberts for your explanation, I'll try it with version 2.2.1
Regards KM On Thu, Apr 30, 2009 at 8:46 PM, <[email protected]> wrote: > Send python-win32 mailing list submissions to > [email protected] > > To subscribe or unsubscribe via the World Wide Web, visit > http://mail.python.org/mailman/listinfo/python-win32 > or, via email, send a message with subject or body 'help' to > [email protected] > > You can reach the person managing the list at > [email protected] > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of python-win32 digest..." > > > Today's Topics: > > 1. Re: Extract icon from exe files (Nicolas EISEN) > 2. Re: PythonWin IDE: how to assign a function/code to key F1 > etc. ? (Robert) > 3. gpedit reload method in python (le dahut) > 4. Re: Retrieve informations from NIST file. (Tim Roberts) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Thu, 30 Apr 2009 17:11:39 +0200 > From: Nicolas EISEN <[email protected]> > Subject: Re: [python-win32] Extract icon from exe files > To: Python-Win32 List <[email protected]> > Message-ID: <[email protected]> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed > > Tim Roberts a ?crit : > > EISEN Nicolas wrote: > > > >>> > >>> > >> I'm lucky, I found ... > >> > >> My Source : > >> > >> /from win32gui import * > >> import win32con > >> from pywintypes import HANDLE > >> import win32ui > >> listHicon = ExtractIconEx("c:\OpenOffice.exe",0) > >> tupleIcon = GetIconInfo (HANDLE ( listHicon[0][0] ) ) > >> > >> bitmapColor = tupel [4] > >> > >> picture = win32ui.CreateBitmap() > >> buffer = picture.GetBitmapBits ( bitmapColor ) > >> / > >> > >> Python return : > >> /win32ui.error: GetObject failed on bitmap/ > >> for the last line > >> > >> win32ui have CreateBitmap with 0 argument and GetBitmapBits with 1 > >> arguments > >> but win32gui have CreateBitmap with 5 arguments and GetBitmapBits have > >> 2 arguments > >> > > > > Yes. Can't you see why? win32gui is just a thin wrapper around the > > actual Win32 APIs. win32ui is an attempt to turn those APIs into > > something more like Python objects. Objects have access to additional > > state, so you don't have to specify as many parameters. When you call > > picture.GetBitmapBits( bitmapColor ) > > > > That's getting the pixels from the bitmap you just created. The > > parameter it takes is the number of bytes is should copy (so you're > > passing garbage). Your bitmap doesn't contain anything yet -- you > > haven't even set the size -- so naturally the GetBitmapBits call fails. > > > > You need to do EXACTLY what the demo does. Create a bitmap, set its > > size, then draw the icon on the bitmap, THEN pull the bits from the > > bitmap. The icon doesn't actually contain bitmaps. It contains arrays > > of pixels, but you need them to be a bitmap. > > > > > > > >> On the demo, hicon is use ton create the variable nid and re use it to > >> display on the screen, but i want get only the bitmap bits. > >> > > > > I'm not sure why you think these two things are different. The way you > > get the bitmap bits is to draw the icon on a bitmap. > > > > > > With demo_menu, I script it : > > /from win32gui import */ > /import win32con/ > /from win32api import GetSystemMetrics/ > > > /ico_x = GetSystemMetrics(win32con.SM_CXSMICON)/ > /ico_y = GetSystemMetrics(win32con.SM_CYSMICON)/ > > /large, small = ExtractIconEx("c:\dxdiag.exe",0)/ > /hicon = small[0]/ > /print type(hicon)/ > /DestroyIcon(large[0])/ > > /#creating a source memory DC and selecting a icon in it/ > /srcDC = CreateCompatibleDC(0)/ > /SelectObject(srcDC,hicon);/ > > /#creating a destination memory DC and selecting a memory bitmap to it/ > /hdcBitmap = CreateCompatibleDC(0)/ > /hdcScreen = GetDC(0)/ > /hbm = CreateCompatibleBitmap(hdcScreen, ico_x, ico_y)/ > /SelectObject(hdcBitmap, hbm)/ > > /# copies source DC to memory DC resulting in a copy of hicon in hbm/ > /BitBlt(hdcBitmap,0,0,ico_x,ico_y,srcDC,0,0,win32con.SRCCOPY);/ > > /bitmap = CreateBitmapFromHandle(hbm)/ > /hbm.SaveBitmapFile()/ > > /DeleteDC(srcDC);/ > /DeleteDC(hdcBitmap); > / > > > I suppose, I have my icon picture on the Bitmap /hbm/ but how I get > file's bits or how I save it ? > > There are SaveBitmapFile or GetBitmapBits methods on win32ui (PyCBitmap) > but I test many disposition, I have always type problem between win32gui > and win32ui objects. > I try to use win32gui DC with icon and win32ui DC with bitmap, but > always the type doesn't work : PyHandle (win32gui) is different from > PyBitmap (win32ui). > > Please Help ! I 'm tired ... > > > ------------------------------ > > Message: 2 > Date: Thu, 30 Apr 2009 17:37:48 +0200 > From: Robert <[email protected]> > Subject: Re: [python-win32] PythonWin IDE: how to assign a > function/code to key F1 etc. ? > To: [email protected] > Message-ID: <[email protected]> > Content-Type: text/plain; charset="iso-8859-1"; Format="flowed" > > Mark Hammond wrote: > > Robert wrote: > >> want to put new functions (short python code) on keys like F1, F12, > >> Ctrl-F1 and other keys. > >> Is there a mechanism/recipe ? > > > > > > Look for the *.cfg files in the pythonwin directory. > > > > Thanks. > > maybe some of the following stuff is useful for somebody, or for > future PythonWin default: > > In attachment a patch for pywin/default.cfg, which does context > (word) sensitive help from editor into Python Help and PythonWin Help > > F1 = HelpPy > Ctrl+F1 = HelpPyWin > .. > > and allows for faster edit-run cycle: running/interacting with > (auto-unindented) selected code lines from editor > > Ctrl+K = Interact_SelectedLines > Ctrl+E = ExecGlobal_SelectedLines > > ( the little patch of scintilla/config.py enables correct line > numbers for traceback and debugging of code in default.cfg ) > > - > > Also CtrlEnter.patch (-> framework/interact.py), which enables > ad-hoc debugging from interactive pane (Ctrl-Enter) into an > interactive statement (without long-winded F5 running into > breakpoints etc). I did not put the code into default.cfg, because > a lot of pre-processing code is shared with normal interactive > statement execution. > > > Robert > -------------- next part -------------- > An embedded and charset-unspecified text was scrubbed... > Name: cfg.patch > URL: < > http://mail.python.org/pipermail/python-win32/attachments/20090430/c26cfe43/attachment-0002.txt > > > -------------- next part -------------- > An embedded and charset-unspecified text was scrubbed... > Name: CtrlEnter.patch > URL: < > http://mail.python.org/pipermail/python-win32/attachments/20090430/c26cfe43/attachment-0003.txt > > > > ------------------------------ > > Message: 3 > Date: Thu, 30 Apr 2009 17:30:48 +0200 > From: le dahut <[email protected]> > Subject: [python-win32] gpedit reload method in python > To: [email protected] > Message-ID: <[email protected]> > Content-Type: text/plain; charset=ISO-8859-15; format=flowed > > Hello, > > "gpedit.msc" can change several parameters in system for example items > in start menu or hidden drives in explorer. The changes made in "gpedit" > are immediately applied, if you have "My computer" opened you can see > selected letters disappear. > I know that "gpedit" modifies > HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDrives. > But I don't know how "gpedit" updates the system, what sort of system > call is done. > > I've already tried : > win32gui.SendMessage(win32con.HWND_BROADCAST, > win32con.WM_SETTINGCHANGE, 0, 'Environment') > and the commande : > RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters ,1 ,True > without success. > > Does someone know more about this ? > Are there other API calls that update the system ? > > > K. > > > > ------------------------------ > > Message: 4 > Date: Thu, 30 Apr 2009 09:46:19 -0700 > From: Tim Roberts <[email protected]> > Subject: Re: [python-win32] Retrieve informations from NIST file. > To: Python-Win32 List <[email protected]> > Message-ID: <[email protected]> > Content-Type: text/plain; charset=ISO-8859-1 > > Khalid Moulfi wrote: > > > > thanks for your quick answer. > > Here is a sample of the first line of the NIST file : > > > > 1.001:0000000245 1.002:3000 1.003:1 19 2 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 > 8 4 9 4 10 4 11 4 12 4 13 4 14 15 15 15 16 15 17 15 18 1.004:NPS > 1.005:20081029 1.006:4 1.007:51/Live > > Scan 1.008:51/Live Scan 1.009:0844251404U 1.011:19.6850 1.012:19.6850 > 2.001:0000000188 2.002:0 2.003:3000 2.010:1005000190 2.019:20081029 2.029:0 > 2.054:Civilian 2.083:01 NA 02 NA 03 NA 04 NA 05 NA 06 NA 07 NA 08 NA 09 NA > 10 NA 2.233:???? 2.235:1011973400606 > > > > but as the end of the line is not displayed, I send you a copy of the > > file with all the line. > > That's because your file contains null bytes ('\x00'). The string you > display above shows everything up to the first null. > > > > The thing is even if I take the number of character from let's say > > 2.001 to the end of the line I do not get the real number of charatcer. > > What do you mean by that? Where did the numbers come from? The file > contains one line of 471 bytes, including the newline. Does that agree > with either of your sources? > > > > My goal is to modify this first line by adding new tag (with special > > character), suppress some of them, get the real number of length and > > after all this update to modify it in the original nst file. > > > > I'll try as you said to open it with rb parameters and see. > > You will have to show me your code, along with what numbers you expect. > The file you sent is 471 bytes long, and that's exactly what I read, in > both text and binary modes: > > C:\tmp>python > Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit > (Intel)] on win32 > Type "help", "copyright", "credits" or "license" for more information. > >>> x = open('sample_1005000190.nst') > >>> y = open('sample_1005000190.nst', 'rb') > >>> x1 = x.read() > >>> y1 = y.read() > >>> len(x1) > 471 > >>> len(y1) > 471 > >>> x1.find('2.001') > 245 > >>> x1[-2:] > '\x00\n' > >>> y1[-2:] > '\x00\n' > >>> x.seek(0,0) > >>> x2 = x.readlines() > >>> len(x2) > 1 > >>> len(x2[0]) > 471 > >>> > > The "2.001" is located at byte 245, so there should are 126 bytes from > there to the end of the line. However, there are zero bytes (meaning > '\x00') in this file, which might be confusing you. > > You have to know something about this data format to know how to modify > it. It looks like the file consists of two major sections, separated by > 0x1C characters. The major sections are then divided into records > separated by 0x1D characters. Some of the records have fields in them, > separated by 0x1E. There are 38 bytes of what look like garbage after > the last field. So, you could parse it into records like this: > > Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit > (Intel)] on win32 > Type "help", "copyright", "credits" or "license" for more information. > >>> x = open('sample_1005000190.nst','rb').read() > >>> sections = x.split('\x1c') > >>> len(sections) > 3 > >>> [len(k) for k in sections] > [244, 187, 38] > >>> rec1 = sections[0].split('\x1d') > >>> rec2 = sections[1].split('\x1d') > >>> len(rec1) > 11 > >>> len(rec2) > 10 > >>> rec1 > ['1.001:0000000245', '1.002:3000', > '1.003:1\x1f19\x1e2\x1f0\x1e4\x1f1\x1e4\x1f2\ > > > x1e4\x1f3\x1e4\x1f4\x1e4\x1f5\x1e4\x1f6\x1e4\x1f7\x1e4\x1f8\x1e4\x1f9\x1e4\x1f10 > > > \x1e4\x1f11\x1e4\x1f12\x1e4\x1f13\x1e4\x1f14\x1e15\x1f15\x1e15\x1f16\x1e15\x1f17 > \x1e15\x1f18', '1.004:NPS', '1.005:20081029', '1.006:4', > '1.007:51/Live Scan', ' > 1.008:51/Live Scan', '1.009:0844251404U', '1.011:19.6850', > '1.012:19.6850'] > >>> rec2 > ['2.001:0000000188', '2.002:0', '2.003:3000', '2.010:1005000190', > '2.019:2008102 > 9', '2.029:0', '2.054:Civilian', > '2.083:01\x1fNA\x1e02\x1fNA\x1e03\x1fNA\x1e04\x > > > 1fNA\x1e05\x1fNA\x1e06\x1fNA\x1e07\x1fNA\x1e08\x1fNA\x1e09\x1fNA\x1e10\x1fNA', > ' > 2.233:\xc8\xcf\xe6\xe4', '2.235:1011973400606'] > >>> > > > Here, "sections" contains the three major sections. "rec1" contains the > records from the first section. If you wanted to add a "1.013" record > to the first section, you could say: > rec1.append( "1.013:Cool Beans" ) > and then rebuild the file by saying: > newsections = ['\x1d'.join(rec1), '\x1d'.join(rec2), sections[2]] > open('newfile.nst','wb').write ('\x1c'.join(newsections) ) > > But that assumes there's nothing in that garbage 3rd section that needs > to be changed. > > It's just a matter of dividing the problem up into smaller problems > until the solution pops out. > > -- > Tim Roberts, [email protected] > Providenza & Boekelheide, Inc. > > > > ------------------------------ > > _______________________________________________ > python-win32 mailing list > [email protected] > http://mail.python.org/mailman/listinfo/python-win32 > > > End of python-win32 Digest, Vol 73, Issue 32 > ******************************************** >
_______________________________________________ python-win32 mailing list [email protected] http://mail.python.org/mailman/listinfo/python-win32
