冥界3大法王 发表于 2021-1-5 19:37

求教以下Delphi代码2次弹框的字符与实际值相同为何找不到窗口呢

var
vh: 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;

冥界3大法王 发表于 2021-1-5 20:25

找到原因了
break忘退出循环,所以取不到值

无闻无问 发表于 2021-1-5 21:51

哈哈哈,delphi高手有时也迷糊…所以,找bug排雷也是一项体力活…
页: [1]
查看完整版本: 求教以下Delphi代码2次弹框的字符与实际值相同为何找不到窗口呢