AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Rechtsklick in minimierter Caption abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Rechtsklick in minimierter Caption abfangen

Ein Thema von Amateurprofi · begonnen am 24. Mai 2019 · letzter Beitrag vom 21. Jun 2021
Antwort Antwort
Seite 1 von 2  1 2      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

AW: Rechtsklick in minimierter Caption abfangen

  Alt 26. Mai 2019, 15:18
EDIT: In deinem Profil steht XE2. Keine Ahnung ob das noch stimmt. Falls ja, dann müsstest du das entsprechende Interface von Microsoft manuell implementieren. Ist halt etwas mehr Aufwand, funktioniert aber genau so.
Oder einfach Windows7TaskbarComponents nehmen. Ich habe 10.3 und benutze trotzdem Windows7TaskbarComponents.
https://delphi.fsprolabs.com/
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Rechtsklick in minimierter Caption abfangen

  Alt 26. Mai 2019, 16:03
Also wenn ich das als BuiltIn Funktion hätte, dann würde ich die auch benutzen. Zumal die von dir verlinkte Komponente offiziell nur bis XE2 unterstützt wird.

Component.png
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Rechtsklick in minimierter Caption abfangen

  Alt 26. Mai 2019, 16:10
Funktioniert wie gesagt einwandfrei mit 10.3.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Rechtsklick in minimierter Caption abfangen

  Alt 27. Mai 2019, 02:10
Funktioniert wie gesagt einwandfrei mit 10.3.
Danke für den Tipp.
Leider für mich nicht tauglich (XE 2).
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.675 Beiträge
 
Delphi 12 Athens
 
#5

AW: Rechtsklick in minimierter Caption abfangen

  Alt 27. Mai 2019, 06:30
Zumal die von dir verlinkte Komponente offiziell nur bis XE2 unterstützt wird.
Leider für mich nicht tauglich (XE 2).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Rechtsklick in minimierter Caption abfangen

  Alt 27. Mai 2019, 11:09
Abgesehen davon läuft die Komponente bis 10.3 problemlos.
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Rechtsklick in minimierter Caption abfangen

  Alt 27. Mai 2021, 11:17
Falls jemand ähnliches vorhat:
Ich habe mein Problem jetzt so gelöst:

1) Ein kurzes Programm geschrieben.
2) Eine Verknüpfung auf den Desktop gelegt.
3) Dieser einen Shortcut zugewiesen (Alt-Ctrl- .) (war erstaunt, dass " . " als Shortcut funktioniert.)

Wenn ich jetzt Alt-Ctrl-. drücke, wird
A) wenn das Musik.Programm geöffnet ist, diesem eine Message geschickt, die von dem Musik-Programm entsprechend verarbeitet wird.
B) wenn das Musik.Programm nicht geöffnet ist, wird es mit ShellExecute geöffnet.
Das funktioniert prächtig und gefällt mir noch besser als meine ursprüngliche Idee mit Rechtsklick auf die minimierte Caption in der TaskBar.
Was mir nicht gefällt: Das Programm "blitzt" kurz auf; hab noch keine Lösung gefunden, das zu verhindern.
Vielleicht weiß ja jemand auch dafür eine Lösung.

Delphi-Quellcode:
program ToggleMusic;

{$APPTYPE CONSOLE}

{$R *.res}

uses
   WinApi.Windows, WinApi.ShellApi,
   System.SysUtils;

const MusicPath='E:\Daten\Delphi XE2\Music\Win32\Debug\Music.exe';
var Win:HWND; StartUpInfo:TStartUpInfo; Dsn:String;
begin
   StartupInfo.cb:=SizeOf(StartUpInfo);
   StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow:=SW_HIDE;
   Win:=FindWindow(Nil,'Music Player');
   if Win<>0 then begin
      PostMessage(Win,$7FFF,0,0);
   end else begin
      Dsn:=MusicPath;
      if FileExists(Dsn) then
         ShellExecute(0,'open',PWideChar(Dsn),nil,nil,SW_SHOWNORMAL);
   end;
end.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.829 Beiträge
 
Delphi 12 Athens
 
#8

AW: Rechtsklick in minimierter Caption abfangen

  Alt 27. Mai 2021, 11:57
Zitat:
PostMessage(Win,$7FFF,0,0);
$7FFF: Nein!

