M
mr.hl
Unregistered / Unconfirmed
GUEST, unregistred user!
我要做的一个小程序是
获取一个外部程序的菜单(就是那个程序的 MainMenu)的第0,0项的名字,然后反复点击它,直到他的caption值变化了.
问题是那个菜单的第一项按下后,这个项会变成不可用,要等这个外部程序反应后,才会重新变成可用状态,我的目的是只要他的caption为"登录",就一直让我的程序按这个按钮,直到他的caption不为"登录"为止.
我现在所收集到的语句如下,请高手帮忙!
50 不成敬意
procedure TForm1.Button1Click(Sender: TObject);
var
HWindow, : THandle;buffer: array [0..128] of Char;
begin
HWindow := FindWindow(nil, 'Dr.COM 用户认证程序 (v3.22)');//最好这里能用进程名或他的 PID 来获得句柄,但是我不知道怎么办,高手教教我
if HWindow <> 0 then
begin
buffer := '登录';
while buffer = '登录' do
begin
PostMessage(HWindow, WM_COMMAND, GetMenuItemID(GetMenu(HWindow), 0), 0);//如果 GetMenuItemID(GetMenu(HWindow), 0) 为不可用,while好像就直接跳出来了.
GetMenuString(GetMenu(HWindow), 0, @buffer, sizeof(buffer), MF_BYPOSITION);//这个是取这个菜单项的名字到buffer里.
end;
我有个笨办法就是sleep个1秒,怎么才能弄成不管这个菜单项是不是可用,都一直点它???
获取一个外部程序的菜单(就是那个程序的 MainMenu)的第0,0项的名字,然后反复点击它,直到他的caption值变化了.
问题是那个菜单的第一项按下后,这个项会变成不可用,要等这个外部程序反应后,才会重新变成可用状态,我的目的是只要他的caption为"登录",就一直让我的程序按这个按钮,直到他的caption不为"登录"为止.
我现在所收集到的语句如下,请高手帮忙!
50 不成敬意
procedure TForm1.Button1Click(Sender: TObject);
var
HWindow, : THandle;buffer: array [0..128] of Char;
begin
HWindow := FindWindow(nil, 'Dr.COM 用户认证程序 (v3.22)');//最好这里能用进程名或他的 PID 来获得句柄,但是我不知道怎么办,高手教教我
if HWindow <> 0 then
begin
buffer := '登录';
while buffer = '登录' do
begin
PostMessage(HWindow, WM_COMMAND, GetMenuItemID(GetMenu(HWindow), 0), 0);//如果 GetMenuItemID(GetMenu(HWindow), 0) 为不可用,while好像就直接跳出来了.
GetMenuString(GetMenu(HWindow), 0, @buffer, sizeof(buffer), MF_BYPOSITION);//这个是取这个菜单项的名字到buffer里.
end;
我有个笨办法就是sleep个1秒,怎么才能弄成不管这个菜单项是不是可用,都一直点它???