$INCLUDE "Processes.bas" TYPE WINENUM count% hwnd[1024] AS HWND length%[1024] title$[1024] classname$[1024] isvisible%[1024] pid[1024] pname$[1024] ppath$[1024] END TYPE DIM t AS WINENUM WinList(&t) FOR INTEGER i = 0 TO t.count - 1 PRINT "****" & CRLF$ & _ "[" & TRIM$(STR$(i)) & "]" & CRLF$ & _ "title text len : " & str$(t.length[i]) & crlf$ & _ "title : " & t.title$[i] & crlf$ & _ "classname : " & t.classname$[i] & crlf$ & _ "isvisible : " & str$(t.isvisible[i]) & crlf$ & _ "pid : " & str$(t.pid[i]) & crlf$ & _ "path to exe : " & t.ppath$[i] & crlf$ & _ "exe : " & t.pname$[i] NEXT i pause FUNCTION WinList(BYREF taWLR AS WINENUM) GLOBAL taWL AS WINENUM LOCAL taFree AS WINENUM EnumWindows(smk_WinListHandler,0) taWLR = taWL taWL = taFree IF taWLR.count > 0 THEN FUNCTION = 1 FUNCTION = 0 END FUNCTION BOOL EnumChildWindows( HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam ); TYPE WINENUMCHILD left%[4096] top%[4096] right[4096] bottom[4096] classnn[4096] ctrlid[4096] FUNCTION smk_WinGetClassListHandler(hWndParent AS HWND, _ lpEnumFunc AS WNDENUMPROC, lParam AS LPARAM) AS LRESULT CALLBACK FUNCTION = TRUE END FUNCTION FUNCTION smk_WinListHandler(hWnd AS HWND, lParam AS LPARAM) AS LRESULT CALLBACK LOCAL nPID AS DWORD LOCAL hProcess AS HANDLE LOCAL hMod AS HMODULE LOCAL ncbNeeded AS DWORD LOCAL szDrive[MAX_PATH+1] AS CHAR LOCAL szDir[MAX_PATH+1] AS CHAR LOCAL szFile[MAX_PATH+1] AS CHAR LOCAL szExt[MAX_PATH+1] AS CHAR taWL.hwnd[taWL.count] = hWnd taWL.length[taWL.count] = GetWindowTextLength(taWL.hwnd[taWL.count]) GetWindowText(taWL.hwnd[taWL.count], _ taWL.title$[taWL.count], taWL.length[taWL.count]+1) GetClassName(taWL.hwnd[taWL.count], taWL.classname$[taWL.count], MAX_PATH) taWL.isvisible[taWL.count] = IsWindowVisible(taWL.hwnd[taWL.count]) GetWindowThreadProcessId(taWL.hwnd[taWL.count], &nPID) taWL.pid[taWL.count] = (int)nPID hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | _ PROCESS_VM_READ, FALSE, taWL.pid[taWL.count]) IF hProcess = 0 THEN ProcessSetPrivilege() hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | _ PROCESS_VM_READ, FALSE, taWL.pid[taWL.count]) ENDIF IF (hProcess) THEN EnumProcessModules(hProcess, &hMod, sizeof(hMod), &ncbNeeded) GetModuleFileNameExA(hProcess, hMod, taWL.ppath$[taWL.count], (DWORD)261) _splitpath(taWL.ppath$[taWL.count], szDrive, szDir, szFile, szExt) strcat(szFile, szExt) taWL.pname$[taWL.count] = szFile$ ENDIF IF (hWnd != NULL) THEN taWL.count++ IF taWL.count = 1024 THEN FUNCTION = FALSE FUNCTION = TRUE END FUNCTION