FuzzyBear981 Posted March 14, 2017 Share Posted March 14, 2017 I currently have this script which scans and records the screen and compares images2 to image1(Original image). If image2 don't match it'll say false and if they're exactly the same it'll say true. This is intended for a software gas modeling tool at work on a laptop( while it's processing for hours). Would like to have it loop until it matches original image and alert the engineer with some sort of sound. Does windows have default sounds to use for this? expandcollapse popup#include <GDIPlus.au3> #include <ScreenCapture.au3> #include <WinAPIFiles.au3> _GDIPlus_Startup() scanImage2() $fname1 = @ScriptDir & "/Image1.jpg" $fname2 = @ScriptDir & "/Image2.jpg" $bm1 = _GDIPlus_ImageLoadFromFile($fname1) $bm2 = _GDIPlus_ImageLoadFromFile($fname2) MsgBox(0, "bm1==bm2", CompareBitmaps($bm1, $bm2),2) _GDIPlus_ImageDispose($bm1) _GDIPlus_ImageDispose($bm2) _GDIPlus_Shutdown() Func CompareBitmaps($bm1, $bm2) $Bm1W = _GDIPlus_ImageGetWidth($bm1) $Bm1H = _GDIPlus_ImageGetHeight($bm1) $BitmapData1 = _GDIPlus_BitmapLockBits($bm1, 0, 0, $Bm1W, $Bm1H, $GDIP_ILMREAD, $GDIP_PXF32RGB) $Stride = DllStructGetData($BitmapData1, "Stride") $Scan0 = DllStructGetData($BitmapData1, "Scan0") $ptr1 = $Scan0 $size1 = ($Bm1H - 1) * $Stride + ($Bm1W - 1) * 4 $Bm2W = _GDIPlus_ImageGetWidth($bm2) $Bm2H = _GDIPlus_ImageGetHeight($bm2) $BitmapData2 = _GDIPlus_BitmapLockBits($bm2, 0, 0, $Bm2W, $Bm2H, $GDIP_ILMREAD, $GDIP_PXF32RGB) $Stride = DllStructGetData($BitmapData2, "Stride") $Scan0 = DllStructGetData($BitmapData2, "Scan0") $ptr2 = $Scan0 $size2 = ($Bm2H - 1) * $Stride + ($Bm2W - 1) * 4 $smallest = $size1 If $size2 < $smallest Then $smallest = $size2 $call = DllCall("msvcrt.dll", "int:cdecl", "memcmp", "ptr", $ptr1, "ptr", $ptr2, "int", $smallest) _GDIPlus_BitmapUnlockBits($bm1, $BitmapData1) _GDIPlus_BitmapUnlockBits($bm2, $BitmapData2) Return ($call[0]=0) EndFunc ;==>CompareBitmaps Func scanImage2() $hWnd1 = WinGetHandle("") WinActivate($hWnd1) $hWnd = WinGetHandle($hWnd1) Sleep(500) $SsTake = _ScreenCapture_CaptureWnd("", $hWnd) _ScreenCapture_SaveImage(@ScriptDir & "/Image2.jpg", $SsTake) EndFunc Link to comment Share on other sites More sharing options...
aleph01 Posted March 14, 2017 Share Posted March 14, 2017 Quick search came up with this, referring to the Windows registry locations where sound settings are stored. V$wav = RegRead("HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\SystemStart\.Current","")SoundPlay($wav,1) When a match is found, have Windows play a sound! FuzzyBear981 1 Meds. They're not just for breakfast anymore. Link to comment Share on other sites More sharing options...
FuzzyBear981 Posted March 15, 2017 Author Share Posted March 15, 2017 Thanks alepha01. The alarm part seems to work pretty good. Now how would I setup a while loop to repeat scanImage2 function until image2 is completely the same image1. Image1 is a pre-stored image inside a file that reflects the popup handler. expandcollapse popup#include <GDIPlus.au3> #include <ScreenCapture.au3> #include <WinAPIFiles.au3> HotKeySet("{ESC}", "Terminate") _GDIPlus_Startup() scanImage2() Sleep(500) $fname1 = @ScriptDir & "/Image1.jpg" $fname2 = @ScriptDir & "/Image2.jpg" $bm1 = _GDIPlus_ImageLoadFromFile($fname1) $bm2 = _GDIPlus_ImageLoadFromFile($fname2) MsgBox(0, "bm1==bm2", CompareBitmaps($bm1, $bm2), 2) $msgBox = MsgBox(4, "Update Status", "Model Completed",10) Do SoundPlay("C:\WINDOWS\media\notify.wav", 1) Until $msgBox = 6 _GDIPlus_ImageDispose($bm1) _GDIPlus_ImageDispose($bm2) _GDIPlus_Shutdown() Func CompareBitmaps($bm1, $bm2) $Bm1W = _GDIPlus_ImageGetWidth($bm1) $Bm1H = _GDIPlus_ImageGetHeight($bm1) $BitmapData1 = _GDIPlus_BitmapLockBits($bm1, 0, 0, $Bm1W, $Bm1H, $GDIP_ILMREAD, $GDIP_PXF32RGB) $Stride = DllStructGetData($BitmapData1, "Stride") $Scan0 = DllStructGetData($BitmapData1, "Scan0") $ptr1 = $Scan0 $size1 = ($Bm1H - 1) * $Stride + ($Bm1W - 1) * 4 $Bm2W = _GDIPlus_ImageGetWidth($bm2) $Bm2H = _GDIPlus_ImageGetHeight($bm2) $BitmapData2 = _GDIPlus_BitmapLockBits($bm2, 0, 0, $Bm2W, $Bm2H, $GDIP_ILMREAD, $GDIP_PXF32RGB) $Stride = DllStructGetData($BitmapData2, "Stride") $Scan0 = DllStructGetData($BitmapData2, "Scan0") $ptr2 = $Scan0 $size2 = ($Bm2H - 1) * $Stride + ($Bm2W - 1) * 4 $smallest = $size1 If $size2 < $smallest Then $smallest = $size2 $call = DllCall("msvcrt.dll", "int:cdecl", "memcmp", "ptr", $ptr1, "ptr", $ptr2, "int", $smallest) _GDIPlus_BitmapUnlockBits($bm1, $BitmapData1) _GDIPlus_BitmapUnlockBits($bm2, $BitmapData2) Return ($call[0] = 0) EndFunc ;==>CompareBitmaps Func scanImage1() $hWnd1 = WinGetHandle("") WinActivate($hWnd1) $hWnd = WinGetHandle($hWnd1) Sleep(500) $SsTake = _ScreenCapture_CaptureWnd("", $hWnd) _ScreenCapture_SaveImage(@ScriptDir & "/Image1.jpg", $SsTake) EndFunc ;==>scanImage1 Func scanImage2() $hWnd1 = WinGetHandle("") WinActivate($hWnd1) $hWnd = WinGetHandle($hWnd1) Sleep(500) $SsTake = _ScreenCapture_CaptureWnd("", $hWnd) _ScreenCapture_SaveImage(@ScriptDir & "/Image2.jpg", $SsTake) EndFunc ;==>scanImage2 Func Terminate() Exit EndFunc ;==>Terminate Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now