線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2848
推到 Plurk!
推到 Facebook!

請教關於開機讓程式自動執行的問題

尚未結案
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-03 16:55:35 IP:61.63.xxx.xxx 未訂閱
小弟最近寫的程式,需要在開機時讓程式自動執行。 (在 win98中) 因此利用以前所學到的隱藏程式的方式來達成。 一、 showwindow(Handle, SW_HIDE); 二、 function RegisterServiceProcess(dwProcessID, dwType: DWord): DWord; stdcall; external 'KERNEL32.DLL'; RegisterServiceProcess(0, $00000001); 試了這二個方法,但是還是不行。 因為一開機會先去執行 windows 的程式,接下來才是我自己的程式,然後這時程式才會由 ctrl alt del 的關閉程式 列表中消失。 這樣,使用者有很充份的時間關閉我的程式。 請問應該怎麼解決這個問題,我不能讓使用者關閉我的程式。 謝謝。 ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-03 18:59:28 IP:192.168.xxx.xxx 未訂閱
引言: 小弟最近寫的程式,需要在開機時讓程式自動執行。 (在 win98中) 因此利用以前所學到的隱藏程式的方式來達成。 一、 showwindow(Handle, SW_HIDE); 二、 function RegisterServiceProcess(dwProcessID, dwType: DWord): DWord; stdcall; external 'KERNEL32.DLL'; RegisterServiceProcess(0, $00000001); 試了這二個方法,但是還是不行。 因為一開機會先去執行 windows 的程式,接下來才是我自己的程式,然後這時程式才會由 ctrl alt del 的關閉程式 列表中消失。 這樣,使用者有很充份的時間關閉我的程式。 請問應該怎麼解決這個問題,我不能讓使用者關閉我的程式。 謝謝。 ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
是不是要寫網咖的管理程式? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-03 20:07:12 IP:61.63.xxx.xxx 未訂閱
是的 ^^ ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
ralph
初階會員


