求教以下Delphi代码2次弹框的字符与实际值相同为何找不到窗口呢
varvh: HWND;
h: HWnd;
p: array of char;
begin
h := GetWindow(Handle, GW_HWNDFIRST);
while h <> 0 do
begin
GetClassName(h, p, Length(p));
if p = Keyword3 then //如果窗口类名=.INI窗口标题对应的类名
begin
GetWindowText(h, p, Length(p)); //那就得到其窗口标题
showmessage(p);
Clipboard.AsText := p;
end;
h := GetWindow(h, GW_HWNDNEXT);
end;
vh := FindWindow(nil, PWideChar(Clipboard.AsText)); // 这里再把p分配给找窗口 原先粉字为某程序的标题内容字符串,当我把它换成变量p,就找不到窗口了,何故?
后来我想了想,是不是变量类型不匹配呢? 于是我又用到了剪贴板来过渡一板才OK。但我还是想知道为什么呢? 有没有类型查询的函数或方法?
if vh <> 0 then
begin
Winapi.Windows.SetParent(vh, Self.Scite.Handle);
Winapi.Windows.MoveWindow(vh, 0, 0, Self.Scite.Width, Self.Scite.Height, True);
SetWindowLong(vh, GWL_STYLE, GetWindowLong(vh, GWL_STYLE) and (not WS_CAPTION) and (not WS_BORDER) and (not WS_THICKFRAME)); //去除窗口标题栏!
end
else
ShowMessage('程序未运行,请点【顶部齿轮图标】重新配置INI!');
end; 找到原因了
break忘退出循环,所以取不到值 哈哈哈,delphi高手有时也迷糊…所以,找bug排雷也是一项体力活…
页:
[1]