150 lines
2.9 KiB
Plaintext
150 lines
2.9 KiB
Plaintext
function SHOW_WINDOWS_PROCESSES(VOID)
|
|
|
|
|
|
* Copyright (c) 2004 by State of the Art Systems Pty. Ltd.
|
|
|
|
* This code may not be resold or distributed without leaving
|
|
|
|
* this Copyright notice attached.
|
|
|
|
|
|
|
|
* Demonstrates the way that Open Insight 32 can
|
|
|
|
* discover what other processes are running under Windows,
|
|
|
|
* listing their primary classes and handles
|
|
|
|
|
|
|
|
/* First, modify STPROC*DLL_USER32 to contain the following
|
|
|
|
lines then RUN DECLARE_FCNS "DLL_USER32" - you'll need to open one instance of OI32 to run this program
|
|
and one other instance to be detected you can the see the class of Open Engine.
|
|
|
|
|
|
|
|
USER32
|
|
|
|
|
|
|
|
HANDLE STDCALL GetDesktopWindow(VOID)
|
|
|
|
HANDLE STDCALL GetWindow(HANDLE, ULONG)
|
|
|
|
LONG STDCALL GetWindowTextA(HANDLE, LPCHAR, LPLONG)
|
|
|
|
HANDLE STDCALL GetForegroundWindow(VOID)
|
|
|
|
LONG STDCALL GetWindowLongA (HANDLE, ULONG)
|
|
|
|
LONG STDCALL GetClassNameA(HANDLE,LPCHAR,LPLONG)
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
DECLARE FUNCTION GetDesktopWindow, GetWindow
|
|
|
|
DECLARE FUNCTION GetWindowTextA, GetWindowLongA,
|
|
|
|
DECLARE FUNCTION GetForegroundWindow,
|
|
|
|
DECLARE FUNCTION GetClassNameA, ShowWindow, FindWindowA
|
|
|
|
DECLARE SUBROUTINE MSG
|
|
|
|
VISIBLE$ = 0x10000000
|
|
|
|
display = ''
|
|
|
|
lngx = GetDesktopWindow()
|
|
|
|
* Return the process which is the
|
|
|
|
* "first" child process of the Windows Desktop
|
|
|
|
* GetWindow() second parameter can be
|
|
|
|
* FIRST = 0, LAST = 1, NEXT = 2,
|
|
|
|
* PREV = 3, OWNER =4, CHILD = 5,
|
|
|
|
lngx = GetWindow(lngx, 5)
|
|
|
|
junk = GetForegroundWindow(void)
|
|
|
|
* Loop through each child process of the Desktop in turn
|
|
|
|
Loop
|
|
|
|
While lngx <> 0
|
|
|
|
strBuffer = Str(char(0), 260)
|
|
|
|
* Get the Caption text of the Window
|
|
|
|
intCount = GetWindowTextA(lngx, strBuffer, 260)
|
|
|
|
If intCount > 0 Then
|
|
|
|
strCaption = strBuffer[1,intCount]
|
|
|
|
End Else
|
|
|
|
strCaption = ''
|
|
|
|
End
|
|
|
|
* Get the Main Class name of
|
|
|
|
* the executable , by using the Window handle
|
|
|
|
If Len(strCaption) > 0 Then
|
|
|
|
* get visible windows only, comment out for all procs.
|
|
|
|
lngStyle = GetWindowLongA(lngx, -16)
|
|
|
|
*If bitand(lngStyle,VISIBLE$) > 0 Then
|
|
|
|
classBuffer = Str(char(0), 260)
|
|
|
|
intCount = GetClassNameA(lngx, classBuffer, 260)
|
|
|
|
If intCount > 0 Then
|
|
|
|
classname = classBuffer[1,intCount]
|
|
|
|
End Else
|
|
|
|
classname = ''
|
|
|
|
End
|
|
|
|
display<-1>=classname:@vm:strCaption:@vm:lngx:@vm:lngStyle
|
|
|
|
*End
|
|
|
|
End
|
|
|
|
* get the handle of the next child window
|
|
|
|
* of the desktop (basically a Windows "readnext process")
|
|
|
|
lngx = GetWindow(lngx, 2)
|
|
|
|
Repeat
|
|
|
|
Swap @fm with \0D0A\ in display
|
|
|
|
flush
|
|
|
|
garbagecollect
|
|
|
|
return display
|
|
|
|
|