AGB  ·  Datenschutz  ·  Impressum  







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

Programme ausführen, Win+R

Ein Thema von netpilots · begonnen am 2. Apr 2013 · letzter Beitrag vom 4. Apr 2013
Antwort Antwort
netpilots

Registriert seit: 13. Nov 2004
Ort: Zürich
33 Beiträge
 
Delphi 6 Enterprise
 
#1

Programme ausführen, Win+R

  Alt 2. Apr 2013, 09:48
Hallo Experten

Ich möchte die Box wie sie kommt wenn man die Windows Taste und 'R' drückt aus eine Programm genau so erscheinen lassen.
Habe schon den Explorer mit seinen Parametern und auch RunDLL32 untersucht aber noch nichts gefunden.
Wie macht man das softwaremässig? 'Normale' Programm ausführen lassen funktioniert mit ShellExecute super, geht das auch für mein Wunsch wie beschrieben?

Notfalls könnte man den Tastendruck 'WinTaste' und 'R' simulieren, oder? Wie würde das aussehen?

Nachtrag: Mit einem Trick habe ich es bereitsch geschafft. Kopierte den Link Ausführen als Run.lnk und führte diesen mit ShellExecute aus.
Bei Win7 x64 ist der Link hier: C:\Users\[Benutzername]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories
Wenn man in den Link schaut sieht man explorer -7003 u.s.w. was mich nicht weiter brachte.
Gibt es eine elegantere Lösung als mit dem Trick über den Link?


Vielen Dank und freundliche Grüsse - Netpilots

Geändert von netpilots ( 2. Apr 2013 um 10:02 Uhr)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Programme ausführen, Win+R

  Alt 2. Apr 2013, 10:11
Vielleicht so?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Programme ausführen, Win+R

  Alt 2. Apr 2013, 10:13
Von der Kommandozeile aus geht es mit

c:\WINDOWS\system32\rundll32.exe shell32.dll,#61

Programmatisch get es mit IShellDispatch::FileRun laut How to open the Run window programmatically
Michael Justin
  Mit Zitat antworten Zitat
netpilots

Registriert seit: 13. Nov 2004
Ort: Zürich
33 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Programme ausführen, Win+R

  Alt 2. Apr 2013, 13:57
Programmatisch geht es auch so wie beschrieben.

Code:
 ShellExecute(Handle,'open', PChar('rundll32.exe'), PChar('shell32.dll, #61'), nil, SW_SHOWNORMAL);
Die anderen Hinweise werde ich auch noch durchlesen. Ist halt Cpp welches ich für Delphi 6 ändern müsste.
  Mit Zitat antworten Zitat
netpilots

Registriert seit: 13. Nov 2004
Ort: Zürich
33 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Programme ausführen, Win+R

  Alt 3. Apr 2013, 14:13
Es ist wie verhext. Der Ursprung der Frage ('Ausführen' zu öffen), liegt darin, dass wenn ich Regedit vom Programm aus ausführe, dieses nicht gleich reagiert wie wenn man Regedit separat ausführt. Mein Programm wird mit Administratorenrechte ausgeführt. Diese Rechte werden scheinbar an die daraus gestarteten Programme vererbt. Regedit fragt nicht nochmals nach den Rechten.

Beispiel: Die Eintragungen in HK_LM\Software\Microsoft\Windows\CurrentVersion\OE MInformation (Selbstvertändlich ohne die Umleitung nach \WOW6432Node wie das bei x64 Systemen auomatisch geschehen würde) funktioniert. OEMInfos werden auch in den Eigenschaften angezeigt. Die Inhalte lassen sich programmatisch auslesen.

Nun möchte ich aber mit Regedit in die Registry rein schauen. Regedit programmatisch geöffnet erscheinen keine Einträge in \OEMInformation, auch WOW6432Node ist nicht vorhanden. Die Darstellung der Registry erscheint so wie bei 32 Bit Systemen. Selbst dort müssten aber Werte im \OEMInformation stehen.
Starte ich Regedit ausserhalb der Anwendung selbst wird alles so angezeigt wie erwartet. Starte ich Regedit programmatisch mit dem zuvor beschriebenen Link zeigt es auch alles an wie erwartet. Mit dem zuvor gestarteten Link werden die Rechte nicht an Regedit vererbt, es fragt also nochmals danach. Ich dachte dass der Link die Rechte Erbt und genau so auch das daraus gestartete Regedit.
Hauptproblem ist aber die unterschiedliche Darstellung der Inhalte der Registry, je nachdem wie, resp. von wem, Regedit gestartet wurde.
Wer hat schon solche Beobachtungen gemacht?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#6

AW: Programme ausführen, Win+R

  Alt 3. Apr 2013, 14:27
Schau mal im Taskmanager nach, welche Variante der regedit.exe wirklich - je nach Methode - gestartet wird.

