搜档网
当前位置:搜档网 › 如何通过LABVIEW获取硬盘ID

如何通过LABVIEW获取硬盘ID

如何通过LABVIEW获取硬盘ID
如何通过LABVIEW获取硬盘ID

通过LabVIEW获取硬盘序列号

网上这类的帖子很多,不过差不多都是通过调用动态链接库实现的。准确的说实现获取硬盘序列号的工作是由其他语言编写的DLL来实现的。今天我的这例子不用调用动态链接库,直接由LabVIEW来获取硬盘的序列号。

这种方式在一个论坛上看见过,本想参考参考,不过楼主把VI加密了,索性自己做一个和大家分享,讨论讨论。

本程序读取的是硬盘的物理序列号,不同于DLL调用的方法,本方法获取的是硬盘唯一真正物理ID(是固化在硬盘BISO里的SN不是分区的SN),不会出现重复,也不可能被修改(或者说难度很大,而且还有危险,网上看到过说一个叫PC-3000的可以修改,没有尝试过,有哪位胆大拿自己硬盘试验一下,把结果共享一下吧)。可用在软件加密中。

1、原理

大家知道,硬盘相对于CPU来说属于外部设备,而CPU访问外部设备其实就是对外部IO的端口操作,这是硬盘的底层操作,对硬盘的任何操作都可以的,这样只要我们搞清楚如何通过IO指令对硬盘操作和硬盘物理序列号存放的寄存器就可以轻松读取我们所要的硬盘物理序列号了。下面是从网络上搜集的一些资料。

硬盘读写端口的具体含义

对硬盘进行操作的常用端口是1f0h~1f7h号端口,各端口含义如下:

端口号读还是写具体含义

1F0H 读/写用来传送读/写的数据(其内容是正在传输的一个字节的数据)

1F1H 读用来读取错误码

1F2H 读/写用来放入要读写的扇区数量

1F3H 读/写用来放入要读写的扇区号码

1F4H 读/写用来存放读写柱面的低8位字节

1F5H 读/写用来存放读写柱面的高2位字节(其高6位恒为0)

1F6H 读/写用来存放要读/写的磁盘号及磁头号

第7位恒为 1

第6位恒为0

第5位恒为 1

第4位为0代表第一块硬盘、为1代表第二块硬盘

第3~0位用来存放要读/写的磁头号

1f7H 读用来存放读操作后的状态

第7位控制器忙碌

第6位磁盘驱动器准备好了

第5位写入错误

第4位搜索完成

第3位为1时扇区缓冲区没有准备好

第2位是否正确读取磁盘数据

第1位磁盘每转一周将此位设为1,

第0位之前的命令因发生错误而结束

写该位端口为命令端口,用来发出指定命令

为50h 格式化磁道

为20h 尝试读取扇区

为21h 无须验证扇区是否准备好而直接读扇区

为22h 尝试读取长扇区(用于早期的硬盘,每扇可能不是512字节,而是128字节到1024

之间的值)

为23h 无须验证扇区是否准备好而直接读长扇区

为30h 尝试写扇区

为31h 无须验证扇区是否准备好而直接写扇区

为32h 尝试写长扇区

为33h 无须验证扇区是否准备好而直接写长扇区

上面是磁盘0的指令,下面是磁盘1的

171H 1号硬盘错误寄存器

172H 1号硬盘数据扇区计数

173H 1号硬盘扇区数

174H 1号硬盘柱面(低字节)

175H 1号硬盘柱面(高字节)

176H 1号硬盘驱动器/磁头寄存器

177H 1号硬盘状态寄存器

2、操作

知道硬盘的IO操作指令了,下面就是如何在LabVIEW里去实现这些指令了。这方面LabVIEW提供了现成的操作指令。他们就是读端口和写端口。

点击开看大图

接下来的工作就很简单了。大致流程就是下面这样了:

2.1 等待硬盘就绪

2.2 发送命令

; 如果向主控制发送命令,则端口为1f0h-1f7h

; 如果向副控制发送命令,则端口为170h-177h

; 1f6h 如果要检测的设备为该IDE接口的主(MASTER)设备,

那么发送a0,如果为从那么发送b0

; 1f7h 如果要检测的设备为ATA 设备那么发送ec

如果为ATAPI 设备那么发送a1

2.3 等待硬盘就绪

2.4 将返回信息读回

; 注意一定要读满100h 个字长。也就是寄存器中的所有信息

2.5 返回的信息中,型号、序列号、版本号为字形式

; 需要整理到字符串的形式

3、代码及前面板

点击开看大图

注意:此程序只在XP下对并口硬盘做了测试。对串口(SATA)硬盘的测试失败。VISTA下由于安全原因可能会被禁止,请将程序保护的选

项去除。这个没有详细测试,希望安装了VISTA系统的朋友测试一下,把结果共享出来。

上面图即为程序的全部代码。凡是索要源代码的留言和邮件疑虑不予回复。敬请谅解。

关键词:LabVIEW端口操作硬盘序列号硬盘ID 硬盘SN

最新基于LabVIEW的数据采集与处理系统设计

