Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Проверка на полноэкранность ...


Автор: sergio1982 26.8.2006, 17:17
Доброго времени суток Ув. коллеги!!!

Мучаюсь вот вопросом: Как можна проверить с Delphi программы, в каком режиме запущен проигрователь WinAmp, т.е. имею ввиду обычный или полноэкранный.

Заранее благодарен!!!

Автор: Тьма 26.8.2006, 18:48
тоесть полноэкранный? визуализация что ли?


Автор: RideX 26.8.2006, 22:10
sergio1982, действительно непонятно, Winamp же не разворачивается во весь экран.. Он либо сворачивается в панель, либо в нормальном состоянии. Ниже образец + определение режима визуализации, если ты это имел ввиду, на примере MilkDrop:
Код

implementation

{$R *.dfm}

var
  vizModeAttach: Boolean;

function EnumProc(hWndChild: hWnd; Param: LongInt): Boolean; stdcall;
var
  szMessage: PChar;
  lpClassName : array[0..1024]  of Char;
  lpParentName: array[0..1024]  of Char;
begin
  GetClassName(GetParent(hWndChild), lpParentName, 1024);
  GetClassName(hWndChild, lpClassName, 1024);
  if Pos('MilkDrop', lpClassName) > 0 then begin
    if vizModeAttach = True then
      szMessage := 'Visualization in attach mode'
    else szMessage := 'Visualization in detach mode';
    MessageBox(0, szMessage, 'Info', MB_ICONINFORMATION);
  end;

  EnumProc := True;
end;

procedure ShowWndState(hWnd: HWND);
var
  WndStyle: integer;
  szMessage: PChar;
begin
  if hWnd = 0 then Exit;
  WndStyle := GetWindowLong(hWnd, GWL_STYLE);
  if (WndStyle and WS_VISIBLE) = WS_VISIBLE then
    szMessage := 'Winamp in normal state'
  else szMessage := 'Winamp in minimized state';
  MessageBox(Application.Handle, szMessage, 'Info', MB_ICONINFORMATION);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  hWndParent: HWND;
begin
  // в режиме desktop
  hWndParent := FindWindow('MilkDrop', 'MilkDrop');
  if hWndParent <> 0 then begin
    ShowWndState(hWndParent);
    MessageBox(Handle, 'Visualization in desktop mode', 'Info', MB_ICONINFORMATION);
    Exit;
  end;

  // в отдельном окне
  vizModeAttach := False;
  hWndParent := FindWindow('BaseWindow_RootWnd', 'MilkDrop');
  ShowWndState(hWndParent);
  if hWndParent = 0 then begin
    // во встроенном окне
    vizModeAttach := True;
    hWndParent := FindWindow('BaseWindow_RootWnd', 'Player Window');
    ShowWndState(hWndParent);
    if hWndParent = 0 then begin
      MessageBox(Handle, 'Winamp not found', nil, MB_ICONERROR);
      Exit;
    end;
  end;

  EnumChildWindows(hWndParent, @EnumProc, 0);
end;

end.

Автор: kts 26.8.2006, 22:39
Я имел ввиду, что, например, есть у нас песня... (mp3) .... играем ее в нормальном режиме. Все как бы чудно... Тут мы загружаем авишку - клипппп... Я имитирую нажатие Alt+Enter и ВинАмп разворачивается в полноэкранный режим...

Вопрос в том, что бы проверить, в любой момент - в каком состоянии ВинАмп, т.е. либо на поный экран, либо свернут в обычное окно ...

Если есть мысли по этому поводу ... Буду рад smile... 
Очень нужно ... 

Автор: Тьма 27.8.2006, 10:00
лови ссылку
http://forum.vingrad.ru/index.php?showtopic=97740&hl=


используй GetWindowPlacement

Автор: sergio1982 27.8.2006, 18:52
Цитата

используй GetWindowPlacement

Тут как то запунанно получается ...
Смотрите - запустил я Винамп ... в программе в обработчике по таймеру прописал
Код

var
 WA_Handle: HWND;
 WP : WINDOWPLACEMENT;
begin
 WA_Handle:=FindWindow('Winamp v1.x', nil);
 If WA_Handle=0 Then Exit;

 WP.length := sizeof(WINDOWPLACEMENT);
 GetWindowPlacement(WA_Handle,@WP);
if (WP.flags=WPF_RESTORETOMAXIMIZED)then
  Memo1.Lines.Add('FullScreen')
 else
  Memo1.Lines.Add('Not full screen')


Делаю по Винампу Альт+Ентер ... после чего в мемо одни Not full screen ...
Нимагу понять .. в чем трабла..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)