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

GetWindowThreadProcessId的問題

答題得分者是:careychen
lirick2003
一般會員


發表:17
回覆:16
積分:11
註冊:2007-02-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-25 10:21:44 IP:203.70.xxx.xxx 訂閱

[code delphi]
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, TlHelp32, Spin, ComCtrls, jpeg, shellAPI,
WinSkinData;


type
TMainForm = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Timer1: TTimer;
PageControl1: TPageControl;
TabSheet2: TTabSheet;
Label26: TLabel;
Image1: TImage;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
ComboBox1: TComboBox;
Label10: TLabel;
SpinEdit1: TSpinEdit;
Label2: TLabel;
Label18: TLabel;
HotKeyBox1: TComboBox;
TabSheet1: TTabSheet;
TabSheet3: TTabSheet;
GroupBox2: TGroupBox;
CheckBox2: TCheckBox;
ComboBox2: TComboBox;
Label11: TLabel;
SpinEdit2: TSpinEdit;
Label1: TLabel;
Label19: TLabel;
HotKeyBox2: TComboBox;
HotKeyBox3: TComboBox;
Label3: TLabel;
SpinEdit3: TSpinEdit;
ComboBox3: TComboBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
ComboBox4: TComboBox;
SpinEdit4: TSpinEdit;
Label4: TLabel;
HotKeyBox5: TComboBox;
Label6: TLabel;
SpinEdit5: TSpinEdit;
ComboBox5: TComboBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
ComboBox6: TComboBox;
SpinEdit6: TSpinEdit;
Label7: TLabel;
HotKeyBox6: TComboBox;
HotKeyBox7: TComboBox;
Label8: TLabel;
SpinEdit7: TSpinEdit;
ComboBox7: TComboBox;
CheckBox7: TCheckBox;
HotKeyBox4: TComboBox;
Edit1: TEdit;
Button1: TButton;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
Memo1: TMemo;
Label5: TLabel;
SkinData1: TSkinData;
GroupBox3: TGroupBox;
MsEnabled: TLabel;
MsOnOff: TLabel;
MsLoad: TLabel;
MapName: TLabel;
MapValue: TLabel;
MapID: TLabel;
MapIDNum: TLabel;
PlayerXY: TLabel;
PlayerX: TLabel;
PlayerY: TLabel;
X: TLabel;
Y: TLabel;
Item: TLabel;
ItemValue: TLabel;
PlayerLV: TLabel;
LVValue: TLabel;
Red: TLabel;
RedValue: TLabel;
Mob: TLabel;
MobValue: TLabel;
Label36: TLabel;
Label37: TLabel;
GroupBox4: TGroupBox;
Label38: TLabel;
Label39: TLabel;
GroupBox5: TGroupBox;
Label40: TLabel;
Label41: TLabel;
GroupBox6: TGroupBox;
Label42: TLabel;
Label43: TLabel;
Image3: TImage;
Label59: TLabel;
Ch: TLabel;
ChX: TLabel;
HP: TEdit;
MaxHP: TEdit;
MP: TEdit;
MaxMP: TEdit;
EXP: TEdit;
MaxEXP: TEdit;
LV: TEdit;
MapIDV: TEdit;
MapNameV: TEdit;
PX: TEdit;
PY: TEdit;
ItemV: TEdit;
MobV: TEdit;
CHV: TEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label27: TLabel;
Label28: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
TabSheet6: TTabSheet;
AutoClick: TCheckBox;
MP3: TEdit;
MP2: TEdit;
MP1: TEdit;
EXPBar: TProgressBar;
MPBar: TProgressBar;
HPBar: TProgressBar;
MPB: TComboBox;
MPA: TComboBox;
EXPEnabled: TCheckBox;
MPEnabled: TCheckBox;
LVset: TEdit;
EXPset: TEdit;
HPB: TComboBox;
HPA: TComboBox;
HP3: TEdit;
HP2: TEdit;
HP1: TEdit;
HpEnabled: TCheckBox;
Label58: TLabel;
Label57: TLabel;
Label56: TLabel;
Label55: TLabel;
Label54: TLabel;
Label53: TLabel;
Label52: TLabel;
Label51: TLabel;
Label50: TLabel;
Label49: TLabel;
Label48: TLabel;
Label47: TLabel;
Label46: TLabel;
Label45: TLabel;
Label44: TLabel;
Label35: TLabel;
OffsetA: TTimer;
RedV: TEdit;
Label60: TLabel;
CheckBox8: TCheckBox;
ComboBox8: TComboBox;
SpinEdit8: TSpinEdit;
HotKeyBox8: TComboBox;
Label9: TLabel;
Timer2: TTimer;
Label33: TLabel;
CheckBox9: TCheckBox;
ComboBox9: TComboBox;
SpinEdit9: TSpinEdit;
Label34: TLabel;
ComboBox14: TComboBox;
CheckBox10: TCheckBox;
ComboBox10: TComboBox;
SpinEdit10: TSpinEdit;
Label61: TLabel;
ComboBox16: TComboBox;
CheckBox11: TCheckBox;
ComboBox11: TComboBox;
SpinEdit11: TSpinEdit;
Label62: TLabel;
ComboBox18: TComboBox;
procedure Button1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Image3Click(Sender: TObject);
procedure HpEnabledClick(Sender: TObject);
procedure MPEnabledClick(Sender: TObject);
procedure EXPEnabledClick(Sender: TObject);
procedure OffsetATimer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
hCurrentWindow: HWnd;
procedure TimerTimer(Sender: TObject);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
hproc: hWnd;
ProcID: hWnd;
V_Key: array[0..85] of Word = (VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN, VK_HOME,
VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE,
VK_BACK, VK_MENU, VK_CONTROL, VK_SHIFT, VK_SPACE,
VK_ESCAPE, VK_RETURN,
VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6,
VK_F7, VK_F8, VK_F9, VK_F10, VK_F11, VK_F12,
$C0,
Ord('1'), Ord('2'), Ord('3'), Ord('4'), Ord('5'),
Ord('6'), Ord('7'), Ord('8'), Ord('9'), Ord('0'),
$BD, $BB, $DB, $DD, $DC,
$BA, $DE, $BC, $BE, $BF,
Ord('A'), Ord('B'), Ord('C'), Ord('D'), Ord('E'),
Ord('F'), Ord('G'), Ord('H'), Ord('I'), Ord('J'),
Ord('K'), Ord('L'), Ord('M'), Ord('N'), Ord('O'),
Ord('P'), Ord('Q'), Ord('R'), Ord('S'), Ord('T'),
Ord('U'), Ord('V'), Ord('W'), Ord('X'), Ord('Y'),
Ord('Z'),
VK_NUMPAD0, VK_NUMPAD1, VK_NUMPAD2, VK_NUMPAD3,
VK_NUMPAD4, VK_NUMPAD5, VK_NUMPAD6, VK_NUMPAD7,
VK_NUMPAD8, VK_NUMPAD9
);

