小编lol*_*cat的帖子

如何在C#/ Win32中将文本发送到记事本?

我正在尝试将SendMessage用于记事本,这样我就可以插入书面文本而不会将记事本作为活动窗口.

我在过去使用过这样的事情SendText,但这需要给予Notepad专注.

现在,首先我要检索Windows句柄:

Process[] processes = Process.GetProcessesByName("notepad");
Console.WriteLine(processes[0].MainWindowHandle.ToString());
Run Code Online (Sandbox Code Playgroud)

我已经确认它是记事本的正确句柄,内部显示相同Windows Task Manager.

[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
Run Code Online (Sandbox Code Playgroud)

从这里开始,我无法让SendMessage在我的所有实验中工作.我走错了方向吗?

c# winapi

31
推荐指数
2
解决办法
5万
查看次数

Linq to Xml:如果属性值等于IEnumerable <XElement>中的节点值,则选择元素

我创建一个IEnumerable对象,它只包含我想要的节点来自xml文件:

IEnumerable<XElement> rosters = XDocument.Load("roster.xml")
                                         .Elements("rosterlist")
                                         .Elements("roster")
                                         .Where(w => w.Element("division")
                                                      .Value
                                                      .Equals("SUPER AWESOME DIVISION"));
Run Code Online (Sandbox Code Playgroud)

所以它是这些的集合:

<rosterlist>
    <roster>
        <userid>1</userid>
        <name></name>
        <etc></etc>
    </roster>
    <roster>
        <userid>2</userid>
        <name></name>
        <etc></etc>
    </roster>
</rosterlist>
Run Code Online (Sandbox Code Playgroud)

我想只抓取userid属性也是集合中userid节点的用户rosters.

IEnumerable<XElement> users = XDocument.Load("user.xml")
                                       .Elements("userlist")
                                       .Elements("user")
                                       .Where(w => rosters.Elements("userid")
                                                          .Contains(w.Attribute("userid").Value));
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误:

无法从用法推断出方法'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable,TSource)'的类型参数.尝试显式指定类型参数.

我的做法有什么问题?

c# xml linq asp.net

8
推荐指数
1
解决办法
2万
查看次数

如何在C#/ Win32中编写和发送文本到mIRC?

在上一个问题中,我询问了如何将文本发送到记事本.它帮了我很大的忙.对于第2部分,这是相同应用的mIRC的简化版本:

[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);

IntPtr mainHandle = FindWindow("mIRC", null);
IntPtr serverHandle = FindWindowEx(mainHandle, new IntPtr(0), "MDIClient", null);
IntPtr chanHandle = FindWindowEx(serverHandle, new IntPtr(0), "mIRC_Channel", null);
IntPtr editHandle = FindWindowEx(chanHandle, new IntPtr(0), "Edit", null);

SendMessage(editHandle, 0x000C, 0, textBox1.Text);
Run Code Online (Sandbox Code Playgroud)

这似乎对我来说是正确的,除了它不起作用!是否窗口名称不正确(MDIClient,mIRC_Channel和Edit)?这些是我通过Google搜索"FindWindowEx mIRC"在网站上找到的值.

1.)我在上面做错了什么? …

c# irc winapi

6
推荐指数
1
解决办法
2572
查看次数

标签 统计

c# ×3

winapi ×2

asp.net ×1

irc ×1

linq ×1

xml ×1