In other words, can I count on a control ID as a reliable identifier?
From some reading I’ve done, it sounds like .NET controls can have control IDs that change with every run, is this so for Win32 apps as well, or are they something that’s hardcoded in the source?
The window/control in question is actually an Internet Explorer dialog if that helps.
The answer is “it depends on the circumstances, but in the majority of programs, these will not change across multiple executions.” In general, a control ID or resource ID will be the same across every execution of the same program.
In most implementations, resources are stored in the resource section of the PE executable and are assigned a resource ID within that data structure. Usually, the developer specifies the resource in a .rc file.
The exceptional case is via APIs such as CreateDialogIndirect() which allow IDs specified through the API at runtime. Such dynamic creation is uncommon, however. Consistency of resource IDs and control IDs is the expected condition, so even in the case of the CreateXXXIndirect() API, users of the API would be ill-advised to chose a varying ID.