1

指定された時間にユーザー指定のメッセージを含むシステムモーダルダイアログを表示するアラームプログラムをC#で作成しています。ただし、C#に相当するものが見つからないようです

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

編集:私はC#と.NETライブラリを学ぼうとしています。私がCまたはC++で書いたいくつかの小さなプログラムと同等のプログラムを書くことは、始めるのに良い場所だと思いました。

4

2 に答える 2

2

このようなものがあなたのために働くはずです:

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);

正直なところ、私はこのソリューションが好きではありませんが、プロセスを強制終了できる人のアラームとしては機能しません:)

于 2012-10-25T18:02:52.850 に答える
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;
}
于 2012-10-25T18:25:49.480 に答える