Операционка – Windows XP SP3
Среда – Delphi 2010
Сделал интерфейс:
unit StillImage;
interface
uses
Windows;
const
STI_VERSION = $00000002;
type
IStillImageW = interface(IUnknown)
['{641BD880-2DC8-11D0-90EA-00AA0060F86C}']
.......
function RegisterLaunchApplication(AppName, CommandLine: LPWSTR): HRESULT; stdcall;
.......
end;
PIStillImageW = ^IStillImageW;
function StiCreateInstanceW(hinst: HINST; dwVer: DWORD; ppSti: PIStillImageW; punkOuter: IUnknown): HResult; stdcall; external 'sti.dll' name 'StiCreateInstanceW';
implementation
end.
Вызываю:
var
Still_Image: IStillImageW;
H_Res: HResult;
pwszAppName: PWideChar;
pwszCommandLine: PWideChar;
wszAppName: array[0..1000] of WideChar;
wszCommandLine: array[0..1000] of WideChar;
........
begin
........
H_Res := StiCreateInstanceW(GetModuleHandle(nil), STI_VERSION, @Still_Image, nil);
if H_Res <> S_OK then raise ...............
FillChar(wszAppName, SizeOf(wszAppName), 0);
FillChar(wszCommandLine, SizeOf(wszCommandLine), 0);
pwszAppName := StringToWideChar('Calculator', @wszAppName, SizeOf(wszAppName)-1);
pwszCommandLine := StringToWideChar('c:\WINDOWS\system32\calc.exe', @wszCommandLine, SizeOf(wszCommandLine)-1);
H_Res := 0;
H_Res := Still_Image.RegisterLaunchApplication(pwszAppName, pwszCommandLine);
if H_Res <> S_OK then raise ...............
...............
...............
И здесь получаю:
H_Res = 0x80070057
Это значит: E_INVALIDARG (One or more arguments are invalid)
Или: STIERR_INVALID_PARAM
Делал все точно как написано здесь:
http://msdn.microsoft.com/en-us/library/windows/desktop/cc836550%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/ff543798%28v=vs.85%29.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/cc836552%28v=vs.85%29.aspx
Пробовал такие строки:
'c:\WINDOWS\system32\calc.exe'
'"c:\WINDOWS\system32\calc.exe"'
'\"c:\WINDOWS\system32\calc.exe\"'
'c:\\WINDOWS\\system32\\calc.exe'
'\"c:\\WINDOWS\\system32\\calc.exe\"'
Без разницы – всегда выдает ошибку E_INVALIDARG/ STIERR_INVALID_PARAM
Здравствуйте, R1a1, Вы писали:
R>Делал все точно как написано здесь:
R>http://msdn.microsoft.com/en-us/library/windows/desktop/cc836550%28v=vs.85%29.aspx
R>http://msdn.microsoft.com/en-us/library/windows/hardware/ff543798%28v=vs.85%29.aspx
R>http://msdn.microsoft.com/en-us/library/windows/desktop/cc836552%28v=vs.85%29.aspx
R>Пробовал такие строки:
R>'c:\WINDOWS\system32\calc.exe'
R>'"c:\WINDOWS\system32\calc.exe"'
R>'\"c:\WINDOWS\system32\calc.exe\"'
R>'c:\\WINDOWS\\system32\\calc.exe'
R>'\"c:\\WINDOWS\\system32\\calc.exe\"'
R>Без разницы – всегда выдает ошибку E_INVALIDARG/ STIERR_INVALID_PARAM
Согласно тому что написано в msdn эта штука связывает приложение с устройством.
Причем здесь калькулятор?
Здравствуйте, BlackEric, Вы писали:
BE>Согласно тому что написано в msdn эта штука связывает приложение с устройством.
BE>Причем здесь калькулятор?
Эта штука регистрирует приложение, чтобы оно запускалось при наступлении каких-либо событий:
GUID_DeviceArrivedLaunch - Launch the Still Image application.
GUID_ScanImage - Use the imaging device to scan an image.
GUID_ScanPrintImage - Scan an image and print it.
GUID_ScanFaxImage - Scan an image and fax it.
GUID_STIUserDefined1 - Application-defined event.
GUID_STIUserDefined2 - Application-defined event.
GUID_STIUserDefined3 - Application-defined event.