基于LabVIEW的数据采集与处理系统设计 摘要:虚拟仪器作为一种基于图形化编程的新型概念仪器,以计算机作为运行媒介,节省了大量的显示、控制硬件,越来越显示出它独有的优势。基于LabVIEW的数据采集与处理系统,整体采用了循环结构与顺序结构相结合的形式,实现了模拟信号的采集与实时动态显示,并且仿真出了对数据的采集和报警功能,并且能够存储数据,进行各种自定义设置,显示效果良好,对现实中的数据采集与处理系统具有很大的借鉴作用。 关键词:虚拟仪器;数据采集;数据处理;LabVIEW

The Design of Data Acquisition and Processing System Based on LabVIEW Abstract:As a kind of virtual instrument based on graphical programming the new concept of instruments, run at the computer as a medium, save a large amount of display, control hardware, more and more shows its unique advantages. Data acquisition and processing system based on LabVIEW, and the overall adopted loop structure and order structure, in the form of the combination of the dynamic analog signal acquisition and real-time display, and the simulation of the data collection and alarm function, and the ability to store data, for a variety of Settings, display effect is good, the reality of the data acquisition and processing system has a great reference. Keywords:Virtual Instrument;Data Collection;Data Processing;LabVIEW;

机器码获取生成注册码

机器码获取生成注册码 通过获取硬盘的物理序列号和网卡MAC地址,为您的程序提供了获取唯一的机器码,你可以根据此码,生成自己产品注册码,有效防止软件的盗版可以自己根据获取到的硬盘序列号和网卡MAC地址进行一定的加密算法生成,唯一的机器码. 给自己的软件制作注册码.从今天起,您开发的的任何软件如果您愿意都可以为之加密 --为您的软件制作一款注册机!当您看完这篇文章时, 您就可以理直气壮的告诉您的用户 : "喂, 想用我的软件是吧 ? 掏钱!". 呵呵, 这当然只是给自己壮胆的话, 现在连万能注册机都有了, 人家还怕啥 ? 不过只要您想想微软, 人家再牛B的加密技术都会被国人"鄙视"? 但人家不也在中国大把大把的捞钱吗?OK, 不扯了, 我们进入正题.同一般的软件注册一样, 我们这里的注册是这样进行的: 1. 首先根据用户的硬件信息生成24位的机器码 -- 相当于种子,用于生成随机数 2. 采用注册机根据特征数字生成一个24位注册码 -- 相当于伪随机数生成器, 输出长度自己定, 最后用一个格式化函数,将随机数映射到ASCII字符集合 3. 用户输入注册码注册成功 假设客户很喜欢您的软件, 也假设他没有破解, 他需要通过以下方式向您取得注册码: (1).如果他能上网, 他需要把机器码用Email发给您; (2).如果他不能上网, 他可以把机器码用手机短信的方式发给您. (3).如果他没有手机, 他可以带着机器码然后坐火车到您的办公室想您要一个注册码. --第3条只是为了让您看帖子的时候别太枯燥了, 抱歉. 现在, 您拿到了客户的机器码后, 如果您同时也收到了他汇的钱, 呵呵, 好像给软件加密就是为了要钱吧? 那么您就可以用客户的机器码生成一个唯一的注册码再用同样的方式给用户, 最后, 用户输入注册码即可! 需要强调的是客户机器的硬件信息获取方式是有很多种选择的. 这里我们选择最放心的两个硬件: CUP的序列号和硬盘的卷标号. 好了,下面您就可以一步一步制作一款软件注册机了. 步骤一: 获得CUP序列号和硬盘序列号的实现代码如下:Java代码 #region 获取cpu的序列号 public string getCpu() { string strCpu = null; ManagementClass myCpu = new ManagementClass("win32_Processor");

C#中使用FindWindow函数详解 从标题获取句柄

C#中使用FindWindow函数详解从标题获取句柄 FindWindow用来根据类名和窗口名来得到窗口句柄的。但是这个函数 不能查找子窗口,也不区分大小写。 如果要从一个窗口的子窗口中查找需要使用FindWindowEX。 1.在C#中使用方法如下: [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtrFindWindow(string lpClassName,stringlpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtrFindWindowEx(IntPtrhwndParent, IntPtrhwndChildAfter, string lpClassName, string lpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtrFindWindow(string lpClassName,stringlpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtrFindWindowEx(IntPtrhwndParent, IntPtrhwndChildAfter, string lpClassName, string lpWindowName); 2. 实例参考: IntPtrhWnd = FindWindow(null, "test Demo"); 这样会查找所有title是"test Demo"的窗口。 参考下面的资料解释 3. FindWindow参数详解: Parameters

LabVIEW数据采集教程

5.1信号输入(数据采集) 信号输入部分可以借助DAQ助手来实现,也可以使用DAQ通道来实现。在NI-DAQmx 中,任务是包括一条或多条通道以及定时、触发等属性的集合。从概念上来说,任务就是要进行的测量或生成。例如,测量DAQ设备一条或多条通道的温度就是一个任务。 在创建DAQ任务前,我们首先得初始化设备。初始化设备要用到Mesurement&Automention Explorer(如图5.1所示为它的启动界面)。按照下述步骤初始化设备。 图5.1 1.打开Mesurement&Automention Explorer。 2.在“配置”栏-“设备与接口”上单击鼠标右键,选择“新建…”,会出现如图5.2所示界面: 图5.2

