FindWindowEX应用实例二则

LabVIEW调用第三方exe软件或操作操作控制第三方软件界面的控件,如操控烧录软件等 今天,我们将介绍一种更稳定且实用的方式,即利用窗口句柄来直接操作程序。在LabVIEW中,我们可以通过“Call Library Function Node”来调用Windows API函数,获取窗口句柄和控件句柄,以便实现对程序的操作。窗口句柄是窗口的唯一标识符,通过它我们可以找到并直接操纵窗口上的各种控件。我们可以使用Windows API函数来获取句柄,然后就可以通过句柄来直接操作窗口了。在获取到窗口句柄后,我们就可以直接操作窗口上的控件了。通过这种方式,我们可以实现对串口助手的操作。 阅读详情

函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。

    函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);

    参数;

    hwndParent:要查找子窗口的父窗口句柄。

    如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。

    Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。

    hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。

    lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。

    lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。

    若想获得更多错误信息,请调用GetLastError函数。

    速查 NT:4.0对以上版本;Windows:95以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib;Unicode:在Windows NT上实现为Unicode和ANSI两种版本。

实例1.

unit unitWinExe;

interface

uses
    Windows,Messages,Dialogs;

implementation
var
    fHwnd,cHwnd:THandle;
    cmdLine:string;
begin
    cmdLine := 'C:/Program Files/Huawei-3Com/H3C 802.1X 客户端/Dot1XClient.exe';
    WinExec(PChar(cmdLine),SW_HIDE) ;

    fHwnd:=FindWindow('#32770',nil);  //查找到窗口#32770,’#32770‘用Spy++查出来的。

    if fHwnd>0 then
    begin
        cHwnd:=FindWindowEx(fHwnd,0,nil,'连接');   //查找#32770的子窗口'连接'
        if cHwnd>0 then PostMessage(cHwnd,WM_KEYDOWN,VK_RETURN ,0) ;  //按回车键
    end;

end.


实例2.全面控制Windows任务栏

分析:

从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始 按钮、应用程序切换区(Application Switch Bar)、任务栏通知区(Notification Area)以 及任务栏时钟。与其它Windows应用程序相同,任务栏程序(systray.exe)由几个不同的窗体 组成,这些窗体是具有各自的窗口类名、显示方式等信息。因此,只要得到有关窗口信息, 即可通过编程全面控制Windows任务栏的不同区域。
(1)任务栏窗体的窗口信息为:(我用spy++查出来的)
   ①任务栏的窗口类名是:ShellTrayWnd。
   ②开始按钮的窗口类名是:Button。
   ③应用程序切换区的窗口类名是:ReBarWindow32。
   ④任务栏通知区的窗口类名是:TrayNotifyWnd。
   ⑤任务栏时钟的窗口类名是:TrayClockWClass。
(2)调用FindWindow函数得到任务栏的窗口句柄。
(3)调用FindWindowEx函数得到任务栏各子区域的窗口句柄。
(4)根据窗口句柄,调用ShowWindow函数控制任务栏各区域显示或隐藏(Show/Hide);调用EnableWindow函数控制任务栏各区域有效或无效(Enabled/Disabled)。

