Слияние кода завершено, страница обновится автоматически
unit fmmain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SimShortCut, DXInput, SimDxInput, ScreenPainter,SiMath,
ExtCtrls, GUIStatus, SisTray, Menus,SimKeybd, FormWinProc;
type
timerThread=class(TThread)
itimersecond:Integer;
brunning:boolean;
procedure execute;override;
end;
type
ConfirmThread=class(TThread)
itimersecond:Integer;
brunning:boolean;
procedure execute;override;
end;
Tfrmmain = class(TForm)
lbl1: TLabel;
smshrtct1: TSimShortCut;
smdxnpt1: TSimDxInput;
scrnpntr1: TScreenPainter;
ck1: TCheckBox;
gsts1: TGUIStatus;
stry1: TSisTray;
pm1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
btn1: TButton;
txtTimer: TEdit;
mm1: TMainMenu;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
frmwnprc1: TFormWinProc;
lbl2: TLabel;
txtShutdown: TEdit;
Label1: TLabel;
txtVolH: TEdit;
Label2: TLabel;
txtVolL: TEdit;
Label3: TLabel;
txtVolM: TEdit;
Label4: TLabel;
txtCloseWindow: TEdit;
procedure FormCreate(Sender: TObject);
procedure tmr2Timer(Sender: TObject);
procedure ck1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure txtTimerKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure N11Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure frmwnprc1OrderString(OrderName, OrderValue: String);
procedure smdxnpt1KeyDonw(Sender: TObject; var Key: Word;
var KeyName: String; Shift: TShiftState);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
itimer:integer;
paramstring:string;
tmrTrd:timerThread;
cnfrmTrd:ConfirmThread;
tmr2:TThreadTimer;
procedure changeTimer;
public
{ Public declarations }
bConfirmShutdown:Boolean;
end;
const
APPCOMMAND_VOLUME_UP= 10 ;
APPCOMMAND_VOLUME_DOWN =9 ;
APPCOMMAND_VOLUME_MUTE = 8;
var
frmmain: Tfrmmain;
keymap:TArKeymap;
procedure inputkey(akey:pchar);stdcall;
exports
inputkey;
implementation
procedure inputkey(akey:pchar);stdcall;
var
ik:Word;
sk:string;
begin
if frmmain=nil then
begin
frmmain:=Tfrmmain.Create(nil);
//frmmain.paramstring:='hide';
//frmmain.Show;
Application.Initialize; //解决dll中的线程和timer不执行问题,同时也会使得调用dll的时候任务栏上叠加一个窗口
if Application.Handle = 0 then
begin
Application.CreateHandle;
end;
Application.Run;
end;
sk:=akey;
ik:=SimKeybd.keyNameToValue(sk);
frmmain.smdxnpt1KeyDonw(frmmain,ik,sk,[]);
end;
{$R *.dfm}
procedure Tfrmmain.FormCreate(Sender: TObject);
begin
itimer:=0;
self.gsts1.Add(self.ck1);
self.gsts1.Add(self.txtTimer);
self.gsts1.Add(self.txtShutdown);
self.gsts1.Add(self.txtVolH);
self.gsts1.Add(self.txtVolL);
self.gsts1.Add(self.txtTimer);
self.gsts1.Add(self.txtVolM);
self.gsts1.Add(self.txtCloseWindow);
self.gsts1.LoadFromFile();
paramstring:=ParamStr(1);
keymap:=StrToKeyMaps(SimKeybd.ckeymaps);
self.smdxnpt1.Enable:=true;
Self.smdxnpt1.init;
tmr2:=TThreadTimer.Create(True);
tmr2.OnTimer:=self.tmr2Timer;
tmr2.Interval:=3000;
tmr2.Resume;
end;
procedure Tfrmmain.changeTimer;
begin
case itimer of
0: itimer:=15;
15: itimer:=30;
30: itimer:=45;
45: itimer:=60;
60: itimer:=90;
90: itimer:=120;
120: itimer:=1;
else
itimer:=0;
end;
end;
procedure Tfrmmain.tmr2Timer(Sender: TObject);
begin
self.scrnpntr1.hideFrm;
if self.itimer>0 then
begin
Self.tmrTrd.brunning:=true;
self.tmrTrd.Resume;
end;
self.tmr2.Enabled:=false;
end;
procedure Tfrmmain.ck1Click(Sender: TObject);
begin
if self.ck1.Checked then
begin
self.smshrtct1.AutoStartMe('hide');
end else
begin
DeleteFile(self.smshrtct1.GetStartUp+'/TimerShutDown.exe.lnk');
end;
self.gsts1.SaveToFile();
end;
procedure Tfrmmain.FormDestroy(Sender: TObject);
begin
self.smdxnpt1.final;
self.stry1.DelTrayIcon();
if Assigned(tmrTrd) then
self.tmrTrd.Terminate;
end;
procedure Tfrmmain.FormShow(Sender: TObject);
begin
self.stry1.init();
if paramstring='hide' then
begin
self.stry1.threadHideWnd(self.Handle);
end;
paramstring:='';
end;
procedure Tfrmmain.N3Click(Sender: TObject);
begin
self.Close;
end;
procedure Tfrmmain.N1Click(Sender: TObject);
begin
Self.stry1.showWnd(self.Handle);
end;
procedure Tfrmmain.txtTimerKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (self.txtTimer.Text=keyValueToName(keymap,key)) or (self.txtShutdown.Text=keyValueToName(keymap,key))
or (self.txtVolH.Text=keyValueToName(keymap,key)) or (self.txtVolL.Text=keyValueToName(keymap,key))
or (self.txtVolM.Text=keyValueToName(keymap,key)) or (self.txtCloseWindow.Text=keyValueToName(keymap,key))then
begin
exit;
end else if (Key=keyNameToValue(keymap,'BACK')) then
begin
TEdit(Sender).Text:='-';
Exit;
end;
tedit(sender).Text:=keyValueToName(keymap,key);
self.gsts1.SaveToFile();
end;
procedure Tfrmmain.N11Click(Sender: TObject);
begin
ShowMessage('作者QQ:35769382');
end;
procedure Tfrmmain.N5Click(Sender: TObject);
begin
simShell('http://www.kapple.cn');
end;
procedure Tfrmmain.N7Click(Sender: TObject);
begin
self.Close;
end;
{ timerThread }
procedure timerThread.execute;
begin
while itimersecond>0 do
begin
brunning:=True;
Delay(1000);
Dec(itimersecond);
frmmain.itimer:=Trunc(itimersecond/60)+1;
if itimersecond<61 then
begin
frmmain.frmwnprc1.PostOrderString(frmmain.Handle,'refresh','0:'+inttostr(itimersecond));
end;
end;
brunning:=false;
simath.BlockWinExec('shutdown -s -f -t 0');
end;
procedure Tfrmmain.frmwnprc1OrderString(OrderName, OrderValue: String);
begin
if ordername='refresh' then
begin
self.scrnpntr1.init;
self.scrnpntr1.clearAll;
self.scrnpntr1.DrawText(0,0,150,'ff0000',ordervalue,'timershut');
end;
end;
{ ConfirmThread }
procedure ConfirmThread.execute;
begin
inherited;
self.brunning:=true;
frmmain.bConfirmShutdown:=true;
Delay(1500);
frmmain.scrnpntr1.init;
frmmain.scrnpntr1.clearAll;
frmmain.bConfirmShutdown:=False;
self.brunning:=false;
end;
procedure Tfrmmain.smdxnpt1KeyDonw(Sender: TObject; var Key: Word;
var KeyName: String; Shift: TShiftState);
var
h,hProcess:thandle;
id:Cardinal;
begin
if self.txtTimer.Focused or Self.txtShutdown.Focused or self.txtVolH.Focused
or self.txtVolL.Focused or self.txtCloseWindow.Focused then
begin
exit;
end;
if Key=SimKeybd.keyNameToValue(keymap,self.txtTimer.Text) then
begin
self.tmr2.Enabled:=false;
if (Assigned(self.tmrTrd)) and (self.tmrTrd.brunning) then
begin
self.tmrTrd.Suspend;
self.tmrTrd.brunning:=false;
end;
if (itimer=0) or (self.scrnpntr1.frmmain.Visible) then
begin
self.changeTimer;
end;
self.scrnpntr1.init;
self.scrnpntr1.clearAll;
if itimer=0 then
begin
self.scrnpntr1.DrawText(0,0,150,'0000ff',IntToStr(itimer),'timershut');
end else
begin
self.scrnpntr1.DrawText(0,0,150,'00ff00',IntToStr(itimer),'timershut');
end;
if itimer<>0 then
begin
if not Assigned(self.tmrTrd) then
begin
self.tmrTrd:=timerThread.Create(True);
end else
begin
end;
self.tmrTrd.itimersecond:=itimer*60;
end else
begin
if (Assigned(self.tmrTrd)) and (self.tmrTrd.brunning=True) then
begin
self.tmrTrd.Suspend;
end;
end;
//exit;
self.tmr2.Enabled:=True;
end else if Key=SimKeybd.keyNameToValue(keymap,self.txtShutdown.Text) then
begin
if bConfirmShutdown then
begin
simath.BlockWinExec('shutdown -s -f -t 0');
end else
begin
if (not Assigned(cnfrmTrd)) or (cnfrmTrd.brunning=false) then
begin
self.tmr2.Enabled:=false;
self.scrnpntr1.init;
self.scrnpntr1.clearAll;
frmmain.scrnpntr1.DrawText(0,0,150,'ff0000','再按一次关机','timershut');
cnfrmTrd:=ConfirmThread.Create(false);
self.tmr2.Enabled:=True;
end;
end;
end else if Key=SimKeybd.keyNameToValue(keymap,self.txtVolH.Text) then
begin
SendMessage(self.Handle,WM_APPCOMMAND,$30292,appcommand_volume_up*$10000);
end else if Key=SimKeybd.keyNameToValue(keymap,self.txtVolL.Text) then
begin
SendMessage(self.Handle,WM_APPCOMMAND,$30292,appcommand_volume_Down*$10000);
end else if Key=SimKeybd.keyNameToValue(keymap,self.txtVolM.Text) then
begin
SendMessage(Self.Handle,WM_APPCOMMAND,$200EB0,APPCOMMAND_VOLUME_MUTE*$10000 );
end else if Key=SimKeybd.keyNameToValue(keymap,self.txtCloseWindow.Text) then
begin
h:=Windows.GetForegroundWindow;
GetWindowThreadProcessId(h,id);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,true,ID);
terminateprocess(hProcess,0);
end;
end;
procedure Tfrmmain.btn1Click(Sender: TObject);
begin
inputkey('F8');
end;
end.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )