2022年API进程与线程函数[参 .pdf
《2022年API进程与线程函数[参 .pdf》由会员分享,可在线阅读,更多相关《2022年API进程与线程函数[参 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、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
2、= 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; 同
3、 SW_MINIMIZE名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 20 页 - - - - - - - - - SW_SHOWNA = 8; 同 SW_SHOWNOACTIVATESW_RESTORE = 9; 同 SW_SHOWNORMALSW_SHOWDEFAULT = 10 ; 同 SW_SHOWNORMALSW_MAX = 10; 同 SW_SHOWNORMAL/ 举例, 启动记事本 : procedure TForm1 . Button1Click(Sen
4、der: 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 打开选项 ): HIN
5、ST; 执行成功会返回应用程序句柄; 如果这个值 = 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_A
6、SSOCINCOMPLETE = 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
7、_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_M
8、AX = 10; 同 SW_SHOWNORMAL/ 举例说明更多问题 ( 别忘了 uses ShellAPI;): 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 20 页 - - - - - - - - - 譬如用记事本打开一个文件begin ShellExecute(Handle, open, notepad.exe, C:WINDOWSSchedLgU.Txt, nil , SW_SHOWNORMAL); end ; 第一个参数是用来当作错误提示窗口的父窗口的, 不
9、能是 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:WIND
10、OWS, SW_SHOWNORMAL); end ; 把参数三直接指定为要打开的文件, 文件将用对应默认程序打开; 次数参数四应为 nilbegin名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 20 页 - - - - - - - - - ShellExecute(0, nil, SchedLgU.Txt, nil, C:WINDOWS, SW_SHOWNORMAL); end ; 如果文件在 : 程序目录 / 当前目录 /System32/Windows/PATH环境
11、变量中 , 参数五也可以 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(H
12、andle, open, firefox.exe, about:blank, nil, SW_SHOWNORMAL); end ; 用默认浏览器打开网页 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 20 页 - - - - - - - - - begin ShellExecute(Handle, open, Explorer.exe, about:blank, nil, SW_SHOWNORMAL); end ; 还是用默认浏览器打开网页begin ShellExec
13、ute(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
14、、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId 返回当前线程的虚拟句柄GetCurrentThread: THandle; 返回当前线程 IDGetCurrentThreadId: DWORD; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 20 页 - - - - - - - - - 返回当前进程的虚拟句柄GetCurrentProcess: THandle; 返回当前进程 IDGetCurrentP
15、rocessId: DWORD; 提示: ID 是系统唯一的标识 . 所谓虚拟句柄 , 就是该句柄只在调用进程的进程中有效, 也不能被继承 ; 如果用于其他进程需要用DuplicateHandle 复制句柄 ; GetCurrentProcess 返回的虚拟句柄可以通过OpenProcess 创建一个真实的句柄. 举例: unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1
16、 = class(TForm) StringGrid1: TStringGrid; procedure FormCreate(Sender: TObject); end ; var Form1: TForm1; implementation$R *.dfm名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 20 页 - - - - - - - - - procedure TForm1 . FormCreate(Sender: TObject); begin StringGri
17、d1. 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(GetCurrentPr
18、ocess); 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. ColWi
19、dths1 := StringGrid1. Canvas . TextWidth(StringGrid1. Cells 0, 1) + 4; end ; end . / 效果图 :名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 20 页 - - - - - - - - - WinAPI: GetWindowThreadProcessId - 获取指定窗口的进程ID 或线程ID/ 声明: GetWindowThreadProcessId( hWnd: HWND; 指定窗口句
20、柄 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
21、 *.dfmprocedure TForm1 . FormCreate(Sender: TObject); var c: Cardinal; begin名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 20 页 - - - - - - - - - GetWindowThreadProcessId(Handle, c); ShowMessage(IntToStr(c); 2792; 随机的 在本例中相同于 GetCurrentProcessID 的结果 c := GetCur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年API进程与线程函数参 2022 API 进程 线程 函数
限制150内