仿91助手的PC与android手机通讯(5) --- 使用adb获取手机信息
2015-01-16 16:01
459 查看
到这里,我知道的就差不多了。后面就是跟android手机的命令传递了。这些操作主要使用到android工具包---adb(android debug bridge)。这个东西是google提供的,网上有大量的教程,使用起来很简单。
我当时测试就是随便上网搜了一个adb.exe下载下來,打开一个黑框把文件拖进去回车就可以看到命令列表了,如下图:
![](http://img0.ph.126.net/Gi7TbrIcj_r8Zx5NMELaGQ==/1997346434838963876.png)
介绍一下获取android手机信息的基本流程:
WinExec("adb -d devices",SW_HIDE);
Sleep(1200);
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
char buffer[1024] = {0}; //用1K的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。
DWORD recvLen;
DWORD occupyLen = 0;
TCHAR command[1024] = _T("adb -d shell getprop ro.product.brand");//获取厂商名称
//_T("adb -d shell getprop ro.product.model")//设备型号
//_T("adb -d shell getprop ro.build.version.release")//android版本
//_T("adb -d shell dumpsys iphonesubinfo"}//IMEI码
//_T("adb -d shell cat /sys/class/net/wlan0/address")//MAC地址
HANDLE hRead,hWrite;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
return 0;
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.hStdError = hWrite;//把子进程的标准错误输出重定向到管道输入
si.hStdOutput = hWrite;//把子进程的标准输出重定向到管道输入
si.hStdInput = hRead;//把子进程的标准输入重定向到管道输出
TCHAR command[1024] = _T("adb -d shell getprop ro.product.brand");//获取厂商名称
if (! CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))// 启动进程以调用ADB
{
CloseHandle(hWrite);
CloseHandle(hRead);
return FALSE;
}
CloseHandle(hWrite);
if(WaitForSingleObject(pi.hProcess,800) == WAIT_TIMEOUT)//800ms的处理等待时间.
{
TerminateProcess(pi.hProcess,WAIT_TIMEOUT);
CloseHandle(pi.hProcess);
return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(ReadFile(hRead,buffer,200,&recvLen,NULL))//IMEI码的要做特殊处理。
{
CStringA strIMEI = buffer;
if(strIMEI.Find("error:") == -1)
{
strIMEI = strIMEI.Mid(strIMEI.FindOneOf("=")+2);
strcpy_s(buffer,1024,strIMEI.GetBuffer());
strIMEI.ReleaseBuffer();
occupyLen=strIMEI.GetLength();}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ReadFile(hRead,buffer,1024,&occupyLen,NULL);//其他信息直接返回读取到的东西就行。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
buffer[occupyLen-3] = '\0';
CloseHandle(hRead);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
TerminateProcess(pi.hProcess,0);
OK,今天到此为止.
原版地址:http://mongamind.blog.163.com/blog/static/193287261201310603758225/
我当时测试就是随便上网搜了一个adb.exe下载下來,打开一个黑框把文件拖进去回车就可以看到命令列表了,如下图:
![](http://img0.ph.126.net/Gi7TbrIcj_r8Zx5NMELaGQ==/1997346434838963876.png)
介绍一下获取android手机信息的基本流程:
WinExec("adb -d devices",SW_HIDE);
Sleep(1200);
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
char buffer[1024] = {0}; //用1K的空间来存储输出的内容,只要不是显示文件内容,一般情况下是够用了。
DWORD recvLen;
DWORD occupyLen = 0;
TCHAR command[1024] = _T("adb -d shell getprop ro.product.brand");//获取厂商名称
//_T("adb -d shell getprop ro.product.model")//设备型号
//_T("adb -d shell getprop ro.build.version.release")//android版本
//_T("adb -d shell dumpsys iphonesubinfo"}//IMEI码
//_T("adb -d shell cat /sys/class/net/wlan0/address")//MAC地址
HANDLE hRead,hWrite;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
return 0;
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.hStdError = hWrite;//把子进程的标准错误输出重定向到管道输入
si.hStdOutput = hWrite;//把子进程的标准输出重定向到管道输入
si.hStdInput = hRead;//把子进程的标准输入重定向到管道输出
TCHAR command[1024] = _T("adb -d shell getprop ro.product.brand");//获取厂商名称
if (! CreateProcess(NULL, command,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))// 启动进程以调用ADB
{
CloseHandle(hWrite);
CloseHandle(hRead);
return FALSE;
}
CloseHandle(hWrite);
if(WaitForSingleObject(pi.hProcess,800) == WAIT_TIMEOUT)//800ms的处理等待时间.
{
TerminateProcess(pi.hProcess,WAIT_TIMEOUT);
CloseHandle(pi.hProcess);
return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(ReadFile(hRead,buffer,200,&recvLen,NULL))//IMEI码的要做特殊处理。
{
CStringA strIMEI = buffer;
if(strIMEI.Find("error:") == -1)
{
strIMEI = strIMEI.Mid(strIMEI.FindOneOf("=")+2);
strcpy_s(buffer,1024,strIMEI.GetBuffer());
strIMEI.ReleaseBuffer();
occupyLen=strIMEI.GetLength();}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ReadFile(hRead,buffer,1024,&occupyLen,NULL);//其他信息直接返回读取到的东西就行。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
buffer[occupyLen-3] = '\0';
CloseHandle(hRead);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
TerminateProcess(pi.hProcess,0);
OK,今天到此为止.
原版地址:http://mongamind.blog.163.com/blog/static/193287261201310603758225/
相关文章推荐
- 仿91助手的PC与android手机通讯(5) --- 使用adb获取手机信息
- 仿91助手的PC与android手机通讯(1) --- 检测设备插入
- Android使用Displaymetrics类获取一下手机屏幕中的一些信息
- 使用adb aapt获取手机上apk的信息
- android系统中使用TelephonyManager类来获取imei号和其他手机信息
- android系统中使用TelephonyManager类来获取imei号和其他手机信息
- adb 获取Android手机信息命令
- android使用TelephonyManager获取imei和其他手机信息
- 实现pc端通过usb获取到android手机上的短信、通讯录等信息
- 教你获取并查看Android已安装应用程序的本地数据库信息(adb命令行与SQLite Manager插件的使用)
- Android使用Displaymetrics类获取一下手机屏幕中的一些信息
- 仿91助手的PC与android手机通讯(4) --- 自动安装手机驱动
- Android ADB工具-操作手机和获取手设备信息(四)
- pc使用adb通过wifi连接到android手机
- 实现pc端通过usb获取到android手机上的短信、通讯录等信息
- 仿91助手的PC与android手机通讯(3) --- 检测是否已经安装驱动
- Android使用Displaymetrics类获取一下手机屏幕中的一些信息,获取屏幕分辨率
- Android 使用ContentResolver获取手机图片和照片的相关信息
- adb获取android手机系统版本,已对应的api版本和硬件相关信息
- Android ADB工具-操作手机和获取手设备信息(四)