AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Aufruf von Windows Snipping Tool und Remotehilfe
Thema durchsuchen
Ansicht
Themen-Optionen

Aufruf von Windows Snipping Tool und Remotehilfe

Ein Thema von Bornholdt · begonnen am 30. Jan 2018 · letzter Beitrag vom 31. Jan 2018
Antwort Antwort
Seite 3 von 5     123 45      
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#21

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 05:31
Hmm..


Das funktioniert:

Eventuell so:

  ShellExecute(Application.Handle, 'open', pchar(ExpandEnvStr('%windir%\sysnative\SnippingTool.exe')), nil, nil, sw_show); Siehe hier:

Delphi-Quellcode:
uses
  ShellApi;


// https://stackoverflow.com/questions/2833021/how-to-get-absolute-path-from-path-with-system-path-variables
function ExpandEnvStr(const szInput: string): string;
  const
    MAXSIZE = 32768;
  begin
    SetLength(Result,MAXSIZE);
    SetLength(Result,ExpandEnvironmentStrings(pchar(szInput),
      @Result[1],length(Result)) - 1);
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Application.Handle, 'open', pchar(ExpandEnvStr('%windir%\sysnative\SnippingTool.exe')), nil, nil, sw_show);
end;

Getestet mit Delphi 6 (somit 32 bit).

SnippingTool wird gestartet...


Ein 'System64' hab ich nicht unter meinem 64Bit W8.1, nur das bekannte 'SysWOW64'...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#22

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 05:45
Das funktioniert auch es werden sogar meine Icons korrekt eingelesen.
Aus dem Forum hier..

Musste aber noch einiges ändern.. aber was soll's.
Delphi-Quellcode:
function ChangeFSRedirection(bDisable: BOOL): BOOL;
type
  TWow64DisableWow64FsRedirection = function(var Wow64FsEnableRedirection: BOOL): BOOL; stdcall;
  TWow64EnableWow64FsRedirection = function(var Wow64FsEnableRedirection: BOOL): BOOL; stdcall;

function Is64Bit: Boolean;
var
  Reg: TRegistry;
begin

  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Result := Reg.KeyExists('\SOFTWARE\Wow6432Node');
  Reg.Free;
end;

var
  Handle: THandle;
  Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
  Wow64EnableWow64FsRedirection: TWow64EnableWow64FsRedirection;
  Wow64FsEnableRedirection: BOOL;
begin

  Result := true;
  if not Is64Bit then
    exit;

  try
    Handle := GetModuleHandle('kernel32.dll');
    @Wow64EnableWow64FsRedirection := GetProcAddress(Handle, 'Wow64EnableWow64FsRedirection');
    @Wow64DisableWow64FsRedirection := GetProcAddress(Handle, 'Wow64DisableWow64FsRedirection');

    if ((Handle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) and
      (@Wow64DisableWow64FsRedirection <> nil)) then

      if bDisable then
        Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection)
      else
      Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);

  except
    Result := false;
  end;
end;
Delphi-Quellcode:
ChangeFSRedirection(true);
ShellExecuteW(0, nil, PWideChar('C:\Windows\System32\SnippingTool.exe'), nil, nil, SW_SHOW);
ChangeFSRedirection(false);
gruss