implementation
{$R *.dfm}
function PostMessageX(hWnd:HWND; MSG:UINT; wParam:WPARAM; lParam:LPARAM):LRESULT;stdcall;
var
DblWord:DWORD;
hHandle:THandle;
begin
hHandle:=LoadLibrary('user32.dll');
DblWord:=DWORD(GetProcAddress(hHandle,'PostMessageA')) 5;
asm
mov edi,edi
push ebp
mov esp,ebp
jmp [DblWord]
end;
end;

function RPM(hProcess:THANDLE;lpBaseAddress:pointer;lpBuffer:pointer;nSize:DWORD;var NumberOfBytesRead:DWORD):BOOL; stdcall;external'IlvMoney.dll'
function OP(dwDesiredAccess:DWORD;bInheritHandle:BOOL;dwProcessId:DWORD):THANDLE; stdcall;external'IlvMoney.dll'
function MakeKeyLparam(Index: Integer; keyflag: DWord): DWord;
var
Firstbyte, Secondbyte: DWord;
ScanCode: DWord;
S, t: DWord;
ChFlag: Integer;
begin
if keyflag = WM_KEYDOWN then begin
Firstbyte := $00
end else
Firstbyte := $C0;
if Index < 4 then
Firstbyte := Firstbyte 1;
Firstbyte := Firstbyte * $1000000;
ScanCode := MapVirtualKey(V_Key[Index], 0);
ScanCode := ScanCode * $10000;
S := Firstbyte ScanCode;
t := S 1;
Result := t;
end;
procedure TMainForm.TimerTimer(Sender: TObject);
var
cHwnd: HWnd;
Index: integer;
begin
hCurrentWindow := Findwindow(nil, PChar(Edit1.Text));
Caption := IntToStr(hCurrentWindow);
Index := TComboBox(FindComponent('Combobox' IntToStr(TTimer(Sender).Tag))).ItemIndex;
if Index < 0 then
exit;
if hCurrentWindow <> 0 then begin
PostMessageX(hCurrentWindow, WM_KEYDOWN, V_Key[Index], MakeKeyLparam(Index, WM_KEYDOWN));
Sleep(100);
PostMessageX(hCurrentWindow, WM_KEYUP, V_Key[Index], MakeKeyLparam(Index, WM_KEYUP));
end;
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
hWnd : THandle;
StarLight:THandle;
PID:Cardinal;
begin
hCurrentWindow := Findwindow(nil, PChar(Edit1.Text));
if hCurrentWindow = 0 then
begin
ShowMessage('找不到楓之谷');
end;
if hCurrentWindow <> 0 then
begin
MsOnOff.Caption:='已啟動';
GetWindowThreadProcessId(hwnd, PID);
StarLight := OP(PROCESS_ALL_ACCESS, False, PID);
end;