代码如下:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    Wnd:array [0..4] of THandle;
    procedure GetHandles ;
    procedure  EnableOrDisable(Sender:TOBject);
    procedure HideOrShow(Sender:TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.EnableOrDisable(Sender: TOBject);
begin
    GetHandles;
    if TCheckBox(Sender).Checked  then
        case Tcheckbox(Sender).Tag of
            0:EnableWindow(wnd[0],False);
            1:EnableWindow(wnd[1],False);
            2:EnableWindow(wnd[2],False);
            3:EnableWindow(wnd[3],False);
            4:EnableWindow(wnd[4],False);
        end
    else
        case Tcheckbox(Sender).Tag of
            0:EnableWindow(wnd[0],True);
            1:EnableWindow(wnd[1],True);
            2:EnableWindow(wnd[2],True);
            3:EnableWindow(wnd[3],True);
            4:EnableWindow(wnd[4],True);
        end;
end;

procedure TForm1.GetHandles;
begin
    //得到Tray Bar的窗口句柄;
    Wnd[0]:=FindWindow('ShellTrayWnd',nil);

    //得到开始按钮的窗口句柄;
    Wnd[1]:=FindWindow('ShellTrayWnd',nil);
    Wnd[1]:=FindWindowEx(Wnd[1],HWND(0),'Button',nil);

    //得到应用程序切换区的窗口句柄;
    Wnd[2]:=FindWindow('ShellTrayWnd',nil);
    Wnd[2]:=FindWindowEx(Wnd[2],HWND(0),'ReBarWindow32',nil);

    //得到任务栏通知区的窗口句柄;
    Wnd[3]:=FindWindow('ShellTrayWnd',nil);
    Wnd[3]:=FindWindowEx(Wnd[3],HWND(0),'TrayNotifyWnd',nil);

    //得到任务栏时钟的窗口句柄;
    Wnd[4]:=FindWindow('ShellTrayWnd',nil);
    Wnd[4]:=FindWindowEx(wnd[4],HWND(0),'TrayNotifyWnd',nil);
    Wnd[4]:=FindWindowEx(wnd[4],HWND(0),'TrayClockWClass',nil);
end;

procedure TForm1.HideOrShow(Sender: TObject);
begin
    GetHandles;
    if TCheckBox(Sender).Checked  then
       case Tcheckbox(Sender).Tag of
            0:ShowWindow(wnd[0],SW_HIDE);
            1:ShowWindow(wnd[1],SW_HIDE);
            2:ShowWindow(wnd[2],SW_HIDE);
            3:ShowWindow(wnd[3],SW_HIDE);
            4:ShowWindow(wnd[4],SW_HIDE);
        end
    else
        case Tcheckbox(Sender).Tag of
            0:ShowWindow(wnd[0],SW_SHOW );
            1:ShowWindow(wnd[1],SW_SHOW );
            2:ShowWindow(wnd[2],SW_SHOW );
            3:ShowWindow(wnd[3],SW_SHOW );
            4:ShowWindow(wnd[4],SW_SHOW );
        end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
    i:Integer ;
begin
    for i:=0  to 4 do
    begin
        EnableWindow(wnd[i],True);
        ShowWindow(wnd[i],SW_SHOW);
    end;
end;
end.

将其他exe嵌入labview程序 2.将其他exe嵌入labview程序需要用到windows的uer32.dll库函数,实现的思路是用FindWindowA找到本VI窗口句柄和exe窗口的句柄,然后用FindWindowExA找到labview窗口的子句柄,子句柄也就是图片框的窗口句柄。然后用SetParent函数将图片框窗口句柄设置为exe窗口句柄的父句柄。1.本文所运用到的控件为.net里面的图片框或者网页浏览器,两者都可以达到一样的效果。最后的效果如图所示,在WebBrowser控件里面可以操作微信等exe。 阅读详情

相关推荐

LabVIEW中调用外部EXE 看这一篇就够了

在程序开发时,有时需要在LabVIEW中调用* .exe文件,本文将对此种调用的实现方法进行一个详细的讲解。

weixin_47394559的博客 1万+

WinAPI: FindWindow、FindWindowEx - 查找窗口

FindWindow( lpClassName, {窗口的类名} lpWindowName: PChar {窗口的标题} ): HWND; {返回窗口的句柄; 失败返回 0} //FindWindowEx 比 FindWindow 多出两个句柄参数: FindWindowEx( Parent: HWND; {要查找子窗...

weixin_33918114的博客 2000

labview获取子窗口句柄FindwindowsEX(API).vi

函数功能 在窗口列表中寻找与指定条件相符的第一个子窗口 。 该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。 参数; (1)hwndParent:要查找的子窗口所在的父窗口的句柄(如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索子窗口)。 如果hwndParent为 0 ,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。 Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。 (2)hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。 (3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。 (4)lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。 返回值 Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。 若想获得更多错误信息,请调用GetLastError函数。

使用labview向命令行发送按键消息

在制作一个项目中遇到此问题,特此记录下来,以免忘记,这个项目是需要用PICKIT4编程器对PICMCU进行编程,使用命令行操作,速度很慢,好再命令中有一个批量模式,这个模式是开启后,后续只需要按下回车按键就能快速启动烧录,省去编程器连接过程,我使用labview编程,使用windows自带函数,FindWindowA 获取命令行窗口的句柄,然后使用函数PostMessageA向窗口发送回车函数。 ...

qq_35431097的博客 2483

Labivew调用Windows API函数实现VI窗口置顶

LabVIEW调用WindowsAPI函数实现VI窗口置顶,步骤清晰,内容详细,你值得拥有

通过窗口标题获取句柄Findwindows(标题).vi

使用Labview2013中文版编辑,通过调用API中user32.dll的FindWindowA实现用窗口标题获取句柄。参数如下 int32_t FindWindowA(int32_t lpClassName, CStr lpWindowName);

delphi 中 FindWindowEx 函数示例

函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。 函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow); 参...

weixin_34088838的博客 1048

FindWindowEx查找子窗口的简单应用

迅雷看看“本片即将结束,你可能也喜欢以下内容”提示的去除工具。 详见http://blog.youkuaiyun.com/wwwwws/article/details/9433817

C语言:使用函数计算两点间的距离

本题要求实现一个函数对给定平面任意两点坐标(x​1​​ ,y1)和(x2,y​2),求这两点之间的距离。 函数接口定义: double dist( double x1, double y1, double x2, double y2 ); 其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2),函数dist应返回两点间的距离。 裁判测试程序样例: #include <stdio.h> #include <math.h> double dist( double x

