0

Skypeがデフォルトビューにあるときはいつでも、はウィンドウTConversationWindowの子になります。tSkMainForm

どちらがアクティブであるかを見つけるのに問題がありTConversationWindowますが、MDIインターフェイスとは異なり、タブ/ページのように1つ しか表示されません。TConversationWindow

するとGetForegroundWindow、SkypeのMainFormハンドルが返されます(tSkMainForm)。TConversationWindowSkype内でフォアグラウンドを取得する方法はありますか?

私のこの質問には、必要に応じて、Skypeのデフォルトビューのスクリーンショットがあります。:)

編集:これはWinspectorHierachyのスクリーンショットです:

ここに画像の説明を入力してください

EDIT2:私はこのように窓を通り抜けてみました:

procedure TForm1.Button1Click(Sender: TObject);
  function GetClassName(Handle: HWND): String;
  var
  Buffer: array[0..MAX_PATH] of Char;
  begin
  Windows.GetClassName(Handle, @Buffer, MAX_PATH);
  Result := String(Buffer);
  end;
Var
 Wnd: HWND;
 SkypeWnd: HWND;
begin
 SkypeWnd := FindWindow('tSkMainForm',nil);

 Wnd := GetTopWindow(SkypeWnd);

 while (GetClassName(Wnd) <> 'TConversationForm') and (Wnd <> 0) and (not IsWindowVisible(Wnd)) do
 begin
   Wnd := GetNextWindow(Wnd,GW_HWNDNEXT);
 end;

 Label1.Caption := GetClassName(Wnd)+' - '+GetHandleText(wnd);

end;

上記は表示されているウィンドウを見つけるはずですが、デバッグすると、Whileループ内でBegin Endに入ることはなく、Label1には「TChromeMenu--ChromeToolbar」と表示されます。IsWindowVisibleチェックを削除すると、少なくともTConversationFormが見つかります。私は何が間違っているのですか?

EDIT3:IsWindowVisibleとgetClassNameのチェックをループ内に配置し、trueの場合は中断することで、なんとか実行できました。:)

4

1 に答える 1

0

IsWindowVisibleとgetClassNameのチェックをループ内に配置し、trueの場合は中断することで、なんとか実行できました。:)

于 2012-09-18T08:09:40.810 に答える