即使窗口存在,FindWindow 在 MASM32 程序中也返回零

Posted

技术标签:

【中文标题】即使窗口存在,FindWindow 在 MASM32 程序中也返回零【英文标题】:FindWindow returns zero in MASM32 program even if the window exists 【发布时间】:2012-11-20 20:34:32 【问题描述】:

我正在尝试用汇编语言编写一个程序,我需要的第一件事就是特定进程的主窗口的句柄。我一直在尝试使用 FindWindow 来获取它,但到目前为止还没有运气; FindWindow 显然一直返回零。谁能指出我在这里错过了什么?谢谢。

.486
.model flat, stdcall
option casemap :none
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
    NtpTitle    db  "Untitled - Notepad",0
    MsgNoNtp    db  "Notepad not found.",0
    MsgNtp      db  "Found Notepad.",0
    NullString  db  0
    hWndNtp     dd  0

.code
start:
    invoke FindWindow, offset NullString, offset NtpTitle
    mov hWndNtp, eax
    jz noNotepad
    invoke MessageBox, 0, offset MsgNtp, 0, 40h
    invoke ExitProcess, 0

noNotepad:
    invoke MessageBox, 0, offset MsgNoNtp, 0, 10h
    invoke ExitProcess, 1

end start

【问题讨论】:

【参考方案1】:

您应该将lpClassName 设置为NULL,而不是将地址设置为空字符串。

invoke FindWindow, 0, offset NtpTitle

你没有测试FindWindow的返回值; mov 不修改标志。

test eax,eax
jz noNotepad

【讨论】:

谢谢。但是,我已经尝试过 NULL 和 0 ,但似乎都不起作用。即使使两个参数0 并没有使 FindWindow 返回任何窗口。如果这是问题所在,那不是唯一的问题:\ FindWindow 是否编译为 FindWindowAFindWindowW?如果为 W,则字符串与窗口标题不匹配。 刚刚重新检查,编译为FindWindowA 你不是在检查返回值,我已经扩展了我的答案。

以上是关于即使窗口存在,FindWindow 在 MASM32 程序中也返回零的主要内容,如果未能解决你的问题,请参考以下文章

FindWindow() 不工作

是否有一个模块可以在 python 中用作 FindWindow API

如何使用vba在windowapi中使用findwindow函数定位窗口?

win32gui.FindWindow 找不到窗口

FindWindow函数执行失败,无法找到窗口句柄

使用findwindow找到隐藏窗口使用sendmessage发送wm_close消息,无法关闭。