AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

createDesktop & Forms

Offene Frage von "delphis spassbremse"
Ein Thema von delphis spassbremse · begonnen am 13. Jan 2009 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
delphis spassbremse

Registriert seit: 7. Jun 2007
Ort: Enger
104 Beiträge
 
Delphi 7 Enterprise
 
#1

createDesktop & Forms

  Alt 13. Jan 2009, 17:14
Hallo,

ich habe mal wieder eine Frage, die
mich heute schon etliche Stunden beschäftigt hat.

Und zwar ich möchte einen neuen Desktop mit createDesktop erstellen.
Soweit kein Problem. Ich habe mir mal
Luckies Code angeschaut [hier].

Wenn ich aber die Procedure in eine VCL - Anwendung einbaue, dann funktioniert sie nur soweit,
dass der Neue Desktop erstellt wird und dann auch gar nix mehr macht.

Ich habe raugefunden, dass nach setThreadDesktop(), getLastError <> 0 zurückgibt.
Den ErrorCode 1447 (ERROR_NO_SCROLLBARS) (laut msdn) finde ich relativ komisch.
(Normalerweise müsste ich eventuell 170 für Thread in use)

Hat von euch jemand eine Idee was da schief laufen könnte?

Delphi-Quellcode:
procedure BaitAndSwitchDesktop;
var
  OldDesk : HDESK;
  NewDesk : HDESK;
begin
  OldDesk := GetThreadDesktop(GetCurrentThreadID);
  NewDesk := CreateDesktop(PChar('Foobar'), nil, nil, 0, DESKTOP_CREATEWINDOW or
    DESKTOP_SWITCHDESKTOP or DESKTOP_CREATEMENU or DESKTOP_WRITEOBJECTS, nil);
  if NewDesk <> 0 then
  begin
    showmessage(inttostr(windows.GetLastError)); // Gibt 0 zurück
    showmessage(booltostr(Windows.SetThreadDesktop(NewDesk)));
    showmessage(inttostr(windows.GetLastError)); // Gibt 1447 zurück
    Windows.SwitchDesktop(NewDesk);

      // Form erstellen

    Windows.SwitchDesktop(OldDesk);
    Windows.SetThreadDesktop(OldDesk);
    CloseDesktop(NewDesk);
  end;
  CloseDesktop(OldDesk);
end;
Grüße

Björn
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

Re: createDesktop & Forms

  Alt 13. Jan 2009, 22:44
Nach der MSDN Doku zu SetThreadDesktop funktioniert diese nur, wenn keine Handles des aktuellen Threads auf dem aktuelle Desktop bestehen. Und da die VCL das schon beim Programmstart geht das net.
Du musst also entweder einen neuen Thread verwenden, dann aber ohne VCL, oder du machst einen neuen Thread und startest darin die VCL.

Soweit ich weiß, gibt es bereits Posts dazu. Einfach mal CreateDesktop oder SetThreadDesktop suchen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz