5

アセンブリでプログラムを作成しようとしています。最初に必要なものの1つは、特定のプロセスのメインウィンドウのハンドルです。私は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
4

1 に答える 1

5

lpClassName空の文字列のアドレスではなく、NULLに設定する必要があります。

invoke FindWindow, 0, offset NtpTitle

FindWindow;の戻り値をテストしていません。movはフラグを変更しません。

test eax,eax
jz noNotepad
于 2012-11-20T21:46:15.343 に答える