因为项目的原因今天又搞起了Windows service,由于项目的需求要在windows下show一个messageBox出来.我记得以前曾经搞过,拍胸脯说Ok,这个好办.
我记得windows service call一下win32的MessageBox就搞定了吧
DllImport一下,咦,没有反应.囧
查了一下才知道,这个方式在visit之后就不好使了.我们可以通过WTTSendMessage来发送消息.
安装国际惯例我们包一层供别人更好的使用
1
public class MessageBox
2
{
3
private static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
4
private static int WTS_CURRENT_SESSION = WTSGetActiveConsoleSessionId();
5
public MessageBoxResult Show(string title, string text, MessageBoxButtons messageBoxButtons)
6
{
7
var style = (int)messageBoxButtons;
8
int resp = 0;
9
10
var result = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, title, title.Length, text,
11
text.Length, style, 0, out resp, true);
12
int error = Marshal.GetLastWin32Error();
13
Marshal.ThrowExceptionForHR(error);
14
return (MessageBoxResult)resp;
15
}
16
17
[DllImport("kernel32.dll")]
18
static extern int WTSGetActiveConsoleSessionId();
19
20
[DllImport("wtsapi32.dll", SetLastError = true)]
21
static extern bool WTSSendMessage(
22
IntPtr hServer,
23
[MarshalAs(UnmanagedType.I4)] int SessionId,
24
String pTitle,
25
[MarshalAs(UnmanagedType.U4)] int TitleLength,
26
String pMessage,
27
[MarshalAs(UnmanagedType.U4)] int MessageLength,
28
[MarshalAs(UnmanagedType.U4)] int Style,
29
[MarshalAs(UnmanagedType.U4)] int Timeout,
30
[MarshalAs(UnmanagedType.U4)] out int pResponse,
31
bool bWait);
32
33
}
34
35
public enum MessageBoxResult
36
{
37
None,
38
OK,
39
Cancel,
40
Abort,
41
Retry,
42
Ignore,
43
Yes,
44
No
45
}
46
47
public enum MessageBoxButtons
48
{
49
OK,
50
OKCancel,
51
AbortRetryIgnore,
52
YesNoCancel,
53
YesNo,
54
RetryCancel
55
}
56
57

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

使用方法和普通的messagebox没有多少区别,Show方法可以根据自己的喜好重载一下咯,我就不糊代码了!
参考:
http://msdn.microsoft.com/en-us/library/aa383842(VS.85).aspx
http://www.pinvoke.net/default.aspx/wtsapi32/WTSSendMessage.html