發表:41
回覆:82
積分:29
註冊:2003-02-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-03 22:19:20 IP:66.171.xxx.xxx 未訂閱
Put your program name into registery. The answer you will find in everywhere
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-03 23:42:16 IP:61.30.xxx.xxx 未訂閱
很爛的方法: 若是在Software\Microsoft\Windows\CurrentVersion\Run下RUN 一個aaa.bat好了,先用寫程式(不開Form的那種)如 HWND hwnd1=FindWindow("tty",NULL); EnableWindow(hwnd1,false); Sleep (500); 此程式叫做bbb.exe好了 那在aaa.bat批次檔中加入bbb.exe 如下 @ECHO OFF xxx1.bat BBB.exe xxx2.bat ............... 雖然方法爛不過很好用,記得把AAA.bat的捷徑設最小化 客人的賤手按也關不掉, 僅供參考而以 --==多看.多學.多聽==--
------
--==多看.多學.多聽==--
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-04 01:24:54 IP:61.59.xxx.xxx 未訂閱
原來有這些方法啊,小弟受教了。 我今天也想到一個方法,也是很爛。 也是用二個檔案的方式。 a.exe -> 網咖程式 b.exe -> 一個很小的console application 一執行就是利用user32.dll鎖鍵盤滑鼠,程式很小只有 8kb, ctrl alt del 按下去看都看不到,也沒辦法按。 直到網咖程式執行到,網咖程式再利用sendmessage,送 wm_close 給 b.exe,順便解開。 這樣就可以順利執行了。 ^^ function BlockInput(fBlockInput: Boolean): DWORD; stdcall; external 'user32.DLL'; BlockInput(True); BlockInput(False); ****************** (方法很爛,不過也是很好用。) 不知道還有沒有其它方法… ^^ ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-04 02:16:17 IP:61.64.xxx.xxx 未訂閱
kunying兄與HomeSound兄的方法 好像目前的網咖程式都是使用累同方式 所以以下只能說 這樣的方式好像不適合使用 太累了 1 我想最最最最惡質做法將系統的explorer.exe使用pe程式改寫 這樣也累同 病 毒程式沒有explorer.exe無法開機至win32 也控制整個windows系統 所以你必 須在dos下置換這樣的程式 好像違反規定 不過也是高度修改 我是不建議此法 只是討論討論 2 令一個方式 寫虛擬機器或說驅動 一樣可以無法移除 一樣高難度 3 dos狸貓換太子 也就是dos下網路連接法 看你要不要連dos也控制使用包括reg等 合併大法 一樣高難度 還要寫Turpo c 這個應該可以請教天使 4 利用BOOT ROM開機成為Windows 95工作站:這個好像應該也可以問問天使 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26264 一樣高難度 因為硬體 軟體環境 流量 遊戲 與長檔名 相容性 這種我想如果想使用系統中斷的大法就算ok 也代表os中斷 只是討論討論 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-05 00:27:54 IP:61.30.xxx.xxx 未訂閱
kunying 兄的方法真不錯 又偷學一招,感謝囉! 不過應該還有簡單且更棒的方法吧??  --==多看.多學.多聽==--
------
--==多看.多學.多聽==--
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-06 20:08:33 IP:61.63.xxx.xxx 未訂閱
感謝各位的指教以及jackkcg兄 和HomeSound兄 給小弟新的思考方向。 謝謝。 ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-06 20:29:59 IP:202.39.xxx.xxx 未訂閱
引言: 原來有這些方法啊,小弟受教了。 我今天也想到一個方法,也是很爛。 也是用二個檔案的方式。 a.exe -> 網咖程式 b.exe -> 一個很小的console application 一執行就是利用user32.dll鎖鍵盤滑鼠,程式很小只有 8kb, ctrl alt del 按下去看都看不到,也沒辦法按。 直到網咖程式執行到,網咖程式再利用sendmessage,送 wm_close 給 b.exe,順便解開。 這樣就可以順利執行了。 ^^ function BlockInput(fBlockInput: Boolean): DWORD; stdcall; external 'user32.DLL'; BlockInput(True); BlockInput(False); ****************** (方法很爛,不過也是很好用。) 不知道還有沒有其它方法… ^^
小弟想問的, 那如果 Windows 還沒執行到這個程式 使用者就按下 Ctrl Alt Del 鍵了呢? 有沒辦法攔嗎? --- Have you ever wondered what it would be like?
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-06 21:04:59 IP:61.59.xxx.xxx 未訂閱
小弟想問的, 那如果 Windows 還沒執行到這個程式 使用者就按下 Ctrl Alt Del 鍵了呢? 有沒辦法攔嗎? ******************************* a.exe -> 網咖程式 b.exe -> 一個很小的console application 這二隻程式都是開機時自動執行。 b.exe 是一個 console application很小,執行檔大小只有8k。 使用者按下 Ctrl Alt Del 鍵,完全看不到。因為執行太快了。 而且一執行 b.exe 馬上就鎖 kb mouse。 這樣網咖程式就可以順利執行。 這是小弟目前用的方法。 ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-07 08:25:36 IP:202.39.xxx.xxx 未訂閱
引言: a.exe -> 網咖程式 b.exe -> 一個很小的console application 這二隻程式都是開機時自動執行。 b.exe 是一個 console application很小,執行檔大小只有8k。 使用者按下 Ctrl Alt Del 鍵,完全看不到。因為執行太快了。 而且一執行 b.exe 馬上就鎖 kb mouse。 這樣網咖程式就可以順利執行。 這是小弟目前用的方法。
謝謝 kunying 兄! 小弟再請教一下, 您的 b.exe 說是在 Windows 一開始就執行 那它是放在什麼地方? 放在啟動?還是 Autoexec.bat?還是其它? 小弟昨天試 Service 的方式(不過是在 Winnt 下) 發現在 Login 後, 隨即按下 Ctrl Alt Del 還是可以有作用, 因為此時 Service 還沒起來. --- Have you ever wondered what it would be like?
kunying
一般會員


