Skypeがデフォルトビューにあるときはいつでも、はウィンドウTConversationWindow
の子になります。tSkMainForm
どちらがアクティブであるかを見つけるのに問題がありTConversationWindow
ますが、MDIインターフェイスとは異なり、タブ/ページのように1つ しか表示されません。TConversationWindow
するとGetForegroundWindow
、SkypeのMainFormハンドルが返されます(tSkMainForm
)。TConversationWindow
Skype内でフォアグラウンドを取得する方法はありますか?
私のこの質問には、必要に応じて、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の場合は中断することで、なんとか実行できました。:)