Kleines absolut mieses Programm um Programmierer zu ärgern, die noch mit XProfan unter Windows7 arbeiten:
Code
'#####################################################################################
'######### Code von AHT #########
'######### Gepostet für http://www.paules-pc-forum.de #########
'#####################################################################################
Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot"
Def Process32First(2) !"Kernel32", "Process32First"
Def Process32Next(2) !"Kernel32", "Process32Next"
Def CloseHandle(1) !"Kernel32", "CloseHandle"
Def GetWindowThreadProcessId(2) !"User32", "GetWindowThreadProcessId"
Def GetLastError(0) !"Kernel32", "GetLastError"
Def EnumDesktopWindows(3) !"USer32", "EnumDesktopWindows"
DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Def GetCurrentProcessId(0) !"Kernel32", "GetCurrentProcessId"
Declare Function$, Module$, ModHandle%, CallAddress&, Handle1%
Declare Entry#, err&, SnapHandle%, cpid&, ProcessName$, PHandle%, Filename#
Declare UNICODE_STRING#, processIdInfo#, uBuffer#, aBuffer#, PID&
Declare Counter!, SearchedPID&, AllPID$, AltesFenster%
Declare edit%, Button%, Started&, Processes$, ListBox%
DECLARE OSversionInfoU#
Struct OSversionInfoU = dwOSVersionInfoSize&, dwMajorVersion&, dwMinorVersion&, dwBuildNumber&, dwPlatformId&, szCSDVersion$(256), wServicePackMajor%, wServicePackMinor%, wSuiteMask%, wProductType#(1), wReserved#(1)
Struct PROCESSENTRY32=dwSize&, \
cntUsage&, \
th32ProcessID&, \
th32DefaultHeapID&, \
th32ModuleID&, \
Threads&, \
th32ParentProcessID&, \
pcPriClassBase&, \
dwFlags&, \
szExeFile$(260)
Dim Entry#,PROCESSENTRY32
DIM OSversionInfoU#, OSversionInfoU
Entry#.dwSize& = SizeOf(Entry#)
OSversionInfoU#.dwOSVersionInfoSize& = SizeOf(OSversionInfoU#)
AllPID$ = ","
AltesFenster% = 0
Proc EnumWindowsProc
Parameters Hauptfenster%, LParam&
Declare ToRet&
GetWindowThreadProcessId(Hauptfenster%, addr(SearchedPID&))
ToRet& = 1
If (SearchedPID& = LParam&)
AddString(ListBox%, " Fenster gefunden mit Handle " + str$(Hauptfenster%))
If CallAddress& <> 0
If External("User32","FrostCrashedWindow", Hauptfenster%, %HWND)
AddString(ListBox%, " Fenster eingefroren mit Handle " + str$(Hauptfenster%))
AllPID$ = AllPID$ + str$(LParam&) + ","
else
endif
endif
endif
AltesFenster% = Hauptfenster%
Return ToRet&
endproc
Proc HoleProzesse
SnapHandle% = CreateToolhelp32Snapshot(2, 0)
If SnapHandle%
err& = Process32First(SnapHandle%, Entry#)
If err&
PID& = Entry#.th32ProcessID&
ProcessName$ = Upper$(Entry#.szExeFile$)
If (instr("," + ProcessName$ + ",", Processes$) <> 0) and (PID& <> GetCurrentProcessId())
If InStr("," + str$(PID&) + ",", AllPID$) = 0
AddString(ListBox%, "Prozess '" + ProcessName$ + "' mit PID " + str$(PID&) + " gefunden!")
EnumDesktopWindows(0, ProcAddr("EnumWindowsProc", 2), Pid&)
endif
endif
Repeat
err& = Process32Next(SnapHandle%, Entry#)
If err&
PID& = Entry#.th32ProcessID&
ProcessName$ = Upper$(Entry#.szExeFile$)
If (instr("," + ProcessName$ + ",", Processes$) <> 0) and (PID& <> GetCurrentProcessId())
If InStr("," + str$(PID&) + ",", AllPID$) = 0
AddString(ListBox%, "Prozess '" + ProcessName$ + "' mit PID " + str$(PID&) + " gefunden!")
EnumDesktopWindows(0, ProcAddr("EnumWindowsProc", 2), Pid&)
endif
endif
EndIf
Until err& = 0
CloseHandle(SnapHandle%)
EndIf
EndIf
EndProc
Started& = 0
Module$ = "User32"
ModHandle% = External("kernel32","GetModuleHandleA", addr(Module$))
Function$ = "FrostCrashedWindow"
CallAddress& = External("kernel32","GetProcAddress",ModHandle%, addr(Function$))
External("ntdll.dll", "RtlGetVersion", OSversionInfoU#)
If val(str$(OSversionInfoU#.dwMajorVersion&) + "." + str$(OSversionInfoU#.dwMinorVersion&)) > 6.1
MessageBox("Auf dieser Windowsversion funktioniert das Programm nicht!", "Fehler!", 16)
End
endif
If CallAddress& <= 0
MessageBox("Auf dieser Windowsversion funktioniert das Programm nicht!", "Fehler!", 16)
End
endif
Windowstyle 31 + 512
Windowtitle "ProgFreezer"
Window 0,0 - 640, 480
Usermessages $10
Edit% = Create("Edit", %HWND, "FRST.EXE,FRST64.exe,PROFAN.EXE", 30, 20, 400, 25)
Button% = Create("Button", %HWND, "Einfrieren!", 440, 20, 100, 25)
Listbox% = Create("ListBox", %HWND, "", 30, 80, 510, 250)
While %Umessage <> $10
Sleep 100
If Started& = 0
If ButtonClicked(Button%)
Started& = 1
SetMenuitem 0
Processes$ = "," + Upper$(GetText$(Edit%)) + ","
EnableWindow Button%, 0
EnableWindow Edit%, 0
ShowMin
endif
endif
If Started& = 1
HoleProzesse
endif
Wend
Alles anzeigen
Echt merkwürdig, was Microsoft so alles an APIs in sein Betriebssystem einbaut (FrostCrashedWindow)...
Geht zum Glück scheinbar nicht mehr ab Windows8 so einfach.