FindWindow与SendMessage传送消息

简介:

 最近自己在写个工具,功能是启动一个*.lnk连接,给该连接传送一个消息,然后执行,比如执行"Cd \"命令。因为ps.StandardInput.Write 不能将命令传送给*.lnk连接,所以考虑到适用API函数来完成这个功能。关于FindWindow与SendMessage的方法详细签名,可以在google中查询,再次不在赘述。实现该功能主要一个问题在于调用SendMessage方法时 wMsg 的分类,可以网上查到,因为当前是将一个字符串要传送到*.lnk连接,所以 wMsg 应该设为0x102。

下面是代码的详细部分,已经过测试,可以正常使用。对API函数不是很熟,希望大家不吝赐教。

[DllImport("User32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

[DllImport("user32.dll")]
         public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

int WM_CHAR = 0x102;
              using (Process ps = new Process())
            {
                  ps.StartInfo.FileName = "cmd.lnk"

                ps.Start();
                System.Threading.Thread.Sleep(10000);
 
                IntPtr cur= FindWindow("ConsoleWindowClass",@"C:\WINDOWS\system32\cmd.exe"); //找窗体

                byte[] chars = (new System.Text.ASCIIEncoding()).GetBytes(@"Cd \");  //要写的信息
                for (int i = 0; i < chars.Length; i++)
                {
                    SendMessage(cur, WM_CHAR, (int)chars[i], 0);   //以字符发送
                }
                SendMessage(cur, WM_CHAR, 13, 0);                //发送回车执行代码

        }


本文转自lidup 51CTO博客,原文链接:http://blog.51cto.com/lidup/437943,如需转载请自行联系原作者


相关文章
|
消息中间件 C语言
zframe_send发送的内容,可以使用zmq_recv接收吗
如果你在同一套接字上混合使用CZMQ的zframe_send和ZMQ的zmq_recv,可能会遇到问题,因为这两个函数可能对ZMQ的内部状态有不同的预期。
111 0
EMQ
|
8月前
|
Linux 网络性能优化
MQTT 5.0 报文解析 03:SUBSCRIBE 与 UNSUBSCRIBE
在 MQTT 中,SUBSCRIBE 报文用于发起订阅请求,SUBACK 报文用于返回订阅结果。而 UNSUBSCRIBE 和 UNSUBACK 报文则在取消订阅时使用。相比于取消订阅,订阅操作更加常用。不过在本文中,我们仍然会一并介绍订阅与取消订阅报文的结构与组成。
EMQ
425 15
MQTT 5.0 报文解析 03:SUBSCRIBE 与 UNSUBSCRIBE
|
消息中间件 物联网 Linux
Msgrcv 接收消息|学习笔记
快速学习 Msgrcv 接收消息
|
消息中间件 网络协议
RabbiMQ中的消息回调与消息确认
和生产者的消息确认机制不同,因为消息接收本来就是在监听消息,符合条件的消息就会消费下来。 所以,消息接收的确认机制主要存在三种模式 1.自动确认 这也是默认的消息确认情况。AcknowledgeMode.NONE,RabbitMQ成功将消息发出(即将消息成功写入TCP Socket)中立即 认为本次投递已经被正确处理,不管消费者端是否成功处理本次投递 当自动应答等于true的时候,表示当消费者一收到消息就表示消费者收到了消息,消费者收到了消息就会立即从队列中删除 2.不确认(不介绍) 3.手动确认(多数选择的模式) 消费者收
|
消息中间件 Java 数据库
消息的和发送和接收|学习笔记
快速学习消息的和发送和接收
169 0
|
存储 JSON 缓存
GET/POST接收或发送数据的问题
GET/POST接收或发送数据的问题
udp发送广播消息
import socket if __name__ == '__main__': # 创建udpsocket udp_socket = socket.socket(socket.AF_INET, socket.
1494 0
|
数据安全/隐私保护