如何动态获得程序加载地址

如何动态获得程序加载地址,第1张

一、需要的API函数分步阅读

1

/2

LoadLibrary函数的声明如下,它只有一个参数,指明要加载的动态库。

2

/2

GetProcAddress函数的声明如下,它有两个参数,一个是LoadLibrary函数返回的模块句柄,一个是要获取的函数名称。

二、动态加载动态库的实例

1

/7

这里以user32dll中的MessageBox函数为例,开发环境使用vs2017。首先点击“文件”——“新建”——“项目”建立一个win32控制台程序

2

/7

正常的使用MessageBox代码如下,直接调用即可。

//vs2017中的代码

#include <tcharh>

#include <windowsh>

int main(){

MessageBox(0, _T("hello world!"), _T("MessageBox"), MB_OK);

return 0;

}

3

/7

如果使用动态加载,则需要首先用LoadLibrary函数加载user32dll。

4

/7

然后定义一个函数指针类型,用定义的函数指针类型定义函数指针。用于保存GetProcAddress()获取的MessageBox函数地址。

5

/7

然后通过GetProcAddress()获取其函数地址。

6

/7

最后通过函数指针调用MessageBox()函数即可。

具体步骤如下:

1、首先,打开需要获取链接的小程序调用接口获取登录凭证,进而换取用户登录态信息,包括用户的唯一标识 及本次登录的会话密钥。

2、然后,获取openid,拿到上一步获取的code,结合小程序 appid 和 secret 请求接口一同被返回的,还包括 session_key,其中 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。

3、然后,直接使用wxgetUserInfo是不能获取更多的信息的,如微信用户的openid。

4、然后,需要发送获取到的code进行请求到微信的后端API,进行用户解密之类的 *** 作才可以获取,根据文档,只需要进行一个get请求到如下地址。

5、然后,需要发送获取到的code进行请求到微信的后端API,才能正确获取更多信息,这也许是为了安全起见。

6、完成上述步骤后,即可获取小程序链接。

Icon icon = SystemDrawingIconExtractAssociatedIcon(@"C:\Program Files\腾讯游戏\QQ飞车\QQSpeedLauncherexe");

pictureBox1Image = iconToBitmap();

//试试看应该可以

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Test\DefaultIcon]

@="%SystemRoot%\\system32\\urldll,0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Test\Shell]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Test\Shell\open]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Test\Shell\open\command]

@="应用程序路径 %l"

你可以直接将它保存为一个reg文件然后注册,或者在你的应用程序安装时直接修改注册表。

在你的网页上加一个这样的链接:

如果你点这个链接,你在注册文件里的应用程序就可以被启动了。还有一个需求,一般从网页启动应用需要传递参数(上面链接后面带了三个参数)

分类: 电脑/网络 >> 软件 >> 其他软件

问题描述:

估计与IE的配置文件或者注册表某些特定键值有关,谢~

解析:

在具体使用的时候需要增加头文件#include <winih>和库 WININETLIB

程序代码

------------------------------------------------------------------

@ProxyType 代理类型,如>

对于你的问题,我的理解为:你做了一个窗体程序,需要打开一张,然后存如你当前执行的文件同级目录下的一个叫img的文件夹里。就是要保存到相对的exe文件同级的img文件夹。而不是写死了的路径。

在vs编写的程序,在debug文件夹里的文件就是你编写好的程序生成后产生的编译文件。可以将debug中的内容拷贝到其他位置去。也就是你做的应用程序了。运行其中的exe文件就可以。

而要保存到你说所的根目录下,代码如下:

获取根目录:ApplicationStartupPath;

以下是代码,亲测可用:

openFileDialog1Filter = "|";

if (openFileDialog1ShowDialog() == DialogResultOK)

{

Image img = ImageFromFile(openFileDialog1FileName);

//文件名

string filename = openFileDialog1FileNameSubstring(openFileDialog1FileNameLastIndexOf("\\") + 1);

//文件保存文件夹路径,此处 ApplicationStartupPath 就是根目录

//string savepath = ApplicationStartupPath + "\\img\\";

#region 保存路径为项目的根目录,从debug目录往上截取两级文件夹

string rootpath = ApplicationStartupPathSubstring(0, ApplicationStartupPathLastIndexOf("\\"));

rootpath = rootpathSubstring(0, rootpathLastIndexOf("\\"));

//文件保存文件夹路径

string savepath = rootpath + "\\img\\";

#endregion

//文件保存路径+文件名

string imgSavepath = savepath + filename;

//判断是否存在img文件夹

if (DirectoryExists(savepath))

{

//存在img文件夹

//判断该路径下是否已经存在同名文件

if (FileExists(imgSavepath))

{

//提示是否覆盖

if (DialogResultYes != MessageBoxShow("已存在!", "该已存在,是否覆盖原?", MessageBoxButtonsYesNo))

{

//点击否,返回,取消 *** 作。

return;

}

}

}

else

{

//不存在,在根目录下创建img文件夹

DirectoryCreateDirectory(savepath);

}

try

{

Image im = img;

Bitmap bit = new Bitmap(im);

bitSave(imgSavepath, SystemDrawingImagingImageFormatBmp);

MessageBoxShow("保存成功!");

}

catch{}

以上就是关于如何动态获得程序加载地址全部的内容,包括:如何动态获得程序加载地址、小程序如何获取链接、从C#程序获取图标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9337061.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存