![Pensando](http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif)
![Neurótico](http://static.forosdelweb.com/fdwtheme/images/smilies/scared.png)
![Neurótico](http://static.forosdelweb.com/fdwtheme/images/smilies/scared.png)
![Neurótico](http://static.forosdelweb.com/fdwtheme/images/smilies/scared.png)
De verdad necesito una persona que realmente sepa del tema, es decir, necesito a un super experto
![sonrisota](http://static.forosdelweb.com/fdwtheme/images/smilies/xD.png)
gracias, muchas gracias
![apachar ojo](http://static.forosdelweb.com/fdwtheme/images/smilies/wink.png)
| |||
![]() ![]() ![]() ![]() ![]() De verdad necesito una persona que realmente sepa del tema, es decir, necesito a un super experto ![]() gracias, muchas gracias ![]() |
| ||||
normalmente no contesto mensajes que dicen , para expertos solamente, solo expertos, etc. hago una excepcion. tomado de www.allapi.net 'Remark: If you're using VB4 or VB5, you should first uncomment ' the Replace function (on the end of the code) 'In a form Private Sub Form_Load() 'Code submitted by Roger Taylor 'enumerate all the different explorer.exe processes GetProcesses "explorer.exe" End Sub 'In a module Public Declare Function GetProcessMemoryInfo Lib "PSAPI.DLL" (ByVal hProcess As Long, ppsmemCounters As PROCESS_MEMORY_COUNTERS, ByVal cb As Long) As Long Public Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long Public Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long Public Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long Public Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long Public Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long Public Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Public Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS) Public Const PROCESS_QUERY_INFORMATION = 1024 Public Const PROCESS_VM_READ = 16 Public Const MAX_PATH = 260 Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 Public Const SYNCHRONIZE = &H100000 Public Const PROCESS_ALL_ACCESS = &H1F0FFF Public Const TH32CS_SNAPPROCESS = &H2& Public Const hNull = 0 Public Const WIN95_System_Found = 1 Public Const WINNT_System_Found = 2 Public Const Default_Log_Size = 10000000 Public Const Default_Log_Days = 0 Public Const SPECIFIC_RIGHTS_ALL = &HFFFF Public Const STANDARD_RIGHTS_ALL = &H1F0000 Type MEMORYSTATUS dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Type PROCESS_MEMORY_COUNTERS cb As Long PageFaultCount As Long PeakWorkingSetSize As Long WorkingSetSize As Long QuotaPeakPagedPoolUsage As Long QuotaPagedPoolUsage As Long QuotaPeakNonPagedPoolUsage As Long QuotaNonPagedPoolUsage As Long PagefileUsage As Long PeakPagefileUsage As Long End Type Public Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long ' This process th32DefaultHeapID As Long th32ModuleID As Long ' Associated exe cntThreads As Long th32ParentProcessID As Long ' This process's parent process pcPriClassBase As Long ' Base priority of process threads dwFlags As Long szExeFile As String * 260 ' MAX_PATH End Type Public Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long '1 = Windows 95. '2 = Windows NT szCSDVersion As String * 128 End Type Public Function GetProcesses(ByVal EXEName As String) Dim booResult As Boolean Dim lngLength As Long Dim lngProcessID As Long Dim strProcessName As String Dim lngSnapHwnd As Long Dim udtProcEntry As PROCESSENTRY32 Dim lngCBSize As Long 'Specifies the size, In bytes, of the lpidProcess array Dim lngCBSizeReturned As Long 'Receives the number of bytes returned Dim lngNumElements As Long Dim lngProcessIDs() As Long Dim lngCBSize2 As Long Dim lngModules(1 To 200) As Long Dim lngReturn As Long Dim strModuleName As String Dim lngSize As Long Dim lngHwndProcess As Long Dim lngLoop As Long Dim b As Long Dim c As Long Dim e As Long Dim d As Long Dim pmc As PROCESS_MEMORY_COUNTERS Dim lret As Long Dim strProcName2 As String Dim strProcName As String 'Turn on Error handler On Error GoTo Error_handler booResult = False EXEName = UCase$(Trim$(EXEName)) lngLength = Len(EXEName) 'ProcessInfo.bolRunning = False Select Case getVersion() 'I'm not bothered about windows 95/98 becasue this class probably wont be used on it anyway. Case WIN95_System_Found 'Windows 95/98 Case WINNT_System_Found 'Windows NT lngCBSize = 8 ' Really needs To be 16, but Loop will increment prior to calling API lngCBSizeReturned = 96 Do While lngCBSize <= lngCBSizeReturned DoEvents 'Increment Size lngCBSize = lngCBSize * 2 'Allocate Memory for Array ReDim lngProcessIDs(lngCBSize / 4) As Long 'Get Process ID's lngReturn = EnumProcesses(lngProcessIDs(1), lngCBSize, lngCBSizeReturned) Loop 'Count number of processes returned lngNumElements = lngCBSizeReturned / 4 'Loop thru each process For lngLoop = 1 To lngNumElements DoEvents 'Get a handle to the Process and Open lngHwndProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lngProcessIDs(lngLoop)) If lngHwndProcess <> 0 Then 'Get an array of the module handles for the specified process lngReturn = EnumProcessModules(lngHwndProcess, lngModules(1), 200, lngCBSize2) 'If the Module Array is retrieved, Get the ModuleFileName If lngReturn <> 0 Then 'Buffer with spaces first to allocate memory for byte array strModuleName = Space(MAX_PATH) 'Must be set prior to calling API lngSize = 500 'Get Process Name lngReturn = GetModuleFileNameExA(lngHwndProcess, lngModules(1), strModuleName, lngSize) 'Remove trailing spaces strProcessName = Left(strModuleName, lngReturn) 'Check for Matching Upper case result strProcessName = UCase$(Trim$(strProcessName)) strProcName2 = GetElement(Trim(Replace(strProcessName, Chr$(0), "")), "\", 0, 0, GetNumElements(Trim(Replace(strProcessName, Chr$(0), "")), "\") - 1) If strProcName2 = EXEName Then 'Get the Site of the Memory Structure pmc.cb = LenB(pmc) lret = GetProcessMemoryInfo(lngHwndProcess, pmc, pmc.cb) Debug.Print EXEName & "::" & CStr(pmc.WorkingSetSize / 1024) End If End If End If 'Close the handle to this process lngReturn = CloseHandle(lngHwndProcess) DoEvents Next End Select IsProcessRunning_Exit: 'Exit early to avoid error handler Exit Function Error_handler: Err.Raise Err, Err.Source, "ProcessInfo", Error Resume Next End Function Private Function getVersion() As Long Dim osinfo As OSVERSIONINFO Dim retvalue As Integer osinfo.dwOSVersionInfoSize = 148 osinfo.szCSDVersion = Space$(128) retvalue = GetVersionExA(osinfo) getVersion = osinfo.dwPlatformId End Function Private Function StrZToStr(s As String) As String StrZToStr = Left$(s, Len(s) - 1) End Function Public Function GetElement(ByVal strList As String, ByVal strDelimiter As String, ByVal lngNumColumns As Long, ByVal lngRow As Long, ByVal lngColumn As Long) As String Dim lngCounter As Long ' Append delimiter text to the end of the list as a terminator. strList = strList & strDelimiter ' Calculate the offset for the item required based on the number of columns the list ' 'strList' has i.e. 'lngNumColumns' and from which row the element is to be ' selected i.e. 'lngRow'. lngColumn = IIf(lngRow = 0, lngColumn, (lngRow * lngNumColumns) + lngColumn) ' Search for the 'lngColumn' item from the list 'strList'. For lngCounter = 0 To lngColumn - 1 ' Remove each item from the list. strList = Mid$(strList, InStr(strList, strDelimiter) + Len(strDelimiter), Len(strList)) ' If list becomes empty before 'lngColumn' is found then just ' return an empty string. If Len(strList) = 0 Then GetElement = "" Exit Function End If Next lngCounter ' Return the sought list element. GetElement = Left$(strList, InStr(strList, strDelimiter) - 1) End Function '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' 'Function GetNumElements (ByVal strList As String, ' ByVal strDelimiter As String) ' As Integer ' ' strList = The element list. ' strDelimiter = The delimiter by which the elements in ' 'strList' are seperated. ' ' The function returns an integer which is the count of the ' number of elements in 'strList'. ' ' Author: Roger Taylor ' ' Date:26/12/1998 ' ' Additional Information: ' ' Revision History: ' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' Public Function GetNumElements(ByVal strList As String, ByVal strDelimiter As String) As Integer Dim intElementCount As Integer ' If no elements in the list 'strList' then just return 0. If Len(strList) = 0 Then GetNumElements = 0 Exit Function End If ' Append delimiter text to the end of the list as a terminator. strList = strList & strDelimiter ' Count the number of elements in 'strlist' While InStr(strList, strDelimiter) > 0 intElementCount = intElementCount + 1 strList = Mid$(strList, InStr(strList, strDelimiter) + 1, Len(strList)) Wend ' Return the number of elements in 'strList'. GetNumElements = intElementCount End Function 'If you're using VB4 or VB5, uncomment the following function: 'Function Replace(sInput As String, WhatToReplace As String, ReplaceWith As String) As String 'Dim Ret As Long 'Replace = sInput 'Ret = -Len(ReplaceWith) + 1 'Do 'Ret = InStr(Ret + Len(ReplaceWith), Replace, WhatToReplace, vbTextCompare) 'If Ret = 0 Then Exit Do 'Replace = Left$(Replace, Ret - 1) + ReplaceWith + Right$(Replace, Len(Replace) - Ret - Len(WhatToReplace) + 1) 'Loop 'End Function |