A) Man verwendet niemals nichtssagende Werte (MagicValue), vor allem nicht, wenn es entsprechende Konstanten gibt. (WM_USER+X)
B) Außerdem liegt dieser Wert auch noch im falschen Bereich. (MSDN-Library durchsuchenWM_APP+X)
C) Man sollte muß für sowas prozessübergreifendes MSDN-Library durchsuchenRegisterWindowMessage verwenden.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Mai 2021 um 12:00 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Rechtsklick in minimierter Caption abfangen

  Alt 27. Mai 2021, 23:34
Zitat:
PostMessage(Win,$7FFF,0,0);
$7FFF: Nein!

A) Man verwendet niemals nichtssagende Werte (MagicValue), vor allem nicht, wenn es entsprechende Konstanten gibt. (WM_USER+X)
B) Außerdem liegt dieser Wert auch noch im falschen Bereich. (MSDN-Library durchsuchenWM_APP+X)
C) Man sollte muß für sowas prozessübergreifendes MSDN-Library durchsuchenRegisterWindowMessage verwenden.
$7FFF: Doch!

Aus "About Messages and Message Queues" Kapitel "Application-Defined Messages"

Zitat:
Values in the range 0x0400 (the value of WM_USER) through 0x7FFF are available for message identifiers for private window classes.
Aber vielleicht hab ich das falsch verstanden.
Wie auch immer, so wie ich es gemacht habe funktioniert es.

Wo siehst du den Unterschied zwischen $7FFF und WM_USER+X wo bei letzterem das X auch ein willkürlich festgelegter Wert ist.

In dem Musik-Programm, das der Empfänger der Message ist, sind diverse Users-Messages definiert

Code:
   UM_GetInfo=WM_User;
   UM_SettingsChanged=UM_GetInfo+1;
   UM_OverWrite=UM_SettingsChanged+1;
   UM_RichEditVScroll=UM_OverWrite+1;
   UM_DurationCount=UM_RichEditVScroll+1;
   UM_DurationDone=UM_DurationCount+1;
   UM_RepaintListBoxes=UM_DurationDone+1;
   UM_SetInfo=UM_RepaintListBoxes+1;
   ...
   UM_ToggleMusic=$7FFF;
und, wie du sehen kannst, ist die letzte "UM_ToggleMusic=$7FFF".
Was für einen Sinn macht es, diese auch in meinem kleinen Progrämmchen mit einem Namen zu versehen?
Ich würde das einsehen wenn wie z.B. in der Vcl diese Konstante "Global" verfügbar wäre (Wobei das wahrscheinlich irgendwie machbar wäre).
Da das hier aber nicht der Fall ist, bringt es aus meiner Sicht keinen Vorteil, auch in dem sendenden Programm die Konstante "UM_ToggleMusic=$7FFF" zu definieren.

Trotzdem: Danke für den Hinweis.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Rechtsklick in minimierter Caption abfangen

  Alt 21. Jun 2021, 12:03
Das in #10 gezeigte Programm macht, wenn ich AltGr+. drücke, folgendes:
A) Wenn das Programm "Music.exe" läuft: Sendet eine Message an "Music.exe", die dort verarbeitet wird und das Abspielen von MP3s startet oder stoppt.
B) sonst: Öffnet Music.exe.

Die Code-Sequenz in den ersten 3 Zeilen nach "begin" soll bewirken, dass das Programm nicht angezeigt wird (hab ich im INet gefunden).
Leider funktioniert das nicht.
Frage:
Wie kann ich verhindern, dass das Programm angezeigt wird, auch nicht kurz "aufblitzt"?


Delphi-Quellcode:
program ToggleMusic;

{$APPTYPE CONSOLE}

{$R *.res}

uses
   WinApi.Windows, WinApi.ShellApi,
   System.SysUtils;

const MusicPath='E:\Daten\Delphi XE2\Music\Win32\Debug\Music.exe';
var Win:HWND; StartUpInfo:TStartUpInfo; Dsn:String;
begin
   StartupInfo.cb:=SizeOf(StartUpInfo);
   StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow:=SW_HIDE;
   Win:=FindWindow(Nil,'Music Player');
   if Win<>0 then begin
      PostMessage(Win,$7FFF,0,0);
   end else begin
      Dsn:=MusicPath;
      if FileExists(Dsn) then
         ShellExecute(0,'open',PWideChar(Dsn),nil,nil,SW_SHOWNORMAL);
   end;
end.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:33 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