我在Windows消息回调中收到了奇怪的输入。
除了private class OkHttpHandler extends AsyncTask<String, Void, byte[]> {
OkHttpClient client = new OkHttpClient();
@Override
protected byte[] doInBackground(String... params) {
Request.Builder builder = new Request.Builder();
builder.url(params[0]);
Request request = builder.build();
try {
Response response = client.newCall(request).execute();
return response.body().bytes();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] bytes) {
super.onPostExecute(bytes);
try {
if (bytes != null && bytes.length > 0) {
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imageView.setImageBitmap(bitmap);
tv.setText("Total btytes download: " + bytes.length);
}
} catch (Exception e) {
tv.setText("sorry, something went wrong!");
}
}
}
等正常消息之外,还有一些消息没有出现在任何表格中,例如this one。而且它们也没有被定义为error codes。
消息是:(十进制/十六进制)
356/0164(wParam:0,lParam:5760884)
49291 / c08b(wParam:4294967292或0,lParam:0)
49348 / c0c4(wParam:0,lParam:0)
有人知道他们的意思,或者我为什么要这样做?
答案 0 :(得分:3)
根据Win32文档:
以下是消息编号的范围。
Range Meaning 0 through WM_USER–1 Messages reserved for use by the system. WM_USER through 0x7FFF Integer messages for use by private window classes. WM_APP (0x8000) through 0xBFFF Messages available for use by applications. 0xC000 through 0xFFFF String messages for use by applications. Greater than 0xFFFF Reserved by the system.第一个范围(0到WM_USER -1)中的消息号由系统定义。此范围中未明确定义的值由系统保留。
第二个范围(WM_USER到0x7FFF)中的消息号可以由应用程序定义和使用,以在私有窗口类中发送消息。这些值不能用于定义整个应用程序中有意义的消息,因为某些预定义的窗口类已经定义了此范围内的值。例如,预定义的控件类(如BUTTON,EDIT,LISTBOX和COMBOBOX)可以使用这些值。除非应用程序旨在交换消息并将相同含义附加到消息编号,否则不应将此范围内的消息发送到其他应用程序。
第三个范围(0x8000到0xBFFF)中的消息号可供应用程序用作私人消息。此范围内的消息不与系统消息冲突。
当应用程序调用RegisterWindowMessage函数以检索字符串的消息编号时,在运行时定义第四个范围(0xC000到0xFFFF)中的消息编号。注册相同字符串的所有应用程序都可以使用关联的消息号来交换消息。但是,实际的消息编号不是常量,不能假设在不同的会话之间是相同的。
系统保留第五个范围(大于0xFFFF)的消息号。
WM_USER
为0x0400。
所以,
356(0x164)是系统保留的消息。具体来说,它是CB_GETCOMBOBOXINFO
。
49291(0xC08B)和49348(0xC0C4)是在运行时已向RegisterWindowMessage()
注册的字符串消息。您可能能够使用GetClipboardFormatName()
检索用于注册的原始字符串值,因为RegisterWindowMessage()
和RegisterClipboardFormat()
通常分享一个共同的原子表。