發表:17
回覆:28
積分:19
註冊:2002-03-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-03-07 12:51:14 IP:61.63.xxx.xxx 未訂閱
發現在 Login 後, 隨即按下 Ctrl Alt Del 還是可以有作用, 因為此時 Service 還沒起來. ************************** 其實我二隻程式都是開機一起執行的,和您放的地方是一樣的。 a.exe -> 網咖程式 b.exe -> console application 只是b.exe 一開機執行就是 disable kb & mouse 這時執行 b.exe 時是看不到b 的因為很小。(所以一定可以執行) 然後再執行 a.exe ,a.exe 再執行的時候會隱藏自己 and 將 kb& mouse 回復 (這時使用者若關網咖程式,就不能使用win98。因為kb & mouse都被 disable了) 因此我的動作就是強迫一定要讓網咖程式執行,不然就不能使用kb & mouse。 很惡劣,但因為我不知道有更好的方法。所以小弟只好這樣做。 ************* 至於 那個 console application 小弟是參考 http://www.din.or.jp/~tetsu/apps/junk/miniexe.lzh 去改出來的。 不過這個程式有問題,需修改一下。 或者您可以上google 打以下關鍵字,可以發現一堆資料可以參考 1、console delphi 2、miniexe delphi ________________________ 「有時候你以為天要塌下來了,其實是因為你站歪了!」
------
________________________
「有時候你以為天要塌下來了,其實是因為你站歪了!」
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-09-28 11:23:19 IP:211.96.xxx.xxx 未訂閱
比較賤的方法就是自己把shell改掉,不過你的程式要接管很多事情(tasklist、traylist、輸入法監視切換、時間顯示、小喇叭...),不建議這樣做,除非你的功力夠~不然換shell這件事可能會成為惡夢。
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-09-30 17:12:55 IP:211.96.xxx.xxx 未訂閱
我的做法!這樣還沒有失誤過,僅在98有效!    
    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Registry, jpeg, ExtCtrls, Buttons, PCTimer1;    const
  HookDemo = 'KHOOK.dll';    const
  WM_HOOKCREATE = WM_USER   300;    type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
    procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging); message WM_WindowPosChanging;
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  okclose: boolean;
  procedure DisableTaskMgr(bTF: Boolean);
  function IsWin95: Boolean;
  function RegisterServiceProcess(dwProcessID, dwType: DWORD): DWORD;
    stdcall; external 'KERNEL32.DLL';
  function SetHook(WinHandle: HWND; MsgToSend: Integer): Boolean; stdcall;
    external HookDemo;
  function FreeHook: Boolean; stdcall; external HookDemo;    implementation    {$R *.dfm}    function IsWin95: Boolean;
var
  OS: TOSVersionInfo;
begin
  ZeroMemory(@OS, SizeOf(OS));
  OS.dwOSVersionInfoSize := SizeOf(OS);
  GetVersionEx(OS);
  Result := (OS.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
end;    procedure DisableTaskMgr(bTF: Boolean);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  reg.RootKey := HKEY_CURRENT_USER;      reg.OpenKey('Software', True);
  reg.OpenKey('Microsoft', True);
  reg.OpenKey('Windows', True);
  reg.OpenKey('CurrentVersion', True);
  reg.OpenKey('Policies', True);
  reg.OpenKey('System', True);       // 以上幾行真是脫褲子放屁,用reg.openkey('\software\microsoft\.....\',true)是一樣的結果      if bTF = True then
  begin
    reg.WriteString('DisableTaskMgr', '1');
  end
  else if bTF = False then
  begin
    reg.DeleteValue('DisableTaskMgr');
  end;
  reg.CloseKey;
end;    procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);  
// 這樣一來,視窗沒辦法最小化、還原、還被偷偷搬到看不到的地方了~~~保証最底層,幹嘛,我做shell的事嘛~
begin
   inherited ;
   msg.WindowPos^.hwndInsertAfter:= HWND_BOTTOM;
   msg.WindowPos^.x:=0;
   msg.WindowPos^.y:=0;
   msg.WindowPos^.cx:=screen.width;
   msg.WindowPos^.cy:=screen.Height;
end;    procedure TForm1.FormCreate(Sender: TObject);
var wndTaskbar: HWND;
begin
   RegisterServiceProcess(GetCurrentProcessID, 1);  // 把自己從ctrl alt del的列表中移除
   wndTaskbar := FindWindow('Shell_TrayWnd', nil);  // 開始工作列的handle
   if wndTaskbar <> 0 then                            
   begin
      EnableWindow(wndTaskbar, False);              // 懷疑啊,就是讓工作列無作用
      ShowWindow(wndTaskbar, SW_HIDE);              // 還把他藏起來
   end;
   DisableTaskMgr(True);                            // 更絕的方法,把工作管理員幹掉
   SetHook(Handle, WM_HOOKCREATE);                  // 掛上自己寫的keyboard hook dll..把windows等等的系統鍵給作掉
   okclose:=false;                                  // 在onCloseQuery里,CanClose:=okClose; 除非程式自己要結束,不然使用者是無法關掉的!
end;    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var wndTaskbar: HWND;
begin
   FreeHook;                                        //跟create完全相反的事,歸還鍵盤還有系統所有權
   wndTaskbar := FindWindow('Shell_TrayWnd', nil);  
   if wndTaskbar <> 0 then
   begin
      EnableWindow(wndTaskbar, True);  // Enable the taskbar
      ShowWindow(wndTaskbar, SW_SHOW); // Taskbar anzeigen
   end;
   RegisterServiceProcess(GetCurrentProcessID, 0);
   DisableTaskMgr(false);
end;    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   canclose:=okclose;        // ALT F4就沒用了
end;    procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   okclose:=true;            // 只有這個鍵有作用,自行加上一些認証的動作,不然乾脆別留這個門
   close;
end;    
系統時間:2024-05-19 6:56:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!