Announcement

Collapse
No announcement yet.

Desktop umschalten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Desktop umschalten

    Hallo,
    ich versuche eine Anwendung zu erstellen, bei der der Anwender mit mehreren Desktops arbeiten kann und zwischen diesen hin und her wechseln kann.

    Ich verwende folgenden Code: (auch aus diesem Forum)

    procedure TForm1.FlipDesktop;
    var
    AlterDesk : HDESK;
    NeuerDesk : HDESK;
    i :integer;
    typ:integer;
    begin
    AlterDesk := GetThreadDesktop(GetCurrentThreadID);
    NeuerDesk := CreateDesktop(PChar('Foobar'), nil, nil, 0, DESKTOP_CREATEWINDOW or
    DESKTOP_SWITCHDESKTOP or DESKTOP_CREATEMENU or DESKTOP_WRITEOBJECTS , nil);
    if NeuerDesk <> 0 then
    begin
    SetThreadDesktop(NeuerDesk);
    Windows.SwitchDesktop(NeuerDesk);
    // Desktop wurde umgeschaltet

    // .... zb. Aufruf eines Programmes
    // ....

    // Desktop wieder zurückschalten
    Windows.SwitchDesktop(AlterDesk);
    SetThreadDesktop(AlterDesk);
    CloseDesktop(NeuerDesk);
    // Der alte Desktop wird angezeigt
    end;
    //
    end;

    Ein neuer Desktop wird erstellt und auch umgeschaltet und angezeigt (Maus ist zu sehen).
    Wenn ich nun ein Programm öffne, wird dieses jedoch auf dem altem verstecktem Desktop geöffnet.
    Wie lade ich nun auf dem neuen Desktop eine Arbeitsumgebung mit Explorer und Verknüpfungen?

    Danke im voraus

  • #2
    Das würde ich jetzt gerne auch wissen, bzw. wie lasse ich ein bestimmtes Programm auf dem neuen Desktop anzeigen anstatt auf dem alten

    Comment


    • #3
      Hi, versuche mal folgendes:
      <pre>
      procedure StartProgramm;
      var
      StartupInfo: TStartupInfo;
      creationFlags: Cardinal;
      const
      desktopname = 'tralala';
      begin
      result := '';
      FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
      with StartupInfo do begin
      cb := SizeOf(TStartupInfo);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
      wShowWindow := sw_show;
      startupinfo.lpDesktop := PChar(desktopname);
      end;
      creationFlags := NORMAL_PRIORITY_CLASS;
      if not CreateProcess(nil, PChar(programm), nil, nil, False,
      creationFlags, nil, PChar(ExtractFiledir(programm)), StartupInfo, ProcessInfo) then
      showmessage(lastWinError);
      StartProgramm := fMsg;
      end;
      </pre>
      Gruß
      Karste

      Comment

      Working...
      X