Seite 3 von 3

Verfasst: 23.12.2007 16:59
von Scarabol
mhhh

Der Requester wird trotzdem nicht angezeigt....

Gruß
Scarabol

Code: Alles auswählen



Procedure GetPID(ProcessName.s)
  hSnapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,#Null)
 
  If hSnapShot
   
    iResult = -1
    pInfo.PROCESSENTRY32
    pInfo\dwsize    = SizeOf(PROCESSENTRY32)
    bProcAvailable  = Process32First_(hSnapShot, @pInfo)
   
    While(bProcAvailable) And (Not iResult = 0)
      bProcAvailable = Process32Next_(hSnapShot, @pInfo)
      iResult = CompareMemoryString(@pInfo\szExeFile,@ProcessName,1) 
    Wend
   
    CloseHandle_(hSnapShot)
   
    ProcedureReturn pInfo\th32ProcessID
   
  EndIf
EndProcedure

Procedure InjectDll(hProcess)
 
  If Not hProcess
     ProcedureReturn 0
  EndIf    
 
  hKernel32    = GetModuleHandle_("Kernel32")
  szLibPath.s  = GetCurrentDirectory() + "popmenu.dll"
  bLen          = Len(szLibPath)+1
  pLibRemote   = VirtualAllocEx_(hProcess,#Null,bLen,#MEM_COMMIT,#PAGE_READWRITE )
 
  If pLibRemote = #Null
    ProcedureReturn #False
  EndIf
   
  WriteProcessMemory_(hProcess,pLibRemote,@szLibPath,bLen,#Null)
  hThread = CreateRemoteThread_(hProcess,#Null,0,GetProcAddress_(hKernel32,"LoadLibraryA"),pLibRemote,0,#Null)
 
  If (hThread = #Null)
    Goto Jump2
  EndIf
 
  WaitForSingleObject_(hThread,#INFINITE)
  CloseHandle_(hThread)
  VirtualFreeEx_(hProcess,pLibRemote,bLen,#MEM_RELEASE)
  ProcedureReturn 1 
 
  Jump2:
  VirtualFreeEx_(hProcess,pLibRemote,bLen,#MEM_RELEASE)
 
  ProcedureReturn 0 
EndProcedure

pid = GetPID("purebasic.exe")
If pid
   hProcess  = OpenProcess_(#PROCESS_CREATE_THREAD | #PROCESS_QUERY_INFORMATION | #PROCESS_VM_OPERATION | #PROCESS_VM_WRITE | #PROCESS_VM_READ,#False, pid)
   InjectDll(hProcess)
EndIf 

Code: Alles auswählen


Procedure _subclass_cb_(hWnd,uMsg,wParam,lParam)
   
   If uMsg = #WM_INITMENUPOPUP
      ; menu bearbeiten ...
      
   EndIf
 
   ProcedureReturn   CallFunctionFast(oldproc,hWnd,uMsg,wParam,lParam)
EndProcedure   

ProcedureDLL AttachProcess(Instanz)
   
   ; find window handle
   ; subclass window
   ; bla bla
   
   MessageRequester("Info", "Dies ist ein test")
   
EndProcedure 

Verfasst: 23.12.2007 17:20
von edel
Dort traegst du den Namen deiner DLL ein.

Code: Alles auswählen

szLibPath.s  = GetCurrentDirectory() + "popmenu.dll" 

Verfasst: 23.12.2007 17:23
von Scarabol
Juhhuuu danke!

Hatte die Dll falsch benannt...

Jetzt muss ich das Programm jedesmal ausführen, wenn der Prozess neu ausgeführt wird oder?

Gruß
Scarabol

Verfasst: 23.12.2007 17:26
von edel
ja

Verfasst: 23.12.2007 17:34
von Scarabol
Funktionieren Globals innerhalb einer dll?

Oder wie kann ich oldproc übergeben?

Gruß
Scarabol

Verfasst: 23.12.2007 17:47
von edel
Gibt kein Unterschied.

Verfasst: 23.12.2007 17:58
von Scarabol
Juhhuu,

funktioniert jetzt nur noch das Menü bearbeiten...

Gruß
Scarabol

Verfasst: 03.01.2008 21:19
von FireStorm
Wie kann man den das Menü nun ändern? Ich hab leider sowas noch nie gemacht. Das mit dem Windowhandle ist ja noch ganz einleuchtend, das mit dem Event auch. Aber wie ändere ich dann da Menü? Oder macht das etwa diese Zeile:

Code: Alles auswählen

ProcedureReturn   CallFunctionFast(oldproc,hWnd,uMsg,wParam,lParam)
? :o

Verfasst: 04.01.2008 03:30
von Scarabol
Sorry habs nicht zuende gemacht...

Habs dann doch mit den Registry einträgen hinbekommen...

Gruß
Scarabol