Ian Branch 127 Posted May 16, 2022 Hi Team, Two questions.. 1. What is the best reference for Windows APIs that Delphi can access/use? 2. Is there a Windows API that tells if there are any OS updates waiting to be installed? Regards & TIA, Ian Share this post Link to post
David Heffernan 2345 Posted May 16, 2022 6 minutes ago, Ian Branch said: What is the best reference for Windows APIs that Delphi can access/use? Delphi can access all Windows APIs and the best reference is MSDN. 1 Share this post Link to post
SwiftExpat 65 Posted May 16, 2022 1 hour ago, Ian Branch said: Is there a Windows API that tells if there are any OS updates waiting to be installed? https://docs.microsoft.com/en-us/windows/win32/api/_wua/ You should almost be able to follow this C# example https://stackoverflow.com/questions/64203306/c-sharp-get-pending-windows-updates-updates-that-cant-be-found Also you might prototype it in powershell just to make sure you are getting the results you want before you spend time writing Delphi code. here is almost a step by step https://mcpmag.com/articles/2016/06/23/finding-pending-updates.aspx Share this post Link to post
Ian Branch 127 Posted May 17, 2022 (edited) Hi Team, thank you for your inputs. I am using D11.1.1, Win 11 64 bit. I freely confess I am playing in/with something I know nothing about and don't expect to need again. I found an article from 'The road to Delphi', https://theroadtodelphi.com/2011/03/02/search-for-installed-windows-updates-using-delphi-wmi-and-wua/ From this I created this test project as a start point.. unit Unit24; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Winapi.ActiveX, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Win.ComObj; type TForm24 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); function ISHotFixID_Installed(const HotFixID: string): Boolean; private { Private declarations } public { Public declarations } end; var Form24: TForm24; updateSession: OleVariant; updateSearcher: OleVariant; updateEntry: OleVariant; updateSearchResult: OleVariant; UpdateCollection: OleVariant; oEnum: IEnumvariant; iValue: LongWord; implementation {$R *.dfm} //use in this way ISHotFixID_Installed('KB982799') function TForm24.ISHotFixID_Installed(const HotFixID: string): Boolean; begin result := False; updateSession := CreateOleObject('Microsoft.Update.Session'); updateSearcher := updateSession.CreateUpdateSearcher; //this line improves the performance , the online porperty indicates whether the UpdateSearcher goes online to search for updates. so how we are looking for already installed updates we can set this value to false updateSearcher.online := False; updateSearchResult := updateSearcher.Search(Format('IsInstalled = 1 and Type=%s', [QuotedStr('Software')])); UpdateCollection := updateSearchResult.Updates; oEnum := IUnknown(UpdateCollection._NewEnum) as IEnumVariant; while oEnum.Next(1, updateEntry, iValue) = 0 do begin Result := Pos(HotFixID, updateEntry.Title) > 0; updateEntry := Unassigned; if Result then break; end; end; procedure TForm24.Button1Click(Sender: TObject); begin if ISHotFixID_Installed('KB5014650') then ShowMessage('KB Found.') else ShowMessage('KB Not Found.') ; end; end. A couple of interesting things.. 1. Whenever I go to edit this line Delphi hangs up. No keyboard or mouse response in the IDE. 😞 Although Task Manager says it is busy, I have left it for 30+ minutes and it still doesn't return. if ISHotFixID_Installed('KB5014650') then ShowMessage('KB Found.') else ShowMessage('KB Not Found.') ; 2. KB5014650 IS installed on the PC but the button1 function tells me it isn't. 😞 Again, this is my first step. From here I had hoped to implement the search function to see what has been downloaded but not installed. OK. It is probably me, what have I missed? Or, is there an issue either with Delphi or Win 11 or both? Perhaps the fact that I am trying to use it on a 64bit OS? Appreciate any assistance/guidance. Regards & TIA, Ian Edited May 17, 2022 by Ian Branch Share this post Link to post