Geändert von EWeiss (11. Jul 2019 um 16:49 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#23

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 09:31
Also prüfen ob die Anwendung der Verknüpfung 64Bit ist oder nicht. (wird schwierig)
Nö, total einfach, PE Header auslesen und auswerten.

Grüße
  Mit Zitat antworten Zitat
Bornholdt
(Gast)

n/a Beiträge
 
#24

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 09:31
Hallo zusammen,
danke für Euer zahlreiches Feedback.

Anbei die Lösung, die bei mir die gewünschten Ergebnisse bringt (inkl. Aufruf von quickassist.exe)


// Begin Helferfunktion zum Aufruf SnippingTool und quickassist
function ExpandEnvStr(const szInput: string): string;
const
MAXSIZE = 32768;
begin
SetLength(Result,MAXSIZE);
SetLength(Result,ExpandEnvironmentStrings(pchar(sz Input),
@Result[1],length(Result)) - 1);
end;


// Aufruf SnippingTool (Screenshot Tool)
procedure Formular.SnippingToolClick(Sender: TObject);
var
kError : Integer;
begin
kError := ShellExecute(Application.Handle, 'open', pchar(ExpandEnvStr('%windir%\sysnative\SnippingToo l.exe')), nil, nil, sw_show);
if kError < 33 then begin
ShowMessage(Format('Die Anwendung kann nicht gestartet werden. Fehlercode: %d!',[kError]));
end;
end;



// Aufruf Quickassist (Teamviewer Ersatz App nur unter Windows 10)
// https://stackoverflow.com/questions/...path-variables
procedure Formular.QuickAssistClick(Sender: TObject);
var
lError : Integer;
begin
lError := ShellExecute(Application.Handle, 'open', pchar(ExpandEnvStr('%windir%\system32\quickassist. exe')), nil, nil, sw_show);
if lError < 33 then begin
ShowMessage(Format('Die Anwendung kann nicht gestartet werden. Fehlercode: %d!',[lError]));
end;
end;



VG !!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#25

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 09:45
Also prüfen ob die Anwendung der Verknüpfung 64Bit ist oder nicht. (wird schwierig)
Nö, total einfach, PE Header auslesen und auswerten.

Grüße
Brauche ich nicht muss nur prüfen ob win64 oder nicht.
Hat sich für mich auch erledigt so wie du sehen kannst
Ich jage alle Dateien durch die ChangeFSRedirection und gut ist.

Zitat:
Anbei die Lösung, die bei mir die gewünschten Ergebnisse bringt (inkl. Aufruf von quickassist.exe)
@Bornholdt Es wäre nett wenn du die Delphi tags verwenden würdest..
Danke!

gruss

Geändert von EWeiss (31. Jan 2018 um 10:02 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#26

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 09:56
@EWeiss: Ja schon klar, aber angenommen, nurmal angenommen, ich prüfe den PE-Header ob 32/64 um dann dein ChangeFSRedirection(32/64) zu bestimmen/benutzen. So meint ich es. (bzw oder die andere methode von stackoverflow)
Oder sobald \system32\ drinn vorkommt ohne PE prüfung, oder oder oder, wie immer gibt es mehr als einen Weg um ans Ziel zu kommen


Ich pers. mag beide Varianten und hab sie in meine Tipps Datenbank aufgenommen.

Grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#27

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 10:03
Zitat:
wie immer gibt es mehr als einen Weg um ans Ziel zu kommen
Dito!

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#28

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 17:16
@EWeiss: Ja schon klar, aber angenommen, nurmal angenommen, ich prüfe den PE-Header ob 32/64 um dann dein ChangeFSRedirection(32/64) zu bestimmen/benutzen. [...]Oder sobald \system32\ drinn vorkommt ohne PE prüfung
Auch keine gute Idee. Es sind noch eine ganze Reihe anderer Verzeichnisse von der Redirection betroffen, und die können sich sogar mit jeder neuen Windows-Version ändern. Zudem können 64 bit Executables/DLLs auch auf einem 32 bit Programm rumliegen, da gibt's aber keine Redirection zu deaktivieren. Nicht die Zieldatei ist ausschlaggebend, sondern das OS, unter dem ein Programm läuft. Auswertung des PE Headers ist in Ordnung, sofern man das nicht als Indikator verwendet, unter welchem OS ein Programm läuft.

@EWeiss:
Windows bietet bereits eine Funktion zur Bestimmung der Bittigkeit: MSDN-Library durchsuchenIsWow64Process. Und bzgl. Wow64DisableWow64FsRedirection: Nimm besser LongBool sowohl für Rückgabe als auch Parameter. Wenn du hier im Forum nach meinen Beiträgen suchst, die diesen Funktionsnamen enthalten, findest du eine Implementation von mir (mittlerweile allerdings leicht überarbeitet).

Und immer schön darauf achten, die Redirection nur kurzzeitig zu deaktivieren. Denn es funktioniert z.B. nicht, eine DLL aus \Windows\System32 zu laden, während sie deaktiviert ist (weil 32 bit Prozesse nunmal keine 64 bit DLLs laden können, und umgekehrt).

Noch kurz bzgl. des Löschens des bei dir vorhandenen System64: Wenn es wirklich eine Junction ist, kann man die löschen. Ich rate aber dazu, einen Dateimanager (oder die CMD) zu verwenden und nicht den Explorer. Es wird immer wieder behauptet, der Explorer könne nicht sauber mit diesen NTFS-Eigenschaften umgehen und würde bei einem Löschvorgang nicht nur die Junction an sich sondern auch alles entsorgen, worauf die Junction zeigt. Ich hab das irgendwann mal ausprobiert, und konnte das nicht bestätigen. Aber wie sagen die Angelsachsen so schön: Better safe than sorry.

Grüße
Dalai
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#29

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 17:19
Zitat:
Nimm besser LongBool sowohl für Rückgabe als auch Parameter.
Sage mir bitte mal wo liegt der Unterschied zwischen LongBool oder BOOL.. Vom sichtbaren mal abgesehen.
Denn beides ist das gleiche.

BOOL: LongBool

Zitat:
Und immer schön darauf achten, die Redirection nur kurzzeitig zu deaktivieren.
Sie wird einmalig deaktiviert bis alle Icons verarbeitet und zugewiesen wurden incl. Icons, Pfade und so weiter.
Und dann nur einmal beim starten der Anwendung danach direkt wieder ein.

Zitat:
Windows bietet bereits eine Funktion zur Bestimmung der Bittigkeit: MSDN-Library durchsuchenIsWow64Process.
Ok das könnte ich noch ändern.
Nein ich denke der weg über die registry ist die bessere Alternative.
Zitat:
Note that this technique is not a reliable way to detect whether the operating system is a 64-bit version of Windows because the Kernel32.dll in current versions of 32-bit Windows also contains this function.

gruss

Geändert von EWeiss (31. Jan 2018 um 17:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#30

AW: Aufruf von Windows Snipping Tool und Remotehilfe

  Alt 31. Jan 2018, 17:33
Sage mir bitte mal wo liegt der Unterschied zwischen LongBool oder BOOL.. Vom sichtbaren mal abgesehen.
Denn beides ist das gleiche.
Oh, du hast recht. Hab ich mit Boolean verwechselt, das nur ein Byte groß ist, LongBool (und BOOL) ist aber 4 Byte.

Zitat:
Nein ich denke der weg über die registry ist die bessere Alternative.
Zitat:
Note that this technique is not a reliable way to detect whether the operating system is a 64-bit version of Windows because the Kernel32.dll in current versions of 32-bit Windows also contains this function.
Äh, ja und jetzt rate mal, was die Funktion auf einem 32 bit Windows zurückgibt... Tip: immer False. [ADD]Zudem bezieht sich dieser Satz auf die beiden vorhergehenden, in denen es darum geht, die Funktion dynamisch mit GetProcAddress zu ermitteln - und das allein ist kein sinnvoller Weg, um zu ermitteln, ob es ein 64 bit OS ist. Nur der Aufruf der Funktion ist es.[/ADD]

Grüße
Dalai

Geändert von Dalai (31. Jan 2018 um 17:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 01:38 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