C # эквивалент MessageBoxA (HWND_DESKTOP, msg, «Alarm», MB_OK | MB_ICONWARNING | MB_SYSTEMMODAL | MB_SETFOREGROUND);

Я пишу тревожную программу на C #, которая отображает системное модальное диалоговое окно с указанным пользователем сообщением в указанное время. Тем не менее, я не могу найти C # эквивалент

MessageBoxA(HWND_DESKTOP, msg, "Alarm",
MB_OK | MB_ICONWARNING | MB_SYSTEMMODAL | MB_SETFOREGROUND);

Редактировать: Я пытаюсь изучить C # и библиотеки .NET. Я подумал, что писать программы, эквивалентные небольшим программам, написанным на C или C ++, было бы неплохо для начала.

1

Решение

Нечто подобное должно работать для вас:

MessageBox.Show("text", "caption", MessageBoxButtons.OK, MessageBoxIcon.Warning);

Узнайте больше на MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.messagebox.show.aspx

РЕДАКТИРОВАТЬ:
Так же, как альтернативная идея, это создаст форму размером с ваш экран и покажет там окно сообщения, блокируя все остальное на экране, пока вы не закроете это окно сообщения.

internal class TransparentWholeScreen: Form
{
public TransparentWholeScreen()
{
Size = Screen.PrimaryScreen.Bounds.Size;
TopMost = true;
FormBorderStyle = FormBorderStyle.None;
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
BackColor = Color.Transparent;
Shown += OnShown;
}

private void OnShown(object sender, EventArgs e)
{
var dialogResult = MessageBox.Show("text", "caption", MessageBoxButtons.OK, MessageBoxIcon.Warning);
if(dialogResult == DialogResult.OK)
{
Close();
}
}
}

Просто добавьте следующий код по истечении вашего таймера будильника:

    var backGroundForm = new TransparentWholeScreen();
backGroundForm.ShowDialog(this);

Честно говоря, мне не нравится это решение, к тому же оно не будет работать как сигнал тревоги для людей, которые могут убить процесс 🙂

2

Другие решения

Просто используйте API, который вы упомянули в заголовке …

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct HWND__ {

/// int
public int unused;
}

public partial class NativeMethods {

/// Return Type: int
///hWnd: HWND->HWND__*
///lpText: LPCSTR->CHAR*
///lpCaption: LPCSTR->CHAR*
///uType: UINT->unsigned int
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint="MessageBoxA")]
public static extern  int MessageBoxA([System.Runtime.InteropServices.InAttribute()] System.IntPtr hWnd, [System.Runtime.InteropServices.InAttribute()][System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string lpText, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string lpCaption, uint uType) ;

}

public partial class NativeConstants {

/// MB_SETFOREGROUND -> 0x00010000L
public const int MB_SETFOREGROUND = 65536;

/// MB_SYSTEMMODAL -> 0x00001000L
public const int MB_SYSTEMMODAL = 4096;

/// MB_ICONWARNING -> MB_ICONEXCLAMATION
public const int MB_ICONWARNING = NativeConstants.MB_ICONEXCLAMATION;

/// MB_OK -> 0x00000000L
public const int MB_OK = 0;

/// MB_ICONEXCLAMATION -> 0x00000030L
public const int MB_ICONEXCLAMATION = 48;
}
2

По вопросам рекламы [email protected]