iT邦幫忙

0

如何 自動關閉 長時間 未操作的程式?

eigen 2013-08-04 18:21:1611844 瀏覽

家中的 erp 系統目前只有兩個名額,有兩個人登入,第三人就無法登入,使用上不便

短期間無預算增加名額,只能就管理面著手,以前待的公司,erp 有定時登出的功能(約10分鐘沒操作,就會被強制登出。)

現在我也想這樣做,有沒有這樣的程式,能夠針對某程式,當程式10分鐘沒有key in 或滑鼠點擊,就自動關閉?

erp 系統會自動做存檔的動作,所以關掉程式沒有問題。

看更多先前的討論...收起先前的討論...
fillano iT邦超人 1 級 ‧ 2013-08-04 22:13:13 檢舉
不知道有沒有現成的程式可以用,不過如果會使用VC,應該可以自己寫,會用到視窗操作的API,用Hooks API攔截並過濾特定視窗的message,然後配合timer來做。總之並不簡單就是了XD...這樣大概沒幫到忙...
hector958 iT邦研究生 2 級 ‧ 2013-08-05 08:43:28 檢舉
會不會從SERVER端下手比較方便?
讓SERVER去踢使用者。
kent999 iT邦新手 4 級 ‧ 2013-08-05 15:00:27 檢舉
ERP不是都有這類功能?
sula3065408 iT邦研究生 1 級 ‧ 2013-08-05 21:27:17 檢舉
GetForegroundWindow 取得PID來比對ERP的PID看是不是閒置太久沒用到ERP就好了吧。
4
wm19
iT邦新手 4 級 ‧ 2013-08-06 22:32:16
最佳解答

用AUTOIT
上網可以找到中文的
以下網址是我寫的用在鉅茂ERP
http://ithelp.ithome.com.tw/question/10085874
請問你是用那一家ERP

eigen iT邦新手 1 級 ‧ 2013-08-17 16:03:24 檢舉

Orz灑花感謝~~正解,可以藏起來,可以設定時間,可以編輯成 exe ,不用錢

大概花幾分鐘就搞懂了,目前測試ok ,實在是太感謝了

我用的的 dingey 的系統,目前還在導入中。

6
海綿寶寶
iT邦超人 1 級 ‧ 2013-08-05 08:05:15

建議兩個方法:

1.無法登入時請別人先關閉登出ERP系統
例如:站起來大喊,或者電話分機一通一通打

2.寫一隻螢幕保護程式
功能是「如果ERP在執行中,就關閉ERP程式」
然後將所有電腦的螢幕保護程式都設成這個
並設定「閒置10分鐘後啟動」

eigen iT邦新手 1 級 ‧ 2013-08-17 15:51:02 檢舉

謝謝~~要是動口就能解決,當然是OK,問題是動口往往都是動怒的時候

eigen iT邦新手 1 級 ‧ 2013-08-17 15:51:02 檢舉

謝謝~~要是動口就能解決,當然是OK,問題是動口往往都是動怒的時候

8
cyuwww
iT邦新手 2 級 ‧ 2013-08-05 08:53:12

小弟的意見是,應由ERP系統來調整,
畢竟ERP才是決定登入數量的閘門。
.
小弟的猜想是(不知道您的ERP系統管理方式),
您的ERP系統有紀錄登入者的地方(或是資料庫或是FILE),
您可以先找到它,然後最想出對策(例如寫程式檢視或修正,或是定時砍了它?)

eigen iT邦新手 1 級 ‧ 2013-08-17 15:54:16 檢舉

小小的10人公司,沒這麼大的組織
目前都是我一人主導。
廠商為了賺錢,程式都寫的很死,我相信一定有客戶有這樣要求,要自動踢人
但是一定不會主動幫大家更新(要賺軟改費用)

8
Ken(Bigcandy)
iT邦大師 1 級 ‧ 2013-08-05 10:02:20

echo 我要關閉你的OOXX了(惡狠狠),如果不要關閉,請按『Ctrl+C』
ECHO 倒數60秒
wait 60
taskkill /f /im "軟體檔案名稱"

另外參考:如何使用 DOS 指令將程式關閉

eigen iT邦新手 1 級 ‧ 2013-08-17 15:56:55 檢舉

