Использование функции DialogBox () user32.dll в C # - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь вызвать функцию WinAPI DialogBox () в C # (я не могу получить доступ к библиотекам System.Windows для использования MessageBox), но не могу определить правильные типы для параметров, за исключением HWND, который является IntPtr,MSDN имеет:

INT_PTR WINAPI DialogBox(
  _In_opt_ HINSTANCE hInstance,
  _In_     LPCTSTR   lpTemplate,
  _In_opt_ HWND      hWndParent,
  _In_opt_ DLGPROC   lpDialogFunc
);

Пока у меня есть:

[DllImport( "user32.dll" )]
static extern IntPtr DialogBox( ? hInstance, string lpTemplate, IntPtr hWnd, ? lpDialogFunc );

Кто-нибудь сможет помочь с этим?(Я думал, что HINSTANCE может быть int, но он может быть установлен в NULL).

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Это было взято непосредственно из источника Winforms некоторое время назад, я предлагаю вам ознакомиться с указанным кодом перед использованием.

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr GetActiveWindow();

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int MessageBox(HandleRef hWnd, string text, string caption, int type);


     private static DialogResult GetResult(int val)
    {
        switch (val)
        {
            case 1:
                return DialogResult.OK;
            case 2:
                return DialogResult.Cancel;
            case 3:
                return DialogResult.Abort;
            case 4:
                return DialogResult.Retry;
            case 5:
                return DialogResult.Ignore;
            case 6:
                return DialogResult.Yes;
            case 7:
                return DialogResult.No;
            default:
                return DialogResult.No;
        }
    }

   IntPtr handle = GetActiveWindow();
        DialogResult dialogResult = GetResult(MessageBox(new HandleRef((object) this.Handle, handle), "Test", "test", 1));
0 голосов
/ 21 мая 2018

В user32.dll также есть функция MessageBox ();страница MSDN здесь .Код объявления в C #:

[DllImport( "user32.dll" )]
static extern int MessageBox( IntPtr hInstance, string lpText, string lpCaption, uint type );

private const uint MB_OK = 0x0;
private const uint MB_ICONASTERISK = 0x00000040;

Надеюсь, это поможет всем, кто сталкивался с подобной проблемой.

...