Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 11/28/2022 in all areas

  1. [BUGFIX VERSION] - 6 Apr 24 Fixed: UDF failed if header colours were initialised but not specifically set. New UDF in the zip below. -------------------------------------------------------------------------------------- Note: This is a new recoded and expanded version of my earlier UDF of the same name. If you move to this new version there might well be several script-breaking changes, particularly when setting which columns are to be editable. Please read the "Beginner's Guide" and look at the included example scripts to see where things have changed. -------------------------------------------------------------------------------------- This UDF allows you to do much more with ListView controls (either native or UDF created): Edit the content with plain text, combos or date-time pickers - and edit the headers too Move rows within the ListView Drag rows both within the ListView and to other ListViews in the same GUI (or not as required) Insert and delete columns and rows Sort columns by simply clicking the header Colour individual ListView items and headers Only select a single cell rather then the entire row Save and load entire ListViews For the advanced user: If you use certain Windows message handlers (In particular WM_NOTIFY) in your script, please read the function headers for the equivalent handlers within the UDF. Here is the UDF, with 6 examples and the guide, in zip format: GUIListViewEx.zip Credit to: martin (basic drag code), Array.au3 authors (array functions), KaFu and ProgAndy (font function), LarsJ (colouring code) Happy to take compliments or criticism - preferably the former! M23
    1 point
  2. I want to modify it to search only on the emulator. what do i need to fix Usually captures both the screen. ; #UDF# ============================================== ================================================= ====================== ; ชื่อ ..........: OpenCV Match UDF ; คำอธิบาย ...: จับคู่รูปภาพบนหน้าจอเพื่อดำเนินการอัตโนมัติอย่างง่าย ; รุ่น .......: v1.0 ; ผู้แต่ง ........: BB_19 ; เครดิต ........: @mylise ; ================================================= ================================================= ============================ #include-once #include <GDIplus.au3> #include <ScreenCapture.au3> Global $OpenCV_MatchLogging = False , $OpenCV_ErrorLogging = False, $OpenCV_AutoitConsoleLogging = False Global $_opencv_core, $_opencv_highgui, $_opencv_imgproc Global $handle = WinGetHandle("NoxPlayer") _GDIPlus_Startup() ; #FUNCTION# =============================================== ================================================= =================== ; ชื่อ ..........: _ClickMouse ; คำอธิบาย ...: คำนวณจุดศูนย์กลางของสี่เหลี่ยมจัตุรัสโดยใช้อาร์เรย์ที่มีพิกัด จากนั้นคลิกปุ่มซ้าย/ขวาของเมาส์ ; ไวยากรณ์ ........: _ClickMouse($Coordinates, $mouse_button[, $number_of_clicks = 1]) ; พารามิเตอร์ ....: $Coordinates - Array ส่งคืนโดย _MatchPicture ; $mouse_button - [ตัวเลือก] สตริง "ซ้ายขวา". ค่าเริ่มต้นคือ "ซ้าย" ; $number_of_clicks - [ตัวเลือก] ค่าตัวเลขทั่วไป ค่าเริ่มต้นคือ 1 ; ================================================= ================================================= ============================ Func _ClickMouse($Coordinates, $mouse_button="left", $number_of_clicks = 1) MouseUp("") BlockInput(1) MouseClick($mouse_button, ($Coordinates[0] + $Coordinates[2]) / 2, ($Coordinates[1] + $Coordinates[3]) / 2, $number_of_clicks, 0) BlockInput(0) บล็อกอินพุท(1) EndFunc ;==>_ClickMouse ; #FUNCTION# =============================================== ================================================= =================== ; ชื่อ ..........: _MatchPicture ; คำอธิบาย ...: ค้นหารูปภาพบนหน้าจอหรือบนพื้นที่เฉพาะของหน้าจอและส่งคืนพิกัดที่พบรูปภาพนั้น ; ไวยากรณ์ ........: _MatchPicture($Match_Pic[, $Threshold = 0.9[, $CustomCords = False[, $LoopCount = 1[, $LoopWait = 2000]]]) ; Parameters ....: $Match_Pic - พาธไปยังรูปภาพที่จะจับคู่ ; $Threshold - [ตัวเลือก] เกณฑ์ 0.1-1.0 ยิ่งสูง ยิ่งต้องจับคู่ภาพให้แม่นยำมากขึ้นเท่านั้นจึงจะเข้าคู่กันได้ ค่าเริ่มต้นคือ 0.9 ; $CustomCords - [ตัวเลือก] อาร์เรย์ที่มีพิกัดสำหรับ rect x1,y1,x2,y2 ที่สามารถใช้ในการค้นหาในพื้นที่เฉพาะของหน้าจอ สามารถสร้างได้โดยใช้ Snapshot-Tool ที่ให้มา ค่าเริ่มต้นเป็นเท็จ ; $LoopCount - [ตัวเลือก] จำนวนครั้งที่สคริปต์จะตรวจสอบอีกครั้งว่าสามารถพบรูปภาพที่ตรงกันบนหน้าจอหรือไม่ ค่าเริ่มต้นคือ 1 ; $LoopWait - [ตัวเลือก] เวลารอในหน่วยมิลลิวินาทีระหว่างการลองแต่ละครั้ง ค่าเริ่มต้นคือ 2000 มิลลิวินาที ; ส่งคืนค่า .: อาร์เรย์ที่มีพิกัด (x1,y1,x2,y2) ของการจับคู่หรือ @error หากไม่พบรายการที่ตรงกัน ; ผู้แต่ง ........: BB_19 ; ที่เกี่ยวข้อง .......: https://www.autoitscript.com/forum/topic/160732-opencv-udf/ ; เครดิต .....: @mylise ; ================================================= ================================================= ============================ Func _MatchPicture($Match_Pic, $Threshold = 0.9, $CustomCords = False, $LoopCount = 1, $LoopWait = 2000) ถ้าไม่ใช่ FileExists($Match_Pic) แล้ว _Internal_ErrorLogger("ไม่พบรูปภาพที่ตรงกัน: " & $Match_Pic) ส่งคืน SetError(1) EndIf หาก $LoopCount <= 0 แล้ว ConsoleWrite("ข้อผิดพลาด: $LoopCount Variable ตั้งค่าเป็น 0 ที่ ต้องการอย่างน้อย 1 รายการ") ส่งคืน SetError(1) EndIf Local $hBitmap ;ตัวนับประสิทธิภาพ Local $Perf = TimerInit() ;โหลดการจับคู่รูปภาพ ในเครื่อง $hMatch_Pic = _cvLoadImage($Match_Pic) Local $hMatch_Size = _cvGetSize($hMatch_Pic) Local $width2 = DllStructGetData($hMatch_Size $he2Struct Local ) ($hMatch_Size, "height") ในเครื่อง $ScreenSize = _ScreenSize() สำหรับ $iTries = 1 ถึง $LoopCount Step +1 ;Capature Screen / Load as Main image ถ้าไม่ IsArray($CustomCords) แล้ว $hBitmap = _ScreenCapture_Capture("", 0, 0, $ScreenSize[0], $ScreenSize[1], False) อื่น ๆ $hBitmap = _ScreenCapture_Capture("", $CustomCords[0], $CustomCords[1], $CustomCords[ 2], $CustomCords[3], เท็จ) EndIf Local $Bitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) Local $hMain_Pic = _Opencv_BMP2IPL($Bitmap) Local $hMain_Size = _cvGetSize($hMain_Pic) Local $width = DllStructGetData($hMain_Size, "width") Local $ height = DllStructGetData($hMain_Size $ Local " - $width2 + 1 Local $rh = $height - $height2 + 1 Local $tmaxloc = DllStructCreate( "int x;" & "int y;") Local $tminloc = DllStructCreate( "int x;" & "int y; ") Local $tmaxval = DllStructCreate("double max;") $tminval ท้องถิ่น = DllStructCreate("double min;") ท้องถิ่น $pmaxloc = DllStructGetPtr($tmaxloc) ท้องถิ่น $pminloc = DllStructGetPtr($tminloc) ท้องถิ่น $pmaxval = DllStructGetPtr($tmaxval) ท้องถิ่น $pminval = DllStructGetPtr($tminval) ;ค้นหาการจับคู่ ในพื้นที่ $presult = _cvCreateMat($rh, $rw, 5) _cvMatchTemplate($hMain_Pic, $hMatch_Pic, $presult, 5) _cvThreshold($presult, $presult, $Threshold, 1, 0) _cvpresultMaxLoc , $pminval, $pmaxval, $pminloc, $pmaxloc, Null) ;ตั้งค่าพิกัด ท้องถิ่น $Coordinates[4] ถ้า IsArray($CustomCords) จากนั้น $Coordinates[0] = DllStructGetData($tmaxloc, "x") + $CustomCords[0] ; x $Coordinates[1] = DllStructGetData($tmaxloc, "y") + $CustomCords[1] ; y $Coordinates[2] = DllStructGetData($tmaxloc, "x") + $width2 + $CustomCords[0] ;x2 $Coordinates[3] = DllStructGetData($tmaxloc, "y") + $height2 + $CustomCords[1] พิกัด ] ;y2 อื่น ๆ $Coordinates[0] = DllStructGetData($tmaxloc, "x"); x $Coordinates[1] = DllStructGetData($tmaxloc, "y"); y $พิกัด[2] = DllStructGetData($tmaxloc, "x") + $width2 ;x2 $พิกัด[3] = DllStructGetData($tmaxloc, "y") + $height2 ;y2 EndIf ;ปล่อยทรัพยากร _cvReleaseMat($presult) _cvReleaseImage($hMain_Pic) _GDIPlus_BitmapDispose($Bitmap) _WinAPI_DeleteObject($hBitmap) ตรวจสอบว่าพบ หรือไม่ ถ้าไม่พบ (DllStructGetData($tmaxloc, "x") = 0 และ DllStructGetData($tmaxloc, "y") = 0 And $width2 = DllStructGetData($tmaxloc, "x") + $width2 And $height2 = DllStructGetData($tmaxloc, "y") + $height2) จากนั้น _cvReleaseImage($hMatch_Pic) _Internal_MatchLogger("พบการจับคู่ที่: " & $Coordinates[0] & "|" & $Coordinates[1] & "|" & $Coordinates [2] & "|" & $Coordinates[3] & " // ตัวนับลูป: " & $iTries & " // เกณฑ์: " & $Threshold & " // เวลาตรวจสอบทั้งหมด: " & Round(TimerDiff($Perf) ), 0) & "มิลลิวินาที") ส่งคืนพิกัด $ EndIf Sleep($LoopWait) ถัดไป _cvReleaseImage($hMatch_Pic) _Internal_ErrorLogger("ไม่พบรายการที่ตรงกัน ตัวนับลูป: " & $LoopCount & ". // เวลาตรวจสอบทั้งหมด: " & Round(TimerDiff($Perf), 0) & " ms // เวลารอต่อลูป: " & $LoopWait & " ms. // Threshold: " & $Threshold & " // Match Image: " & $Match_Pic) Return SetError(2) EndFunc ;==>_MatchPicture ; #FUNCTION# =============================================== ================================================= =================== ; ชื่อ ..........: _OpenCV_EnableLogging ; คำอธิบาย ...: เปิดใช้งานการบันทึกการแข่งขันและข้อผิดพลาดในไฟล์และคอนโซล ; ไวยากรณ์ ........: _OpenCV_EnableLogging([$MatchLogging = True[, $ErrorLogging = False[, $AutoitConsoleLogging = False]]) ; พารามิเตอร์ ....: $MatchLogging - [ทางเลือก] บันทึกการแข่งขันทั้งหมดในไฟล์ที่มีพิกัดและรายละเอียดอื่นๆ ค่าเริ่มต้นคือ จริง ; $ErrorLogging - [ตัวเลือก] บันทึกข้อผิดพลาดทั้งหมดรวมถึงการจับคู่ที่ล้มเหลวในไฟล์ ค่าเริ่มต้นเป็นเท็จ ; $AutoitConsoleLogging - [ตัวเลือก] แสดงผลการแข่งขัน ข้อผิดพลาด และการจับคู่ที่ล้มเหลวทั้งหมดบนคอนโซล Autoit ค่าเริ่มต้นเป็นเท็จ ; ================================================= ================================================= ============================ Func _OpenCV_EnableLogging($MatchLogging = True, $ErrorLogging = False, $AutoitConsoleLogging = False) $OpenCV_MatchLogging = $MatchLogging $OpenCV_ErrorLogging = $ErrorLogging $OpenCV_AutoitConsoleLogging = $AutoitConsoleLogging EndFunc ;==>_OpenCV_EnableLogging ; #FUNCTION# =============================================== ================================================= =================== ; ชื่อ ..........: _MarkMatch ; คำอธิบาย ...: วาดเส้นตรงที่ตำแหน่งของการแข่งขันเพื่อระบุตำแหน่งที่พบการแข่งขันบนหน้าจอ ; ไวยากรณ์ ........: _MarkMatch($พิกัด[, $iColor = 0x0000FF]) ; พารามิเตอร์ ....: $Coordinates - Array ส่งคืนโดย _MatchPicture ; $iColor - [ตัวเลือก] ค่าจำนวนเต็ม ค่าเริ่มต้นคือ 0x0000FF ; หมายเหตุ ................: เครื่องหมายไม่สามารถมองเห็นได้เป็นเวลานาน ; ผู้แต่ง ........: มัลกี้ ; แก้ไขแล้ว .....: BB_19 ; ================================================= ================================================= ============================ Func _MarkMatch($Coordinates, $iColor = 0x0000FF) Local $start_x = $Coordinates[0], $start_y = $Coordinates[1], $iWidth = $Coordinates[2], $iHeight = $Coordinates[3] ในพื้นที่ $hDC = _WinAPI_GetWindowDC(0) ; DC ของหน้าจอทั้งหมด (เดสก์ท็อป) Local $tRect = DllStructCreate($tagRECT) DllStructSetData($tRect, 1, $start_x) DllStructSetData($tRect, 2, $start_y) DllStructSetData($tRect, 3, $iWidth) Dll$tRctData , 4, $iHeight) $hBrush ในพื้นที่ = _WinAPI_CreateSolidBrush($iColor) _WinAPI_FrameRect($hDC, DllStructGetPtr($tRect), $hBrush) _WinAPI_DeleteObject($hBrush) _WinAPI_ReleaseDC(0, $ hDC) EndFunc ;==>_MarkMatch ; #FUNCTION# =============================================== ================================================= =================== ; ชื่อ ..........: _ScreenSize ; คำอธิบาย ...: ส่งคืนค่าความกว้าง + ความสูงทั้งหมดที่จำเป็นในการสร้างสแน็ปช็อตของจอแสดงผลทั้งหมดในคราวเดียว ; ไวยากรณ์ ........: _ScreenSize() ; ส่งกลับค่า .: Array ด้วย [0]=Width, [1]=Height ; ผู้แต่ง ........: BB_19 ; ================================================= ================================================= ============================ Func _ScreenSize() ;คืนค่าความกว้าง+ความสูงของจอภาพทั้งหมด ในพื้นที่ $MonSizePos[2], $MonNumb = 1 $MonSizePos[0] = @DesktopWidth $MonSizePos[1] = @DesktopHeight ;รับจอภาพ Local $aPos, $MonList = _WinAPI_EnumDisplayMonitors() ถ้า @error จากนั้นคืนค่า $MonSizePos หาก IsArray($MonList) จากนั้น ReDim $MonList[$MonList[0][0] + 1][5] สำหรับ $i = 1 ถึง $MonList [0][0] $aPos = _WinAPI_GetPosFromRect($MonList[$i][1]) สำหรับ $j = 0 ถึง 3 $MonList[$i][$j + 1] = $aPos[$j] Next Local $ width = $MonList[$i][1] + $MonList[$i][3] Local $height = ($MonList[$i][2] + $MonList[$i][4]) ถ้า $MonSizePos[ 0] < ($width) จากนั้น $MonSizePos[0] = $width ถ้า $MonSizePos[1] < ($height) จากนั้น $MonSizePos[1] = $height Next EndIf ส่งคืน $MonSizePos EndFunc ;==>_ScreenSize Func _Internal_MatchLogger($Message) Local $Timestamp = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " ถ้า $OpenCV_AutoitConsoleLogging แล้ว ConsoleWrite($Timestamp & $Message & @CRLF) ถ้า $OpenCV_MatchLogging จากนั้น ในเครื่อง $MatchLogFile = FileOpen(@ScriptDir & "\OpenCV_Match.log", 1) FileWrite($MatchLogFile, $Timestamp & $Message & @CRLF ) FileClose($MatchLogFile) EndIf EndFunc ;==>_Internal_MatchLogger Func _Internal_ErrorLogger($ข้อความ) Local $Timestamp = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & " - " ถ้า $OpenCV_AutoitConsoleLogging แล้ว ConsoleWrite( $Timestamp & $Message & @CRLF) ถ้า $OpenCV_ErrorLogging จากนั้น $ErrorLogFile ในเครื่อง = FileOpen(@ScriptDir & "\OpenCV_Error.log", 1) FileWrite($ErrorLogFile, $Timestamp & $Message & @CRLF) FileClose($ErrorLogFile) EndIf EndFunc ;==>_Internal_ErrorLogger ;ฟังก์ชั่น OpenCV ที่สร้างโดย mylise, https://www.autoitscript.com/forum/topic/160732-opencv-udf/ Func _Opencv_BMP2IPL($pBmpImage) Local $iW = _GDIPlus_ImageGetWidth($pBmpImage), $iH = _GDIPlus_ImageGetHeight($pBmpImage) Local $tBitmapData = _GDIPlus_BitmapLockBits($pBmpImage, 0, $iPILMX) ท้องถิ่น $pIPL = _cvCreateImageHeader(_cvSize($iW, $iH), 8, 4) _cvSetData($pIPL, DllStructGetData($tBitmapData, "scan0"), DllStructGetData($tBitmapData, "stride")) $pIplDst ในเครื่อง = _cvCloneImage($pIPL) _cvReleaseImageHeader($pIPL) _GDIPlus_BitmapUnlockBits($pBmpImage, $tBitmapData) ท้องถิ่น $pIplDst2 = _cvCreateImage(_cvSize($iW, $iH), 8, 3) _cvCvtColor($pIplDst, $pIplDst2, 1) _cvReleaseImage($pIplDst) ส่งคืน $pIplDst2 EndFunc ;==>_Opencv_BMP2IPL Func _cvCvtColor($cvsrc, $cvdst, $cvcode) DllCall($_opencv_imgproc, "none:cdecl", "cvCvtColor", "ptr", $cvsrc, "ptr", $cvdst, "int", $cvcode) ถ้า @ error จากนั้น ConsoleWrite("ข้อผิดพลาดใน cvCvtColor") ส่งคืน EndFunc ;==>_cvCvtColor Func _cvCreateImage($cvsize, $cvdepth, $cvchannels) Local $_aResult = DllCall($_opencv_core, "ptr:cdecl", "cvCreateImage", "struct", $cvsize, "int", $cvdepth, "int", $ cvchannels) หาก @error แล้ว ConsoleWrite ("ข้อผิดพลาดใน cvCreateImage") ส่งคืน $_aResult[0] EndFunc ;==>_cvCreateImage Func _cvReleaseImageHeader($cvimage) DllCall($_opencv_core, "none:cdecl", "cvReleaseImageHeader", "ptr*", $cvimage) หาก @error จากนั้น ConsoleWrite ("ข้อผิดพลาดใน cvReleaseImageHeader") ส่งคืน EndImage;==>_cvReleaseHeader Func _cvCloneImage($cvimage) Local $_aResult = DllCall($_opencv_core, "ptr:cdecl", "cvCloneImage", "ptr", $cvimage) ถ้า @error จากนั้น ConsoleWrite ("ข้อผิดพลาดใน cvCloneImage") ส่งคืน $_aResult[0] EndFunc ;==>_cvCloneImage Func _cvSetData($cvarr, $cvdata, $cvstep) DllCall($_opencv_core, "none:cdecl", "cvSetData", "ptr", $cvarr, "ptr", $cvdata, "int", $cvstep) ถ้า @ error จากนั้น ConsoleWrite("ข้อผิดพลาดใน cvSetData") ส่งคืน EndFunc ;==>_cvSetData Func _cvSize($width, $height) Local $vSize = DllStructCreate("int width;" & "int height;") DllStructSetData($vSize, "width", $width) DllStructSetData($vSize, "height", $height ) คืนค่า $vSize EndFunc ;==>_cvSize Func _cvCreateImageHeader($cvsize, $cvdepth, $cvchannels) Local $_aResult = DllCall($_opencv_core, "ptr:cdecl", "cvCreateImageHeader", "struct", $cvsize, "int", $cvdepth, "int", $ cvchannels) หาก @error แล้ว ConsoleWrite ("ข้อผิดพลาดใน cvCreateImageHeader") ส่งคืน $_aResult[0] EndFunc ;==>_cvCreateImageHeader Func _cvMinMaxLoc($cvarr, $cvmin_val, $cvmax_val, $cvmin_loc, $cvmax_loc, $cvmask = "") DllCall($_opencv_core, "none:cdecl", "cvMinMaxLoc", "ptr", $cvarr, "ptr" $cvmin_val, "ptr", $cvmax_val, "ptr", $cvmin_loc, "ptr", $cvmax_loc, "ptr", $cvmask) ถ้า @error แล้ว ConsoleWrite("error in cvMinMaxLoc") ให้ คืน ค่า EndFunc ;==>_cvMinMaxLoc Func _cvMatchTemplate($cvimage, $cvtempl, $cvresult, $cvmethod) DllCall($_opencv_imgproc, "none:cdecl", "cvMatchTemplate", "ptr", $cvimage, "ptr", $cvtempl, "cvresult", $cvresult , "int", $cvmethod) หาก @error แล้ว ConsoleWrite ("ข้อผิดพลาดใน cvMatchTemplate") ส่งคืน EndFunc ;==>_cvMatchTemplate Func _cvThreshold($cvsrc, $cvdst, $cvthreshold, $cvmax_value, $cvthreshold_type) Local $_aResult = DllCall($_opencv_imgproc, "double:cdecl", "cvThreshold", "ptr", $cvs, $c, "ptr" , "double", $cvthreshold, "double", $cvmax_value, "int", $cvthreshold_type) หาก @error แล้ว ConsoleWrite("error in cvThreshold") ส่งคืน EndFunc ;==>_cvThreshold Func _cvCreateMat($cvrows, $cvcols, $cvtype) Local $_aResult = DllCall($_opencv_core, "ptr:cdecl", "cvCreateMat", "int", $cvrows, "int", $cvcols, "int", $ cvtype) หาก @error แล้ว ConsoleWrite ("ข้อผิดพลาดใน cvCreateMat") ส่งคืน $_aResult[0] EndFunc ;==>_cvCreateMat Func _cvGetSize($pimage) Local $_aResult = DllCall($_opencv_core, "int64:cdecl", "cvGetSize", "ptr", $pimage) ถ้า @error แล้ว ConsoleWrite("error csize image ") Local $width = BitAND( 0xFFFFFFFF, $_aResult[0]) Local $height = Int($_aResult[0] / 2 ^ 32) Local $vSize = DllStructCreate("int width;" & "int height;") DllStructSetData($vSize, "width" , $width) DllStructSetData($vSize, "height", $height) คืนค่า $vSize EndFunc ;==>_cvGetSize Func _cvReleaseMat($cvmat) DllCall($_opencv_core, "none:cdecl", "cvReleaseMat", "ptr*", $cvmat) หาก @error จากนั้น ConsoleWrite ("ข้อผิดพลาดใน cvReleaseMat") ส่งคืน EndFunc ;==>_cvReleaseMat Func _cvReleaseImage($pimage) DllCall($_opencv_core, "none:cdecl", "cvReleaseImage", "ptr*", $pimage) ถ้า @error แล้ว ConsoleWrite ("ข้อผิดพลาดของอิมเมจรีลีส") EndFunc ;==>_cvReleaseImage Func _cvLoadImage($filename, $iscolor = 1) ถ้า $filename = "" จากนั้น Return SetError(1) $_aResult = DllCall($_opencv_highgui, "int:cdecl", "cvLoadImage", "str", $filename, "int ", $iscolor) ถ้า @error แล้วก็ ConsoleWrite("ไฟล์ไม่โหลด") ถ้าไม่ใช่ IsArray($_aResult) จากนั้น MsgBox(16, "Error", "Failed loading DLLs.") _OpenCV_Shutdown() ออกจาก EndIf Return $_aResult[0 ] EndFunc ;==>_cvLoadImage Func _OpenCV_Shutdown() DllClose($_opencv_core) DllClose($_opencv_highgui) DllClose($_opencv_imgproc) _GDIPlus_Shutdown() EndFunc ;==>_OpenCV_Shutdown Func _OpenCV_Startup() $_opencv_core = DllOpen("DLLs\opencv_core2413.dll") $_opencv_highgui = DllOpen("DLLs\opencv_highgui2413.dll") $_opencv_imgproc = DllOpen("DLLs\opencv_img" Proc2413.dll) = เปิด
    1 point
  3. I have learned more that we can't adjust anything on the client about code. Because in the end, all query must be queued in database and completed in a 1-1 queue, 1 queue, complete the next queue, continue -complete next... Thanks for all the advice.
    1 point
×
×
  • Create New...