if StarLight = 0 then
begin
showMessage('楓之谷載入發生錯誤');
MsLoad.Caption:='錯誤';
end;
if StarLight <> 0 then
begin
//MsLoad.Caption:='載入成功';
Edit1.Enabled:=False ;
Button1.Enabled:=False ;
//------▽▽開啟保護區選項▽▽------
HpEnabled.Enabled:=True ;
MpEnabled.Enabled:=True ;
EXPEnabled.Enabled:=True ;
//AutoClick.Enabled:=True ;
//------▽▽開啟輔助技能區選項▽▽------
//CheckBox區▽
CheckBox1.Enabled:=True ;
CheckBox2.Enabled:=True ;
CheckBox3.Enabled:=True ;
CheckBox4.Enabled:=True ;
CheckBox5.Enabled:=True ;
CheckBox6.Enabled:=True ;
CheckBox7.Enabled:=True ;
CheckBox8.Enabled:=True ;
CheckBox9.Enabled:=True ;
CheckBox10.Enabled:=True ;
CheckBox11.Enabled:=True ;
//ComboBox區▽
ComboBox1.Enabled:=True ;
ComboBox2.Enabled:=True ;
ComboBox3.Enabled:=True ;
ComboBox4.Enabled:=True ;
ComboBox5.Enabled:=True ;
ComboBox6.Enabled:=True ;
ComboBox7.Enabled:=True ;
ComboBox8.Enabled:=True ;
ComboBox9.Enabled:=True ;
ComboBox10.Enabled:=True ;
ComboBox11.Enabled:=True ;
//Dalay區▽
SpinEdit1.Enabled:=True ;
SpinEdit2.Enabled:=True ;
SpinEdit3.Enabled:=True ;
SpinEdit4.Enabled:=True ;
SpinEdit5.Enabled:=True ;
SpinEdit6.Enabled:=True ;
SpinEdit7.Enabled:=True ;
SpinEdit8.Enabled:=True ;
SpinEdit9.Enabled:=True ;
SpinEdit10.Enabled:=True ;
SpinEdit11.Enabled:=True ;
//HotKeys區▽
HotKeyBox1.Enabled:=True ;
{HotKeyBox2.Enabled:=True ;
HotKeyBox3.Enabled:=True ;
HotKeyBox4.Enabled:=True ;
HotKeyBox5.Enabled:=True ;
HotKeyBox6.Enabled:=True ;
HotKeyBox7.Enabled:=True ;
HotKeyBox8.Enabled:=True ;}
end;
end;
procedure TMainForm.CheckBox1Click(Sender: TObject);
var
delaytime: integer;
t: integer;
SE: TSpinEdit;
begin
t := TCheckBox(Sender).Tag;
SE := TSpinEdit(FindComponent('SpinEdit' IntToStr(t)));
if TCheckBox(Sender).Checked then begin
TTimer.Create(Self).Name := 'rTm' IntToStr(t);
if TTimer(FindComponent('rTm' IntToStr(t))) <> nil then begin
TTimer(FindComponent('rTm' IntToStr(t))).Enabled := false;
if SE <> nil then
delaytime := SE.Value
else
delaytime := 100;
TTimer(FindComponent('rTm' IntToStr(t))).Interval := delaytime;
TTimer(FindComponent('rTm' IntToStr(t))).Tag := t;
TTimer(FindComponent('rTm' IntToStr(t))).Enabled := true;
TTimer(FindComponent('rTm' IntToStr(t))).OnTimer := TimerTimer;
end;
end else begin
TTimer(FindComponent('rTm' IntToStr(TCheckBox(Sender).Tag))).Enabled := false;
TTimer(FindComponent('rTm' IntToStr(TCheckBox(Sender).Tag))).Free;
//FreeAndNil(TTimer(FindComponent('rTm' IntToStr(TCheckBox(Sender).Tag))));
end;
end;
procedure TMainForm.SpinEdit1Change(Sender: TObject);
var
Tm: TTimer;
begin
Tm := TTimer(FindComponent('rTm' IntToStr(TSpinEdit(Sender).Tag)));
if Assigned(Tm) then begin
Tm.Interval := TSpinEdit(Sender).Value;
if Tm.Enabled then begin
Tm.Enabled := false;
Tm.Enabled := true;
end;
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin

