Windows服务程序 窗体中的编辑框无法输入(300分)

  • 主题发起人 主题发起人 guqiu
  • 开始时间 开始时间
G

guqiu

Unregistered / Unconfirmed
GUEST, unregistred user!
写了个Windows服务程序,有界面,需要配置东西。用了ADO控件。
InterActive已设置为True,运行起来后,界面上的编辑框
不接受任何输入,但是Checkbox、Combobox等可以选择下拉。
哪位大哥知道怎么回事么?
 
不知道,
是可以接受输入的
 
应该是有个界面交互的选项没有打开,叫什么忘了,一会儿我帮你查一查
 
那是允许和桌面交互,应该不是这个问题,如果这个没打开,界面都看不到
 
对了,就是LZ说的INTERACTIVE,是与桌面交互,呵呵
做过这类的服务程序,没遇到过你说的问题呀,想输什么输什么呀
 
顶一个。
 
输入一些配置信息啊,我这是做的定时导出数据的东西。
这个桌面交互已经打勾了。
 
程序呢,贴出来,俺帮你调
 
TO:浪人情哥
弄一个几乎什么也没有的服务,也不行。
你有邮箱,我发给你
 
还有,编辑框可以用鼠标右键 剪贴 粘贴,只是不接受键盘输入。。。
 
是不是你的键盘有问题?
 
呵呵,我的键盘有问题,我能在这里发帖子么?[:D]
 
一会儿去给你做个示例,晕,还没结束
 
谢谢,我的邮箱是liujinghai_1@163.com
 
我试了一下,创建SERVICE APPLICATION ,加入FORM,没问题呀,动态创建FORM
想输啥输啥呀,没有你说的问题
 
你的FORM是在啥时候创建的?是在CREATE里还是在START里,还是有个线程控制?
总之无论在哪,我测试都是没有问题的,EDIT,COMBOBOX之类都很正常
把SERVICE部分的代码贴出来,我帮你看下
 
unit SocketSvrUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
TSocketService = class(TService)
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
SocketService: TSocketService;
implementation
uses
MainFrmUnit;

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
SocketService.Controller(CtrlCode);
end;

function TSocketService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TSocketService.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
while not Terminated do begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;

procedure TSocketService.ServiceExecute(Sender: TService);
begin
while not Terminated do begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;

procedure TSocketService.ServicePause(Sender: TService;
var Paused: Boolean);
begin
Paused := True;
end;

procedure TSocketService.ServiceShutdown(Sender: TService);
begin
Status := csStopped;
ReportStatus();
end;

procedure TSocketService.ServiceStart(Sender: TService;
var Started: Boolean);
begin
Started := True;
Svcmgr.Application.CreateForm(TMainFrm, MainFrm);
MainFrm.Show;
end;

procedure TSocketService.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
Stopped := True;
MainFrm.Free;
end;
end.
 
TO madeagle:
我重新创建一个,主窗体只加上几个TEdit TMemo也不行。
您能把您的这个程序发给我看看么?包括编译完的可执行程序。好不?
邮箱:liujinghai_1@163.com
谢谢!
 
function SwitchDesktop:Boolean;
var
hdeskCurrent,hDefDesk:HDESK;
hwinstaCurrent,hinstaDef:HWINSTA;
begin
Result:=False;
hwinstaCurrent:=GetProcessWindowStation();
if hwinstaCurrent=0 then Exit;
hdeskCurrent:=GetThreadDesktop(GetCurrentThreadId());
if hdeskCurrent=0 then Exit;
hinstaDef:=OpenWindowStation('winsta0', FALSE,WINSTA_ACCESSCLIPBOARD or WINSTA_ACCESSGLOBALATOMS or
WINSTA_CREATEDESKTOP or WINSTA_ENUMDESKTOPS or WINSTA_ENUMERATE or WINSTA_EXITWINDOWS or
WINSTA_READATTRIBUTES or WINSTA_READSCREEN or WINSTA_WRITEATTRIBUTES);
if hinstaDef=0 then Exit;
if not SetProcessWindowStation(hinstaDef) then
begin
CloseWindowStation(hinstaDef);
Exit;
end;
hDefDesk:=OpenDesktop('default',0,False,DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or
DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or
DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS);
if hDefDesk=0 then
begin
CloseWindowStation(hinstaDef);
Exit;
end;
Result:=SetThreadDesktop(hDefDesk);
CloseDesktop(hDefDesk);
end;
 
地质灾害:这个函数怎么用啊?试了半天没搞出来
 
后退
顶部