謝謝,DOS 指令我很上手,不過這樣的的指令不夠SMART ,不符合需求。

4
harrier7
iT邦研究生 2 級 ‧ 2013-08-05 17:21:32

http://www.autocloseidle.com/
應該符合樓主需求:但要錢。

eigen iT邦新手 1 級 ‧ 2013-08-17 15:57:43 檢舉

毆飛謝謝要錢的,再見不連絡

2
sula3065408
iT邦研究生 1 級 ‧ 2013-08-06 12:53:48

ERP正在用一定是在foreground,換句話說檢查foreground PID是不是你要的那隻程式,不是,就加counter,等到30秒之後就砍掉你觀察的那隻程式,是就把counter清掉讓他繼續用。

這只是個簡單範例而已,會寫程式真的不需要去用盜版,還是一直叫老闆買軟體,簡單的東西就DIY拿強力膠黏起來就下班了,一般開發的通用軟體也不可能完全符合你的需求,兩套通用的軟體之間一定有溝要跨過去,沒強力膠程式幫忙,就會把IT做LOW了。

<pre class="c" name="code">
#!perl
    use strict;
	use Win32::API;
    use Win32::GuiTest qw(:ALL);
	use File::HomeDir;
	
	my $maxLimit = 30;	#second
	my $cmdName = "notepad.exe";
	my $counterFile = File::HomeDir->my_home."/counterFile.tmp";
	if(! -e "$counterFile"){
		system "ECHO 0 > \"$counterFile\"";
	}
	system "start ".$cmdName;	#run command for testing
	#sleep 1;
	
	while(1){
		my $counter = `CAT \"$counterFile\"`;	#read counter from counterFile.tmp
		chomp $counter;
		print "Counter is $counter\n";
		#To get foreground window handle
		my $hlWindow = GetForegroundWindow();
		#==============================================================================================================
		#To get PID via windows API
		Win32::API::->Import("user32","DWORD GetWindowThreadProcessId( HWND hWnd, LPDWORD lpdwProcessId)") or die $^E;
		my $pidLPDWORDStruct = pack( "L", 0 );
		GetWindowThreadProcessId($hlWindow, $pidLPDWORDStruct);
		my ($fwPid) = unpack ("L", $pidLPDWORDStruct);
		print "Foreground window PID is $fwPid\n";
		#==============================================================================================================
		
		my @taskList = `tasklist.exe`;
		
		my $targetPid=0;
		my $i=0;
		foreach my $line (@taskList){
			chomp $line;
			if($i > 4){
				my ($imageName, $pid, $sessionName, $session, $memUsage) = split /\ +/, $line;
				if($imageName =~ $cmdName){
					$targetPid = $pid;	#save target PID
					if($pid == $fwPid){
						print $imageName."[".$pid."] --- foreground\n";
						system "ECHO 0 > \"$counterFile\"";	#clear counter
						last; #break loop
					}else{
						print $imageName."[".$pid."] --- background\n";
						$counter++;
						system "ECHO $counter > \"$counterFile\"";	#write to counterFile.tmp
						last; #break loop
					}
				}
			}
			$i++;
		}
		sleep(1);
		if($targetPid != 0 && $counter >= $maxLimit){
			system "taskkill.exe /pid $targetPid";	#kill process
			system "ECHO 0 > \"$counterFile\"";
		}
	}
	exit 0;
eigen iT邦新手 1 級 ‧ 2013-08-17 15:59:49 檢舉

謝謝,PERL ,我只學過三小個時,寫過幾個小程式,專門在裝新電腦時,去抓最新版的 shareware。不過要在每台都裝perl,我再想看看

2
zuyan
iT邦好手 1 級 ‧ 2013-08-11 22:26:21

架一個RDP Server ....
可以設定多久沒動作踢走User...

eigen iT邦新手 1 級 ‧ 2013-08-17 16:00:51 檢舉

沒聽過 RDP Server ,小公司應該很難這樣搞。

zuyan iT邦好手 1 級 ‧ 2013-08-18 00:03:12 檢舉

Windows 2003 Server 就有這個功能了 ,叫 Terminal Server..
基本授權2個,要更多就要COCO

我要發表回答

立即登入回答