| |
|
|
- Página 1 - |
|
 | ¡Hola Profaner...
Yo necesidad bajo möglichst allen 32BIt Windowssystemen (va no bajo NT4) el Rückgaben de el Editbox para el unten stehenden Ver código fuente. Lo va a Aufdeckung uno "Fehlers" en el MSDN Documentación. Yo habe ya algo länger el Verdacht, dass como irgendetwas bastante y nada stimmt.... KompilierenMarcaSeparaciónDef @GetWindowThreadProcessId(2) !"USER32","GetWindowThreadProcessId"
Def @CreateToolhelp32Snapshot(2) !"kernel32","CreateToolhelp32Snapshot"
Def @Heap32ListNext(2) !"kernel32","Heap32ListNext"
Def @Heap32ListFirst(2) !"kernel32","Heap32ListFirst"
Def @Heap32Next(1) !"kernel32","Heap32Next"
Def @Heap32First(3) !"kernel32","Heap32First"
Def @CloseHandle(1) !"KERNEL32","CloseHandle"
Def @GetLastError(0) !"KERNEL32","GetLastError"
Def @GetVersionEx(1) !"KERNEL32","GetVersionExA"
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Declare Fenster&, PROCESSID#, ThreadID&, PROCESSID&, HEAPLIST32#, Result_HL&, hSnapshot&, HeapCount%
Declare HEAPENTRY32#, HeapBlockCount%, Result2&, Zwischenmerker&, Heap_Handle_LIST%, Zwischenmerker$
Declare WinVer&, Winver$, OS#
Struct HEAPLIST32 = LISTdwsize&, Listth32ProcessID&, LISTth32HeapID&, dwLISTFlags&
Struct HEAPENTRY32 = HEdwsize&, hHandle&, dwAddress&, dwBlockSize&, dwFlags&, dwLockCount&, dwResvd&, HEth32ProcessID&, HEth32HeapID&
Struct OSVERSIONINFO = dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)
Proc ?_GetWinVersion
Parameters ServicePack%
Declare ServicePack$
Windows-Version ermitteln
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Dim OS#,OSVERSIONINFO
OS#.dwOSVersionInfoSize& = 148
External("Kernel32","GetVersionExA",OS#)
LET Winver& = 100
LET ServicePack$ = " ("+OS#.szCSDVersion$+")"
If OS#.dwPlatformId& = &Ver_Platform_Win32_Windows
If OS#.dwMajorVersion& = 4
Case OS#.dwMinorVersion& = 0 : Winver& = 1
Case OS#.dwMinorVersion& = 10 : Winver& = 2
Case OS#.dwMinorVersion& = 90 : Winver& = 3
Endif
ElseIf OS#.dwPlatformId& = &Ver_Platform_Win32_NT
Case OS#.dwMajorVersion& = 3 : Winver& = 4
Case OS#.dwMajorVersion& = 4 : Winver& = 5
IF @and(OS#.dwMajorVersion& = 5,OS#.dwMinorVersion& <> 2)
LET Winver& = 6
Elseif @and(OS#.dwMajorVersion& = 5,OS#.dwMinorVersion& = 2)
LET Winver& = 8
endif
IF @and(OS#.dwMajorVersion& = 6,OS#.dwMinorVersion& = 0)
LET Winver& = 9
endif
Case OS#.dwMinorVersion& = 1 : Winver& = 7
Endif
Dispose OS#
case WinVer& = 1: Let Winver$ = "Windows95"
case WinVer& = 2: Let Winver$ = "Windows98"
case WinVer& = 3: Let Winver$ = "WindowsME"
case WinVer& = 4: Let Winver$ = "WindowsNT 3.5"
case WinVer& = 5: Let Winver$ = "WindowesNT 4"
case WinVer& = 6: Let Winver$ = "Windows2000"
case WinVer& = 7: Let Winver$ = "WindowsXP"
case WinVer& = 8: Let Winver$ = "Windows Server 2003"
case WinVer& = 9: Let Winver$ = "WindowsVista oder Longhorn"
case WinVer& = 100: Let Winver$ = "unbekannte Windowsversion"
CASE ServicePack% = 1 : Let Winver$ = Winver$ + ServicePack$
EndProc
@winexec("WRITE.EXE", 1)
Sleep 500
LET Fenster& = @FindWindow("Dokument - ")
DIM PROCESSID#, 4
LET ThreadID& = @GetWindowThreadProcessId(Fenster&, PROCESSID#)
LET PROCESSID& = @Long(PROCESSID#, 0)
Dispose PROCESSID#
Dim HEAPLIST32#, HEAPLIST32
Dim HEAPENTRY32#, HEAPENTRY32
Clear HEAPLIST32#
LET Heap_Handle_LIST% = 1
HEAPLIST32#.LISTdwsize& = 16
LET hSnapshot& = @CreateToolhelp32Snapshot($1, ProcessID&)
IfNot hSnapshot& = -1
Clearlist
?_GetWinVersion 1
Addstring "Windowsversion: "+Winver$
LET Result_HL& = @Heap32ListFirst(hSnapshot&, HEAPLIST32#)
While Result_HL& = 1
Clear HEAPENTRY32#
HEAPENTRY32#.HEdwsize& = 36
INC HeapCount%
Clear HeapBlockCount%
Addstring "____________________________"
LET Result2& = @Heap32First(HEAPENTRY32#, ProcessID&, HEAPLIST32#.Listth32HeapID&)
LET Zwischenmerker& = HEAPLIST32#.dwLISTFlags&
Addstring "Daten des "+@STR$(HEAPCOUNT%)+".Heaps"
Addstring "Heapflags: $"+@HEX$(Zwischenmerker&)
IF Heap_Handle_LIST% = 1
IF Result2& = 1
Addstring "Handle im Prozess: "+@STR$(HEAPENTRY32#.hHandle&)
Addstring "Toolhelp-ID des Heaps: "+@STR$(HEAPLIST32#.LISTth32HeapID&)
Else
Addstring "Handle im Prozess: "+@STR$(HEAPLIST32#.LISTth32HeapID&)
endif
IF @or(Zwischenmerker&, $2) = Zwischenmerker&
Addstring "Speicherstatus: "+"Heap kann wachsen"
LET Zwischenmerker& = Zwischenmerker&-$2
else
Addstring "Speicherstatus: "+"Größe beschränkt"
Endif
IF @or(Zwischenmerker&, $1) = Zwischenmerker&
Addstring "Speicherverwaltung: "+"Kein gleichzeitiger Zugriff mehrerer Threads"
LET Zwischenmerker& = Zwischenmerker&-$1
else
Addstring "Speicherverwaltung: "+"Gleichzeitiger Zugriff mehrerer Threads möglich"
Endif
IF @or(Zwischenmerker&, $4) = Zwischenmerker&
Addstring "Fehlerbehandlung: "+"Meldung einer Zugriffsverletzung bei Fehlern"
LET Zwischenmerker& = Zwischenmerker&-$4
else
Addstring "Fehlerbehandlung: "+"API gibt bei Fehlern 0 zurück"
Endif
else
IF @or(Zwischenmerker&, $1) = Zwischenmerker&
Addstring "Typ: "+"Standard Prozessheap"
LET Zwischenmerker& = Zwischenmerker&-$1
endif
IF @or(Zwischenmerker&, $2) = Zwischenmerker&
Addstring "Speicherverwaltung: "+"Shared Heap"
LET Zwischenmerker& = Zwischenmerker&-$2
endif
endif
IF Zwischenmerker&<>0
Addstring "Nicht erkannte Heapflags: "+"$"+@Hex$(Zwischenmerker&)
endif
While Result2& = 1
INC HeapBlockCount%
Addstring ""
IF Heap_Handle_LIST% = 0
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Handle im Prozess: "+@STR$(HEAPENTRY32#.hHandle&)
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Startadresse: "+@STR$(HEAPENTRY32#.dwAddress&)
Else
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Startadresse: "+@STR$(HEAPENTRY32#.dwAddress&)
endif
Let Zwischenmerker$ = " ("
IF HEAPENTRY32#.dwFlags& = $1
LET Zwischenmerker$ = Zwischenmerker$+"feste Adresse"
ElseIf HEAPENTRY32#.dwFlags& = $2
LET Zwischenmerker$ = Zwischenmerker$+"frei"
ElseIf HEAPENTRY32#.dwFlags& = $4
LET Zwischenmerker$ = Zwischenmerker$+"beweglich"
Else
LET Zwischenmerker$ = Zwischenmerker$+"$"+@HEX$(HEAPENTRY32#.dwFlags&)
endif
Let Zwischenmerker$ = Zwischenmerker$+")"
Addstring @STR$(HEAPCOUNT%)+".Heap "+@Str$(HeapBlockCount%)+".Block Größe / Status: "+@STR$(HEAPENTRY32#.dwBlockSize&)+" Bytes"+Zwischenmerker$
LET Result2& = @Heap32Next(HEAPENTRY32#)
wend
LET Result_HL& = @Heap32ListNext(hSnapshot&, HEAPLIST32#)
wend
@CloseHandle(hSnapshot&)
endif
Dispose HEAPLIST32#
Editbox("Infos encima Heaps de Wordpad", 1)
Und para todos el, el el código así no testen puede, hier el EXE para Downloaden: [...]  |
|
|
| |
|
|
|
| |
|
- Página 1 - |
|
 | Das mi Yo no, lo va en el Handle des Heapblocks. Wordpad muss de paso offen bleiben, a el Editbox kommt. |
|
|
| |
|
|
|
 Nico Madysa | Bitteschön, hier mi Ergebnis: |
|
|
| |
|
|
|
 | Wo son ellos porque? Gerade el brauche Todavía! |
|
|
| |
|
|
|
 | Gracias Nico, Vermutung scheint (si yo mich no irgendwo total verhaspelt habe ) bestätigt. |
|
|
| |
|
|
|
 Nico Madysa | Freut mich para dich. Yo de el Zeug nämlich nix kapiert.  |
|
|
| |
|
|
| |
|
- Página 2 - |
|
|
 | Kurz dijo: Microsoft scheint bajo NT Systemen algo en el API geändert a haben y verschweigt scheinbar esta Änderung seit Windows2000. Diese Änderung betrifft el Toolhelp Estructuras HEAPLIST32 y HEAPENTRY32, el de los APIs Heap32ListFirst, Heap32ListNext Heap32First y Heap32Next genutzt voluntad. Richtet uno se después de el Documentación, bekommt uno falsche Werte. Toll, oder?
Sombrero alguien gegen mi Feststellung algo einzuwenden? |
|
|
| |
|
|
|
 Nico Madysa |
Toll, oder?
Im Hinblick darauf, dass esta Feststellung offensichtlich ironisch gemeint es, tener Yo nichts dagegen einzuwenden.  |
|
|
| |
|
|
|
 | Yo habe me gerade el kompletten Rückmeldungen de Vista (danke Rolf) angesehen. Chaotik sin gleichen - y en el uno dokumentierten API! Wer irgendwie a Loghorn / 2003 kommt - auch su hätte Me gusta el kompletten Rückmeldungen des Quelltextes!
Como se uno porque Programas escribir, si Microsoft dokumentiertes Comportamiento uno API laufend ändert?  (ausführlicher Artikel dazu en meiner Homepage [...] ) |
|
|
| |
|
|
|
 | Usted sollst ebend el SDKs benutzen.  |
|
|
| |
|
|
|
 | Was es como genau a Estructuras? Ist el Erklärung como mejor? |
|
|
| |
|
|
|
 | IF
Usted sollst ebend el SDKs benutzen. 
Sorry, dass Yo nochmals nachfrage: Como genau sieht el Erklärung el Estructuras HEAPLIST32 y HEAPENTRY32 en el SDK a Windows2000 oder XP de? Como MSDN ihre Documentación scheinbar después de el Erscheinen de Vista adaptado ha, gehe Yo en el Augenblick su de, dass como nichts más es. |
|
|
| |
|
|
|
 | Wir reden aneinander vorbei - habe grad una blöderes Problema el Codeanzeige el Nity es futsch.  |
|
|
| |
|
|