SendMessage发送消息没反应(hwnd正确)

pomiezhiwang 2013-01-07 03:24:15
代码如下,蓝色部分代码运作正常,红色部分编译没出任何问题,但是就是找到生成窗体hwnd后(通过spy++查看没出错),用SendMessage对该窗体发送消息没任何反应。求求斑竹和各路高手解决,分不多,希望有人能拿下


//*************************给runas启用管理员的cmd**************************
WinExec('runas /user:administrator cmd',SW_HIDE);
h:=FindWindow('ConsoleWindowClass','C:\Windows\system32\runas.exe');
Delay(100);
while h=0 do
begin
h:=FindWindow('ConsoleWindowClass','C:\Windows\system32\runas.exe');
end;
SendMessageToCMD(h,mystring);//mystring是密码
postmessage(h,WM_keydown,13,0);
Delay(100);
SendMessage(h,WM_CLOSE,0,0);//关闭隐藏的CMD窗口 }
//close;

//*************************给runas启用管理员的cmd**************************
h:=FindWindow('ConsoleWindowClass','管理员: cmd (作为 XX-PC\administrator 运行)');
while h=0 do
begin
h:=FindWindow('ConsoleWindowClass','管理员: cmd (作为 XX-PC\administrator 运行)');
end;
Delay(100);
mystring:=mypath;
SendMessageToCMD(h,mystring);
postmessage(h,WM_keydown,13,0);
SendMessage(h,WM_CLOSE,0,0);//关闭隐藏的CMD窗口 }
...全文
3345 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pomiezhiwang 2013-01-08
  • 打赏
  • 举报
回复
引用 4 楼 bdmh 的回复:
你发消息,关键要看接受窗体是否承认你的消息或者是否可以相应你发的消息
我不知道,昨天不承认,今天又突然可以了,不清楚是不是重启一下系统才可以,不知道什么原因。 顺便请教下斑竹,下面的是我发送消息到cmd窗口的,新电脑运行下面代码的话,不知道是否系统太快了,运行下面代码无效的(旧电脑倒可以实现),请问可以用什么方法改进除了加delay
procedure TForm1.SendMessageToCMD(hwd:hwnd ;str:string);
var
    i:integer;
    ch: byte;
begin
    i := 1;
    while i <= Length(str) do
     //该过程发送指定字符串(中英文皆可以)
    begin
        Delay(500);
        ch := byte(str[ i ]);
        if Windows.IsDBCSLeadByte(ch) then
        begin
          Inc(i);
          SendMessage(hwd, WM_IME_CHAR, MakeWord(byte(str[ i ]), ch), 0);
        end
        else
        begin
          SendMessage(hwd, WM_IME_CHAR, word(ch), 0);
        end;
        Inc(i);
    end;
end;
pomiezhiwang 2013-01-08
  • 打赏
  • 举报
回复
引用 3 楼 HSFZXJY 的回复:
命令行窗口消息和一般的不同吧。。
昨天我程序怎么都不能操作新建的cmd窗口,今天试试了,突然可以了。估计不是你说的原因
bdmh 2013-01-08
  • 打赏
  • 举报
回复
你发消息,关键要看接受窗体是否承认你的消息或者是否可以相应你发的消息
pomiezhiwang 2013-01-08
  • 打赏
  • 举报
回复 1
求人还不如求己,找到原因了: 自从vista之后就windows里面就加入了很多的安全特性.其中听得最多的就是UAC.还有IE保护模式、UI特权隔离、强制完整性控制等这些机制都是默认打开的.至于这些机制的具体细节可以网上找一些资料看下. 你这里的 SendMessage 失败的原因就是因为有UI特权隔离(UIPI).要想SendMessage成功你可以反UAC给关闭.这个UIPI也会关闭. 希望遇到同样问题的朋友能解决。
pomiezhiwang 2013-01-08
  • 打赏
  • 举报
回复
引用 7 楼 warrially 的回复:
为什么不用 Timer...
我不知道有这个东西呢,请教下,上面的代码能否不用timer这类的东西实现, 上面的代码我估计就是机器有些机器太快了,我sendmessage完以后cmd还么反应过来 我不知道怎么结局呢
爱蹄子的羊头 2013-01-08
  • 打赏
  • 举报
回复
为什么不用 Timer...
hsfzxjy 2013-01-07
  • 打赏
  • 举报
回复
命令行窗口消息和一般的不同吧。。
pomiezhiwang 2013-01-07
  • 打赏
  • 举报
回复
2楼的是蓝色才对
pomiezhiwang 2013-01-07
  • 打赏
  • 举报
回复
贴代码居然不能改颜色,上文说红色部分就是

 //*************************给runas启用管理员的cmd**************************
    WinExec('runas /user:administrator cmd',SW_HIDE);
    h:=FindWindow('ConsoleWindowClass','C:\Windows\system32\runas.exe');
    Delay(100);
    while h=0 do
    begin
         h:=FindWindow('ConsoleWindowClass','C:\Windows\system32\runas.exe');
    end;
    SendMessageToCMD(h,mystring);
    postmessage(h,WM_keydown,13,0);
    Delay(100);
    SendMessage(h,WM_CLOSE,0,0);//关闭隐藏的CMD窗口 }
    //close;
    //*************************给runas启用管理员的cmd**************************

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