qq_53452010的博客 2万+

【银行测试】手机银行APP专项项目+测试点汇总(一)

1、手机银行APP转账项目讲解面试官:请介绍一下你所负责的模块如何进行的测试?求职者:好的,我最近测试的是XX银行的手机银行App项目。这个项目里面包含了转账、转账额度调整、网银转账、交易明细、添加账户、存款、投资理财、生活缴费等功能模块。我主要负责了转账模块,这个大模块中包含了智能转账、手机转账、语音转账、预约转账、收款人管理等5个子模块,我首先介绍一下我们生活中使用最多的手机转账子模块。对于转账需要关注的是转账前、转账中、转账后这三个状态下的测试。

m0_70102063的博客 1604

零基础搭建本地AI绘画环境:Stable Diffusion 3.5保姆级安装教程(含中文优化方案)

本文提供零基础搭建本地AI绘画环境的详细教程,重点介绍Stable Diffusion 3.5的安装与中文优化方案。从硬件配置检查到软件依赖安装,再到核心组件配置与中文语义增强,教程涵盖全流程操作指南,帮助用户快速掌握AI文生图模型的本地部署技巧,提升创作效率。

weixin_30752699的博客 312

LabVIEW中将前面板置于所有桌面窗口的前面

LabVIEW中将前面板置于所有桌面窗口的前面想将前面板窗口设置在所有桌面窗口的前面。前面板属性IsFrontmost(如下图所示)将前面板设置为仅位于所有 LabVIEW 窗口的前面。如何将前面板置于所有桌面窗口的前面?解决方案如果使用位于C:\WINDOWS\system32的User32.dll中的FindWindowA 和SetForegroundWindow函数,则前面板设置在所有桌面窗口的前面。 附加的VI每隔三秒就会在所有其他应用程序窗口的顶部显示所需的前面板。1. 下载附件VI2

bjcyck的博客 1933

RocketMQ 为什么要自己做一个 NameServer ?RocketMQ 5.x 版本中的 proxy、controller 和 container 分别有什么用 ?

1.独立运行的分散结构 2.简化实现,容忍部分数据不一致 Proxy:多语言支持、简化开发 Controller: 提高 Broker 的性能 Container:提高资源利用率,平衡负载

xaiobit_hl的博客 1489

pywin32

使用py成为让人尊敬的祖安键盘艺术家

dzyls的笔记 519

从‘最长白列’到‘八邻域’:智能车图像巡线算法怎么选?我的踩坑经验分享

本文深入探讨了全国大学生智能汽车竞赛中图像巡线算法的选型与优化,对比了最长白列法、八邻域算法等五种主流方法的性能与适用场景。通过实战数据和代码示例,分析了各算法在直道、弯道及特殊赛道元素中的表现,并提供了内存优化、参数调整等实用技巧,帮助参赛团队提升智能车的巡线精度与效率。

weixin_30374009的博客 632

YOLO26涨点改进 | 全网独家创新、检测头Head改进篇 | AAAI 2026 | 使用StripConvHead改进YOLO26的检测头,处理小目标、遮挡小目标检测有效涨点,助力高效发论文

🔥本文给大家介绍使用StripConv条形卷积改进 YOLO26的检测头,可以显著提高模型在高纵横比物体检测、目标定位和多尺度物体检测方面的表现。StripConv条形卷积能够更有效地捕捉细长物体的特征,提升定位精度,并通过简化卷积核设计减少计算冗余,优化计算效率。此外,该改进增强了 YOLO26对复杂场景和实时任务的适应能力,特别适用于遥感图像目标检测、小目标检测等领域。具体怎么使用请看全文。摘要:随着遥感物体检测的快速发展,检测高纵横比物体仍然是一个挑战性问题。