hCurrentWindow := Findwindow(nil, 'MapleStory');
Caption := IntToStr(hCurrentWindow);
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
var
i, j: integer;
begin
for i := 17 to 28 do begin
if odd(GetAsyncKeyState(V_Key[i])) then
//for j := 1 to 13 do
for j := 1 to 11 do
if TComboBox(FindComponent('HotKeyBox' IntToStr(j))).ItemIndex = (i-17) then begin
TCheckBox(FindComponent('CheckBox' IntToStr(j))).Checked := not TCheckBox(FindComponent('CheckBox' IntToStr(j))).Checked;
end;
end;
end;
procedure TMainForm.Image3Click(Sender: TObject);
begin
if messagedlg('你是否要訪問浪漫月光吸怪版網站',mtconfirmation,[mbyes,mbno],0)=mryes then
begin
ShellExecute(0, pchar('open'),pchar('http://bbs.yoyo-do.com/forumdisplay.php?fid=76'), pchar(''),pchar(''), SW_MAXIMIZE );
end;
end;
procedure TMainForm.HpEnabledClick(Sender: TObject);
begin
HP1.Enabled:=HpEnabled.checked;
HP2.Enabled:=HpEnabled.checked;
HP3.Enabled:=HpEnabled.checked;
HPA.Enabled:=HpEnabled.checked;
HPB.Enabled:=HpEnabled.checked;
end;
procedure TMainForm.MPEnabledClick(Sender: TObject);
begin
MP1.Enabled:=MpEnabled.checked;
MP2.Enabled:=MpEnabled.checked;
MP3.Enabled:=MpEnabled.checked;
MPA.Enabled:=MpEnabled.checked;
MPB.Enabled:=MpEnabled.checked;
end;
procedure TMainForm.EXPEnabledClick(Sender: TObject);
begin
EXP.Enabled:=EXPEnabled.checked;
LV.Enabled:=EXPEnabled.checked;
end;
procedure TMainForm.OffsetATimer(Sender: TObject);
var address,address2,addressoff: dword;
processhandle: thandle;
read,realvalue: dword;
check: boolean;
StarLight:THandle;
begin
if StarLight <> 0 then
begin
address:=($009443A4);
addressoff:=($18);

