这两天正在网上找工作。昨天一网友问了个问题,说sendmessage在.net中调用失败。
我看了看他的代码是用vb.net写的。于是我改用c#写了个小的测试程序 【相关文章:创建可编辑的xml文档(之三)执行拖放操】 【扩展阅读:创建可编辑的xml文档(之二) 过滤xm】using system.runtime.interopservices; 【扩展信息:创建可编辑的xml文档(之四) 删除、改】[dllimport("user32.dll")]
private static extern long sendmessagew(int hwnd,int wmsg,int wparam,int lparam);system.diagnostics.process[] p;
p=system.diagnostics.process.getprocessesbyname("notepad"); int i=p[0].handle.toint32(); sendmessagew(i,16,0,0);(因为sendmessage分两个版本,一个是sendmessagea一个是sendmessagew,由于nt下内部使用的是sendmessagew,而sendmessagea的调用则是先将参数转换后再调用sendmessagew,所以这里我是用sendmessagew。)
这个程序的功能是查找一个记事本程序,然后向他发送关闭消息。 试验了一下,果然失败了。 开始我怀疑是.net的问题,因为一个网友曾经说过在vb中调用成功的代码在vb.net中调用失败了。于是我是用ildasm对该程序进行反汇编。反编译后il代码如下。 .entrypoint .custom instance void [mscorlib]system.stathreadattribute::.ctor() = ( 01 00 00 00 ) // 代码大小 40 (0x28) .maxstack 4 .locals init ([0] class [system]system.diagnostics.process[] p, [1] int32 i, [2] native int cs$00000002$00000000) il_0000: ldstr "notepad" ... 下一页