Ai缝合怪、助力小伙伴高效发论文 268

通过窗口句柄操作实现LabVIEW与第三方软件界面交互的新方式:高效控制烧录软件和串口助手界面...

记住,用句柄操作就像外科手术,精准但容易见血,做好异常处理才是老司机。实际跑起来要注意,某些软件用自定义控件类名,这时候就得祭出Spy++这类工具扒代码。有次调某国产烧录软件,发现类名居然是"#32770",差点以为键盘进水了。这套玩法最大的彩蛋是能绕过某些软件的操作限制。某次用PostMessageA偷偷给灰色不可用按钮发送BM_CLICK消息,直接把厂商的试用版搞成全功能模式,吓得赶紧删代码——这种骚操作建议搭配虚拟机食用。如下面图片实例,操作串口助手,修改串口和波特率,并写入数据和读取数据。

QQ68823886的博客 576

今日指数项目之实时流数据采集【六】

实时数据采集代码

Maynor的博客 2146

labview获取窗口句柄_API-如何获得窗口句柄(HWND)(陈树学)_LabVIEW_图像处理|编程|机器视觉|教程_视觉论坛VISIONBBS_视觉之家VISIONHOME_机器视觉光源_光源...

注册登陆后可查看附件和大图,以及购买相关内容您需要 登录 才可以下载或查看,没有帐号?注册会员xhwnd 是窗口句柄,系统分配的一个ID号,对操作系统来说就是这个窗口的唯一标识,通过它就可以操作WIN窗口了,LabVIEW VI的前面板无疑是一个WINDOWS窗口,那如何获得这个窗口句柄那.有两种方法:1.利用API FindWindow函数,通过窗口标题,来查找前面板的窗口句柄.721542d6...

weixin_42470359的博客 1251

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1964

AUTOSAR进阶图解==>AUTOSAR_SWS_ADCDriver

本文深入解析了AUTOSAR ADC Driver的架构设计和技术实现。主要内容包括:1)ADC Driver在AUTOSAR分层架构中的定位及核心功能;2)详细的模块架构设计,涵盖初始化管理、组转换管理、优先级处理等核心子组件;3)全面的配置模型说明,包括主配置类、通用配置、通道配置等关键数据结构;4)状态机机制和操作序列分析。通过分层设计和标准化接口,ADC Driver实现了硬件抽象和软件解耦,提供了良好的可移植性和可维护性。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 786

查找窗体

FindWindowFindWindowAFindWindowWFindWindowExFindWindowExAFindWindowExW findwindow:函数型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName); 参数: IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符...

dkopg24406的专栏 1195

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

flndwindowex l

      函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。    函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);    参数;    h

646

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【WindowsAPI】窗口类API

目录 窗口类API汇总(持续更新) 1.FindWindowA() 获取窗口句柄 2.SetWindowPos() 设置窗口的位置、大小和显示方式 窗口类API汇总(持续更新) 1.FindWindowA() 获取窗口句柄 官方文档 (1)语法: HWND FindWindowA( LPCSTR lpClassName, LPCSTR lpWindowName...

逐梦 4357

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

FindWindow和FindWindowEx

函数原型:FindWindow(lpszClassName,lpszWindowName) 参数:lpszClassName--窗口类名;lpszWindowName--窗口标题 功能:查找窗口,未找到则返回NULL SDK中 HWNDhwnd=FindWindow(NULL,"计算器"); if(m_pWnd) { AfxMessageBox("找到了!"); ::Pos...

weixin_34313182的博客 4536

FindWindowEx 遍历所有窗口

FindWindowEx 唯一麻烦是第2个参数的指定 . Explore 下窗口是Z序的 , 实际上就是根据 第一个参数 和 第2个参数 来找 第2个参数后的一个窗口: HWND child = 0; child = FindWindowEx ( NULL , child ,NULL,NULL); 这样 , child 就是一个Explore , 然后 , 通过循环能够找到child 的下一个窗口 //遍历所有子窗口的子窗口 , Z序遍历 void print_window2(HWND ...

学习是为了探索这个世界的本质 2623
上一篇: 如何移动没有标题的窗体
下一篇: 有事情的话留个言吧
SafeF8
博客等级 码龄22年 10粉丝 104原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值