MfG Dalai
  Mit Zitat antworten Zitat
netpilots

Registriert seit: 13. Nov 2004
Ort: Zürich
33 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Programme ausführen, Win+R

  Alt 4. Apr 2013, 01:22
Dein Hinweis ist was Wert, vielen Dank.
Wenn es nicht funktioniert ist es der regedit.exe *32 ; also der 32 Bit im C:\Windows\SysWOW64 Verzeichnis.
Wenn alles richtig angezeigt wird ist es der im C:\Windows Verzeichnis : also die 64 Bit Ausführung.
Jetzt werde ich explizit den 64 Bit ausführen. Schreibe dann ob es wirklich daran lag. Ich bin mir jetzt schon sicher dass es so ist aber testen muss ich ja trotzdem.

Ich schreibs gleich hier als Nachtrag rein.
Es hat noch nicht so funktioniert wie ich möchte.
Dies funktioniert:
Registry Einträge in der, sagen wir mal x64 Registry, bearbeiten geht mit der Einleitung.
Code:
Reg := TRegistry.Create(KEY_ALL_ACCESS OR KEY_WOW64_64KEY);
Regedit (x64) ausführen klappt nicht. Beide Beispiele öffnen das 32Bit Regedit.

So erwartete ich dass Regedit x64 ausgeführt wird, tut es aber nicht.
Code:
ShellExecute(Handle,'open', PChar('C:\Windows\Regedit.exe'), nil, nil, SW_SHOWNORMAL);
So erwartete ich dass Regedit x86 ausgeführt wird, tut es wie erwartet, nützt mir aber nichts.
Code:
ShellExecute(Handle,'open', PChar('C:\Windows\SysWOW64\Regedit.exe'), nil, nil, SW_SHOWNORMAL);

Ist da was zu machen, so wie einem das mit TRegistry.Create(KEY_ALL_ACCESS OR KEY_WOW64_64KEY) gelingt?

Geändert von netpilots ( 4. Apr 2013 um 10:29 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#8

AW: Programme ausführen, Win+R

  Alt 4. Apr 2013, 10:57
Auch wenn ich weiterhin nicht verstehe, warum du regedit.exe von deinem Programm aus starten können willst, ist das Starten von 64 Bit Programmen von 32 Bit Programmen aus etwas aufwendiger als der Zugriff auf die 64 Bit Registry-Zweige, Stichwort Wow64DisableWow64FsRedirection (hinterher das Wow64RevertWow64FsRedirection nicht vergessen!).

MfG Dalai
  Mit Zitat antworten Zitat
netpilots

Registriert seit: 13. Nov 2004
Ort: Zürich
33 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: Programme ausführen, Win+R

  Alt 4. Apr 2013, 21:53
Man kann bestimmt vom Programm aus alles in der Registry machen was man auch mit Regedit machen kann. Dazu ist eigentlich kein Bedarf da.
Die ursprüngliche Idee war, mit Delphi Code was in der Registry machen und dann der Einfachheit halber mit Regedit kontrollieren. Damit man nicht 'Regedit' schreiben muss oder einen Link klickt sollte Regedit gleich vom Programm aus zu öffnen sein.

Jetzt wo klar wurde dass es nicht so einfach ist ein 64Bit Programm aus einer 32Bit Anwendung zu starten interessiert es erst recht.
Werde mal schauen ob ich mit deinem Hinweis weiter kommen.

Schon mal vielen Dank und liebe Grüsse - Netpilots

Die Lösung welche zu funktionieren scheint.

In der entsprechenden Unit, vor oder nach

'implementation'
'{$R *.dfm}'

diesen Code einfügen.

Code:
var Wow64FsEnableRedirection: LongBool;
Function Wow64DisableWow64FsRedirection(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall; External 'Kernel32.dll' Name 'Wow64DisableWow64FsRedirection';
Function Wow64RevertWow64FsRedirection(Wow64FsEnableRedirection: LongBool): LongBool; StdCall; External 'Kernel32.dll' Name 'Wow64RevertWow64FsRedirection';
Dann im Teil wo man ein x64 Programm (in unseren Fall regedit.exe) unter dieser 32Bit Anwendung starten möchte.
Code:
 if IsWOW64 then
  begin
   if Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection) then
    begin
      ShellExecute(Handle,'open', PChar('Regedit.exe'), nil, nil, SW_SHOWNORMAL);
      Wow64RevertWow64FsRedirection(Wow64FsEnableRedirection);
    end;
  end;
Quelle welche für diesen Code verwendet wurde: http://embarcadero.newsgroups.archiv...007109312.html

Hätte noch Beispiele aus DelphiPraxis aber mit viel mehr Code: http://www.delphipraxis.net/155861-w...direction.html

Geändert von netpilots ( 5. Apr 2013 um 00:00 Uhr) Grund: Nachtrag
  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 04:55 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