關於熱鍵跟系統的問題 |
尚未結案
|
MJ282390
一般會員 發表:1 回覆:4 積分:1 註冊:2003-08-03 發送簡訊給我 |
|
MJ282390
一般會員 發表:1 回覆:4 積分:1 註冊:2003-08-03 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 抱歉沒有說的很清楚,我是用SendMessage配合RegisterHotKey的方式來寫的,用熱鍵來執行登入跟結束程式動作。在2000跟XP中,遊戲進行中我的程式也能接收到熱鍵,但是在98中只要遊戲一執行我的程式就完全都接收不到熱鍵了。MJ282390你好: 好高興又有人研究自動登入的問題了< >!窄看你的說明我也不知道你到 >! <>廣泛面: >!灌> <> 疑問點: 目前我能作到的是熱鍵控制程式起迄,程式是模疑鍵盤方式運作的。由於一直抓不到相關視窗的>< >!< href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44630">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44630 附上我的source code,佐證上面我的相關論點< >! <> >< >< >! > <>in Unit.h ~~~ class TForm1 : public TForm { __published: // IDE-managed Components TEdit *Edit1; TEdit *Edit2; TLabel *Label1; TLabel *Label2; TTrackBar *TrackBar1; TLabel *Label3; TLabel *Label4; TTrayIcon *TrayIcon1; TImageList *ImageList1; TMainMenu *MainMenu1; TMenuItem *N1; TMenuItem *II1; TOpenDialog *OpenDialog1; TMenuItem *N2; TLabel *Label5; TMenuItem *N3; TMenuItem *N4; void __fastcall TrackBar1Change(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall II1Click(TObject *Sender); void __fastcall N2Click(TObject *Sender); void __fastcall N4Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); void __fastcall StrtLgIn(tagMSG &Msg, bool &Handled); }; ~~~in Unit.cpp ~~~ TForm1 *Form1; BOOL CALLBACK EnumChildWnd(HWND hwnd,LPARAM lParam); HWND StartBttn; TIniFile* Lineage2Ini; AnsiString Lineage2ExePath; int Trimming; void KeyinData(AnsiString); void WaitFor(int); bool StpLgIn; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void KeyinData(AnsiString str) { char c; for (int i=1;i<=str.Length();i++) { c=str[i]; if (c>=65 && c<=90) { keybd_event(VK_SHIFT,0,0,0); keybd_event(c,0,0,0); keybd_event(c,0,KEYEVENTF_KEYUP,0); keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); } else if (c>=97 && c<=122) { c-=32; keybd_event(c,0,0,0); keybd_event(c,0,KEYEVENTF_KEYUP,0); } else { keybd_event(c,0,0,0); keybd_event(c,0,KEYEVENTF_KEYUP,0); } } } //--------------------------------------------------------------------------- void WaitFor(int Snd) { for (int i=1;i<=Snd*10;i++) { Application->ProcessMessages(); Sleep(10); } } //--------------------------------------------------------------------------- void __fastcall TForm1::TrackBar1Change(TObject *Sender) { //Label4->Caption="快0."+IntToStr(TrackBar1->Position)+"秒"; Trimming=TrackBar1->Position; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Lineage2Ini=new TIniFile(ExtractFilePath(Application->ExeName)+"Lineage2Ini.ini"); Edit1->Text=Lineage2Ini->ReadString("Parameter","帳號",""); Edit2->Text=Lineage2Ini->ReadString("Parameter","密碼",""); Lineage2ExePath=Lineage2Ini->ReadString("Parameter","天堂執行檔路徑",""); Trimming=Lineage2Ini->ReadInteger("Parameter","微調值(0.1秒)",0); RegisterHotKey(Handle,12345678,NULL,122); RegisterHotKey(Handle,87654321,MOD_SHIFT,122); //TrayIcon1->Minimize(); Application->StrtLgIn; Application->Title="趴趴登"; Application->Icon=Form1->Icon; ImageList1->AddIcon(Form1->Icon); TrayIcon1->SetIconIndex(0); TrackBar1->Position=Trimming; if (Lineage2ExePath=="") return; if ((LONG)ShellExecute(NULL,NULL,Lineage2ExePath.c_str(),NULL,ExtractFilePath(Lineage2ExePath).c_str(),SW_SHOW)<=32) { ShowMessage("開啟檔案錯誤!"); return; } Sleep(1000); HWND StartWnd=NULL; StartWnd=FindWindow(NULL,"Lineage II Autoupdate"); if (StartWnd==NULL) { ShowMessage("Can't find Main Form!"); return; } StartBttn=NULL; EnumChildWindows(StartWnd,(WNDENUMPROC)EnumChildWnd,0); if (StartBttn==NULL) { ShowMessage("Can't find Start Button!"); return; } if (!IsWindowEnabled(StartBttn)) { ShowMessage("Start Button is not enable!"); return; } Sleep(1000); SendMessage(StartBttn,BM_CLICK,0,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::StrtLgIn(tagMSG &Msg,bool &Handled) { if (Msg.message==WM_HOTKEY && Msg.wParam==87654321) { StpLgIn=true; } if (Msg.message==WM_HOTKEY && Msg.wParam==12345678) { Trimming=TrackBar1->Position; int LgInTime=0; //WaitFor(3-Trimming); for (int Cnt=1;Cnt<=99999;Cnt++) { if (StpLgIn) { StpLgIn=false; Edit1->Enabled=true; Edit2->Enabled=true; TrackBar1->Enabled=true; Form1->Caption="停止(共執行 "+IntToStr(LgInTime)+" 次!)"; return; } Edit1->Enabled=false; Edit2->Enabled=false; TrackBar1->Enabled=false; Form1->Caption="執行中..."; WaitFor(3-Trimming); KeyinData(Form1->Edit1->Text); Sleep(50); keybd_event(VK_TAB,0,0,0); keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0); Sleep(50); KeyinData(Form1->Edit2->Text); Sleep(50); keybd_event(VK_RETURN,0,0,0); keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); WaitFor(3-Trimming); keybd_event(VK_RETURN,0,0,0); keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); WaitFor(3-Trimming); keybd_event(VK_RETURN,0,0,0); keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); LgInTime++; } Edit1->Enabled=true; Edit2->Enabled=true; TrackBar1->Enabled=true; Form1->Caption="停止(共執行 "+IntToStr(LgInTime)+" 次!)"; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { Lineage2Ini->WriteString("Parameter","帳號",Edit1->Text); Lineage2Ini->WriteString("Parameter","密碼",Edit2->Text); Lineage2Ini->WriteString("Parameter","天堂執行檔路徑",Lineage2ExePath); Lineage2Ini->WriteInteger("Parameter","微調值(0.1秒)",Trimming); delete Lineage2Ini; UnregisterHotKey(Handle,12345678); UnregisterHotKey(Handle,87654321); } //--------------------------------------------------------------------------- void __fastcall TForm1::II1Click(TObject *Sender) { if (OpenDialog1->Execute()) { Lineage2ExePath=OpenDialog1->FileName; } } //--------------------------------------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender) { if (Lineage2ExePath=="") ShowMessage("目前沒有設定!"); else ShowMessage(Lineage2ExePath); } //--------------------------------------------------------------------------- void __fastcall TForm1::N4Click(TObject *Sender) { ShowMessage("啟動:F11\n停止:Shift+F11"); } //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildWnd(HWND hwnd,LPARAM lParam) { char buf[128]; ZeroMemory(buf,128); GetClassName(hwnd,buf,128); if (AnsiString(buf)!="Button") return true; ZeroMemory(buf,128); GetWindowText(hwnd,buf,128); if (AnsiString(buf)=="Start") { StartBttn=hwnd; return false; } return true; } |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
MJ282390
一般會員 發表:1 回覆:4 積分:1 註冊:2003-08-03 發送簡訊給我 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
不同的只有系統,我的程式在98下只要遊戲全螢幕後就接收不到熱鍵了就是因為98的系統 中斷 與 shell有點不一樣所以才說上述幾點 天堂如果 有使用 強制置前 在2000下比較無差 在98下 那你使用別的軟體要 輸入時 必須要考慮上述幾點 方式 可以將你的程式 使用於 背景執行 但不可使用 隱藏工作列方式執行 抓 天堂2 時 不可使用2000方式 要由reg抓他的正確路徑 這與2000是不太一樣的 由於 本人說 無法run天堂 pc等級太差 哈哈 所以以上是 經驗非決對 但你可以 參考參考 |
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
MJ282390你好,先說你的問題:
<>< face="Verdana, Arial, Helvetica">引言:
再來是關於我的問題:我用來測試的二台電腦的等級是差不多的,不同的只有系統,我的程式在98下只要遊戲全螢幕後就接收不到熱鍵了,但是切回桌面再按熱鍵,再切回遊戲就會發現其實程式是正常在做登入動作,而在2000系統中就算遊戲全螢幕,熱鍵也都能正常動作,無需切回桌面啟動。這到底是為什麼呢 疑問疑問
>>< face="Verdana, Arial, Helvetica"> 我不知道conundrum說的"我的程式在98下只要遊戲全螢幕後就接收不到熱鍵了"是否恆真。 但不曉得你有沒有看過 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=14116000&CC=315700"> 以進入天堂II(全螢幕時)的熱鍵流程而言: (1)用手按熱鍵---->(2)OS收到keyboard event---->(3)OS判斷是熱鍵Post WM_HOTKEY message給register這個hot key的thread---->(4)WM_HOTKEY到了這個thread的message queue---->(5)有執行到 窄看下並沒有什麼是2000行98不行的。在(1)--->(2)step時,天堂II有可能有keyboard HOOK的機制,把你的keyin data 擋掉了,但如果是真的,98擋,2000也會擋。 也許熱鍵有key in OS有收到,只是WM_HOTKEY在天堂II全螢幕時發不出去,或是有發出但是自登的程式收不到,但我覺得2000行98也行。 我覺得硬要查也可以,查你的熱鍵 >,我想先從 >: <>< face="Verdana, Arial, Helvetica">引言:你說你抓不到天堂Ⅱ的HWND值嗎?
來試試看這個保證沒問題:fh=FindWindow("l2UnrealWWindowsViewportWindow","Lineage II");
上述fh的hwnd值我抓的到,但是然後勒?
不是要再找"登入"那個元件(不確定它是個 >?不介意的話,還是請 >!
|
MJ282390
一般會員 發表:1 回覆:4 積分:1 註冊:2003-08-03 發送簡訊給我 |
這是我的做法:
String str=Form1->login->Text; //帳號
String str1=Form1->password->Text; //密碼
int tempint,tempint1; //找到這個值後,就不顧一切的給他發下去
fh=FindWindow("l2UnrealWWindowsViewportWindow","Lineage II");
if(fh)
{
SendMessage(fh,WM_KEYDOWN,NULL,NULL);
for(int i=1;i<=Form1->login->Text.Length();i )
{
tempint=str[i];
SendMessage(fh,WM_CHAR,tempint,NULL);
}
SendMessage(fh,WM_KEYUP,NULL,NULL);
SendMessage(fh,WM_KEYDOWN,VK_TAB,NULL);
SendMessage(fh,WM_CHAR,9,NULL);
SendMessage(fh,WM_KEYUP,VK_TAB,NULL); //TAB鍵
SendMessage(fh,WM_KEYDOWN,NULL,NULL);
for(int i=1;i<=Form1->password->Text.Length();i )
{
tempint1=str1[i];
SendMessage(fh,WM_CHAR,tempint1,NULL);
}
SendMessage(fh,WM_KEYUP,NULL,NULL);
SendMessage(fh,WM_KEYDOWN,VK_RETURN,NULL);
SendMessage(fh,WM_CHAR,13,NULL);
SendMessage(fh,WM_KEYUP,VK_RETURN,NULL); //ENTER鍵
Sleep(400);
SendMessage(fh,WM_KEYDOWN,VK_RETURN,NULL);
SendMessage(fh,WM_CHAR,13,NULL);
SendMessage(fh,WM_KEYUP,VK_RETURN,NULL); //ENTER鍵
Sleep(700);
SendMessage(fh,WM_KEYDOWN,VK_RETURN,NULL);
SendMessage(fh,WM_CHAR,13,NULL);
SendMessage(fh,WM_KEYUP,VK_RETURN,NULL); //ENTER鍵
Sleep(400);
SendMessage(fh,WM_KEYDOWN,VK_RETURN,NULL);
SendMessage(fh,WM_CHAR,13,NULL);
SendMessage(fh,WM_KEYUP,VK_RETURN,NULL); //ENTER鍵
Sleep(200);
}
你參考看看吧,寫的很爛,所以不敢全部公開。 再來是我的疑問:
>>兄所提的:
>再試一天,如果不行就重寫。反正也不是什麼大程式。
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 這是我的做法: //找到這個值後,就不顧一切的給他發下去哈哈,MJ282390真棒,就是不顧一切就對了啦… 引言: 你參考看看吧,寫的很爛,所以不敢全部公開。 >>< face="Verdana, Arial, Helvetica"> 哈哈,沒有什麼爛不爛的啦,純為了解決問題參考用< >! 不過看了我才瞭解你的作法,也是模疑鍵盤,只是寫法不同吧< >!所以基本上你也還沒有抓出"登入"這個視窗的等等等的hwnd值? 接下來我要撥雲見日囉(差一腳)… 剛剛我同事說他就是用window98 sec 的,只是他的自登程式是網路上抓的,不是我的,他說98在天堂II全螢幕按熱鍵ok ok ok! 所以頂多我晚上下班拿我的程式到他的98上試(我的程式在我的win xp上已測試ok),如果ok,就證明OS是沒差的,如果你急的話也可以試著用我上面列的程式到你的98上試< >< >! <>強烈覺得問題點:> >),這樣做你一定要>你一定要狂按很多次>我的 >! |
MJ282390
一般會員 發表:1 回覆:4 積分:1 註冊:2003-08-03 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
|
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
1、可以將你的程式 使用於背景執行---->這我試過,唉....結果一樣讓我傷心。
2、抓天堂2時不可使用2000方式 要由reg抓他的正確路徑 這與2000是不太一樣的 重申一下
本人說的 98與2000問題是shell的api使用差異
虛擬鍵的使用 98行2000也行 但你抓別人畫面時 這一部份是有差異
不是 虛擬鍵不行 要由reg抓他的正確路徑 也是上述問題之一啦
引言: 窄看下並沒有什麼是2000行98不行的。在(1)--->(2)step時,天堂II有可能有keyboard HOOK的機制,把你的keyin data 擋掉了,但如果是真的,98擋,2000也會擋在98下你可以使用 當機三鍵 執行之後 可以開別的視窗嗎 在2000 xp下一樣使用 當機三鍵 執行之後 應該 可以開別的視窗 這樣 是不是有一點點小差異 m8815010 兄 【BCB】【問題】找不到視窗的Hwnd值 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44630 下的可以借用ResHacker.exe看看資源檔下的資料是否有用 Lineage2\system\Window.dll 很可能就是 利用資源檔代碼 =你要抓的視窗值 直接對印後 輸入 但這樣的方式不是每個程式都可以用 本人也不確定 天糖2 的輸入視窗是這dll 不過 這也是一種方式 出錯率比較低一點點 但不是100%都可行 引言:我沒玩過天堂,但我知道許多網路遊戲,當使用者登入時,會將登入資料透過網路送到主機比對. 所以或許可以直接在登入畫面出現時就送出那些封包. 致於封包的形式內容是可以透過Trace得到的. 這樣或許會簡單點.這的確是個新方向 不過只是 牛刀小用 因為遊戲主機會過濾非法封包 如要修改需抓後填值 這會有更大的問題 原因是有的ISP也會過濾 這樣如果說 要練功的話 滿好的題目 如果是要寫達到目的 這比較困難 問問這位版主比較快老了 本人不會bcb也不會delphi 省事點 喝喝 http://delphi.ktop.com.tw/pop_profile.asp?mode=display&id=8458 JerryKuo 版主 寫game外掛高手 發表人 - conundrum 於 2004/02/18 18:50:53 |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
引言: 剛剛我同事說他就是用window98 sec 的,只是他的自登程式是網路上抓的,不是我的,他說98在天堂II全螢幕按熱鍵ok ok ok!最好小心一點 因為我已經聽到 有人用 天堂II登入程式 結果 帳號被盜了 不確定是那一隻 不過小心比較好 另外有個程式 你也可以參考參考 不過他是抓非輸入 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41182 日前我曾發現 KK2000pro 鍵盤記錄程式 KeyKey 2001 Professional http://5star.freeserve.com/Utilities/Monitoring/keykey-download.html |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
冤枉啊.大人..我怎麼會變成寫外掛高手呢....
我只會用別人寫好的外掛程式,寫自動練功的小程式,什麼熱鍵,快速鍵
真的都不會。看到各位高手在討論,小弟只能當台下看表演的觀眾。 其實我真的很想自己寫一套外掛來給自己用,老是用別人(大部分是大陸人寫的)
寫好的外掛,用久了覺得自己很沒用,很想寫一個來用用,好歹自己現在是走網
路的,工具都有,但就是不知道如果走進外掛這個大門,從哪開始寫都還不知道。
所以我不是什麼外掛高手。 剛好大大們在討論,希望能從中多學幾招,假以時日,等我寫出一個外掛,一定掛
KTOP 的名字release出去...呵呵
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 窄看下並沒有什麼是2000行98不行的。在(1)--->(2)step時,天堂II有可能有keyboard HOOK的機制,把你的keyin data 擋掉了,但如果是真的,98擋,2000也會擋在98下你可以使用 當機三鍵 執行之後 可以開別的視窗嗎 在2000 xp下一樣使用 當機三鍵 執行之後 應該 可以開別的視窗 這樣 是不是有一點點小差異嗯, >,不過我想說的只是<>"我覺得">針對 >! <> >!> <>< face="Verdana, Arial, Helvetica">引言: m8815010 兄 【BCB】【問題】找不到視窗的Hwnd值 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44630 ~~~ 嗯,一直沒時間測試,所以沒有回應,有空一定測試一下,再post出結果如何! |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
Sei
一般會員 發表:22 回覆:38 積分:17 註冊:2002-05-22 發送簡訊給我 |
聽說有蠻多外掛都會在裡面多寫一些有的沒有的程式盜帳號,從接手我弟的天堂1就一直叮我不要亂下載別人的程式 其實我蠻想學這一類的程式,前一陣子練功練到手發炎,更加深了這個念頭
可是,跟JerryKuo一樣,不知如何著手入門
光是登入,每天晚上上線伺服器人太多,好難擠上去
說要練功,真的要花錢買自動練功,又覺得不太好,太自動就不好玩了(練到手發炎更不好玩)
真想為自己量身訂做輕鬆按鍵就可以打怪的程式
前一陣子突發起想上google去爬文章,想說打一些關鍵字看能不能挖到什麼寶
很可惜,目前挖了個大坑還不見根骨頭
引言: 最好小心一點 因為我已經聽到 有人用 天堂II登入程式 結果 帳號被盜了 不確定是那一隻 不過小心比較好 另外有個程式 你也可以參考參考 不過他是抓非輸入 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41182 日前我曾發現 KK2000pro 鍵盤記錄程式 KeyKey 2001 Professional http://5star.freeserve.com/Utilities/Monitoring/keykey-download.html |
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |