After coming across this post on the AutoIt forums while researching how to access shared memory of processes in AutoIt, I decided to have a go at translating the Delphi example code.
Below is a function w/ a working example showing how to access the AIDA64 shared memory.
First enable shared memory here: Preferences > Hardware Monitoring > External Applications > Enable Shared Memory
The length of the data depends on the number of active sensors and their content. As AIDA64 does not provide a buffer size value, we use _WinAPI_GetSystemInfo() <WinAPISys.au3> to get dwPageSize ($aArray). This value is then used as an address offset, and we continue reading chunks of data until we encounter a 0x00 NUL character.
Based on the Delphi example found in the AIDA64 documentation: https://www.aida64.co.uk/user-manual/external-applications
Feedback appreciated, especially as all this shared memory stuff is not my ordinary cup of... cake. And regarding this whole ordeal of reading data without knowing the exact length; I'm suspecting my solution to read chunks of data like done below is not by the book, and I'm concerned what might happen if the final chunk is exactly 4096 bytes in length. Will there still be a NUL terminator there? Hmm.
#NoTrayIcon #include <WinAPIFiles.au3> #include <WinAPISys.au3> ; #INDEX# =========================================================================================================================== ; Title .........: AIDA64 Shared Memory access for AutoIt3 ; Author(s) .....: demux4555 ; Reference .....: https://www.aida64.co.uk/user-manual/external-applications ; =================================================================================================================================== Global $vSharedmem_data ; The variable used to store the data we read from the shared memory Global $return = ExtApp_SharedMem_ReadBuffer_v2($vSharedmem_data) ; Now, let's see what happens when we run the function... If @error Then _Echo("! ExtApp_SharedMem_ReadBuffer_v2(): @errror = " & @error) If IsBinary($vSharedmem_data) Then ; Convert type Binary to actual human readable text. We also remove the excess of trailing 0x00 characters. $vSharedmem_data = StringStripWS(BinaryToString($vSharedmem_data), $STR_STRIPLEADING+$STR_STRIPTRAILING) EndIf _Echo() _Echo("> return = " & $return) ; The return value. Will be True if everything went ok. _Echo("> length = " & StringLen($vSharedmem_data)) ; The number of characters read from shared memory. _Echo("> data = " & $vSharedmem_data) ; The actual data. _Echo("> data(40) = " & "..." & StringRight($vSharedmem_data, 40)) ; shows the 40 right-most characters, and _should_ show the very end of the data at this point. _Echo() Exit ; #FUNCTION# ==================================================================================================================== ; Name ..........: ExtApp_SharedMem_ReadBuffer_v2 ; Description ...: AIDA64 Shared Memory Example for AutoIt3 ; Syntax ........: ExtApp_SharedMem_ReadBuffer_v2(Byref $_dOutput[, $_sSharedmemName = "AIDA64_SensorValues"]) ; Parameters ....: $_dOutput - [in/out] Variable to store the read data. ; $_sSharedmemName - [optional] Name of the AIDA64 shared memory. Default is "AIDA64_SensorValues". ; Return values .: Success: True. $_dOutput will be type Binary, containing a string of the XML values of the active sensors. ; Failure: False. ; Author ........: demux4555 ; Reference .....: https://www.aida64.co.uk/user-manual/external-applications ; =============================================================================================================================== Func ExtApp_SharedMem_ReadBuffer_v2(ByRef $_dOutput, $_sSharedmemName = "AIDA64_SensorValues") Local $_bReturn = False Local $_aGSI = _WinAPI_GetSystemInfo() ; Retrieves information about the current system... Ref: https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsysteminfo Local $_iPageSize = $_aGSI ; ... the page size and the granularity of page protection and commitment. Usually it is 4096, but we read it anyway. Ref: https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info Local $_hMapping = _WinAPI_OpenFileMapping($_sSharedmemName, $FILE_MAP_READ) ; Opens a named file mapping object. Ref: https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-openfilemappingw If Not IsPtr($_hMapping) Then Return SetError(-2, 0, $_bReturn) Local $_pMappedData = _WinAPI_MapViewOfFile($_hMapping, 0, 0, $FILE_MAP_READ) ; Pointer to the start address. Maps a view of a file mapping into the address space of a calling process. Ref: https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-mapviewoffile If @error Or Not IsPtr($_pMappedData) Then Return SetError(-2, 0, $_bReturn) ; Now we loop until we reach the end of the data. Local $_tData, $_dBuffer While 1 $_tData = DllStructCreate("BYTE[" & $_iPageSize & "]", $_pMappedData) ; Note: we use type BYTE (AutoIt type Binary) instead of CHAR (AutoIt type String). This allows us to look for value 0x00 (NUL termination of the data). If @error Then ExitLoop $_dBuffer = DllStructGetData($_tData, 1) ; The returned value is type Binary. If @error Or ($_dBuffer==0) Or (BinaryLen($_dBuffer)=0) Then ExitLoop ; Pretty sure $_dBuffer==0 can not happen, so just in case. $_dOutput = Binary($_dOutput & $_dBuffer) ; Add the read data to the end of the output variable. If StringRight($_dBuffer, 2)=="00" Then ExitLoop ; Look for NUL termination of the string data. $_pMappedData += $_iPageSize ; We change the address by using the page granularity value (i.e. 4096) as the offset. WEnd ; Quick cleanup $_bReturn = _WinAPI_UnmapViewOfFile($_pMappedData)=1 ; Unmaps a mapped view of a file from the calling process's address space. Ref: https://docs.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-unmapviewoffile _WinAPI_CloseHandle($_hMapping) Return $_bReturn EndFunc; Func _Echo($_data = "") ConsoleWrite($_data & @CRLF) EndFunc
The latest AIDA64 update introduces optimized benchmarks for Intel “Tiger Lake” and “Rocket Lake” processors, monitoring of sensor values on SteelSeries Apex TKL OLED displays, and supports the latest AMD and Intel CPU platforms as well as the new graphics and GPGPU computing technologies by both AMD and nVIDIA.
AIDA64 for Huawei devices
AIDA64 for Android has crossed the 10 million download mark at the Play Store. It is also available now in the Huawei AppGallery, a blooming app store that offers automatic updates and various security features.
New features & improvements
- AVX-512 accelerated benchmarks for Intel “Tiger Lake” and “Rocket Lake” processors
- AVX accelerated 64-bit benchmarks for Zhaoxin KaiXian KX-6000 CPU
- SSE4 optimized 64-bit benchmarks for Intel “Lakefield” SoC
- Further optimized SHA3-512 cryptographic hash benchmark
- Improvements for AMD A520 and B550 chipset based motherboards
- SteelSeries Apex 7 TKL and Apex Pro TKL OLED display support
- OpenCL 3.0 support
- NZXT Kraken X53, X63, X73, Z63, Z73 sensor support
- Enhanced support for LGA-1200 motherboards
- Preliminary support for Intel “Alder Lake” CPU
- GPU details for AMD Radeon Pro W5500
- GPU details for nVIDIA GeForce MX450, GeForce RTX 3000 Series
- Fixed handling of per-core HyperThreading (Intel Comet Lake-S)
What's new since AIDA64 v6.00
- SHA3-512 cryptographic hash benchmark utilizing AVX, AVX2 and AVX-512
- AVX-512 accelerated benchmarks for Intel “Ice Lake” processors
- AVX2 and FMA accelerated 64-bit benchmarks for AMD Zen 2 “Matisse” and “Renoir” processors
- AVX accelerated 64-bit benchmarks for Zhaoxin ZX-C+ and Zhaoxin KaiXian KX-5000 processors
- Art.Lebedev Optimus Popularis, BeadaPanel, El Gato Stream Deck, EVGA Z10 RGB, Matrix Orbital EVE3 LCD display support
- SteelSeries Apex 7, Apex Pro, Rival 710 OLED OLED display support
- Corsair H100i Platinum and H115i Platinum liquid cooler sensor support
- Enhanced RGB LED monitoring module
- Cooler Master MP750 RGB LED mousepad support
- Aqua Computer Octo, Corsair Obsidian 1000D, EVGA iCX2, Farbwerk 360, NZXT GRID+ V3 sensor support
- Full support for Hygon C86 “Mukti/Dhyana” CPU
- Improved support for 3rd generation AMD Threadripper processors
- Preliminary support for 4th generation AMD Ryzen desktop CPUs
- Improved support for Intel “Comet Lake” and “Ice Lake” CPUs
- Improvements for AMD X570 chipset based motherboards
- Support for PCI Express 4.0 controllers and devices
- Preliminary support for Intel “Elkhart Lake”, “Jasper Lake”, “Rocket Lake” CPUs
- Preliminary support for Zhaoxin KaiXian KX-6000 CPU
- Advanced support for LSI RAID controllers
- NVMe 1.4 support
- SMBIOS 3.4.0 support
- GPU details for AMD Radeon RX 590 GME, Radeon RX 5500, Radeon RX 5600 XT, Radeon RX 5700, Radeon VII Series
- GPU details for nVIDIA GeForce GTX 1600, GeForce GTX 1650 Ti, GeForce MX330, GeForce MX350, GeForce RTX 2000 Super, GeForce RTX 2060 Series
- Preliminary support for AMD “Navi” GPUs
- Fixed lockup at startup on systems with multiple CPU groups
- Retired SHA1 and VP8 benchmarks
[ Press Release (English) ]
[ Press Release (magyar) ]
[ What's new in AIDA64 v6.30 ]
[ Download ]
First time posting to the forum, indeed it is my first time viewing the forum. Ive been using the Engineer version of Aida64 (registered) for about 3 months now, and overall Im impressed with the software. Its nice to just throw together a few different benchmarks and have them run how and when I want in the order I want. I was doing all this with macros before
Ive recently gotten back into building PCs, took a long hiatus back in the late 90s my last system having been assembled was a 440BX based chipset on an Abit motherboard, both of which no longer exist at least in a meaningful way lol. I was an OC neophyte back then, as I am now, although I do enjoy the hobby/sport(?)
I decided to wade into the dark and murky waters of RAM OCing, and went down that rabbit hole for a few weeks. Long story short, I bought 2 x 16GB sticks of G.Skill 3600mhz XMP mem. Stock timings sucked at 19-20-20-40-500 but I didnt know or care much about timings at the point I bought and assembled the system and so didnt realize their huge impact (relatively speaking) on ram performance.
I was able to get them to post at 4000mhz 17-22-22-36-485 and ran that for a few months, then last night got the idea to try and tweak them some more, thinking maybe all these on off cycles might have trained them to do better (i dont know if that logic is incorrect or not in regards to training, but its how I justified another sweaty night of swearing out loud and smashing keys to my wife)
Im now resting at 4000mhz 16-22-22-40-500 but I can feel they have more to give in the timings department. Frankly, im already amazed at how well these Hynix CJR chips are doing on the OC. My question is basically, Aida shows me as being first place in Latency, and near top tier in every memory bench, with only quad channel or server boards (mostly) beating me. Are these results typical for these chips and my rig? What can I do to push it further if anybody has any recommendations? And am I correct in feeling a sense of accomplishment at being in the top spot for latency, or is my joy tragically misplaced?
Thanks a lot guys, and to the Devs, great product and I will continue to use and support you!
Relevant Screens attached.