Я пишу тревожную программу на C #, которая отображает системное модальное диалоговое окно с указанным пользователем сообщением в указанное время. Тем не менее, я не могу найти C # эквивалент
MessageBoxA(HWND_DESKTOP, msg, "Alarm",
MB_OK | MB_ICONWARNING | MB_SYSTEMMODAL | MB_SETFOREGROUND);
Редактировать: Я пытаюсь изучить C # и библиотеки .NET. Я подумал, что писать программы, эквивалентные небольшим программам, написанным на C или C ++, было бы неплохо для начала.
Нечто подобное должно работать для вас:
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);
Честно говоря, мне не нравится это решение, к тому же оно не будет работать как сигнал тревоги для людей, которые могут убить процесс 🙂
Просто используйте 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;
}