首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从exe文件的屏幕检测颜色

从exe文件的屏幕检测颜色
EN

Stack Overflow用户
提问于 2020-09-14 14:15:15
回答 1查看 101关注 0票数 0

我有一个打印机控制程序( EXE文件)

当打印机正常工作时,程序显示绿色。并在停止时显示红色。现在:我想用Visual Basic编写一个颜色识别代码,这样编写的程序就可以检测到该Exe程序的颜色变化。也就是说,要了解打印机何时停止以及何时启动

我写的代码有一个问题:当我把窗体放在油漆上时。颜色代码关心的是不同的,我不能使用多个代码执行此检查

我的代码:

代码语言:javascript
复制
Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Declare Function GetDesktopWindow Lib "user32" () As Long
Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long




Private Sub Timer1_Timer()
Dim Pixel As Long
Dim Left As Long
Dim Top As Long
Dim hDC As Long

' Get Desktop window
hDC = GetWindowDC(GetDesktopWindow)

' Use size of screen
Left = Me.Left / Screen.TwipsPerPixelX
Top = Me.Top / Screen.TwipsPerPixelY

Pixel = GetPixel(hDC, Left, Top)

Me.Caption = Hex(Pixel)
Me.BackColor = Pixel
End Sub

image1

image2

EN

回答 1

Stack Overflow用户

发布于 2020-09-15 00:11:26

它看起来像是从你的窗口的标题栏中提取的像素数据。图像中的红色更接近236 (236,26,37是RGB值),表单显示的内容将转换为137,126,180 (897EB4的RGB )和146,135,187 (9287BB的RGB)。您可以看到颜色是错误的,因为窗体的背景与桌面上的红色不匹配。

我会试着在远离表单的地方阅读Pixel:

代码语言:javascript
复制
Left = (Me.Left / Screen.TwipsPerPixelX) - 20
Top = (Me.Top / Screen.TwipsPerPixelY) - 20

尽管如此,即使颜色受到投影的影响,您也可以对正在接收的值实现一定的容差。例如,您应该使用如下函数接受预期值的+/- 10范围内的值:

代码语言:javascript
复制
Function CheckColor(p_iRed, p_iGreen, p_iBlue, p_iTargetRed, p_iTargetGreen, p_iTargetBlue, p_iTolerance) As Boolean
    CheckColor = CheckColorPart(p_iRed, p_iTargetRed, p_iTolerance) And CheckColorPart(p_iGreen, p_iTargetGreen, p_iTolerance) And CheckColorPart(p_iBlue, p_iTargetBlue, p_iTolerance)
End Function

Function CheckColorPart(p_iValue, p_iTarget, p_iTolerance) As Boolean
    CheckColorPart = (p_iValue >= p_iTarget - p_iTolerance And p_iValue <= p_iTarget + p_iTolerance)
End Function

这应该会处理你所看到的颜色的细微变化,并检测出你正在寻找的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63878976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档