為了讓電腦一直執行一個可以讀取BarCode條碼槍的應用程式
且這個電腦沒有安裝鍵盤、滑鼠
而目前該應用程式重開機後都是可以佔在主要執行的劃面
但偶爾(1%)會發生Focus跳離那個應用程式
而造成BarCode無法再運作下去
ex.Windows的警告訊息
此時該使用者只能讓電腦重開機
好讓該BarCode應用程式又回到主要執行
這讓我有點困擾
是否可以讓Windows限制只執行該應用程式
或者什麼工具,可以設定週期時間(ex.每1分鐘)
就去檢查目前的作用中的應用程式若不是該用應用程式
就強制讓指定的應用程式回到Focus的應用程式
請不吝分享您的經驗、方法、工具
感謝、再感謝
A.參閱如何防止程序在Windows中竊取焦點找出竊取焦點的程式讓它停止發生,可安裝以下軟體(擇一)確保程式在最頂層
1.DeskPins(將任何窗口保持在最頂層)
2.Window On Top (頂部的窗口)(windows 10 / windows 8 / windows 7 / vista / xp)
B.Keeping a form focused (not a question)
C.自己寫一支程式 call 要執行的應用程式 (例如 :Notepad.exe)
Delphi Code :
uses ......, ShellApi ,extctrls;
......
......
var
Form1: TForm1;
ExecuteIpClassName : PWideChar;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
ExecuteFile : string;
SEInfo : TShellExecuteInfo;
begin
// Timer1 間隔 100 毫秒
Timer1.Interval := 100;
// 設定外部程式
ExecuteFile := 'c:\Windows\Notepad.exe';
ExecuteIpClassName := 'NotePad';
//
FillChar(SEInfo, SizeOf(SEInfo), 0) ;
SEInfo.cbSize := SizeOf(TShellExecuteInfo) ;
with SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile) ;
// 視窗最大化啟動外部程式
nShow := SW_SHOWMAXIMIZED;
end;
// 呼叫外部程式
ShellExecuteEx(@SEInfo);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var WinHandle: HWND;
begin
WinHandle := FindWindow(ExecuteIpClassName,nil);
// 外部程式失去 Focus , 重新 Focus
if WinHandle <> 0 then
begin
SetForegroundWindow(WinHandle);
end;
end;