delphi 换版本乱码 问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 换版本乱码 问题相关的知识,希望对你有一定的参考价值。
我在网上找了一个代码 怎么在delphi 7下编译没问题 在delphi2010下编译乱码啊?
function CmdShell(Ser:String):String;
var
DReadPipe,DWritePipe:THandle;
STAR:STARTUPINFO;
SEC_A:SECURITY_ATTRIBUTES;
PROC_I:PROCESS_INFORMATION;
MYReadBuffer:DWORD;
ph:PChar;
MYName:PChar;
begin
//memo1.Lines.Clear;
MYName:=allocmem(255);
ph:=AllocMem(5000);
SEC_A.nLength :=sizeof(SECURITY_ATTRIBUTES);
SEC_A.lpSecurityDescriptor :=nil;
SEC_A.bInheritHandle :=True;
if CreatePipe(DReadPipe,DWritePipe,@SEC_A,0)=false then
begin //建立匿名管道
//ShowMessage('Can not create pipe!');
Result:='Can not create pipe!';
exit;
end;
fillchar(STAR,sizeof(STARTUPINFO),0);
STAR.cb :=sizeof(STARTUPINFO);
STAR.dwFlags :=(STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);
STAR.wShowWindow :=SW_HIDE;
STAR.hStdOutput :=DWritePipe;
StrPCopy(MYName,Ser);
if CreateProcess( nil, MYName, nil, nil, true, 0, nil, nil, STAR, PROC_I) = False then
begin //创建一个进程
// ShowMessage('can not create process');
Result:='can not create process';
FreeMem(ph);
FreeMem(MYName);
Exit;
end;
while(true) do
begin
//预显示管道队列的数据
if not PeekNamedPipe(DReadPipe,ph,1,@MYReadBuffer,nil,nil) then break;
if MYReadBuffer<>0 then
begin
// 读取文件
if ReadFile(DReadPipe,ph^,4096,MYReadBuffer,nil)=false then break;
// Memo1.Lines.Add(ph);
//Writeln(ph);
Result:=ph;
end
//监测是否为等待对象
else if(WaitForSingleObject(PROC_I.hProcess ,0)=WAIT_OBJECT_0) then break;
Sleep(100);
end;
CloseHandle(DReadPipe);
CloseHandle(PROC_I.hThread);
CloseHandle(PROC_I.hProcess);
CloseHandle(DWritePipe);
FreeMem(ph);
FreeMem(MYName);
Result:=Result;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(CmdShell('cmd')) ;
end;
delphi控制台程序输出中文乱码,如何解决?
我在程序中直接用writeln()输出,如writeln('你好'),但是控制台显示的时候是乱码,怎么解决
这与Delphi无关。
按如下步骤操作,应该可以解决:
一、在“开始”->“运行”里输入“CMD“,回车或者点击“确定”,打开命令行窗口。应该显示:
Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\\Users\\Administrator>
这表明你的命令行窗口可以显示中文,否则,应该显示如下的信息:
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\\Users\\Administrator>
这表明你的命令行窗口不能显示中文。你应该继续如下操作:
二、鼠标单击命令行窗口的左上角,打开系统菜单,选择“选项”,在“默认代码页”中选择“936 (ANSI/OEM - 简体中文GBK)”,点“确定”。
关闭命令行窗口。
重新打开命令行窗口,应该可以显示中文了。
三、重新运行你的Delphi控制台程序,是不是好了?
另外,我的是Windows7,根据你的Windows版本不同,命令行窗口显示的信息可能会略有差异。
追问
按照你说的设置了,不过程序还是老样子,中文还是乱码~~~不过还是非常感谢你,回答的很详细
追答把你的命令行窗口抓屏过来,我看看
追问后面的中文是直接用writeln输出的
你用的不是Windows的命令行窗口cmd.exe,而是用的dbmgr.exe。
解决办法:
一、设置你的dbmgr.exe,用来显示中文(如果可以设置的话)。
二、如果不可以,你就把Delphi程序生成的exe文件,在Windows的命令行窗口cmd.exe下运行。
以上是关于delphi 换版本乱码 问题的主要内容,如果未能解决你的问题,请参考以下文章