当前位置:主页>仓库管理软件> 列表

请问如何获得MessageBox窗体的句柄,并向其发送消息

销售管理软件版1楼: 请问如何获得一个程序的MessageBox窗体的句柄,并向其发送消息(一个确定按钮)!
主窗体\子窗体句柄都已找到!但是这个程序的MessageBox找不到!?
谢谢各位老大!~
追加一个问题!呵呵
为什么有时候需要 postMessage 按钮2次才有效2句一样 pHwnd正确.
postMessage(pHwnd, BM_CLICK, 0, 0) ;

2楼: EnumChildWindows枚举吧 如p3管理软件

3楼: 您说的我试过没用!

4楼: http://www.delphibbs.com/delphibbs/dispq.asp?lid=2243935
注意雪中漫步的最后的回答

5楼: 没问题,其实未必是确定按钮,如果非要道理是一样,到时候WM_KeyDown和WM_Keyup就行

procedure TForm1.Button2Click(Sender: TObject);
begin
MessageBox(handle, Pchar(''asdf''), ''Self'', MB_OK)
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
H : THandle;
begin
H := FindWindow(nil, PChar(''Self''));// 准确做法,前面应该是#32770 这个不熟悉
if H > 0 then
SendMessage(h, WM_CLOSE, 0,0)
end;



----------------------------
lichengbin在,我基本不得分,郁闷

6楼: EnumChildWindows可能是不行,可以用EnumThreadWindows
function EnumThreadProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
var
S: array[0..255] of Char;
begin
Result := True;
GetClassName(hwnd, S, 255);
if S = ''#32770'' then
begin
Result := False;
ShowMessage(IntToHex(hwnd, 8));
end;
end;

var
H: HWND;
ThreadID: DWORD;
begin
H := FindWindow(...);
ThreadID := GetWindowThreadProcessID(H, nil);
EnumThreadWindows(ThreadID, @EnumThreadProc, 0);
end;