我使用代码示例连接到网络摄像头,并不真正理解传递给SendMessage方法的变量的含义。
SendMessage(DeviceHandle, WM_CAP_SET_SCALE, -1, 0)
SendMessage(DeviceHandle, WM_CAP_SET_PREVIEW, -1, 0)
-1是什么意思?缩放/预览或不缩放/预览?我宁愿使用零/一,零意味着假,也不知道-1的意思。
SendMessage(DeviceHandle, WM_CAP_EDIT_COPY, 0, 0);
在这种情况下零意味着什么?或者这个消息是无效的,零也没有意义,类似于最后的零参数?
顺便问一下,最后一个零参数意味着什么?
非常感谢您提前:))
答案 0 :(得分:2)
您可能找到了最初使用Visual Basic编写的示例代码。 SendMessage()的WParam参数记录为BOOL。它应该是FALSE(0)或TRUE(1)。 VB6的一个怪癖是它的布尔值TRUE值为-1。原因有点模糊,与其AND和OR运算符的工作方式有关。
您当前的代码意外运行,解释邮件的Windows代码只会将任何非零值视为“TRUE”。
但是有一个更大的问题,你的SendMessage()声明是错误的。 WParam和LParam参数可能被声明为“int”,一个32位值。在64位操作系统上,它们是64位值。在这样的操作系统上,SendMessage()调用将严重失败。还有一些可能性,你已经在64位操作系统上,并将这些参数声明为Long,就像它们在VB6中声明的那样。在这种情况下,您的代码将在32位操作系统上失败。
SendMessage的正确声明:
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
发送消息的正确方法:
SendMessage(DeviceHandle, WM_CAP_SET_SCALE, (IntPtr)1, IntPtr.Zero);
这将在32位和64位操作系统上正常工作。
答案 1 :(得分:0)
WM_CAP_SET_SCALE
消息启用或禁用预览视频图像的缩放
WM_CAP_SET_PREVIEW
消息启用或禁用预览模式
WM_CAP_EDIT_COPY
消息将视频帧缓冲区和相关调色板的内容复制到剪贴板
SendMessage
有下一个签名:
LRESULT WINAPI SendMessage(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
其中wParam
和lParam
- 是“其他特定于消息的信息”。 Wparam
类型表示word
,Lparam
表示long
。
此参数是可选的,可以使用,也可以不使用。因此,如果某些消息需要发送附加数据,则使用其中一个或两个。