PB11.5调用FindWindowA出错

liuhx999 2009-06-19 08:17:52
ulong ll_handle
int li_loop
run("rar.exe x -e -o+ Update.RAR,Minimized!)
ll_handle = 0
//循环至窗口打开
string ls_null
setnull(ls_null)
Do While ll_handle = 0
ll_handle = FindWindowA(ls_null,"rar.exe")
messagebox('',ll_handle)
yield()
loop
ll_handle怎么总是为0,进入死循环。应该是FindWindowA参数错在哪里了?试过把rar.exe改成“E:\rar.exe”也不行.rar.exe是WINRAR软件带的一个命令行程序。RUN运行正常。
Function ulong FindWindowA (String lpClassName , String lpWindowName ) Library "user32.dll"
Function boolean IsWindow (Long hwnd ) Library "user32.dll"
...全文
522 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhx999 2009-06-19
  • 打赏
  • 举报
回复
搞定了,谢谢各位。
liuhx999 2009-06-19
  • 打赏
  • 举报
回复
用楼上的方法也是一样
永生天地 2009-06-19
  • 打赏
  • 举报
回复
FindWindowA这个函数只能找标题,要真正找到进程才行

加入如下代码:
第一个nvo对象
$PBExportHeader$nvo_findprocess_10x.sru
forward
global type nvo_findprocess_10x from nonvisualobject
end type
end forward

global type nvo_findprocess_10x from nonvisualobject
event ue_findprocess ( )
end type
global nvo_findprocess_10x nvo_findprocess_10x

type prototypes
Function ulong CreateToolhelp32Snapshot (ulong dwFlags, ulong th32ProcessID) Library "KERNEL32.DLL" ALIAS FOR "CreateToolhelp32Snapshot;ansi"
Function boolean Process32First (ulong hSnapshot, ref PROCESSENTRY32 lppe) Library "KERNEL32.DLL" ALIAS FOR "Process32First;ansi"
Function boolean Process32Next (ulong hSnapshot, ref PROCESSENTRY32 lppe) Library "KERNEL32.DLL" ALIAS FOR "Process32Next;ansi"
Function boolean CloseHandle (ref ulong hObject) Library "KERNEL32.DLL" ALIAS FOR "CloseHandle;ansi"

end prototypes

type variables
private:
constant ulong TH32CS_SNAPHEAPLIST = 1 //0x00000001
constant ulong TH32CS_SNAPPROCESS = 2 //0x00000002
constant ulong TH32CS_SNAPTHREAD = 4 //0x00000004
constant ulong TH32CS_SNAPMODULE = 8 //0x00000008
constant ulong TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST + TH32CS_SNAPPROCESS + TH32CS_SNAPTHREAD + TH32CS_SNAPMODULE
constant ulong TH32CS_INHERIT = 2147483648 //0x80000000
constant ulong SMTO_BLOCK = 1
constant ulong SMTO_ABORTIFHUNG = 2
CONSTANT ULONG WM_NULL = 0
CONSTANT ULONG WM_CLOSE = 16
CONSTANT ULONG PROCESS_ALL_Access = 2035711

end variables

forward prototypes
public function long uf_findprocess (string as_exefile)
end prototypes

public function long uf_findprocess (string as_exefile);//功能:查找指定文件名的进程
//参数:as_exefile--指定的文件名
//返回值:指定文件名进程个数
ulong lul_hSnapshot, lul_th32ProcessID,lu_ProcessID
boolean rtn=false
long i=0
PROCESSENTRY32 lpe_processentry
SetNull (lul_th32ProcessID)
lul_hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, lul_th32ProcessID)

if lul_hSnapshot > 0 then

lpe_processentry.dwSize = 296
if Process32First (lul_hSnapshot, lpe_processentry) then
do
if as_exeFile=lpe_processentry.szExeFile then
i=i+1
end if
loop while Process32Next (lul_hSnapshot, lpe_processentry)
end if

CloseHandle (lul_hSnapshot)
end if
return i

end function

on nvo_findprocess_10x.create
call super::create
TriggerEvent( this, "constructor" )
end on

on nvo_findprocess_10x.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

第二个structure

$PBExportHeader$processentry32.srs
global type processentry32 from structure
long dwSize
long cntUsage
long th32ProcessID
long th32DefaultHeapID
long th32ModuleID
long cntThreads
long t32ParentProcessID
long pcPriClassBASE
long dFlags
character szExeFile[500]
end type

第三个,应用

nvo_findprocess lvo_find
lvo_find=create nvo_findprocess