由于没有硬件,这里用仿真设备,这里我们就选择“NI-DAQ仿真设备”,点“完成”后会出现如图5.3界面。 图5.3 3.点击“E系列DAQ”前面的“+”,展开栏目后如图5.4所示: 图5.4 这里我们选择“NI PCI-6071E”,点击“确定”后出现下图所示界面。很容易发现,界面左边“配置”-“NI-DAQ设备”下多了一个“NI PCI-6071E”,单击它,右边的界面中出现它的配置参数,如图5.5所示。 图5.5 经过以上步骤的设置,设备设备初始化完毕。接下来我们就可以创建NI-DAQmx任务了。 3.3.1.1创建NI-DAQmx任务

按照下列步骤,可以创建并配置一个从DAQ设备读取电压的任务。 方案1:利用DAQ助手 1. 打开一个新建的空白VI。 2. 在程序框图中,打开函数选板并选择Express?输入,显示输入选板。 3. 选择输入选板上的“DAQ助手”Express VI,如左图所示。将该Express VI 放置到程序框图上。打开DAQ助手,显示新建Express任务对话框。 4. 单击采集信号?模拟输入,显示模拟输入选项。 5. 选择电压创建一个新的电压模拟输入任务。对话框将列出各个已安装的DAQ设备的通道。列表中通道的数量取决于DAQ设备的实际通道数量。 6. 在支持物理通道列表中,选择仪器与信号连接的物理通道(如ai0)并单击完成按钮。“DAQ助手”将打开一个新对话框,如图5.6所示。对话框显示选中完成任务的通道的配置选项。 7. 在设置选项卡的信号输入范围部分,将最大值和最小值分别设为10 和-10。 8. 在配置选项卡的定时设置部分,从采集模式下拉菜单中选择N采样。 9. 在待读取采样文本框中输入1000。 图5.6 3.3.1.2测试任务 测试任务,检验通道配置是否正确。按照下列步骤,确认数据采集的执行状态。 1. 单击运行按钮。如左图所示。Express任务选项卡及时更新,以确认正在采集数据。 2. 单击确定按钮,保存当前配置并关闭DAQ助手。LabVIEW将生成该VI。 3. 将VI命名为Read V oltage.vi,保存至合适的位置。 3.3.1.3绘制DAQ设备采集的数据 按照下列步骤,把从通道中采集到的数据绘制到波形图并改变信号的名称。 1. 右键单击电压接线端,并从快捷菜单中选择创建?图形显示控件。 2. 切换到前面板并运行VI三到四次。观察波形图。波形图顶部的图例中将出现电压。 3. 在程序框图上,右键单击“DAQ助手”Express VI,从快捷菜单中选择属性,打开DAQ助手。

VC++获取网卡MAC、硬盘序列号、CPU+ID、BIOS编号

VC++获取网卡MAC、硬盘序列号、CPU ID、BIOS编号 以下代码可以取得系统特征码(网卡MAC、硬盘序列号、CPU ID、BIOS编号) BYTE szSystemInfo[4096]; // 在程序执行完毕后,此处存储取得的系统特征码 UINT uSystemInfoLen = 0; // 在程序执行完毕后,此处存储取得的系统特征码的长度 // 网卡MAC 地址,注意: MAC 地址是可以在注册表中修改的 { UINT uErrorCode=0; IP_ADAPTER_INFO iai; ULONG uSize = 0; DWORD dwResult = GetAdaptersInfo( &iai, &uSize ); if( dwResult == ERROR_BUFFER_OVERFLOW ) { IP_ADAPTER_INFO* piai=( IP_ADAPTER_INFO* )HeapAlloc( GetProcessHeap( ), 0, uSize ); if( piai != NULL ) { dwResult = GetAdaptersInfo( piai, &uSize ); if( ERROR_SUCCESS == dwResult ) { IP_ADAPTER_INFO* piai2 = piai; while(piai2!=NULL &&(uSystemInfoLen+piai2->AddressLength )< 4096U) { CopyMemory(szSystemInfo+uSystemInfoLen,piai2->Address, piai2->AddressLength ); uSystemInfoLen += piai2->AddressLength; piai2 = piai2->Next; } } else { uErrorCode = 0xF0000000U + dwResult; } VERIFY( HeapFree( GetProcessHeap( ), 0, piai ) ); } else { return FALSE; } } else { uErrorCode = 0xE0000000U + dwResult; } if( uErrorCode != 0U ) { return FALSE; } }

免费版LabVIEW数据采集编程指南【上篇】

数据采集编程指南上篇

DAQ基础知识简介简介 本节主要介绍数据采集技术的基本知识点,包括以下三个斱面的内容: 1.一个完整数据采集系统的基本组成部分 2.NI提供了基于哪些平台的数据采集硬件产品,它们分别适用于什么样的应用领域 3.数据采集设备硬件选型过程中应该关注哪些重要参数 数据采集系统的基本组成 图1-1 数据采集系统基本组成部分 如图1-1所示,一个完整的数据采集系统通常由原始信号、信号调理设备、数据采集设备和计算机四个部分组成。但有的时候,自然界中的原始物理信号并非直接可测的电信号,所以,我们会通过传感器将这些物理信号转换为数据采集设备可以识别的电压或电流信号。加入信号调理设备是因为某些输入的电信号并不便于直接迚行测量,因此需要信号调理设备对它迚行诸如放大、滤波、隔离等处理,使得数据采集设备更便于对该信号迚行精确的测量。数据采集设备的作用是将模拟的电信号转换为数字信号送给计算机迚行处理,或将计算机编辑好的数字信号转换为模拟信号输出。计算机上安装了驱动和应用软件,斱便我们与硬件交互,完成采集任务,并对采集到的数据迚行后续分析和处理。 对于数据采集应用来说,我们使用的软件主要分为三类,如图1-2所示。首先是驱动。NI 的数据采集硬件设备对应的驱动软件是DAQmx,它提供了一系列API函数供我们编写数据采集程序时调用。并且,DAQmx不光提供支持NI的应用软件LabVIEW,LabWindows/CVI

的API函数,它对于VC、VB、.NET也同样支持,斱便将您的数据采集程序与其它应用程序整合在一起。 图1-2 数据采集软件架极 同时,NI也提供了一款配置管理软件 Measurement and Automation Explorer,斱便我们与硬件迚行交互,并且无需编程就能实现数据采集功能;还能将配置出的数据采集任务导入LabVIEW,并自动生成LabVIEW代码。关于这款软件的使用斱法,在后面的章节中会详细介绍。 位于最上层的是应用软件。我们推荐使用的是NI的LabVIEW。LabVIEW是图形化的开収环境,它无需我们有较多的软件编程基础,可以简单、斱便地通过图标的放置和连线的斱式开収数据采集程序。同时,LabVIEW中提供了大量的函数,可以帮助我们对采集到的数据迚行后续的分析和处理;LabVIEW也提供大量控件,可以让我们轻松地设计出专业、美观的用户界面。 当然,LabVIEW的强大功能不仅仅局限于数据采集应用。如果您希望获得更多关于LabVIEW编程斱面的知识,请登陆如下网页,收看LabVIEW网络讲坛,NI的专业工程师会就LabVIEW编程中的重要知识点为大家做详细的讲解和演示。 https://www.sodocs.net/doc/d92443417.html,/china/labviewtips NI数据采集硬件产品及其应用领域

VCMFC编程各种窗口句柄获取函数详解

AfxGetMainWnd AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。 函数原型:HWND GetTopWindow(HWND hWnd); 参数: hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。返回值: 如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。 GetForegroundWindow 函数功能:该函数返回当前系统的前台窗口的窗口句柄。 函数原型:HWND GetForegroundWindow(VOID) 返回值:函数返回前台窗回的句柄。 GetActiveWindow 函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。 函数原型:HWND GetActiveWindow(VOID) 返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。 GetSafeHwnd 函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。 通过下面的例子来看其理由: CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->m_hwnd; //得到它的HWND 这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND 就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL IsWindowVisible 函数功能:该函数获得给定窗口的可视状态。 函数原型:BOOL IsWindowVisible(HWND hWnd); 参数; hWnd:被测试窗口的句柄。 返回值:

在LabVIEW中利用DLL实现数据采集

在LabVIEW中利用DLL实现数据采集Realization of Data Acquis ition with DLL in LabVIEW 班级学号:0704114-23 姓名:杨鹏

摘要: 随着计算机技术及虚拟仪器技术的迅速发展, 虚拟仪器正逐渐成为测试领域的发展方向。本文介绍了在LabVIEW 环境下驱动普通数据采集卡的重要方法- - 动态链接库机制(DLL), 并结合具体实例介绍了一种利用LabVIEW 提供的Call LibraryFunction (CLF)节点实现对动态链接库(DLL)调用的关键技术及步骤, 实现LabV IEW 与普通数据采集卡的结合, 丰富LabVIEW 对硬件的控制能力。并将数据库技术应用于虚拟测试系统中, 建立了Access 数据库, 实现数据的存储和自动管理,从而拓展了虚拟测试系统的功能。 关键词:动态链接库(DLL); 数据采集; 1 绪论

