AGB  ·  Datenschutz  ·  Impressum  







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

DLL - Problem

Ein Thema von seddto1977 · begonnen am 27. Jul 2004 · letzter Beitrag vom 28. Jul 2004
Antwort Antwort
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#1

DLL - Problem

  Alt 27. Jul 2004, 21:17
Ich habe folgendes Problem.
Wenn ein User mit einem meiner Programme arbeitet , dann muß er meistens gleichzeitig noch mit anderen Programmen wie Word etc arbeiten. Deshalb habe ich versucht einen Hook zu programmieren, der dem User zb. über Messageboxen während er in dem anderen Programm arbeitet Hinweise gibt. Hier erstmal der Code in meinem Programm, das die DLL aufruft:

Delphi-Quellcode:
CreateProcessA(nil,'C:\Programme\Microsoft Office\Word.exe',nil,nil,False,CREATE_SUSPENDED,nil,nil,StartupInfo,ProcessInfo);
ResumeThread(ProcessInfo.hThread);
Sleep(5000);
Lib:=LoadLibrary(ServerName);
Proc:=GetProcAddress(Lib,'pseduo');
SetWindowsHookEx(WH_GETMESSAGE,Proc,Lib,ProcessInfo.dwThreadId);
Sleep(1000);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
ExitProcess(0);
In diesem Fall wird Word neu gestartet, weil ich das ganze erstmal testen will...später suche ich mir dann das richtige Process-Handle...
Der Code in der DLL sieht so aus:

Delphi-Quellcode:
procedure EntryPoint(Reason:Integer);
var
IP:PChar;
TID:DWORD;
begin
  case Reason of
  DLL_THREAD_ATTACH:
  begin
    Showmessage (extractfilename(paramstr(0)));
  end;
  DLL_THREAD_DETACH:
  begin
  end;
  end;
end;

procedure pseduo;
begin
end;

exports pseduo;

begin
DLLProc:=@EntryPoint;
EntryPoint(DLL_THREAD_ATTACH);
end.
In diesem Fall soll lediglich in Word eine Messagebox angezeigt werden in der der Name des aktuellen Process angezeigt wird, damit ich sehe ob die Messagebox im Kontext von Word oder von meinem Programm läuft. Das Ergebnis sieht so aus das die Messagebox zuerst im Kontext von meinem Programm angezeigt wird (zb. Text: MeinProgramm.exe) und wenn ich mit Ok bestätigt habe dann sofort im Kontext von Word (Text: Word.exe). Was mache ich falsch, ich möchte natürlich nicht das alle Aktionen 2 mal durchgeführt werden sondern immer nur im kontext des Programms in das ich die DLL lade (also in diesem Fall Word). Kann mir jemand weiterhelfen?

PS: Das DLL und Hook-Tut habe ich mir schon durchgelesen aber bei der Sache hier komm ich irgendwie nicht weiter...
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#2

Re: DLL - Problem

  Alt 27. Jul 2004, 23:16
Mein Vorschlag:

Entweder du nimmst eine andere Hooking Methode, oder

du findest z.B. so:
Delphi-Quellcode:
function GetFileName: string;
var
  Buffer : array[0..254] of Char;
begin
  GetModuleFilename(hinstance, @Buffer[0], 255);
  Result := Buffer;
end;
den Dateinamen der Anwendung heraus, die gerade die Message empängt (sollte funzen), oder ...

du findest einen anderen weg ^^


Ein Problem sehe ich allerdings in dieser Zeile:
ShowMessage(...);
ShowMessage ist soweit ich das weis eine VCL funktion. Man sollte wohl doch lieber MessageBox(...) verwenden ...

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#3

Re: DLL - Problem

  Alt 27. Jul 2004, 23:42
Danke für die Antwort! Welche andere Hooking Methode könnte ich denn verwenden? Also es geht mir eigentlich um folgendes: Ich möchte mit meinem Programm die DLL nur starten, damit Sie unter dem Namen des anderen Programms Befehle ausführt, zb. die Messagebox aber auch andere. Die DLL muss auch keine Werte an mein Programm zurückgeben oder auf Eingaben von meinem Programm warten, Es geht nur darum das mein Programm mit CreateProcess zb. Word startet und die DLL dann in den Process läd. Wie könnte ich das denn am besten hinkriegen?
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: DLL - Problem

  Alt 27. Jul 2004, 23:49
Zitat von seddto1977:
CREATE_SUSPENDED
Versuchs ohne das Flag und warte mit WaitForInputIdle bevor Du die DLL injezierst.

Zitat von seddto1977:
EntryPoint(DLL_THREAD_ATTACH)
Sollte es nicht DLL_PROCESS_ATTACH sein?
(wenn in der Anwendung kein neuer Thread erzeugt wird, erscheint auch keine MessageBox).
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: DLL - Problem

  Alt 28. Jul 2004, 06:31
Warum laesst du denn nicht Word die DLL laden?
Ein kleines Makro sollte das erledigen.
  Mit Zitat antworten Zitat
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#6

Re: DLL - Problem

  Alt 28. Jul 2004, 09:23
Ich glaube das mit dem Makro bringt in dem Fall nichts weil es ja auch um andere Programme als Word geht in die die DLL geladen werden soll. Ich hab das Flag Create_Suspended jetzt einfach mit nil ersetzt und vor dem injezieren mit waitforinputidle gewartet. Jetzt wird die Messagebox aber nur noch im Namen meines Programms geöffnet (messageboxtext: MeinProgramm.exe) Weiß langsam echt nicht mehr was ich falsch mache
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#7

Re: DLL - Problem

  Alt 28. Jul 2004, 15:54
Kann es sein, das du eigentlich den WH_GETMESSAGE Hook nicht benötigst, und damit nur versuchst dich in eine andere Anwendung einzuschleusen? Wenn ja, kannst du dies auch mit der InjectLibrary -Funktion der MadCodeHook-Lib tun. Damit wird dann deine DLL von dem Programm geladen, in das du sie injezierst, und DLL-Proc mit DLL_PROCESS_ATTACH aufgerufen. Da könntest du dann einen Thread starten, und im hintergrund des Programmes arbeiten.

Kommt aber natürlich ganz auf den Anwendungsbereich an, den ich aber ned kenn ... ^^

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#8

Re: DLL - Problem

  Alt 28. Jul 2004, 16:55
@c113plpbr

Danke ich werd mir die Lib gleich mal anschauen, ich glaub das ist genau das was ich gesucht habe...
  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 18:35 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