ulong ll_handle
int li_loop
run("rar.exe x -e -o+ Update.RAR,Minimized!)
ll_handle = 0
//循环至窗口打开
string ls_null
setnull(ls_null)
Do While ll_handle = 0
ll_handle = lvo_find.uf_findprocess( 'rar.exe')
messagebox('',ll_handle)
yield()
loop
destroy lvo_find

singsongs 2009-06-19
  • 打赏
  • 举报
回复
FindWindowA的第二个参数貌似应该是你打开的窗口的标题栏上显示的名称。以前我用没有出现过错误啊。
wag_enu 2009-06-19
  • 打赏
  • 举报
回复
查一下MSDN吧.
liuhx999 2009-06-19
  • 打赏
  • 举报
回复
运行计算器是可以的,但运行RAR.exe就不行,难道对命令行窗口就无效了
wag_enu 2009-06-19
  • 打赏
  • 举报
回复
我试过,也是PB115的,没出问题.
你打开一个'计算器'

在运行时这么写:
long ll_handle
ll_handle = FindWindowA(0,'计算器')
liuhx999 2009-06-19
  • 打赏
  • 举报
回复
仍然不行,难道是PB11。5的问题了。
wag_enu 2009-06-19
  • 打赏
  • 举报
回复
改成下面的试一下
FUNCTION ulong FindWindowA (long classname, string windowname) LIBRARY "user32.dll" alias for "FindWindowA;Ansi"

其中windowname,是你要查找的 window 的 title
引用如:
ll_handle = FindWindowA(0,title)
liuhx999 2009-06-19
  • 打赏
  • 举报
回复
楼上的方法试过了,不行
WorldMobile 2009-06-19
  • 打赏
  • 举报
回复

Function boolean IsWindow (Long hwnd ) Library "user32.dll"

改为
Function ulong FindWindowA (String lpClassName , String lpWindowName ) Library "user32.dll" alias for "FindWindowA;Ansi"

即可解决这个问题
内容概要:本文详细描述了机械零件Part4的设计与建模过程,重点围绕三维建模中的几何构造操作展开。首先基于原零件三视图确定关键尺寸,依次创建多个同心圆柱体结构,包括外层圆柱体(52、52、5)、中间圆柱体(25、25、7)以及中心孔结构(16、16、12)。随后对底部圆柱体进行临时加高处理,以便在顶面草绘中构建辅助图形:以计算得出的半径17.5画圆,并在其接触面上方绘制半径为3的小圆,进而引出两条分别成60°和-60°的斜线,配合一条水平线形成三角形轮廓。接着在其余两角复制相同的小圆结构,清理多余线条后完成草图设计。利用该草图执行“拉伸切除”操作,深度设为16.28mm,实现特征开槽。最后将底部圆柱体恢复原始高度5mm,完成整体结构修改。; 适合人群:具备基础CAD建模能力的机械设计人员或工科类学生;熟悉SolidWorks、AutoCAD等三维设计软件的操作者;从事零部件逆向设计或结构优化的技术人员。; 使用场景及目标:①用于学习复杂零件的分步建模方法,掌握从三视图到三维实体的转换技巧;②理解拉伸、切除、草图约束、包围盒设置等核心建模命令的实际应用;③提升对尺寸链计算、辅助线构建及几何关系控制的理解与实践能力。; 阅读建议:建议结合文中参数逐步在建模软件中复现操作,重点关注草图绘制逻辑与切除特征的关联性,注意各步骤间的顺序依赖关系,避免因尺寸或约束错误导致建模失败。
内容概要:本文系统阐述了基于格子Boltzmann方法(Lattice Boltzmann Method, LBM)对二维通道内多孔介质流动进行数值模拟的理论体系、Matlab代码实现流程及结果验证方法。深入剖析了LBM在处理复杂流体系统尤其是不规则几何结构多孔介质流动中的独特优势,详细介绍了模型构建过程、边界条件设定、碰撞与传播环节的算法实现机制,并通过Matlab编程完成仿真运算,实现了对速度场、压力场等关键物理量的可视化分析与精度验证,确保模拟结果具备良好的准确性与可靠性。; 适合人群:具备流体力学基础知识和一定Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事多孔介质流动、计算流体力学(CFD)或LBM方法研究的相关领域研究人员。; 使用场景及目标:①掌握格子Boltzmann方法的核心原理及其在多孔介质流动模拟中的具体应用;②学习利用Matlab实现LBM算法并开展科学计算与结果可视化的方法;③为相关科研项目、学术论文复现或实际工程仿真提供可复用的代码框架与技术实施路径。; 阅读建议:建议读者结合流体力学与数值计算相关背景知识,逐步理解算法推导过程,动手运行并调试所提供的Matlab代码,通过调整参数或几何模型加深对LBM方法灵活性与适用性的认识,同时鼓励将该方法拓展至三维流动或多物理场耦合问题的研究中。

681

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