欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年API进程与线程函数[参 .pdf

    • 资源ID:27253026       资源大小:230.90KB        全文页数:20页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年API进程与线程函数[参 .pdf

    WinAPI: WinExec - 运行外部程序/ 声明WinExec( lpCmdLine: LPCSTR; 文件名和参数 ; 如没指定路径会按以下顺序查找: 程序目录 / 当前目录 /System32/Windows/PATH环境变量 uCmdShow: UINT 启动选项 ): UINT; / 返回值 : 大于 31 调用成功 等于 0 内存不足 ERROR_FILE_NOT_FOUND = 2; 文件名错误 ERROR_PATH_NOT_FOUND = 3; 路径名错误 ERROR_BAD_FORMAT = 11; EXE 文件无效 /uCmdShow 参数可选值 : SW_HIDE = 0; 隐藏, 并且任务栏也没有最小化图标SW_SHOWNORMAL = 1; 用最近的大小和位置显示, 激活SW_NORMAL = 1; 同 SW_SHOWNORMALSW_SHOWMINIMIZED = 2; 最小化, 激活SW_SHOWMAXIMIZED = 3; 最大化, 激活SW_MAXIMIZE = 3; 同 SW_SHOWMAXIMIZEDSW_SHOWNOACTIVATE = 4; 用最近的大小和位置显示 , 不激活 SW_SHOW = 5; 同 SW_SHOWNORMALSW_MINIMIZE = 6; 最小化 , 不激活 SW_SHOWMINNOACTIVE = 7; 同 SW_MINIMIZE名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 20 页 - - - - - - - - - SW_SHOWNA = 8; 同 SW_SHOWNOACTIVATESW_RESTORE = 9; 同 SW_SHOWNORMALSW_SHOWDEFAULT = 10 ; 同 SW_SHOWNORMALSW_MAX = 10; 同 SW_SHOWNORMAL/ 举例, 启动记事本 : procedure TForm1 . Button1Click(Sender: TObject); begin WinExec(notepad.exe, SW_SHOWNORMAL); end ; WinAPI: ShellExecute - 打开外部程序或文件ShellExecute( hWnd: HWND; 指定父窗口句柄 Operation: PChar; 指定动作 , 譬如: open、print FileName: PChar; 指定要打开的文件或程序 Parameters: PChar; 给要打开的程序指定参数; 如果打开的是文件这里应该是 nil Directory: PChar; 缺省目录 ShowCmd: Integer 打开选项 ): HINST; 执行成功会返回应用程序句柄; 如果这个值 = 32, 表示执行错误 / 返回值可能的错误有 : = 0 内存不足 ERROR_FILE_NOT_FOUND = 2; 文件名错误 ERROR_PATH_NOT_FOUND = 3; 路径名错误 ERROR_BAD_FORMAT = 11; EXE 文件无效 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 20 页 - - - - - - - - - SE_ERR_SHARE = 26; 发生共享错误 SE_ERR_ASSOCINCOMPLETE = 27 ; 文件名不完全或无效 SE_ERR_DDETIMEOUT = 28 ; 超时SE_ERR_DDEFAIL = 29 ; DDE 事务失败 SE_ERR_DDEBUSY = 30 ; 正在处理其他 DDE 事务而不能完成该 DDE 事务SE_ERR_NOASSOC = 31 ; 没有相关联的应用程序 /ShowCmd 参数可选值 : SW_HIDE = 0; 隐藏SW_SHOWNORMAL = 1; 用最近的大小和位置显示 , 激活SW_NORMAL = 1; 同 SW_SHOWNORMALSW_SHOWMINIMIZED = 2; 最小化 , 激活SW_SHOWMAXIMIZED = 3; 最大化 , 激活SW_MAXIMIZE = 3; 同 SW_SHOWMAXIMIZEDSW_SHOWNOACTIVATE = 4; 用最近的大小和位置显示, 不激活 SW_SHOW = 5; 同 SW_SHOWNORMALSW_MINIMIZE = 6; 最小化, 不激活 SW_SHOWMINNOACTIVE = 7; 同 SW_MINIMIZESW_SHOWNA = 8; 同 SW_SHOWNOACTIVATESW_RESTORE = 9; 同 SW_SHOWNORMALSW_SHOWDEFAULT = 10 ; 同 SW_SHOWNORMALSW_MAX = 10; 同 SW_SHOWNORMAL/ 举例说明更多问题 ( 别忘了 uses ShellAPI;): 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 20 页 - - - - - - - - - 譬如用记事本打开一个文件begin ShellExecute(Handle, open, notepad.exe, C:WINDOWSSchedLgU.Txt, nil , SW_SHOWNORMAL); end ; 第一个参数是用来当作错误提示窗口的父窗口的, 不能是 nil, 可以是 0( 也就是桌面窗口 )begin ShellExecute(0, open, notepad.exe, C:WINDOWSSchedLgU.Txt, nil, SW_SHOWNORMAL); end ; 第二个参数如果是 nil, 也会默认位 openbegin ShellExecute(0, nil, notepad.exe, C:WINDOWSSchedLgU.Txt, nil, SW_SHOWNORMAL); end ; 文件路径可以放在参数五begin ShellExecute(0, nil, notepad.exe, SchedLgU.Txt, C:WINDOWS, SW_SHOWNORMAL); end ; 把参数三直接指定为要打开的文件, 文件将用对应默认程序打开; 次数参数四应为 nilbegin名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 20 页 - - - - - - - - - ShellExecute(0, nil, SchedLgU.Txt, nil, C:WINDOWS, SW_SHOWNORMAL); end ; 如果文件在 : 程序目录 / 当前目录 /System32/Windows/PATH环境变量中 , 参数五也可以 nilbegin ShellExecute(0, nil, SchedLgU.Txt, nil, nil, SW_SHOWNORMAL); end ; 如果参数三是个文件 , 可以用参数二命令打印 begin ShellExecute(0, print, SchedLgU.Txt, nil, nil, 1); end ; 用 IE 打开网页 begin ShellExecute(Handle, open, IExplore.EXE, about:blank, nil, SW_SHOWNORMAL); end ; 用火狐打开网页 begin ShellExecute(Handle, open, firefox.exe, about:blank, nil, SW_SHOWNORMAL); end ; 用默认浏览器打开网页 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 20 页 - - - - - - - - - begin ShellExecute(Handle, open, Explorer.exe, about:blank, nil, SW_SHOWNORMAL); end ; 还是用默认浏览器打开网页begin ShellExecute(0, nil, http:/, nil, nil, 1); end ; WinAPI: LoadLibrary、FreeLibrary - 载入与载卸模块/ 声明: LoadLibrary( 将可执行模块映射到调用进程的地址空间 lpLibFileName: PChar DLL 或 EXE 文件名 ; 如没指定路径会按以下顺序查找: 程序目录 /当前目录 /System32/Windows/PATH环境变量 ): HMODULE; 返回模块句柄 FreeLibrary( hLibModule: HMODULE 模块句柄 ): BOOL; WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId 返回当前线程的虚拟句柄GetCurrentThread: THandle; 返回当前线程 IDGetCurrentThreadId: DWORD; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 20 页 - - - - - - - - - 返回当前进程的虚拟句柄GetCurrentProcess: THandle; 返回当前进程 IDGetCurrentProcessId: DWORD; 提示: ID 是系统唯一的标识 . 所谓虚拟句柄 , 就是该句柄只在调用进程的进程中有效, 也不能被继承 ; 如果用于其他进程需要用DuplicateHandle 复制句柄 ; GetCurrentProcess 返回的虚拟句柄可以通过OpenProcess 创建一个真实的句柄. 举例: unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure FormCreate(Sender: TObject); end ; var Form1: TForm1; implementation$R *.dfm名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 20 页 - - - - - - - - - procedure TForm1 . FormCreate(Sender: TObject); begin StringGrid1. Cells0, 0 := 当前线程虚拟句柄 : ; StringGrid1. Cells0, 1 := 当前线程 ID: ; StringGrid1. Cells0, 2 := 当前进程虚拟句柄 : ; StringGrid1. Cells0, 3 := 当前进程 ID: ; StringGrid1. Cells1, 0 := IntToStr(GetCurrentThread); StringGrid1. Cells1, 1 := IntToStr(GetCurrentThreadID); StringGrid1. Cells1, 2 := IntToStr(GetCurrentProcess); StringGrid1. Cells1, 3 := IntToStr(GetCurrentProcessId); 下面是显示格式的调整 StringGrid1. Align := alClient; StringGrid1. FixedRows := 0; StringGrid1. RowCount := 4; StringGrid1. ColCount := 2; StringGrid1. ColWidths0 := StringGrid1. Canvas . TextWidth(StringGrid1. Cells 0, 0) + 4; StringGrid1. ColWidths1 := StringGrid1. Canvas . TextWidth(StringGrid1. Cells 0, 1) + 4; end ; end . / 效果图 :名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 20 页 - - - - - - - - - WinAPI: GetWindowThreadProcessId - 获取指定窗口的进程ID 或线程ID/ 声明: GetWindowThreadProcessId( hWnd: HWND; 指定窗口句柄 lpdwProcessId: Pointer = nil 返回进程 ID 的指针 ): DWORD; 返回线程 ID/ 举例: unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end ; var Form1: TForm1; implementation$R *.dfmprocedure TForm1 . FormCreate(Sender: TObject); var c: Cardinal; begin名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 20 页 - - - - - - - - - GetWindowThreadProcessId(Handle, c); ShowMessage(IntToStr(c); 2792; 随机的 在本例中相同于 GetCurrentProcessID 的结果 c := GetCurrentProcessID; ShowMessage(IntToStr(c); 2792 c := GetWindowThreadProcessId(Handle, nil); ShowMessage(IntToStr(c); 2748 在本例中相同于 GetCurrentThreadID 的结果 c := GetCurrentThreadID; ShowMessage(IntToStr(c); 2748end ; end . WinAPI: OpenProcess、GetExitCodeProcess、TerminateProcess ( 测试强制关闭OICQ)/ 声明: 返回进程的句柄 OpenProcess( dwDesiredAccess: DWORD; 访问选项 bInheritHandle: BOOL; 能否继承 ; True 表示能用 CreateProcess 继承句柄创建新进程 dwProcessId: DWORD 指定进程 ID): THandle; 成功会返回进程句柄 ; 失败返回 0/dwDesiredAccess 可选值 : PROCESS_TERMINATE = $0001 ; 允许 TerminateProcess 使用进程句柄来关闭进程 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 20 页 - - - - - - - - - PROCESS_CREATE_THREAD = $0002 ; 允许 CreateRemoteThread 使用进程句柄来创建线程PROCESS_VM_OPERATION = $0008 ; 允许 VirtualProtectEx 使用进程句柄来改变进程的虚拟内存 PROCESS_VM_READ = $0010 ; 允许 ReadProcessMemory 使用进程句柄从进程的虚拟内存中读取数据 PROCESS_VM_WRITE = $0020 ; 允许 WriteProcessMemory 使用进程句柄向进程的虚拟内存中写入数据 PROCESS_DUP_HANDLE = $0040 ; 允许 DuplicateHandle 把进程句柄当作源句柄或目标句柄进行复制 PROCESS_CREATE_PROCESS = $0080 ; 默认值 PROCESS_SET_QUOTA = $0100 ; 允许 SetProcessWorkingSetSize 使用进程句柄来来设置虚拟内存的上限值PROCESS_SET_INFORMATION = $0200 ; 允许 SetPriorityClass 使用进程句柄来设置进程优先级PROCESS_QUERY_INFORMATION = $0400 ; 允许 GetExitCodeProcess 或 GetPriorityClass 通过进程句柄读取进程信息SYNCHRONIZE = $00100000 ; 允许任何等待的函数使用进程句柄PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or$FFF ); 允许所有权限 获取指定进程的退出码 GetExitCodeProcess( hProcess: THandle; 进程句柄 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 20 页 - - - - - - - - - var lpExitCode: DWORD 接收退出码 ): BOOL; 强制结束 ( 其他) 进程TerminateProcess( hProcess: THandle; 进程句柄 uExitCode: UINT 退出码 ): BOOL; / 提示: 关闭其他程序一般应该是向其主窗口发送 WM_CLOSE 消息, 不行再用这个 , 因为它不能关闭其关联的 DLL. / 举例( 强行关闭 OICQ 的办法 ): unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end ; var Form1: TForm1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 20 页 - - - - - - - - - implementation$R *.dfmprocedure TForm1 . Button1Click(Sender: TObject); var id: Cardinal; wh: HWND; ph: THandle; ExitCode: DWORD; begin wh := FindWindow(#32770, nil); GetWindowThreadProcessId(wh, id); ph := OpenProcess(PROCESS_TERMINATE, False, id); GetExitCodeProcess(ph, ExitCode); TerminateProcess(ph, ExitCode); end ; end . 提示: #32770 是提前知道的类名 , 获取方法可参见 : http:/ http:/ GetModuleHandle - 获取一个模块 (exe 或 dll) 的句柄定义: GetModuleHandle( lpModuleName: PChar 模块名 ; 只能是映射到当前进程的模块): HMODULE; 返回模块句柄 ; 0 表示失败 举例: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 20 页 - - - - - - - - - / 获取当前模块的句柄var s: string; h: Cardinal; begin 先取得模块名 s := Application. ExeName; s := ExtractFileName(s); 获取参数只要模块名就够了; 不需要路径 ( 测试中有路径也可以 ) h := GetModuleHandle(PChar(s); ShowMessage(IntToStr(h); 4194304end ; / 用 nil 做参数即可获取当前模块的句柄var h: Cardinal; begin h := GetModuleHandle(nil); ShowMessage(IntToStr(h); 4194304end ; / 获取系统骨干模块 Gdi32.dll 的句柄var h: Cardinal; begin h := GetModuleHandle(Gdi32.dll); ShowMessage(IntToStr(h); 2012151808end ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 20 页 - - - - - - - - - / 能不能获取记事本的句柄? var h: Cardinal; begin h := GetModuleHandle(notepad.exe); ShowMessage(IntToStr(h); 0; 失败 因为当前进程和记事本的进程是相互独立的; 如果用能够冲破进程、面向全局的 dll 应该可以 .end ; WinAPI: GetModuleFileName、GetModuleHandleunit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); end ; var Form1: TForm1; implementation$R *.dfm名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 20 页 - - - - - - - - - procedure TForm1 . FormCreate(Sender: TObject); var buf: array 0.MAX_PATH of Char; hinst: HMODULE; begin 获取指定模块的句柄 hinst := GetModuleHandle(gdi32.dll); 获取模块的路径 GetModuleFileName(hinst, buf, Length(buf); ShowMessage(buf); C:WINDOWSsystem32GDI32.dllend ; procedure TForm1 . Button1Click(Sender: TObject); var buf: array 0.MAX_PATH of Char; begin 当 GetModuleFileName 的第一个参数为 0 或 HInstance 时, 会获取当前模块路径 GetModuleFileName(0, buf, Length(buf); ShowMessage(buf); GetModuleFileName(HInstance, buf, Length(buf); ShowMessage(buf); 获取当前程序路径的常用方法 ShowMessage(Application. ExeName); ShowMessage(ParamStr(0); end ; end . 根据窗口句柄获取所在程序路径- 回复 Haiwen 的问题问题来源 : http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 20 页 - - - - - - - - - 本例效果图 : 代码文件 : unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end ; var Form1: TForm1; implementation$R *.dfm名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 20 页 - - - - - - - - - uses PsAPI; GetModuleFileNameEx 函数需要它 根据窗口句柄获取所在程序路径的函数function GetProcessExePath(h: HWND): string; var pid: Cardinal; pHandle: THandle; buf: array 0.MAX_PATH of Char; begin 先获取进程 ID GetWindowThreadProcessId(h, pid); 再获取进程句柄 pHandle := OpenProcess(PROCESS_ALL_ACCESS, False, pid); 获取进程路径 GetModuleFileNameEx(pHandle, 0, buf, Length(buf); CloseHandle(pHandle); Result := buf; end ; 测试当前程序 procedure TForm1 . Button1Click(Sender: TObject); var path: string; begin path := GetProcessExePath(Handle); ShowMessage(path); end ; 测试记事本 - 需要随便打开一个记事本 procedure TForm1 . Button2Click(Sender: TObject); var wh: HWND; path: string; begin名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 20 页 - - - - - - - - - wh := FindWindow(Notepad, nil); path := GetProcessExePath(wh); ShowMessage(path); end ; end . 窗体文件 : object Form1: TForm1 Left = 0 Top = 0 Caption = Form1 ClientHeight = 116 ClientWidth = 471 Color = clBtnFace Font. Charset = DEFAULT_CHARSET Font. Color = clWindowText Font. Height = -11 Font. Name = Tahoma Font. Style = OldCreateOrder = False Position = poDesktopCenter PixelsPerInch = 96 TextHeight = 13object Button1: TButton Left = 112 Top = 33 Width = 233 Height = 25 Caption = Button1 TabOrder = 0 OnClick = Button1Click endobject Button2: TButton Left = 112 Top = 64名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 20 页 - - - - - - - - - Width = 233 Height = 25 Caption = Button2 TabOrder = 1 OnClick = Button2Click endend名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 20 页 - - - - - - - - -

    注意事项

    本文(2022年API进程与线程函数[参 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开