精华内容
下载资源
问答
  • dll获取自身路径方法(windows)

    千次阅读 2018-04-19 10:47:30
    include <windows.h> bool GetSelfModulePath(char* path) { MEMORY_BASIC_... HMODULE dllHandle = ((::VirtualQuery(GetSelfModulePath, &mbi, sizeof(mbi)) != 0) ? (HMODULE)...
    include <windows.h>  
    
    bool GetSelfModulePath(char* path)
    {
        MEMORY_BASIC_INFORMATION mbi;
        HMODULE dllHandle = ((::VirtualQuery(GetSelfModulePath, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
        TCHAR t_path[MAX_PATH] = { 0 };
        GetModuleFileName(dllHandle, t_path, MAX_PATH);
        int iLength = WideCharToMultiByte(CP_ACP, 0, t_path, -1, NULL, 0, NULL, NULL);
        return WideCharToMultiByte(CP_ACP, 0, t_path, -1, path, iLength, NULL, NULL);
    }

    Ps: 拿到path之后,应尽量去掉可能的尾部空数据

    展开全文
  • void GetDllPath(std::string &dllpath) { //得到动态库路径后赋值给dllpath TCHAR szDir[MAX_PATH];... GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPTSTR)InitRecognice, &hMod
    
    
    void GetDllPath(std::string &dllpath)
    {
            //得到动态库路径后赋值给dllpath 
    
    	TCHAR szDir[MAX_PATH];
    	HMODULE hModule;
    	GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPTSTR)InitRecognice, &hModule);
    	if (NULL != hModule)
    	{
    		GetModuleFileName(hModule, szDir, MAX_PATH);
    	}
    	wstring path_wstr = szDir;
    	string path_str;
    	WStringToString(path_wstr, path_str);
    	int pos = path_str.rfind("\\");
    	dllpath = path_str.substr(0, pos);
    }




    展开全文
  • 学习几个API,大部分参考百度ExtractIcon用于获取图标文件HICON ExtractIcon( HINSTANCE hInst, // instance handle LPCTSTR lpszExeFileName, // filename of file with icon UINT nIconIndex // index of icon...

    学习几个API,大部分参考百度

    ExtractIcon用于获取图标文件

    HICON ExtractIcon(

        HINSTANCE hInst, // instance handle
        LPCTSTR lpszExeFileName, // filename of file with icon
        UINT nIconIndex  // index of icon to extract
       );

    说明 - 获取包含在可执行文件或 DLL 中的图标数或图标句柄. 图标索引范转从 0 图标数减. 要获取图标数, 传递 -1.

    参数 - hInst 是应用程序实例句柄. 调用 GetClassLong 来获取该值.

    lpszExeFileName
    一个指向要获取相关图标的文件的指针. 该文件可以用在注册表中的应用程序的文件扩展名来关联.

    LpiIcon
    图标索引 (以零为基数).

    返回的是图标的句柄,如果文件里为空,返回值为空

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Classes, Graphics, Forms,
      Dialogs, StdCtrls, ExtCtrls, ShellAPI, Menus, Controls;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        OpenDialog1: TOpenDialog;
        Button2: TButton;
        Edit2: TEdit;
        Panel1: TPanel;
        Image1: TImage;
        SaveDialog1: TSaveDialog;
        PopupMenu1: TPopupMenu;
        N1: TMenuItem;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure N1Click(Sender: TObject);
        procedure Edit2Click(Sender: TObject);
      private
        { Private declarations }
        procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES; //很重要.不能少
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;
    implementation

    {$R *.dfm}
    //使用API函数ExtractIcon() 从 .exe 或 .dll中提取icon
    {
    首先要说明的是下面的三个API函数
    VOID DragAcceptFiles(

        HWND hWnd, // handle to the registering window
        BOOL fAccept // acceptance option
       );
    DragAcceptFiles函数是用来为拖放文件作初始化, 它的第一个参数hWnd指明目标窗体的
    句柄,第二个参数fAccept是一个布尔型变量,为True时 则hWnd所指向的窗体可以接受拖放的文件.

    UINT DragQueryFile(

        HDROP hDrop, // handle to structure for dropped files
        UINT iFile, // index of file to query
        LPTSTR lpszFile, // buffer for returned filename
        UINT cch  // size of buffer for filename
       );
    DragQueryFile函数用来查询拖放文件的文件名,其 本身的返回值是一个无符号整数,参数hDrop是
    一个存放所拖放文件名称的数据结构的句柄, 也就是文件名缓冲区的句柄,需要从Windows消
    息WM_DROPFILES中获得.iFile指明所要查询 文件的序号,它有两种取值方式,1.值为十六进制
    数FFFFFFFF时,DragQueryFile的返回值为 所拖放文件的数目;2.值在0到拖放文件总数之间时,
    DragQueryFile函数将相应序号的文件 名放入参数lpszFile所指向的缓冲区内,若此时lpszFile
    的值为NULL,则DragQueryFile会返 回相应文件名的长度.参数cch决定缓冲区的长度,
    由于Windows95支持长文件名,它的值不能 设得太小.

    VOID DragFinish(

        HDROP hDrop  // handle to memory to free
       );
    使用DragFinish函数告诉Windows拖放操作结束,使 其释放文件名缓冲区,它的参数hDrop与DragQueryFiles函数中的一样,也由Windows消息WM_DROPFILES 的hDrop参数获得.
    }
    procedure TForm1.Button1Click(Sender: TObject);
    var TheIcon: TIcon;
    begin
        OpenDialog1.Execute;
        edit1.Text:= OpenDialog1.FileName;
        TheIcon := TIcon.Create;    //创建TIcon实例
        TheIcon.Handle := ExtractIcon(hInstance,Pchar(edit1.Text),0);

        if TheIcon.Handle <> 0 then   //取得图标
          begin
            Button2.Enabled:= True;
            Edit2.Text:= '输入要保存的文件名';
            Panel1.Caption:= '';
            N1.Enabled:= True;        //激活右键
            TheIcon.SaveToFile('temp.cur');     //光标变成取得的图标
            screen.Cursors[1000]:= loadcursorfromfile('temp.cur');  //光标写进screen变量里
            deletefile('temp.cur');   //删除temp文件
            image1.Cursor:= 1000;
          end
        else
          begin
            Button2.Enabled:= False;
            Panel1.Caption:= '空';
            N1.Enabled:= False;
            image1.Cursor:=crDefault;
          end;
        image1.Picture.Icon:= TheIcon;
        Form1.Icon:= TheIcon;
        TheIcon.Free;    //释放内存
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var TheIcon: TIcon;
    begin
        SaveDialog1.FileName:= Trim(Edit2.Text);
        if SaveDialog1.Execute() then
          begin
          TheIcon := TIcon.Create;
          TheIcon.Handle := ExtractIcon(hInstance,Pchar(edit1.Text),0);
          if TheIcon.Handle <> 0 then
            begin
              TheIcon.SaveToFile(SaveDialog1.FileName+'.ico');
              ShowMessage('成功保存: '+SaveDialog1.FileName+'.ico');
            end
          else
            begin
              Button2.Enabled:= False;
              N1.Enabled:= False;
            end;
          TheIcon.Free;
          end;
    end;

    procedure TForm1.Edit2Click(Sender: TObject);
    begin
        if Edit2.Text='输入要保存的文件名' then
          Edit2.Text:= '';
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
        Application.Title:= Form1.Caption;
        DragAcceptFiles(Handle,True); // 让窗口接受拖放
    end;

    procedure TForm1.N1Click(Sender: TObject);
    begin
        Button2.Click;
    end;

    procedure TForm1.WMDROPFILES(var Message: TWMDROPFILES);
    var NumFiles: longint;
        i: longint;
        buffer: array[0..255] of char;
        TheIcon: TIcon;
    begin
        {How many files are being dropped}
        NumFiles := DragQueryFile(Message.Drop,$FFFFFFFF,nil,0); //获得拖放的文件数量
        {Accept the dropped files}
        for i := 0 to (NumFiles - 1) do //输出
          begin
            DragQueryFile(Message.Drop,i,@buffer,sizeof(buffer));
            //开始要做的处理
            edit1.Text:= buffer;
            TheIcon := TIcon.Create;
            TheIcon.Handle := ExtractIcon(hInstance,Pchar(edit1.Text),0);
            if TheIcon.Handle <> 0 then   //取得图标
              begin
              Button2.Enabled:= True;
              Edit2.Text:= '输入要保存的文件名';
              Panel1.Caption:= '';
              N1.Enabled:= True;        //激活右键
              TheIcon.SaveToFile('temp.cur');     //光标变成取得的图标
              screen.Cursors[1000]:= loadcursorfromfile('temp.cur');  //光标写进screen变量里
              deletefile('temp.cur');   //删除temp文件
              image1.Cursor:= 1000;
              end
            else
              begin
              Button2.Enabled:= False;
              Panel1.Caption:= '空';
              N1.Enabled:= False;
              image1.Cursor:=crDefault;
              end;
            image1.Picture.Icon:= TheIcon;
            Form1.Icon:= TheIcon;
            TheIcon.Free;
          end;
        DragFinish(Message.Drop);
    end;

    end.

    delphi 2007 + xp sp2下运行通过

    展开全文
  • 转网上李马大哥,GetExitCodeThread原来可以这么... // 使目标进程调用GetModuleHandle,获得DLL在目标进程中句柄 2. DWORD dwHandle, dwID; 3. LPVOID pFunc = GetModuleHandleA; 4. HANDLE hThread = CreateRemo

    转网上李马大哥的,GetExitCodeThread原来可以这么用,哈

     

     

    用这个方法可以卸载一个进程中的DLL模块,当然包括那些非病毒体的DLL。所以,这段代码还是谨慎使用为好。

    展开全文
  • CreateToolhelp32Snapshot函数通过获取进程信息为指定进程、进程使用堆[HEAP]、模块[MODULE]、线程[THREAD]建立一个快照[snapshot]。 HANDLE WINAPI CreateToolhelp32Snapsho
  • //根据传入窗口句柄,获取到同级、顶级、低级窗口,根据GetWindowCmd 传入不同获取也不同,详细看GetWindowCmd 类说明 [DllImport("user32.dll", SetLastError = true)] static extern IntPtr ...
  • C++调用C#生成的dll

    2021-01-16 17:18:21
    C++和C#都可以生成dll,但是C#生成的dll是托管在.net平台,因此无法直接调用。如需使用指针则需要使用gcnew来获取C#中对象,进而调用实例中方法。 gcnew关键字表示在托管堆上分配内存,并且为了与以前指针...
  • 文章目录枚举流程(以进程为例)示例代码API枚举进程枚举线程枚举DLL 枚举流程(以进程为例) 创建相应类型快照 参数: 返回值:快照句柄,供枚举函数使用 循环获取快照内容 参数: PROCESSENTRY32结构体...
  • WtsApi32是终端服务API,这种方法获取进程信息很快很简洁.效果如图: 1.包含头文件WtsApi32.h,导入库WstApi32.lib2.代码如下://终端服务名字,就是计算机名字 TCHAR szComputerName[100] = TEXT("xxx"); //打开...
  • type TGetUSB = function: PAnsiChar;... DLLHandle := LoadLibrary('USB.DLL'); @GetUSB := GetProcAddress(DLLHandle, 'GetUSB'); if Assigned(@GetUSB) then begin ShowMessage(GetUSB); end;
  • 卸载已经注入进程的DLL 实验

    千次阅读 2010-08-23 17:07:00
    对于DLL注入型病毒、木马、可以很自己编写一个专杀软件!下面写法对于我来说比较新鲜,用是返回错误代码写法,有点API味道!//获取进程PID DWORD GetProcessPID(char *ProcessName) { CString Name; ...
  • //获取当前获得焦点控件 //获取当前获得焦点控件 IntPtr handle = (IntPtr)GetFocus(); if (handle == null) this.FindForm().KeyPreview = true; else { Control c = Control.FromHandle(handle);//...
  • 通常获取 Windows 外壳主窗口句柄方法是: HWND hwndShell = FindWindow("Progman", NULL); 但是这个代码示范了一个更好方法,使用User32.dll中一个未公开函数:GetShellWindow...... 关键字:Shell,...
  • windows sdk里wtsapi32.h,官方文档链接在这 最低支持客户 Windows Vista ...能够获取到连接windows 用户状态,session状态,等信息 0、WTS_CURRENT_SERVER_HANDLE当前windows WTS_CURRENT_SERVER_HANDLE当前w
  • 直接上源码,对应什么库以及函数的作用,...//取指定进程PID里DLL的地址 HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName) { MODULEENTRY32 moduleEntry; HANDLE handle = NULL; handle = ::...
  • DLL 注入,全过程,运行后直接注入

    千次阅读 2019-04-22 11:36:15
    DLL注入主要有几个步骤1,提升当前进程权限(提升权限后才能获取宿主进程句柄) 2,通过进程IP 获取宿主进程句柄 3,在宿主进程内申请足够空间 4,把DLL地址写入到宿主进程里 5,在宿主进程里创建线程...
  • USB Communication DLL

    2013-05-09 19:02:00
    如果你想打开一个USB管道,你首先要知道这种USB设备GUID和管理道名称,获取句柄以后就可以使用ReadFile/WriteFile进行读写了!以下是代码,请参考!!// filename是管道名称,如pipe01等int CUSBImpObject::open_...
  • 获取本进程进程名

    2012-03-11 11:54:00
    Win7Psapi.dll已提供了GetProcessImageFileName()和QueryFullProcessImageName(), XPPSapi没有这个接口,可以用以下代码完成相同功能。 BOOL GetProcessName(CString &strProcessName) { HANDLE ...
  • 一段可以从任何DLL中提取函数名代码,这段代码应用前提是该DLL文件对象没有经过任何“加壳”处理,否则,可能提取不完整。#include "Dbghelp.h"bool GetDLLFileExports(char *szFileName, UINT *nNoOfExports, ...
  • HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName){ // 根据 PID 、模块名(需要写后缀,如:".dll"),获取模块入口地址。 MODULEENTRY32 moduleEntry; HANDLE handle = NULL; handle = :...
  • #include <windows.h> #include <stdio.h> void main() { BYTE* ptr;... int position, address;... handle = LoadLibrary(L"user32.dll"); if (!handle) { printf(" load dll erro !");
  • 通常为了或者程序运行时目录,我们一般采用GetModuleFileName函数,但是当在DLL或者COM组建里调用该函数,或者的是EXE的目录,不是当前COM组建或者DLL的目录。 可以使用下面的方法或者真正的目录。HMODULE ...
  • }//这边尝试了一下,发现DLL是能用 cout输入DLL完整路径"; cin>>szDllName; cin.ignore(1000, '\n'); cout输入进程名称"; cin>>szProcessName; dwpid = GetProcId(szProcessName); InjectDll(dwpid, ...
  • Private Const WTS_CURRENT_SERVER_HANDLE = 0&amp;Private Declare Function WTSEnumerateProcesses _Lib "wtsapi32.dll" Alias "WTSEnumerateProcessesA" _(ByVal hServer As Long, ByVal...
  • 参数 DLL文件名, 文本型, , 欲注入的DLL名称 .子程序 InjectDLL1, 逻辑型, 公开, SuspendThread,shellcode,SetEip .参数 PID, 整数型 .参数 DLL路径, 文本型 .子程序 InjectDLL2, 逻辑型, 公开, code cave,与...
  • <p>I'm trying to call function <code>RegisterDeviceNotificationW</code> of <code>user32.dll</code>. But the first param of the function is the "handle to the window or service that will receive device...
  • 窗口话可以用API: 定义: Function long GetScrollPos(Uint hWindow,Int nScrollBarFlag) Library "user32.dll" 代码: long hwindow,nscrollpos ... HWindow = Handle(w_name) ...
  • Ring3下获取原始SSDT

    2008-11-28 14:14:34
    Ring3下获取原始SSDT // ssdt.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include "ssdt.h" #include "ssdtDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_...
  • extern __declspec(dllexport) void SetStrCallback(GetStrCallback cb) { _getStrFunc = cb; } ... void GetCSharpStr() { char temStr[1024] = ""; _getStrFunc(temStr); // 调用C#函数,但是...

空空如也

空空如也

1 2 3 4 5 6
收藏数 116
精华内容 46
关键字:

获取dll的handle