嗨我正在delphi xe2中执行一个关闭监视器的功能,我在控制台应用程序中执行它,他在图形应用程序中完成没有问题但是当你进入控制台应用程序时给了我这些错误:
Undeclared identifier: 'Application'
Undeclared identifier: 'WM_SYSCOMMAND'
来源:
program test;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,ShellApi,Windows;
function turn_off(): string;
const
MONITOR_ON = -1;
MONITOR_OFF = 2;
MONITOR_STANDBY = 1;
begin
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
end;
begin
try
turn_off();
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
我可以在控制台应用程序中执行此操作吗?
答案 0 :(得分:3)
未声明的标识符:'申请' 未声明的标识符:'WM_SYSCOMMAND'
未声明的标识符仅表示此程序尚未声明指定的标识符。在这种情况下,您缺少uses
子句中的两个单元。 Application
中声明了Vcl.Forms
,WM_SYSCOMMAND
中声明了Winapi.Messages
。添加这些单位以处理编译错误。
执行此操作后,您会发现Application.Handle
为0
。所以你的代码将无法做任何事情。您需要将消息发送到真实窗口。如果你开始使用VCL,那么我想你可以创建一个隐藏的表格。
我想知道你是否真的需要一个控制台。也许你真的想要一个GUI子系统应用程序,它一旦完成它的工作就会终止。
您不需要使用ShellAPI
,而您的turn_off
功能不会返回任何内容。
我也在这里质疑使用VCL。你最终会得到一个非常胖的程序来完成这么简单的任务。就个人而言,我创建了一个调用CreateWindow
的窗口并在那里发送消息。