procedure TForm1.Button1Click(Sender: TObject);
var h:HWND;
s:PAnsiChar;
p:pointer;
begin
h:=FindWindow('Progman',nil);
h:=GetWindow(h,GW_CHILD);
new(s);
GetClassName(h,s,20); //*
GetClassName(h,s,20);
while s<>'SHELLDLL_DefView' do //**
begin
h:=getWindow(h,gw_HWndNext);
GetClassName(h,s,20);
end;
h:=GetWindow(h,GW_CHILD);
while s<>'Internet Explorer_Server' do
begin
h:=getWindow(h,gw_HWndNext);
GetClassName(h,s,20);
end;
form1.parentwindow:=h;
end;
проблемы с PAnsiChar
Код:
Как видно тут дублируется строка со звездой. Если её убрать, то условие в цикле ** постоянно "ложь" и в переменную s постоянно заносится 'SHELLDLL"' (с ковычками в конце), но если строку вернуть, то в s заносится 'SHELLDLL_DefView' - как и надо. Почему в первом случае в s заносится не все имя класса и как от этого избавиться?
Код:
s:=StrAlloc(20);
Код:
var
ClassName: array [0..255] of Char;
begin
GetClassName(WndHandle, ClassName, 255);
ClassName: array [0..255] of Char;
begin
GetClassName(WndHandle, ClassName, 255);
Вопрос решен, всем спасибо.