代码如下,蓝色部分代码运作正常,红色部分编译没出任何问题,但是就是找到生成窗体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窗口 }delphiwindows
//*************************给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窗口 }delphiwindows
解决方案 »
- 界面显示问题···在线等··
- 难成大气的荷兰队……
- 如何弄delphi7那种式样的菜单?
- 请教一下这个CASE语句的问题
- 如何获得当前CPU的利用率,即用任务管理器看到的那个CPU利用率,有什么函数!
- delphi7如何解决TIdHTTP抓回的gzip的页面乱码?
- 难题+高分!如何启动 Win2000 之前启动我的程序?
- 我们这居然没有《DELPHI开发人员指南》卖!~
- 为什么我设置客户端应用程序的TDCOMConnection组件的Connected属性为True时发生如下错误?
- 怎样让我的程序重新启动NT /2000?
- 按客户经理查询到的信息不能显示到TDBGridEh
- delphi里面的listview怎么改变一行的背景色
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**************************
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;
我不知道有这个东西呢,请教下,上面的代码能否不用timer这类的东西实现,
上面的代码我估计就是机器有些机器太快了,我sendmessage完以后cmd还么反应过来
我不知道怎么结局呢
求人还不如求己,找到原因了:自从vista之后就windows里面就加入了很多的安全特性.其中听得最多的就是UAC.还有IE保护模式、UI特权隔离、强制完整性控制等这些机制都是默认打开的.至于这些机制的具体细节可以网上找一些资料看下.
你这里的 SendMessage 失败的原因就是因为有UI特权隔离(UIPI).要想SendMessage成功你可以反UAC给关闭.这个UIPI也会关闭.希望遇到同样问题的朋友能解决。