Thema: Delphi Windows 7 Theme wechseln

Einzelnen Beitrag anzeigen

Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#19

AW: Windows 7 Theme wechseln

  Alt 10. Okt 2011, 16:56
Meim Sample funktioniert und der Dialog wird auch ordnungsgemäß geschlossen.
Du verwendest ja auch FindWindow. Ich kann dies aber nicht verwenden, da ich sonst für jede Windowssprache vorab herausfinden müsste, wie die lokale Bezeichnung des Fensters lautet.

Ich habe mal einen neuen Ansatz gestartet:
Delphi-Quellcode:
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;
Das ist schön, denn damit erhalte ich eine Test-Ausgabe wie:
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.
  Mit Zitat antworten Zitat