Конференция "Прочее" » Виртуальные рабочие столы на 2 мониторах
 
  • Ajax (16.06.08 13:08) [0]
    Подскажите пожалуйста, как такое можно осуществить?

    Есть: компьютер с 2 подключенными мониторами.
    Хочется: 2 "почти независимых" рабочих стола.

    То есть хочется, чтобы на 2 мониторах были 2 разных рабочих стола. Чтобы на каждом была своя панель задач и можно было запускать программы. И при этом переключать фокус ввода между этими рабочими столами аналогично тому, как это сделано в различных программах типа virtuawin.

    Спасибо.
  • X9 © (16.06.08 13:20) [1]
    В настройках видеодрайвера выбрать "расширение рабочего стола" на второй монитор.
  • Ajax (16.06.08 13:29) [2]
    >В настройках видеодрайвера выбрать "расширение рабочего стола" на второй монитор.

    Это я умею :-)

    Меня интересует появление второго таскбара и т.д.
  • DVM © (16.06.08 13:41) [3]

    > Меня интересует появление второго таскбара и т.д.

    Не, это не получится. Чтобы запустить второй экземпляр эксплорера в режиме рабочего стола, его надо запускать именно на другом десктопе, который в свою очередь должен отображаться на отдельном мониторе.
  • tesseract © (16.06.08 13:46) [4]
    Поставить linux. Там такая фишка есть.
  • Ajax (16.06.08 14:04) [5]
    Линукс не подходит.

    А как работают программы, которые под виндами создают виртуальные рабочие столы? Мне нужно что-то наподобие.
  • VirEx © (16.06.08 14:09) [6]
    ктото уже приводил такой код:
    unit Unit1;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, StdCtrls;

    type
     TForm1 = class(TForm)
       Button1: TButton;
       procedure Button1Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    function MyThread(Parameter: Pointer): Integer; stdcall;
    var
    hdeskNew, hdeskOld: THandle;
    StInfo: TStartupInfo;
    PrInfo: TProcessInformation;
    begin
    hdeskNew:= CreateDesktop('MyDesktop', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, MAXIMUM_ALLOWED, nil);

    if hdeskNew <> 0 then begin
      hdeskOld:= GetThreadDesktop(GetCurrentThreadId());
      SetThreadDesktop(hdeskNew);
      SwitchDesktop(hdeskNew);
      MessageBox(0, 'Hello from ''MyDesktop''!', '', MB_OK);

      ZeroMemory(@StInfo, SizeOf(StInfo));
      StInfo.cb:= SizeOf(StInfo);
      StInfo.lpDesktop:= PChar('MyDesktop');
      StInfo.wShowWindow:= SW_SHOW;

      if (CreateProcess(nil, 'notepad.exe', nil, nil, False, 0, nil, nil, StInfo, PrInfo)) then begin
        WaitForSingleObject(PrInfo.hProcess, INFINITE);
        CloseHandle(PrInfo.hProcess);
        CloseHandle(PrInfo.hThread);
      end;
      SwitchDesktop(hdeskOld);
      SetThreadDesktop(hdeskOld);
      CloseDesktop(hdeskNew);
    end;
    result:= 0;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var ThreadId: DWORD;
    begin
    CreateThread(nil, 0, @MyThread, nil, 0, ThreadId);
    end;

    end.



    эксплорер запустишь на нём и делов
  • Ajax (16.06.08 18:10) [7]
    Спасибо всем откликнувшимся. Кажется я нашел готовое решение - Multimon Taskbar.
  • X9 © (16.06.08 20:17) [8]
    Ещё, насколько я помню, в драйверах nVIDIA был менеджер виртуальных рабочих столов.
  • tesseract © (16.06.08 20:18) [9]

    > Ещё, насколько я помню, в драйверах nVIDIA был менеджер
    > виртуальных рабочих столов.


    Лучше бы он "был". Яркая недоработка.
 
Конференция "Прочее" » Виртуальные рабочие столы на 2 мониторах
Есть новые Нет новых   [134437   +29][b:0][p:0.002]