![]() |
AW: Windows 7 Theme wechseln
Zitat:
Ohne das du auf den OK Button drücken mußt. Alternativ kannst du ja uses ShellObj einbinden und objShell.Sendkeys(VK_ENTER) verwenden. nicht getestet! ;) Zitat:
eng. FindWindow('CabinetWClass', 'Personalization') de. FindWindow('CabinetWClass', 'Anpassung') PS: Wenn du den Dialog nicht sehen willst solltest du SW_HIDE anstelle SW_SHOWNORMAL verwenden oder? gruss |
AW: Windows 7 Theme wechseln
Hier mal ein minimales Beispiel.
Was nicht geht! Alle "SW_" Flags haben keinen Einfluss beim Start des Dialogs. Es wird nicht auf die Anwendung gewartet unter verwendung von MsgWaitForMultipleObjects warum auch immer.. mit der abgeänderten Function von Luckie ExecAndWait gruss |
AW: Windows 7 Theme wechseln
Zitat:
Zitat:
Soweit ich weiß, wäre das hier der vollständige Aufruf:
Code:
Also entweder man kann irgendwie das (Child?-)Handle vom durch die exe aufgerufenen Fenster erhalten oder dann doch so wie Lucky als Alternative schrieb:
C:\Windows\system32\rundll32.exe C:\Windows\system32\shell32.dll,Control_RunDLL C:\Windows\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:"C:\Windows\Resources\Themes\nature.theme"
Zitat:
|
AW: Windows 7 Theme wechseln
Ein Fenster kann nur zu einem Prozess gehören.
|
AW: Windows 7 Theme wechseln
Zitat:
|
AW: Windows 7 Theme wechseln
Zitat:
Ist doch uninteressant ob exe oder cpl Auch ein Dialog-Fenster hat ein Handle sollte also auch auf die messagen SW_SHOW oder SW_HIDE reagieren. Das Handle kommt nicht von der rundll32.exe sondern vom Dialog-Fenster. Und zwar wie schon geschrieben mit
Delphi-Quellcode:
FindWindow('CabinetWClass', 'Anpassung')
gruss |
AW: Windows 7 Theme wechseln
Zitat:
Zitat:
![]() Zitat:
|
AW: Windows 7 Theme wechseln
Zitat:
Vorraus gesetzt du verwendest das richtige Handle was du "zum dritten mal" über FindWindow in Erfahrung bringen mußt und das geht nun mal nur über den Window Titel Und warum soll das nicht gehen über die Sprachen? Es wird doch eine Api geben mit der man die Lokale Sprache identifizieren kann. Meim Sample funktioniert und der Dialog wird auch ordnungsgemäß geschlossen. PS: Mit "Was nicht geht!" Meinte ich die funktionen die ich nachher aufgelistet habe SW_ Flags und das warten auf den Dialog (Deshalb auskommentiert und Sleep(2000) eingefügt) Zitat:
Alternativ könntest du den Namen auch über TCPLInfo in erfahrung bringen. gruss |
AW: Windows 7 Theme wechseln
Zitat:
Ich habe mal einen neuen Ansatz gestartet:
Delphi-Quellcode:
Das ist schön, denn damit erhalte ich eine Test-Ausgabe wie:
function EnumWindowsProc(wHandle: HWND; m: TMemo): Bool; stdcall; export;
var Title, ClassName: array[0..255] of char; tid, pid: DWORD; begin Result := True; GetWindowText(wHandle, Title, 255); GetClassName(wHandle, ClassName, 255); tid := GetWindowThreadProcessId(wHandle, @pid); if IsWindowVisible(wHandle) then m.Lines.Add(string(Title) + ' | ' + string(ClassName) + ' | '+ IntToStr(tid)+'/'+IntToStr(pid)); end; procedure TSystemForm.Button5Click(Sender: TObject); var pi: TProcessInformation; si: TStartupInfo; aFile : String; begin aFile := 'notepad.exe'; //aFile := 'C:\Windows\system32\rundll32.exe C:\Windows\system32\shell32.dll,Control_RunDLL C:\Windows\system32\desk.cpl'; FillMemory( @si, sizeof( si ), 0 ); si.cb := sizeof( si ); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_SHOWNORMAL; CreateProcess( Nil, PChar( aFile + '' ), Nil, Nil, False, NORMAL_PRIORITY_CLASS, Nil, Nil, si, pi ); Memo1.Lines.Add('processinfo.dwProcessId: '+IntToStr(pi.dwProcessId)); sleep(5000); EnumWindows(@EnumWindowsProc, Integer(Memo1)); end; processinfo.dwProcessId: 7896 Unbenannt - Editor | Notepad | 10084/7896 Womit ich das Fenster dem aufrufenden Prozess zuordnen kann. Das funktioniert dann zwar mit einem ausführbaren Programm wie notepad.exe, aber nicht beim Ausführen einer .cpl per rundll.32.exe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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