怎么使用这个windowsAPI 函数?(100分)

  • 主题发起人 主题发起人 城里的月饼
  • 开始时间 开始时间

城里的月饼

Unregistered / Unconfirmed
GUEST, unregistred user!
我刚刚接触windows的API函数,有些问题不明白请各位高手解答,谢谢。
我不知道如何在delphi中正确使用API函数,有些函数我进行了声明也不能用,
比如:EnumJobs,delphi能使用所有的API函数吗?必须在使用前,调入包含该函数
的单元吗?我如何才能知道一个API函数包含在哪个单元中呢?
 
选中你要看的API函数,按F1,看帮助。
 
delphi能使用大部分的API函数,API函数都包含在Windows单元中
 
可是我刚提到过的函数,windows单元中就没有,而且好多函数,windwos单元中都没有,
 
写出你要用的API,把光标放在上面,按F1可以得到帮助,
按住Ctrl+鼠标右键可以打开包含它的单元.
 
uese:shellapi,windows;
//
//
begin
直接调用api;
 
uses winspool;
 
我说过了,Windows单元提供了大部分的API函数,不是所有,举个例子:
HtmlHelpA这个函数,你就必须先loadlibrary(HHCtrl.ocx),然后再去find
HtmlHelpA这个函数。
 
来自hubdog的葵花宝典:枚举打印机缓冲池打印任务
uses Printers, WinSpool;
function PrinterStatusText(Status: Integer): String;
begin
case Status of
0: Result := 'Waiting';
JOB_STATUS_PAUSED: Result := 'Paused';
JOB_STATUS_ERROR: Result := 'Error';
JOB_STATUS_DELETING: Result := 'Deleting';
JOB_STATUS_SPOOLING: Result := 'Spooling';
JOB_STATUS_PRINTING: Result := 'Printing';
JOB_STATUS_OFFLINE: Result := 'Offline';
JOB_STATUS_PAPEROUT: Result := 'Paper Out';
JOB_STATUS_PRINTED: Result := 'Printed';
JOB_STATUS_DELETED: Result := 'Deleted';
JOB_STATUS_BLOCKED_DEVQ: Result := 'Blocked';
JOB_STATUS_USER_INTERVENTION: Result := 'User Intervention';
JOB_STATUS_RESTART: Result := 'Restart';
else
Result := 'Status ' + IntToStr(Status);
end;
end;

procedure GetJobs(PrinterName: String;
JobList: TStrings);
const
InfoLevel = 1;
FirstJob = 0;
LastJob = 19;
var
Jobs: array [FirstJob..LastJob] of TJobInfo1;
PrinterHandle, BytesNeeded, I, NumJobs: Integer;
begin
if OpenPrinter(PChar(PrinterName),PrinterHandle,nil) then
begin
if
EnumJobs(PrinterHandle,FirstJob,LastJob+1,InfoLevel,@Jobs,SizeOf(Jobs),BytesNeed
ed,NumJobs) then
begin
JobList.Clear;
for I := 0 to NumJobs-1do
with Jobsdo
JobList.Add(Format('%s
(%s)',[StrPas(pDocument),PrinterStatusText(Status)]));
end;
ClosePrinter(PrinterHandle);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetJobs('HP Laserjet 4P',Memo1.Lines);
end;

 
sxbrf:你说的先loadlibrary(HHCtrl.ocx),然后再去find
HtmlHelpA这个函数。是什么意思?能具体一点吗?
 
他说的是动态库的动态调用方式。
使用loadlibrary调用FreeLibrary释放等。
对于动态库调用,还有静态方式,直接声明,然后就使用。
那个HtmlHelp也可以静态调用:
Function HtmlHelp(hwd : integer;pszFile : String;uCommand :Integer;dwData :LongInt):integer;
stdcall;external 'HHCtrl.ocx' name 'HtmlHelpA';
其实使用系统API函数本质就是静态调用动态库……
 
很抱歉,我说的有些简略,我只是想通过这个例子来说明一下我的观点,
如果你只想知道EnumJobs的用法,那么yzhshi已经给出了答案,
loadlibrary(PChar(A))是指将DLL、EXE或OCX ‘A’装入你的程序,当然A必须是这个
文件的绝对路径,这个函数将会返回被装入文件的句柄。
然后你可以用GetProcAddress来获得你想要的函数的地址。
 
在hubdog裡有
 
DELPHI使用API函数都是要事先声明的,只不过有些是DELPHI预先声明的而已。
 
多人接受答案了。
 
后退
顶部