zoukankan      html  css  js  c++  java
  • to use extended Windows dialogs

    Today I want to show a few samples how you can use the extended dialogs from MS Windows (Find Files, Find Computer, Select Icon etc) in own code.

    Usually the MessageDlg is most used from standard dialogs but inside of Windows you'll find a lot of other useful dialogs too.

    The any such dialog is declared in the Shell32.dll library and you can use it so:

    1. Select an icon
    this dialog is a same which you'll see when you'll edit an icon of any lnk-file (icon on desktop, for example)

    Declaration:
    function PickIconDlgA(OwnerWnd: HWND; lpstrFile: PAnsiChar; var nMaxFile: LongInt; var lpdwIconIndex: LongInt): LongBool; stdcall; external
    'SHELL32.DLL' index 62;

    Example (icon of current application will be changed!):

    procedure TForm1.Button4Click(Sender: TObject);
    var
      FileName: array[0..MAX_PATH-1] of Char;
      Size, Index: LongInt;
    begin
      Size := MAX_PATH;
      FileName := 'c:\windows\system\shell32.dll';
      if PickIconDlgA(0, FileName, Size, Index) then
      begin
        if (Index <> -1) then
          Application.Icon.Handle := ExtractIcon(hInstance, FileName, Index);
      end;
    end;


    Of course, you can define any other file and in the dialog you'll see available icons of this executable file.

    2. Find Computer

    Declaration:
    function SHFindComputer(pidlRoot: PItemIDList; pidlSavedSearch: PItemIDList): Boolean; stdcall; external 'Shell32.dll' index 91;

    Example:

    begin
      SHFindComputer(nil, nil);
    end;

    3. Find Files

    Declaration:
    function SHFindFiles(pidlRoot: PItemIDList; pidlSavedSearch: PItemIDList): Boolean; stdcall; external 'Shell32.dll' index 90;

    Example:

    begin
      SHFindFiles(nil, nil);
    end;

    Here the first parameter is a folder where you want to begin a search (nil is a Desktop). The second parameter allow to define a previous saved state of search process.

    IMPORTANT:
    Note that SHFindFiles and SHFindComputer are not modal dialogs (these dialogs will be started in separated thread) so the result of function will be True if dialog is created succesfully.

    4. Shutdown dialog

    Declaration:
    procedure ExitWindowsDialog(ParentWnd: HWND); stdcall; external 'Shell32.dll' index 60;

    Example:

    begin
      ExitWindowsDialog(0)
    end;


    5. RestartDialog
    this dialog allow to ask end-user about Windows restarting and is used when changes are made to system that require a shutdown/restart before they will take effect.

    Declaration:
    function RestartDialog(ParentWnd: HWND; Reason: PAnsiChar; Flags: LongInt): LongInt; stdcall; external 'Shell32.dll' index 59;

    Example:
    begin
      if RestartDialog(0, 'I want to call a RestartDialog ', EW_RESTARTWINDOWS)
    = IDYES then
        ShowMessage('succesfully started')
    end;

    You can define any reason of restarting (second parameter - additionally to default text or nil for default only) and use the another flag (one from the next available):

    EWX_LOGOFF
    EWX_SHUTDOWN
    EWX_REBOOT
    EW_RESTARTWINDOWS
    EW_REBOOTSYSTEM
    EW_EXITANDEXECAPP

    This dialog is very useful for application which have embedded install procedure.

    6. OutOfSpace
    Will display a notification dialog about "Out Of Space" for some defined drive.

    Declaration:
    procedure SHHandleDiskFull(Owner: HWND; Drive: UINT); stdcall; external
    'Shell32.dll' index 185;

    Example:

    begin
      SHHandleDiskFull(0, 2);
    end;

    Note that second parameter is Drive number where 0 is A:, 1 is B:, 2 is C: etc

    Of course, in the Shell32.dll you'll find other dialogs too (Object Properties, Map Network Drive, Browse For Folder etc) and you can use these dialogs without any problems.

    IMPORTANT:
    Don't forget to add ShlObj and ShellAPI units into uses-clause.
  • 相关阅读:
    Python dict 排序
    解决问题:Appium WebView 跳转页面后无法定位元素
    解决问题:Appium Android WebView 测试执行,从源生切换至WebView不稳定。超时后报chrome not reachable
    uiautomatorviewer获取元素属性,属性列表中缺少resource-id
    解决问题 Jenkins 执行RobotFramework 脚本时未能打开浏览器 只有进程在运行
    解决问题 WebDriverException: Message: unknown error: cannot find Chrome binary
    通过JS操作滚动条
    Python 判断指定路径下文件是否存在
    Linux下安装Oracle 11g
    博客园-评论树
  • 原文地址:https://www.cnblogs.com/taobataoma/p/862457.html
Copyright © 2011-2022 走看看