AGB  ·  Datenschutz  ·  Impressum  







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

sendMessage versagt -.-

Ein Thema von 64Jabor · begonnen am 10. Jun 2008 · letzter Beitrag vom 11. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#1

sendMessage versagt -.-

  Alt 10. Jun 2008, 12:07
Hallo DP,

ich habe einen DLL-Hook programmiert, der jeden Tastendruck der F9-Taste abfängt und stattdessen oder eher gesagt zusätzlich an ein anderes Programm von mir, welches den Hook nutzt, einen Tastendruck der Media-Tasten simulieren soll.
Dazu habe ich folgende Prozeduren:

Delphi-Quellcode:
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
KeyUp := ((lParam and (1 shl 31)) <> 0);
  case nCode < 0 of
    TRUE: exit; //wenn code kleiner 0 wird nix gemacht
    FALSE:
      begin
       if not KeyUp then
        begin
         case wParam of
          VK_F9:
           begin
            PostMessage(WindowHandle, WM_KEYDOWN, VK_PLAY, 0);
            PostMessage(WindowHandle, WM_KEYUP, VK_PLAY, 0);
           end;
         end;
        end;
      end;
  end;
end;
Das ist die Prozedur in dem Hook, die den F9-Tastendruck abfängt! Das funktioniert DEFINITIV, habe ich per MessageBox getestet!
Die zweite Prozedur ist in meinem Programm und reagiert auf die Media-Tasten:

Delphi-Quellcode:
procedure TJP.HookMessage(var Msg: TMessage);
begin
case Msg.lParam of
APPCOMMAND_MEDIA_PREVIOUSTRACK: BtnBackClick(BtnBack);
APPCOMMAND_MEDIA_NEXTTRACK: BtnNextClick(BtnNext);
APPCOMMAND_MEDIA_STOP:BtnStopClick(BtnStop);
APPCOMMAND_MEDIA_PLAY_PAUSE: BtnPlayPauseClick(BtnPlayPause);
end;
end;
Habe es auch schon mit einem direkten WM_APPCOMMAND senden versucht, aber funktinierte auch nicht:

sendMessage(WindowHandle, WM_APPCOMMAND, 0, APPCOMMAND_MEDIA_PLAY_PAUSE); Ich komm da nicht mehr weiter -.-

Plz help!
mfg 64Jabor
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 12:24
Ich sehe hier nicht durch. In meinen Augen passt der code in dem ersten Delphi-Fentser nicht zu den anderen beiden. Was funktioniert denn eigentlich nun nicht.

Und nebenbei: Was ist Windowhandle bei Postmessage? Oder, wo ist es deklariert?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 12:40
Bitte gib deinem Thread einen aussagekräftigen Titel. Zum einem verwendest du die API-Funktion SendMessage gar nicht, sondern PostMessage. Un dich bin mir ziemlich sicher, dass es auch nicht versagt, sondern dass du was falsch machst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 12:47
Ich rate mal munter drauflos und vermute, dass WindowHandle eine globale Variable ist, deren Wert somit nicht in allen DLL-Instanzen gleich ist, weshalb es nicht funktioniert.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 12:51
Zitat von Apollonius:
Ich rate mal munter drauflos und vermute, dass WindowHandle eine globale Variable ist
Ach, du bist ein Fuchs!

Aber es funktioniert definitiv
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 13:03
Was meinst du mit "es funktioniert definitiv"?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 14:44
HI,

ich bezweifle, dass WindowHandle stimmt. Ich könnte mit hier zu Testzwecken ein HWND_Broadcast vorstellen, was aber den Nachteil hat, dass auch die nicht angesprochenen Programme Wind davon bekommen. Was natürlich auch geht ist, dass du jedes mal mit FindWindow abfrägst, an welches Handle zu schicken musst.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 15:03
Arbeitest du unter Windows Vista?
Zitat:
Microsoft Windows Vista and later.
Message posting is subject to User Interface Privilege Isolation (UIPI). The thread of a process can post messages only to message queues of threads in processes of lesser or equal integrity level. When a message is blocked by UIPI the last error, retrieved with GetLastError, is set to 5 (access denied)
Andreas
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#9

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 17:41
Hmk, ich handle das mal ab:

@shima
Nein! Ich nutze Windows XP WMC

WindowHandle ist das Handle des Programms, welches die DLL lädt, in dem Fall mein MediaPlayer.
Diese Funktionen hängen sehr wohl miteinander zusammen, denn ich möchte den Tastendruck der F-Tasten 9 bis 12 in Befehle für meinen MediaPlayer umwandeln. Die zweite Prozedur handelt die Media-Tasten einer Tastatur ab, eben jene will ich ja simulieren! Der dritten Codeausschnitt ist meine sendMessage um die es eigentlich ging, insofern NUTZE ICH sendMessage SEHR WOHL!
Zugegeben, der Titelist verbesserungsfähig...

Meine Theorie:
Nutzer drückt (egal in welchem Programm) zB. die F9-Taste, der globale Hook (siehe Prozedur 1) fängt den Druck ab und schickt per sendMessage oder PostMessage (was ist da egtl der Unterschied ?) die Nachricht, dass die Taste "Play" gedürckt worden ist, die Prozedur die die MediaTaste-Drücke abhandelt, sollte den Druck ebenfalls auswerten. Der 3. Ausschnitt ist meine zweite Idee, direkt einen WM-APPCOMMAND an meinen Player zu senden, sodassper sendMessage die Konstanten für die MediaTasten mitgeschickt werden, das habe ich versucht zu erreichen, funktioniert so aber nicht.
Meine Vermutung (deshalb der Titel) ist, dass die Message gar nicht ankommt...
Sebastian
Unsren Clan im volle Lauf, hält weder Ochs noch Esl auf ^^
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: sendMessage versagt -.-

  Alt 10. Jun 2008, 18:37
Genau das habe ich doch gesagt. Wenn du in einer DLL-Instanz WindowHandle auf einen Wert setzt, beeinflusst du damit die anderen DLL-Instanzen nicht - in denen bleibt der Wert auf 0. Lass dir doch mal vor dem PostMessage den Wert des Handle mit einer MessageBox anzeigen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  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 06:50 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