![]() |
Eigener Desktop???
Hallo,
kann man sich eigentlich einen eigenen Desktop erstellen? Hab mir mal folgendes angesehen, aber nicht wirklich verstanden ( ![]() MFG Doc |
Re: Eigener Desktop???
Hast du hier schon einmal nach CreateDesktop gesucht? Da wirst du bestimmt einige Beispiele finden...
|
Re: Eigener Desktop???
Hab es mal mit folgenden Code probiert:
Delphi-Quellcode:
Passiert aber nichts, was ist daran falsch???
procedure TForm1.Button1Click(Sender: TObject);
begin SwitchDesktop(CreateDesktop('Oliver', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, DESKTOP_CREATEMENU and DESKTOP_CREATEWINDOW and DESKTOP_ENUMERATE and DESKTOP_HOOKCONTROL and DESKTOP_JOURNALPLAYBACK and DESKTOP_JOURNALRECORD and DESKTOP_READOBJECTS and DESKTOP_SWITCHDESKTOP and DESKTOP_SWITCHDESKTOP, nil)); end; ![]() Diesen Desktopmanager hab ich mir auch angesehen, aber auch nicht ganz verstanden... |
Re: Eigener Desktop???
Delphi-Quellcode:
Ich glaube so müsste das heißen. Aber obs daran liegt???
procedure TForm1.Button1Click(Sender: TObject);
begin SwitchDesktop(CreateDesktop('Oliver', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP, nil)); end; |
Re: Eigener Desktop???
Jo! Lag daran. Habs grade ausprobiert! Machts lieber nicht nach!
|
Re: Eigener Desktop???
Bei mir klappts auch. Wie kann ich denn jetzt z.B. machen, dass ein Fenster angezeigt wird? Oder wie kann ich wieder zu meinem normalen Desktop zurückwechseln???
|
Re: Eigener Desktop???
Guck dir mal
![]() |
Re: Eigener Desktop???
Code:
Und was muss ich jetzt für die ? einsetzen? Und wie kann ich ein Fenster anzeigen?
EnumDesktops(WINSTA_ENUMDESKTOPS, ?, ?);
|
Re: Eigener Desktop???
Mit SetThreadDesktop kannst du einen Thread an einen bestimmten Desktop binden. Wenn du dann ein Fenster erzeugst, geht das automatisch auf den Desktop.
EnumDesktops(OpenWindowStation('???'), DeineEnumProcedure, Egal) |
Re: Eigener Desktop???
Das mit dem Fenster hab ich jetzt endlich verstanden...
Zitat:
|
Re: Eigener Desktop???
Schau dir mal im MSDN die Parameter zu den genannten Methoden an:
![]() |
Re: Eigener Desktop???
Hab ich mir ja schon angesehen...
Code:
Mit der eigenen enumProcedure blick ich noch nicht ganz durch. Währe nett, wenn mir da jemand helfen könnte...
EnumDesktops(Openwindowstation('', True, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP), ?, test);
Und: Wenn ich jetzt auf dem neuen Desktop bin, dann hab ich ja weder Icons, noch Startleist oder sonst irgendwas. Dann kann ich auch kein neues Fenster öffnen. Wie kann ich dann also einem Fenster den neuen Desktop zuweisen? |
Re: Eigener Desktop???
Ok, was hab ich hier jetzt falsch gemacht?
Code:
Es soll eine Datei im neuen Desktop geöffnet werden, mit der ich den Desktop 'Oliver' wieder schließen kann. Desktop wird auch geswitcht, aber das Fenster wird nicht angezeigt. Was ist daran nun wieder falsch???
procedure TForm1.Button1Click(Sender: TObject);
begin CreateDesktop('Oliver', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP, nil); SetThreadDesktop(Opendesktop('Oliver', DF_ALLOWOTHERACCOUNTHOOK, true, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP)); shellexecute(application.Handle, 'open', 'C:\Programme\Borland\Delphi7\Projects\Desktops\DesktopClosedpr.dpr', nil, nil, sw_shownormal); end; procedure TForm1.Button2Click(Sender: TObject); begin switchdesktop(Opendesktop('Oliver', DF_ALLOWOTHERACCOUNTHOOK, true, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP)); end; //Edit: hab gerade gesehen, ich muss auch schon die exe-Datei öffnen... :? Aber das Fenster wird nicht im neuen Desktop geöffnet... |
Re: Eigener Desktop???
AAAHHHHH! Quelltextformatierung!!! So kann das ja keiner lesen!
Delphi-Quellcode:
Evtl. kann da jetzt jemand was mit anfangen. Zum Problem selber weiss ich nix, aber das war ja grauenvoll ;)
procedure TForm1.Button1Click(Sender: TObject);
begin CreateDesktop('Oliver', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP, nil); SetThreadDesktop(Opendesktop('Oliver', DF_ALLOWOTHERACCOUNTHOOK, true, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP)); shellexecute(application.Handle, 'open', 'C:\Programme\Borland\Delphi7\Projects\Desktops\DesktopClosedpr.dpr', nil, nil, sw_shownormal); end; procedure TForm1.Button2Click(Sender: TObject); begin switchdesktop(Opendesktop('Oliver', DF_ALLOWOTHERACCOUNTHOOK, true, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP)); end; |
Re: Eigener Desktop???
Ok, ok. Tut mir leid, kommt nicht wieder vor... :?
Hoffe, mir kann trotzdem jemand helfen... |
Re: Eigener Desktop???
Habs das mit den Desktops jetzt hinbekommen:
Delphi-Quellcode:
Jetzt stellt sich nur noch die Frage, warum kein neues Fenster erzeugt wird...
procedure TForm1.Button1Click(Sender: TObject);
var hWinSta: THandle; begin Listbox1.Clear; hWinSta := GetProcessWindowStation; EnumDesktops(hWinSta, @EnumDesktopsCallback, Integer(Listbox1)); CloseWindowStation(hWinSta); end; procedure TForm1.Button2Click(Sender: TObject); begin switchdesktop(opendesktop(PChar(listbox1.Items.Strings[listbox1.ItemIndex]), DF_ALLOWOTHERACCOUNTHOOK, true, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP)); end; procedure TForm1.Button3Click(Sender: TObject); begin createdesktop('Oliver', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP, nil); end;
Delphi-Quellcode:
MFG Doc
procedure TForm1.Button1Click(Sender: TObject);
begin CreateDesktop('Oliver', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP, nil); SetThreadDesktop(Opendesktop('Oliver', DF_ALLOWOTHERACCOUNTHOOK, true, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP)); shellexecute(application.Handle, 'open', 'C:\Programme\Borland\Delphi7\Projects\Desktops\DesktopClosedpr.dpr', nil, nil, sw_shownormal); end; procedure TForm1.Button2Click(Sender: TObject); begin switchdesktop(Opendesktop('Oliver', DF_ALLOWOTHERACCOUNTHOOK, true, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_SWITCHDESKTOP)); end; |
Re: Eigener Desktop???
Du kannst SetThreadDesktop() nur verwenden wenn der aufrufende Thread keine Fenster besitzt.
|
Re: Eigener Desktop???
Zitat:
Delphi-Quellcode:
im neuen Desktop angezeigt wird???
shellexecute(application.Handle,
'open', 'C:\Programme\Borland\Delphi7\Projects\Desktops\DesktopClosedpr.exe, nil, nil, sw_shownormal); MFG Doc |
Re: Eigener Desktop???
So! Hab jetzt mal en Beispiel geschrieben wie man das alles verwenden kann
Delphi-Quellcode:
program Desk;
uses Windows, Messages; function MainWndProc(hWindow: HWND; Msg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall; export; var ps: TPaintStruct; begin Result := 0; case Msg of WM_PAINT: begin BeginPaint(hWindow, ps); SetBkMode(ps.hdc, TRANSPARENT); TextOut(ps.hdc, 10, 10, 'Hello World!', 12); EndPaint(hWindow, ps); end; WM_DESTROY: PostQuitMessage(0); else begin Result := DefWindowProc(hWindow, Msg, wParam, lParam); Exit; end; end; end; var wc: TWndClass; hWindow: HWND; Msg: TMsg; OldDesktop, Desktop: HDESK; begin OldDesktop:=GetThreadDesktop(GetCurrentProcessId); Desktop:= CreateDesktop('Oliver', nil, nil, DF_ALLOWOTHERACCOUNTHOOK, GENERIC_ALL, nil); SetThreadDesktop(Desktop); switchdesktop(Desktop); wc.lpszClassName := 'YourAppClass'; wc.lpfnWndProc := @MainWndProc; wc.Style := CS_VREDRAW or CS_HREDRAW; wc.hInstance := hInstance; wc.hIcon := LoadIcon(0, IDI_APPLICATION); wc.hCursor := LoadCursor(0, IDC_ARROW); wc.hbrBackground := (COLOR_WINDOW + 1); wc.lpszMenuName := nil; wc.cbClsExtra := 0; wc.cbWndExtra := 0; RegisterClass(wc); hWindow := CreateWindowEx(WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE, 'YourAppClass', 'Desktop', WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 400, 300, 0, 0, hInstance, nil); ShowWindow(hWindow, CmdShow); UpDateWindow(hWindow); while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; Halt(Msg.wParam); SetThreadDesktop(OldDesktop); switchdesktop(OldDesktop); CloseDesktop(Desktop); end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz