-
Ajax (16.06.08 13:08) [0]Подскажите пожалуйста, как такое можно осуществить?
Есть: компьютер с 2 подключенными мониторами.
Хочется: 2 "почти независимых" рабочих стола.
То есть хочется, чтобы на 2 мониторах были 2 разных рабочих стола. Чтобы на каждом была своя панель задач и можно было запускать программы. И при этом переключать фокус ввода между этими рабочими столами аналогично тому, как это сделано в различных программах типа virtuawin.
Спасибо. -
В настройках видеодрайвера выбрать "расширение рабочего стола" на второй монитор.
-
Ajax (16.06.08 13:29) [2]>В настройках видеодрайвера выбрать "расширение рабочего стола" на второй монитор.
Это я умею :-)
Меня интересует появление второго таскбара и т.д. -
> Меня интересует появление второго таскбара и т.д.
Не, это не получится. Чтобы запустить второй экземпляр эксплорера в режиме рабочего стола, его надо запускать именно на другом десктопе, который в свою очередь должен отображаться на отдельном мониторе. -
Поставить 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.
-
Ещё, насколько я помню, в драйверах nVIDIA был менеджер виртуальных рабочих столов.
-
> Ещё, насколько я помню, в драйверах nVIDIA был менеджер
> виртуальных рабочих столов.
Лучше бы он "был". Яркая недоработка.