check:=RPM(processhandle,pointer(address),@address2,4,read);
check:=RPM(processhandle,pointer(address2 addressoff),@realvalue,4,read);
RedV.Text:=IntToStr(realvalue);
RedValue.Caption:=RedV.Text;
end;
end;
procedure TMainForm.Timer2Timer(Sender: TObject);
{var
i, j: integer; }
begin
{ for i := 17 to 28 do begin
if odd(GetAsyncKeyState(V_Key[i])) then
for j := 2 to 4 do
if TComboBox(FindComponent('HotKeyBox' IntToStr(j))).ItemIndex = (i-17) then begin
TCheckBox(FindComponent('CheckBox' IntToStr(j))).Checked := not TCheckBox(FindComponent('CheckBox' IntToStr(j))).Checked;
end;
end; }
end;
end.

我想問一下,當我按下Button1時...我要讓他去GetWindowThreadProcessId...
但是不知道哪裡出錯了~

[/code]
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-25 13:01:36 IP:218.210.xxx.xxx 訂閱
因為你把型態當變數用,不過~~看來你好像在寫機器人??? 

===================引 用 lirick2003 文 章=================== [code delphi]
.... (略)
procedure TMainForm.Button1Click(Sender: TObject);
var
hWnd : THandle; /// 這個是錯的
StarLight:THandle;
PID:Cardinal;
begin
hCurrentWindow := Findwindow(nil, PChar(Edit1.Text));
if hCurrentWindow = 0 then
begin
ShowMessage('找不到楓之谷');
end;
if hCurrentWindow <> 0 then
begin
MsOnOff.Caption:='已啟動';
GetWindowThreadProcessId(hwnd, PID); /// 這個是錯的
StarLight := OP(PROCESS_ALL_ACCESS, False, PID);
end;


..... (略)
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-07-25 13:03:15, 註解 無‧
careychen 重新編輯於 2008-07-25 13:04:59, 註解 無‧
careychen 重新編輯於 2008-07-25 13:06:40, 註解 我的顏色會亂掉 T__T‧
lirick2003
一般會員


發表:17
回覆:16
積分:11
註冊:2007-02-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-27 12:30:08 IP:59.104.xxx.xxx 訂閱
請問這樣對嗎?

[code delphi]
procedure TMainForm.Button1Click(Sender: TObject);
var
hw : Hwnd;
StarLight:THandle;
PID:DWord;
begin
hCurrentWindow := Findwindow(nil, PChar(Edit1.Text));
if hCurrentWindow = 0 then
begin
ShowMessage('找不到@#$@%);
end;
if hCurrentWindow <> 0 then begin
GetWindowThreadProcessId(hw, PID);
StarLight := OP(PROCESS_ALL_ACCESS, False, PID);
end;
[/code]
編輯記錄
lirick2003 重新編輯於 2008-07-27 12:36:39, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-27 12:43:41 IP:59.126.xxx.xxx 訂閱
目前這樣是對的,因為你只要不用型態當變數名就行了, 至於程式能不能執行就看你原本的能不能 Run 囉

===================引 用 lirick2003 文 章===================
請問這樣對嗎?

[code delphi]
procedure TMainForm.Button1Click(Sender: TObject);
var
hw : Hwnd;
StarLight:THandle;
PID:DWord;
begin
hCurrentWindow := Findwindow(nil, PChar(Edit1.Text));
if hCurrentWindow = 0 then
begin
ShowMessage('找不到@#$@%);
end;
if hCurrentWindow <> 0 then begin
GetWindowThreadProcessId(hw, PID);
StarLight := OP(PROCESS_ALL_ACCESS, False, PID);
end;
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
系統時間:2024-04-25 10:02:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!