目前, 电子测试仪器的发展方向正在从简单功能组合向以个人计算机(PC)为核心的通用虚拟测试平台过渡, 从硬件模块向软件包形式过渡。建立在PC 机和数据采集设备上的虚拟仪器系统, 由于其特有的灵活和强大的功能, 也越来越广泛的应用于实验室研究和工业控制中的测试及测量领域。从简单的仪器控制, 数据采集到尖端的测试和工业自动化, 从大学实验室到工厂, 从探索研究到技术集成, 人们都可以发现LabVIEW 应用的成果和开发的产品。LabVIEW采用基于流程图的图形化编程方式, 也被成为G 语言(graphical language)。 G 语言编程和虚拟仪器技术已经成为工业界和学术界关注的热点技术之一。数据采集是LabVIEW 的核心技术之一, 也是LabVIEW 与其他编程语言相比的优势所在。使用LabVIEW 的DAQ 技术,可以编写出强大的DAQ 应用软件。NI 公司生产的系列数据采集卡借助LabVIEW 内部的DAQ 库的驱动,可以在LabVIEW环境下运行。但由于NI 公司的采集卡价格比较昂贵,但是选择第三方的数据采集卡, 就需要解决LabVIEW 与非NI 数据采集卡的兼容和驱动的问题。 2 LabVIEW 调用外部程序代码的途径之一———动态链接库机制 LabVIEW 具有强大的外部接口能力, 可以实现LabVIEW与外部的应用软件, C 语言, Windows API 以及HiQ 等编程语言之间的通信, 在LabVIEW 中可用的外部接口包括:DDE,CIN,DLL,MATLAB Script 以及HiQ Script 等。合理地使用这些接口,充分利用其他软件的功能, 弥补LabVIEW 自身的不足, 可以编 写出功能更加强大的LabVIEW应用软件。 动态链接库(Dynamic Link Libraries,简称DLL)是一个可执行模块, 但不接受任何消息, 所以并不可以直接运行, 只是提供一群函数供Windows 应用程序或其他的动态链接函数库调用。动态链接库只有在别的模块中调用了它的某个函数以后才发生作用。由于动态链接库在应用程序运行期间被连接起来的,故称为动态链接库。动态链接库(DLL)一直是基于Windows 程序设计的一个非常重要的组成部分。DLL 是一种基于Windows的程序模块, 它可以在运行时刻被装入和连接。为了实现LabVIEW对普通数据采集卡的支持, 用户可以使用LabVIEW 提供的调用库函数节点CLF (Call Library Function)和代码接口节点CIN(Code Interface)将编程灵活的C 语言和直观方便的LabVIEW程序结合起来。但是比较调用库函数节点CLF 和代码接口节点CIN 这两种方法, 使用CLF 节点访问动态链接库DLL 更具优势:首先, DLL 是外部模块, 自行开发一个DLL 比使用CIN 节点易于实现且便于维护。其次, CIN

获取当前鼠标所在的窗口句柄

用到的API函数: GetCursorPos 基本信息 函数功能:该函数检取光标的位置,以屏幕坐标表示。 函数原型:BOOL GetCursorPos(LPPOINT lpPoint); 参数: IpPoint:POINT结构指针,该结构接收光标的屏幕坐标。 使用时要先定义一个数据结构: Public Type POINTAPI x As Long y As Long End Type 例如: dim biao as POINTAPI GetCursorPos biao 那么biao.x用来存放当前光标的x轴坐标,biao.y用来存放当前y轴的坐标。 返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。 备注: 1.光标的位置通常以屏幕坐标的形式给出,它并不受包含该光标的窗口的映射模式的影响。该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。 2.此函数为api函数,调用时要函数声明:Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long 速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。 WindowFromPoint 函数功能:该函数获得包含指定点的窗口的句柄。 函数原型:HWND WindowFromPoint(POINT Point); 参数:

Point:指定一个被检测的点的POINT结构。 返回值S:返回值为包含该点的窗口的句柄。如果包含指定点的窗口不存在,返回值为NULL。如果该点在静态文本控件之上,返回值是在该静态文本控件的下面的窗口的句柄。 备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。应用程序应该使用ChildWindowFromPoint函数进行无限制查询,这样就可以获得静态文本控件的句柄。 速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。 获取当前鼠标所在的窗口句柄代码: POINT pNow = {0,0}; If (GetCursorPos(&pNow)) { HWND hwndPointNow = NULL; hwndPointNow = WindowFromPoint(pNow); if (hwndPointNow) cout <<“Success!!”<< endl; else cout <<“Error!!”<< endl; } else cout <<“Error!!”<< endl;

用进程名获取进程ID取窗口句柄

以前用输入法注入的时候需要用到的代码,写的还不错,分享一下吧,顺便当个备用 view source print? 01 //根据进程名获取进程ID 02 DWORD GetPidByProcessName(TCHAR * pProcess) 03 { 04 HANDLE hSnapshot; 05 PROCESSENTRY32 lppe; 06 //创建系统快照 07 hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); //#include 08 if (hSnapshot == NULL) 09 return 0; 10 //初始化 lppe 的大小 11 lppe.dwSize = sizeof (lppe); 12 //查找第一个进程 13 if (!::Process32First(hSnapshot, &lppe)) 14 return false ; 15 do

16 { 17 if(StrCmp(lppe.szExeFile, pProcess) == 0)//#include 18 { 19 return lppe.th32ProcessID; 20 } 21 } 22 while (::Process32Next(hSnapshot, &lppe)); //查找下一个进程 23 24 return 1; 25 } 26 27 //根据进程ID获取窗口句 柄 28 HWND GetHwndByPid(DWORD dwProcessID) 29 { 30 //返回Z序顶部的窗口句 柄 31 HWND hWnd = ::GetTopWindow(0); 32 while ( hWnd ) 33 { 34 DWORD pid = 0;

大漠插件后台找图、自动获取坐标窗口句柄鼠标多点左单击脚本

大漠插件后台找图、自动获取坐标窗口句柄鼠标多点左单击 脚本 一、准备工作 第一步:下载大漠插件、解压,运行“注册大漠插件到系统.bat”,把全部东东都复制到按键精灵的plugin目录下吧~ 第二步:创建一个文件夹,以d:\test 为例。把你要找的图(60.bmp)、大漠插件里的dm.dll 和RegDll.dll复制到这个文件夹。 第三步:打开按键精灵,创建一个新脚本。往附件(在软件左边框选项)里面添加dm.dll、Reg.dll和图60.bmp 二、复制以下代码到按键精灵 dim ys1,ys2,ys3,a,b,zbx,zby//自定义变量 ys1=9000//1和2点延时 ys1=9000//2和3点延时 ys1=9000//3和1点延时 a=15//纵向下移15单位 b=-15//纵向上移15单位 zbx=100//获取窗口句柄给定的坐标x zby=100//获取窗口句柄给定的坐标y PutAttachment "d:\test", "*.*" //意思是释放所有附件到d:\test目录。就是把有用的文件打包到test目录下 PutAttachment ".\Plugin", "RegDll.dll" //意思是释放RegDll.dll文件到按键精灵安装目录的Plugin目录下,用来完成大漠插件的注册 Call Plugin.RegDll.Reg("d:\test\dm.dll") //调用大漠插件,在按键精灵中使用 Set dm = createobject("dm.dmsoft") //用大漠插件创建一个对象dm dm_ret = dm.SetPath("d:\test") // 设置全局路径,以后你找图用的图片都默认是test目录里的图片了,否则你要用绝对路径d:\test\1.bmp来该表示图片 dm_ret = dm.LoadPic("*.bmp") // 字面意思是加载test目录下的所有图片 Hwnd = dm.GetPointWindow(zbx,zby)//用大漠软件获取给定坐标(zbx,zby)的窗口句柄,保存在Hwnd里 Call Plugin.Window.Move(Hwnd, 0, 0) // 把窗口移到屏幕的(0,0),即左上角 dm_ret = dm.BindWindow(Hwnd,"gdi","windows","windows",0) //这句用来绑定辅助操作的对象窗口 //下面是一条判断语句,如果绑定失败就会提示。那就从前面几几步中找原因吧 Delay 10 If dm_ret = 1 Then Else MessageBox "绑定失败,重启脚本或联系作者" EndScript

NET获取硬盘序列号的几个方法

最近作软件注册,收集了很多.NET相关的获取硬盘物理序列号的方法,主要分为使用WMI方式和API方式。但这些方法均可能有问题。 1,使用WMI方式,有的机器根本取不到硬盘序列号,有的方式在Vista下面会报错。 常用的使用WMI的方式主要有下面一些方式: class HardDrive { private string model = null; private string type = null; private string serialNo = null; public string Model { get {return model;} set {model = value;} } public string Type { get {return type;} set {type = value;} } public string SerialNo { get {return serialNo;} set {serialNo = value;} } } class TestProgram { ///

/// The main entry point for the application. /// [STAThread] static void Main(string[] args) { //在Vista下面失败 ArrayList hdCollection = new ArrayList(); ManagementObjectSearcher searcher = new

ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); foreach(ManagementObject wmi_HD in searcher.Get()) { HardDrive hd = new HardDrive(); hd.Model = wmi_HD["Model"].ToString(); hd.Type = wmi_HD["InterfaceType"].ToString(); hdCollection.Add(hd); } searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); int i = 0; foreach(ManagementObject wmi_HD in searcher.Get()) { // get the hard drive from collection // using index HardDrive hd = (HardDrive)hdCollection[i]; // get the hardware serial no. if (wmi_HD["SerialNumber"] == null) hd.SerialNo = "None"; else hd.SerialNo = wmi_HD["SerialNumber"].ToString(); ++i; } // Display available hard drives foreach(HardDrive hd in hdCollection) { Console.WriteLine("Model\t\t: " + hd.Model); Console.WriteLine("Type\t\t: " + hd.Type); Console.WriteLine("Serial No.\t: " + hd.SerialNo); Console.WriteLine(); } // Pause application Console.WriteLine("Press [Enter] to exit..."); Console.ReadLine(); } }

LabView数据采集

第一节概述 LabVIEW的数据采集(Data Acquisition)程序库包括了许多NI公司数据采集(DAQ)卡的驱动控制程序。通常,一块卡可以完成多种功能 - 模/数转换,数/模转换,数字量输入/输出,以及计数器/定时器操作等。用户在使用之前必须DAQ卡的硬件进行配置。这些控制程序用到了许多低层的DAQ驱动程序。本课程需要一块安装好的DAQ卡以及LabVIEW开发系统。 数据采集系统的组成: DAQ系统的基本任务是物理信号的产生或测量。但是要使计算机系统能够测量物理信号,必须要使用传感器把物理信号转换成电信号(电压或者电流信号)。有时不能把被测信号直接连接到DAQ卡,而必须使用信号调理辅助电路,先将信号进行一定的处理。总之,数据采集是借助软件来控制整个DAQ系统–包括采集原始数据、分析数据、给出结果等。

上图中描述了插入式DAQ卡。另一种方式是外接式DAQ系统。这样,就不需要在计算机内部插槽中插入板卡,这时,计算机与DAQ系统之间的通讯可以采用各种不同的总线,如USB,并行口或者PCMCIA等完成。这种结构适用于远程数据采集和控制系统。 模拟输入: 当采用DAQ卡测量模拟信号时,必须考虑下列因素:输入模式(单端输入或者差分输入)、分辨率、输入范围、采样速率,精度和噪声等。单端输入以一个共同接地点为参考点。这种方式适用于输入信号为高电平(大于一伏),信号源与采集端之间的距离较短(小于15英尺),并且所有输入信号有一个公共接地端。如果不能满足上述条件,则需要

使用差分输入。差分输入方式下,每个输入可以有不同的接地参考点。并且,由于消除了共模噪声的误差,所以差分输入的精度较高。 输入范围是指ADC能够量化处理的最大、最小输入电压值。DAQ卡提供了可选择的输入范围,它与分辨率、增益等配合,以获得最佳的测量精度。 分辨率是模/数转换所使用的数字位数。分辩率越高,输入信号的细分程度就越高,能够识别的信号变化量就越小。下图表示的是一个正弦波信号,以及用三位模/数转换所获得的数字结果。三位模/数转换把输入范围细分为23或者就8份。二进制数从000到111分别代表每一份。显然,此时数字信号不能很好地表示原始信号,因为分辩率不够高,许多变化在模/数转换过程中丢失了。然而,如果把分辩率增加为16位,模/数转换的细分数值就可以从8增加到216即65536,它就可以相当准确地表示原始信号。

labview声音采集系统

虚拟仪器技术 姓名:史昌波 学号:2131391 指导教师:孙来军 院系(部所):电子工程学院专业:控制工程

目录 1、前言 (2) 2、声卡的硬件结构和特性 (3) 2.1声卡的作用和特点 (3) 2.2声卡的构造 (4) 3、LABVIEW中与声卡相关的函数节点 (5) 4、LABVIEW程序设计 (6) 4.1程序原理 (6) 4.2程序结构 (6) 4.3结果分析 (8) 5、结束语 (10) 6、参考文献 (10)

基于声卡的数据采集与分析 1、前言 虚拟仪器技术是利用高性能的模块化硬件,结合高效灵活的软件来完成各种测试、测量和自动化的应用。在虚拟仪器系统中,硬件解决信号的输入和输出,软件可以方便地修改仪器系统的功能,以适应不同使用者的需要。其中硬件的核心是数据采集卡。目前市售的数据采集卡价格与性能基本成正比,一般比较昂贵1。 随着DSP(数字信号处理)技术走向成熟,计算机声卡可以成为一个优秀的数据采集系统,它同时具有A/D和D/A转换功能,不仅价格低廉,而且兼容性好、性能稳定、灵活通用,驱动程序升级方便,在实验室中,如果测量对象的频率在音频范围,而且对指标没有太高的要求,就可以考虑使用声卡取代常规的DAQ设备。而且LABVIEW中提供了专门用于声卡操作的函数节点,所以用声卡搭建数据采集系统是非常方便的2。 2、声卡的硬件结构和特性 2.1声卡的作用和特点 声卡的主要功能就是经过DSP(数字信号处理)音效芯片的处理,进行模拟音频信号的与数字信号的转换,在实际中,除了音频信号以外,很多信号都在音频范围内,比如机械量信号,某些载波信号等,当我们对这些信号进行采集时,使用声卡作为采集卡是一种很好的解决方案。 声卡的功能主要是录制与播放,编辑与合成处理,MIDI接口三个部分3。(1)录制与播放

易语言模拟输入方法和窗口句柄的获取

易语言模拟输入方法和窗口句柄的获取 IE打开不同选项卡,发现却有相同的句柄。 打开新的选项卡时,必须重新对句柄进行初始化。可以用以下三种方式来取句柄, ·直接用顶级句柄0 ·窗口_取句柄_模糊(,“IEFrame”)) ·IEhandle(“IEFrame”,“用户登录_微贷网官网专业的理财平台-Windows Internet Explorer”),这句页面不存在时,标题更换了,取不到句柄。 打开新页面时,必须加入延时,等待页面载入完成,可用网页填表.就绪判断(“可用余额”)穿透网页框架时,要用微凉网页填表模块。 取余额时,用标签名可取网页填表.取操作元素(“SPAN[15]”,元素对象,) 对链接不能用网页填表.按钮_点击(“id=submit”,1),而要用以下取元素对象再点击的方式 .如果(网页填表.取操作元素(“innerText=我要投资”,元素对象,)) 网页填表.操作元素_点击(元素对象)'也许是因为链接不能用按纽的形式点击 .否则调试输出(“获取操作元素对象innerText=我要投资失败!”) 若取所有的窗口句柄和窗口标题时 窗口_枚举子窗口(0,子句柄数组,) .计次循环首(5,i)'计次循环首(取数组成员数(子句柄数组),i) 输出调试文本(取窗口标题(子句柄数组[i])) .计次循环尾() 对账号及密码输入,可用 网页填表.文本框_写内容(“name=userName”,编辑框1.内容,) 网页填表.文本框_写内容(“name=password”,编辑框3.内容,) 模拟输入方式 方式一 置剪辑板文本(“918236”) 网页填表.取操作元素(“name=password”,元素对象,) '编辑框3.获取焦点() 网页填表.操作元素_置焦点(元素对象)'必须要焦点,否则密码没地方输入 模拟按键(#Ctrl键,#V键,)'必须加延时,否则网页递交时密码还未提交 '网页填表.按钮_点击(“btn_submit”)‘该方式不行,必须用上面操作元素点击的方式延迟(1000) 方式二 网页填表.取操作元素(“name=password”,元素对象,)

LabVIEW数据采集实验方案

LabVIEW 数据采集实验 一、实验目的 1.掌握NI —myDAQ 的基本功能,并会解决简单问题 2.了解数据采集的基本过程 二、实验设备 1.装有LabVIEW 的计算机 2.NI-myRIO 数据采集卡 3.若干个干电池和色环电阻 三、实验原理 数据采集系统一般的流程图为: 在建立基本的数据采集(DAQ )系统时,有五项组件必须考虑: 1.传感器 数据采集始于要被测量的物理现象,可能是房间的温度、光源的强度、空间的压力、应用在物体上的力量,或是其它许多现象。一个有效的DAQ 系统可以测量这一切不同的现象。DAQ 系统测量不同现象的能力是由将物理现象转换为可被DAQ 硬件测量之信号的传感器来决定。传感器相当于DAQ 系统中的传感器。 2.信号 适当的传感器将物理现象转变成可测量的信号。但是,不同的信号必须用不同的方式来测量。基于这个原因,我们必须了解不同类型的信号,以及其相对应的属性。 对于模拟信号而言,频率是至关重要的。所以当频率是最重要的信息时,就必须同时考虑准确度和采集速度。虽然为了采集信号频率所需的采集速度低于取得信号形状所需的速度,但是信号仍然必须以足够的速度采集,才不至于在采集模拟信号时失去重要信息。确保获致此速度的条件称为奈奎斯特取样定理(Nyquist Sampling Theorem)。语音分析、电信,以及地震分析,都是必须知道信号频率的应用范例。 数字信号,它的测量方法与模拟信号不同,数字信号的速率是测量单位时间内某种特征信号出现的次数。数字信号的处理不需要复杂的软件算法来确定。不需要使用软件运算法来判断信号的速率。 3.信号调理 有时候传感器产生的信号过于困难或太危险,以致于无法直接使用DAQ 设备进行测量。举例来说,在处理高压电、噪声环境、极高和极低信号,或是同时量测信号之时,信号调理 就是高效率DAQ 系统的重要部分。信号调理 将系统的准确度提升到最大,允许传感器正确地运作,并且保证安全性。选择正确的硬件来进行信号调理是非常重要的。信号调理系统可以用模块化或系统集成的形式搭建,配合信号调理的附件可以使用在多种应用场合 信号调理 实际信号 电信号

数据采集之LabVIEW温度采集与分析案例

数据采集之温度采集与分析案例 可以照着图学习制作 文章后面有整体程序框图,可以完全据图画出 系统功能: 1.虚拟温度产生A 通过产量产生两组基础虚拟正弦温度值并且添加不同的杂信温度信号到虚拟的温度数据中 A B D C E

2.虚拟温度时时显示B 将两组温度波形数据组合成数组并接入波形图表显示 3.虚拟温度数据范围的时时判断与报警显示C 根据产生的虚拟温度设定上下限并通过比较函数并通过布尔控件显示 4.虚拟温度数据时时滤波D 通过EXPRESS的滤波函数滤波虚拟的温度数据 5.虚拟温度实时计算温度相关值E 通过波形函数库获得均方根值以及两组波形的相位差 6.虚拟温度间断采集显示 另外建立一个循环固定间隔时间采集G与显示H G H A

通过间隔时间选择采集的数据并添加到数据数组并显示到波形 7.虚拟温度间断采集数据的保存 判断是否保存数据通过写入execl函数写入文件 8.对采集的温度数据回放 清除波形数据再读数据并更新数据到波形

编写的步骤 1.设计主要的前面板 采用选项板设计两个界面一个实时采集温度另一个间隔时间采集温度 2.编辑主程序框图 先构件主循环停止循环按钮 其次虚拟数据然后增加杂信的函数最后添加各种函数工具依次连线

3.编辑间隔时间采集温度程序设置间隔时间波形属性结点 保存数据函数等 列出所用的控件以及函数:1.波形图表 2.选项面板 3.数据常量 4.波形属性结点 5.While 循环 6.FOR 循环 7.条件结构 8.杂信函数 9.数据显示控件 10.数据分析函数 11.等等其他各种

程序整体图 虚拟温度测试.vi 虚拟数据产生 快捷函数信号滤波设置

相关主题