0

良い一日、

(SysListView32、ToolbarWin32) などのさまざまな非 VLC オブジェクトからさまざまなハンドルがあり、これらのハンドル (HWND) をキャストする方法があるかどうか疑問に思っています。

たとえば、スタート ボタン (デスクトップの左下にあります) のハンドルを取得しました。すると、「Button」というクラス名が見つかりました。

彼をキャストして、キャプション プロパティ「開始」を取得したいと思います。例えば:

type 
  TButtonStartMenuFictiveClass = class(TButton)
  public
    Text: string;
  end;

if classname = 'button' then
begin
  ShowMessage((objecthandle as TButtonStartMenuFictiveClass).Text);
end;

すべてのオブジェクトをフックして、それらのテキストを表示しようとしています。Windows のナレーターのように。

4

2 に答える 2

3

場合によっては、VCL オブジェクトをインスタンス化し、外部HWNDをそのWindowHandleプロパティに割り当てることができます。

var
  S: String;

with TButton.Create(nil) do
try
  WindowHandle := TheButtonWnd;
  try
    S := Caption;
  finally
    WindowHandle := 0; // important
  end;
finally
  Free;
end;
于 2012-06-02T22:45:40.327 に答える
2

前の質問で説明したように、Windows API を使用して外部ウィンドウ コントロールのプロパティにアクセスする必要があります。ウィンドウハンドルをオブジェクトに単純にキャストすることはできません。Delphi オブジェクトへのポインタではありません。

私があなたにリンクした例も、ホバリングしているコントロールのクラス名だけでなく、コントロールのキャプション (テキスト) も示しています。この関数もトリックを行います:

function GetWndText(const Handle: Hwnd): string;
var
  Len: Integer;
begin
  Len := GetWindowTextLength(Handle) + 1;
  SetLength(Result, Len);
  GetWindowText(Handle, PChar(Result), Len);
end;
于 2012-06-02T19:32:31.567 に答える